Tuesday, November 1, 2016

BLUETOOTH CONTROLLED ROBOT USING ARDUINO UNO (HC-O5)

In this world of automation robots contribute a lot to make human work less messy and reliable. so to make our easy we try to use advance technology. To make it possible semiconductor IC S play an important role. 
A basic robot we could make to make our work easy is bluetooth controlled robot.
Basically this robot is very simple to make as it is of beginners level.

THIS REQUIREs
arduino uno,
motor driver ic (L293D),
jumper wires,
two geared dc motors,
solderless beardboard 
bluetooth module (HC-05)
9v battery  (optional)
arduino usb
arduino IDE software 

UNDERSTANDING L293D 
The following diagram  shows the functions of the pins 
This ic work on the principle of H-bridge 
UNDERSTANDING HC-05
IT is a bluetooth module with a working voltage of 3.3v to 6v

UNDERSTANDING ARDUINO  
Arduino/Genuino Uno is a microcontroller board based on the ATmega328P (datasheet). It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, a 16 MHz quartz crystal, a USB connection, a power jack, an ICSP header and a reset button. It contains everything needed to support the microcontroller; simply connect it to a computer with a USB cable or power it with a AC-to-DC adapter or battery to get started.. 
PROGRAMMING ARDUINO 
we would need a arduino software to code it
we can we various logics to program our arduino 
the following sketch was used by me
   Control 2 DC motors with Smartphone via bluetooth
   
*/
int motor1Pin1 = 3; // pin 2 on L293D IC
int motor1Pin2 = 4; // pin 7 on L293D IC
int enable1Pin = 6; // pin 1 on L293D IC
int motor2Pin1 = 8; // pin 10 on L293D IC
int motor2Pin2 = 9; // pin 15 on L293D IC
int enable2Pin = 11; // pin 9 on L293D IC
int state;
int flag = 0;      //makes sure that the serial only prints once the state
int stateStop = 0;
void setup() {
  // sets the pins as outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enable1Pin, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(enable2Pin, OUTPUT);
  // sets enable1Pin and enable2Pin high so that motor can turn on:
  digitalWrite(enable1Pin, HIGH);
  digitalWrite(enable2Pin, HIGH);
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

void loop() {
  //if some date is sent, reads it and saves in state
  if (Serial.available() > 0) {
    state = Serial.read();
    flag = 0;
  }
  // if the state is '1' the DC motor will go forward
  if (state == '1') {
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
    if (flag == 0) {
      Serial.println("Go Forward!");
      flag = 1;
    }
  }

  // if the state is '2' the motor will turn left
  else if (state == '2') {
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    if (flag == 0) {
      Serial.println("Turn LEFT");
      flag = 1;
    }
    delay(1500);
    state = 3;
    stateStop = 1;
  }
  // if the state is '3' the motor will Stop
  else if (state == '3' || stateStop == 1) {
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
    if (flag == 0) {
      Serial.println("STOP!");
      flag = 1;
    }
    stateStop = 0;
  }
  // if the state is '4' the motor will turn right
  else if (state == '4') {
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, LOW);
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
    if (flag == 0) {
      Serial.println("Turn RIGHT");
      flag = 1;
    }
    delay(1500);
    state = 3;
    stateStop = 1;
  }
  // if the state is '5' the motor will Reverse
  else if (state == '5') {
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
    if (flag == 0) {
      Serial.println("Reverse!");
      flag = 1;
    }
  }
  //For debugging purpose
  //Serial.println(state);
}
then u need to connect all the components as shown in the schematic diagram given below
then u need to connect all the components as shown in the schematic diagram given below
after connecting all the parts cleanly we need to download a application named as BLUEARD from the android play store it is also available on ios.
this application was developed at MIT .
this application is used to connect our bluetooth to our smartphone.
http://randomnerdtutorials.com/arduino-control-2-dc-motors-via-bluetooth/
<all data was used from this website it is awesome check it out>
when left is pressed only right motor turns on and the robot turns in left direction and vise versa when forward is pressed both the motors move clockwise and when reverse is pressed both motors move anti-clockwise
Such type are robots are very basic as far as commercial world is concern. we can improve such robots by the application of IOT and many further things like using ultrasonic sensors,pir motion sensor, gyro sensor, flex sensor etc. 
we much try to enhance the technology for the welfare of human beings to some extent .  

2 comments: