Saturday, November 28, 2015

Turn ON-OFF electric appliance using Arduino bluetooth HC-06

You can run some electric appliances (AC load) or some LED lamps(DC load) by Bluetooth from your mobile using Arduino.

Parts list:
Arduino board
Resistor 100 ohm(12pcs)
Relay module 8 channel or 12 channel
LED (12pcs)
Bluetooth module HC-06
Adapter 9v 1A

Turn ON-OFF electric appliance using Arduino bluetooth HC-06Turn ON-OFF electric appliance using Arduino bluetooth HC-06
Turn ON-OFF electric appliance using Arduino bluetooth HC-06Turn ON-OFF electric appliance using Arduino bluetooth HC-06

IMPORTANT NOTES:

1-RX pin of bluetooth module connected to TX of arduino board and the TX pin of bluetooth module connected to RX of arduino board.

2-You must use 9v adapter rather than 9v battery when you use relay channel module because the battery become empty quickly.

3-When you want upload the programming code to arduino board, first remove the RX and TX pins.

4-Old versions of arduino program can't used for this project so you have to install   new version of arduino program from arduino site for free.


Mobile and Bluetooth module pairing steps:

1-In first you must install ArduDroid app. on your mobile from Google play.

Turn ON-OFF electric appliance using Arduino bluetooth HC-06

2-go to Bluetooth devices menu in your mobile, find the HC-06 and insert the 4 numbers pass-code. usually  1234 or 0000. then pair the mobile with the Bluetooth module

Turn ON-OFF electric appliance using Arduino bluetooth HC-06

3-open the app. and click on "connect me to a Bluetooth device"

Turn ON-OFF electric appliance using Arduino bluetooth HC-06
4-now you can click on the pin number for run the load (LED or relay) that connected to that pin.

Turn ON-OFF electric appliance using Arduino bluetooth HC-06



#define START_CMD_CHAR '*'

#define END_CMD_CHAR '#'

#define DIV_CMD_CHAR '|'

#define CMD_DIGITALWRITE 10

#define CMD_ANALOGWRITE 11

#define CMD_TEXT 12

#define CMD_READ_ARDUDROID 13

#define MAX_COMMAND 20  // max command number code. used for error checking.

#define MIN_COMMAND 10  // minimum command number code. used for error checking.

#define IN_STRING_LENGHT 40

#define MAX_ANALOGWRITE 255

#define PIN_HIGH 3

#define PIN_LOW 2


String inText;


void setup() {

  Serial.begin(9600);

  Serial.println("ArduDroid 0.12 Alpha by TechBitar (2013)");

  Serial.flush();

}


void loop()

{

  Serial.flush();

  int ard_command = 0;

  int pin_num = 0;

  int pin_value = 0;


  char get_char = ' ';  //read serial


  // wait for incoming data

  if (Serial.available() < 1) return; // if serial empty, return to loop().


  // parse incoming command start flag

  get_char = Serial.read();

  if (get_char != START_CMD_CHAR) return; // if no command start flag, return to loop().


  // parse incoming command type

  ard_command = Serial.parseInt(); // read the command



  // parse incoming pin# and value

  pin_num = Serial.parseInt(); // read the pin

  pin_value = Serial.parseInt();  // read the value


  // 1) GET TEXT COMMAND FROM ARDUDROID

  if (ard_command == CMD_TEXT){ 

    inText =""; //clears variable for new input 

    while (Serial.available())  {

      char c = Serial.read();  //gets one byte from serial buffer

      delay(5);

      if (c == END_CMD_CHAR) { // if we the complete string has been read

        // add your code here

        break;

      }            

      else {

        if (c !=  DIV_CMD_CHAR) {

          inText += c;

          delay(5);

        }

      }

    }

  }


  // 2) GET digitalWrite DATA FROM ARDUDROID

  if (ard_command == CMD_DIGITALWRITE){

    if (pin_value == PIN_LOW) pin_value = LOW;

    else if (pin_value == PIN_HIGH) pin_value = HIGH;

    else return; // error in pin value. return.

    set_digitalwrite( pin_num,  pin_value);  // Uncomment this function if you wish to use

    return;  // return from start of loop()

  }


  // 3) GET analogWrite DATA FROM ARDUDROID

  if (ard_command == CMD_ANALOGWRITE) {

    analogWrite(  pin_num, pin_value );

    // add your code here

    return;  // Done. return to loop();

  }


  // 4) SEND DATA TO ARDUDROID

  if (ard_command == CMD_READ_ARDUDROID) {

    // char send_to_android[] = "Place your text here." ;

    // Serial.println(send_to_android);   // Example: Sending text

    Serial.print(" Analog 0 = ");

    Serial.println(analogRead(A0));  // Example: Read and send Analog pin value to Arduino

    return;  // Done. return to loop();

  }

}


void set_digitalwrite(int pin_num, int pin_value)

{

  switch (pin_num) {

  case 13:

    pinMode(13, OUTPUT);

    digitalWrite(13, pin_value);
   

    break;

  case 12:

    pinMode(12, OUTPUT);

    digitalWrite(12, pin_value); 
  

    break;

  case 11:

    pinMode(11, OUTPUT);

    digitalWrite(11, pin_value);       


    break;

  case 10:

    pinMode(10, OUTPUT);

    digitalWrite(10, pin_value);       


    break;

  case 9:

    pinMode(9, OUTPUT);

    digitalWrite(9, pin_value);       


    break;

  case 8:

    pinMode(8, OUTPUT);

    digitalWrite(8, pin_value);       


    break;

  case 7:

    pinMode(7, OUTPUT);

    digitalWrite(7, pin_value);       


    break;

  case 6:

    pinMode(6, OUTPUT);

    digitalWrite(6, pin_value);       


    break;

  case 5:

    pinMode(5, OUTPUT);

    digitalWrite(5, pin_value);
   

    break;

  case 4:

    pinMode(4, OUTPUT);

    digitalWrite(4, pin_value);       


    break;

  case 3:

    pinMode(3, OUTPUT);

    digitalWrite(3, pin_value);       

    break;

  case 2:

    pinMode(2, OUTPUT);

    digitalWrite(2, pin_value);
  

    break;    



  }

}