Android controlled car with PWM using Arduino and L293

 




Description:

An Android controlled car with PWM using Arduino and L293 is a unique and exciting project that allows you to control a car wirelessly through your Android smartphone. The project involves the use of an Arduino microcontroller and an L293 motor driver IC to control the movement of the car's wheels.

The L293 is a dual H-bridge motor driver IC that can drive two DC motors simultaneously. It can also control the direction of the motors by providing a different voltage to the motor terminals. The Arduino microcontroller is used to generate the PWM (Pulse Width Modulation) signals that control the speed of the motors.

To create this project, you will need to design a car chassis with two DC motors attached to the wheels. Then, connect the motors to the L293 motor driver IC and the IC to the Arduino board. Next, create an Android app that communicates with the Arduino board via Bluetooth or Wi-Fi to send commands to control the motors. The app should be designed to send PWM signals to the Arduino board to control the speed of the motors and the direction of the car.

Once the hardware and software are set up correctly, you can control the car's movements wirelessly through your Android smartphone. You can adjust the speed of the car by changing the PWM signals sent by the app to the Arduino board. With this project, you can experiment with different driving techniques and improve your skills in robotics, programming, and electronics.



Code: 


//L293 Connection   

  const int motorA1  = 5;  // Pin  2 of INA output AB F

  const int motorA2  = 6;  // Pin  7 of INB output AB B

  const int motorB1  = 10; // Pin 10 of INC output CD F

  const int motorB2  = 9;  // Pin 14 of IND output CD B


  

//Leds connected to Arduino UNO Pin 12

  const int lights  = 12;

  

//Buzzer / Speaker to Arduino UNO Pin 3

  const int buzzer = 3 ;   

  

//Bluetooth (HC-06 JY-MCU) State pin on pin 2 of Arduino

  const int BTState = 2;

  

//Calculate Battery Level

  const float maxBattery = 8.0;// Change value to your max battery voltage level! 

  int perVolt;                 // Percentage variable 

  float voltage = 0.0;         // Read battery voltage

  int level;

  

// Use it to make a delay... without delay() function!

  long previousMillis = -1000*10;// -1000*10=-10sec. to read the first value. If you use 0 then you will take the first value after 10sec.  

  long interval = 1000*10;       // interval at which to read battery voltage, change it if you want! (10*1000=10sec)

  unsigned long currentMillis;   //unsigned long currentMillis;

  

//Useful Variables

  int i=0;

  int j=0;

  int state;

  int vSpeed=250;     // Default speed, from 0 to 255


void setup() {

    // Set pins as outputs:

    pinMode(motorA1, OUTPUT);

    pinMode(motorA2, OUTPUT);

    pinMode(motorB1, OUTPUT);

    pinMode(motorB2, OUTPUT);

    pinMode(lights, OUTPUT); 

    pinMode(BTState, INPUT);

    pinMode(buzzer, OUTPUT);    

    // Initialize serial communication at 9600 bits per second:

    Serial.begin(9600);

}

 

void loop() {

  //Stop car when connection lost or bluetooth disconnected

     if(digitalRead(BTState)==LOW) { state='S'; }


  //Save income data to variable 'state'

    if(Serial.available() > 0){     

      state = Serial.read();   

    }

  

  //Change speed if state is equal from 0 to 4. Values must be from 0 to 255 (PWM)

    if (state == '0'){

      vSpeed=0;}

    else if (state == '1'){

      vSpeed=100;}

    else if (state == '2'){

      vSpeed=180;}

    else if (state == '3'){

      vSpeed=200;}

    else if (state == '4'){

      vSpeed=255;}

    

  /***********************Forward****************************/

  //If state is equal with letter 'F', car will go forward!

    if (state == 'F') {

    analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);

        analogWrite(motorB1, vSpeed);      analogWrite(motorB2, 0); 

    }

  /**********************Forward Left************************/

  //If state is equal with letter 'G', car will go forward left

    else if (state == 'G') {

    analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);  

        analogWrite(motorB1, 200);    analogWrite(motorB2, 0); 

    }

  /**********************Forward Right************************/

  //If state is equal with letter 'I', car will go forward right

    else if (state == 'I') {

      analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0); 

        analogWrite(motorB1, 0);      analogWrite(motorB2, 200); 

    }

  /***********************Backward****************************/

  //If state is equal with letter 'B', car will go backward

    else if (state == 'B') {

    analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 

        analogWrite(motorB1, 0);   analogWrite(motorB2, vSpeed); 

    }

  /**********************Backward Left************************/

  //If state is equal with letter 'H', car will go backward left

    else if (state == 'H') {

    analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 

        analogWrite(motorB1, 200); analogWrite(motorB2, 0); 

    }

  /**********************Backward Right************************/

  //If state is equal with letter 'J', car will go backward right

    else if (state == 'J') {

    analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 

        analogWrite(motorB1, 0);   analogWrite(motorB2, 200); 

    }

  /***************************Left*****************************/

  //If state is equal with letter 'L', wheels will turn left

    else if (state == 'L') {

    analogWrite(motorA1, vSpeed);   analogWrite(motorA2, 0); 

        analogWrite(motorB1,0); analogWrite(motorB2, vSpeed); 

    }

  /***************************Right*****************************/

  //If state is equal with letter 'R', wheels will turn right

    else if (state == 'R') {

    analogWrite(motorA1, 0);   analogWrite(motorA2, vSpeed); 

        analogWrite(motorB1, vSpeed);   analogWrite(motorB2, 0);

    }

  /************************Lights*****************************/

  //If state is equal with letter 'W', turn leds on or of off

    else if (state == 'W') {

      if (i==0){  

         digitalWrite(lights, HIGH); 

         i=1;

      }

      else if (i==1){

         digitalWrite(lights, LOW); 

         i=0;

      }

      state='n';

    }

  /**********************Horn sound***************************/

  //If state is equal with letter 'V', play (or stop) horn sound

    else if (state == 'V'){

      if (j==0){  

         tone(buzzer, 1000);//Speaker on 

         j=1;

      }

      else if (j==1){

         noTone(buzzer);    //Speaker off 

         j=0;

      }

      state='n';  

    }

  /************************Stop*****************************/

  //If state is equal with letter 'S', stop the car

    else if (state == 'S'){

        analogWrite(motorA1, 0);  analogWrite(motorA2, 0); 

        analogWrite(motorB1, 0);  analogWrite(motorB2, 0);

    }

  /***********************Battery*****************************/

  //Read battery voltage every 10sec.

    currentMillis = millis();

    if(currentMillis - (previousMillis) > (interval)) {

       previousMillis = currentMillis; 

       //Read voltage from analog pin A0 and make calibration:

       voltage = (analogRead(A0)*5.015 / 1024.0)*11.132;

       //Calculate percentage...

       perVolt = (voltage*100)/ maxBattery;

       if      (perVolt<=75)               { level=0; }

       else if (perVolt>75 && perVolt<=80) { level=1; }    //        Battery level

       else if (perVolt>80 && perVolt<=85) { level=2; }    //Min ------------------------   Max

       else if (perVolt>85 && perVolt<=90) { level=3; }    //    | 0 | 1 | 2 | 3 | 4 | 5 | >

       else if (perVolt>90 && perVolt<=95) { level=4; }    //    ------------------------

       else if (perVolt>95)                { level=5; }   

       Serial.println(level);    

    }

    

}

Comments