Thứ Sáu, 14 tháng 12, 2018

Mobile - Gesture Controlled Car

REQUIREMENT:
1. AtMega 16 microcontroller
2. L293D motor driver IC
3. Bluetooth module (HC05)
4. Chassis
5. Motors & Wheels
6. Mobile phone (Android + Bluetooth compatibility)
7. Battery (for car section)

 
DESCRIPTION:
Have you ever wondered of operating a toy car with you own mobile phone? Yes, I have made such a thing. This project involves the communication between your mobile phone and the car with the help of internal accelerometer fitted inside the mobile. 
 
The system communicates wirelessly over Bluetooth interface, thus we require a phone with Bluetooth compatibility. Moreover, I have made an Android Application for the same task, therefore the phone must have ANDROID operating system. 
 
 
Now this project deals with two sections:
 
• CAR section
 
• Mobile phone (ANDROID APP)
 
Let’s first talk about the Car section. It comprises AtMega 16 microcontroller, L293D motor driver IC and most importantly the Bluetooth module which makes this whole task work wirelessly. I have used an 11.1 V LI-PO battery (Lithium Polymer) to assure long working duration.
 
The same 11.1 volts is given to the motors for working properly while a 7805 voltage regulator regulates this voltage to 5V so that the remaining circuit functions properly without any risk of being damaged.
 
The next important part of this section is the Bluetooth module: HC05. These modules follow the Bluetooth protocol to get the job done wirelessly. Bluetooth  carries ultra high frequency radio waves which cover a larger area and work quite well as compared to the RF 343 Hz modules.
 
Besides, these Bluetooth modules provide a chance to interact with other Bluetooth compatible devices like mobile phone etc.
 
The communication is done with UART interface at 9600 baud rate.
 
The assembling of the car section is shown below:
Mobile - Gesture Controlled Car
Fig. 1: Prototype of AVR ATMega based Gesture Controlled Robotic Car

Mobile - Gesture Controlled Car
Fig. 2: Image of AVR ATMega16 based Control Circuitry on Gesture Controlled Robotic Car

Mobile - Gesture Controlled Car
Fig. 3: Image showing battery placement on AVR ATMega16 based Gesture Controlled Robotic Car
Now talking about the mobile part nowadays every mobile has an accelerometer sensor; I have used this sensor to give me the orientation vales for further processing. I have made an ANDROID APP which extracts this data and sends it over to the Bluetooth module present in the CAR section. This data is then processed in my AtMega 16 IC to tell L293D IC what to do to the motors connected to it. Like if I get “W”, this tells the microcontroller to move the car forward similarly “S”, “A”, ”D” and “ ” make the car move in backward, left, right and stop positions.
 
The most interesting thing about this section is that we first need to calibrate the phone’s accelerometer data into our microcontroller IC so that perfect results are obtained each time this car is turned on.
 
I have made this ANDROID APP using freeware software known as APP INVENTOR 2. This has been developed by the students of MIT for those who find it difficult to learn android programming. They make use of simple block arrangements to perform any android based task.
Mobile - Gesture Controlled Car
Fig. 4: Screenshot of Android App displaying Accelerometer Orientation
Here’s a look of my ANDROID APP. It gives me the data for 3  axes: X, Y and Z.
 
This data,  received via Bluetooth is then analysed in the microcontroller. This project is interesting because it involves electronics as well as android stuff. 
 
In the coding part I have made use of the header file : <uart.h> to deal with UART functions. UART=Universal Asynchronous Receiver Transmitter. In this header file getchar_uart() function feeds microcontroller with the Bluetooth received data. 
.
Circuit:

Circuit Diagram of AVR ATMega16 based Gesture Controlled Robotic Car
Code:
#include<avr/io.h>
#include<uart.h>
void stop()
{
PORTC=0;
}
void left()
{
PORTC|=(1<<0)|(1<<3);
PORTC&=~(1<<1)&~(1<<2);
}
void right()
{
PORTC|=(1<<1)|(1<<2);
PORTC&=~(1<<0)&~(1<<3);
}

void forward()
{
PORTC|=(1<<0)|(1<<2);
PORTC&=~(1<<1)&~(1<<3);
}
void back()
{
PORTC|=(1<<1)|(1<<3);
PORTC&=~(1<<0)&~(1<<2);
}
char c=0;
void main()
{
      enable_uart(9600);
      DDRC=0x0f;             
      PORTC=0;
      while(1)
      {
            c=getchar_uart();
if(c=='w')
                  forward();
            else if(c=='s')
                  back();
            else if(c=='a')
                  left();
            else if(c=='d')
                  right();
            else if(c==' ')
                  stop();
      }
}

Không có nhận xét nào:

Đăng nhận xét

Bài đăng mới nhất

Hướng dẫn sử dụng Cân điện tử Fujihatsu FTC-01

Hướng dẫn sử dụng Cân điện tử Fujihatsu FTC-01 # candientu ,  # fujihatsu ,  # candientufujihatsu  #candientu,  # candientufujhatsu , #fuji...

Bài đăng phổ biến