Table of Contents

Mobile Controlled Bluetooth Car

Autor: Macadon Andrei-Cristian

Introducere

Hardware Design

Lista componente

  1. Arduino Uno
  2. Placa de control motoare L298n
  3. 4 motoare
  4. Baterie
  5. Modul Bluetooth HC-05
  6. Sasiu robot
  7. Cabluri

Schema Bloc

Software Design

Codul masinii

<code>#include <SoftwareSerial.h> SoftwareSerial hc05(0, 1);

int m1pin1 = 8; int m1pin2 = 9; int m2pin1 = 10; int m2pin2 = 11; int avarii = 0; int backwardsLights = 0; char request;

void setup() {

Serial.begin(9600);
hc05.begin(9600);
// put your setup code here, to run once:
pinMode(m1pin1, OUTPUT);
pinMode(m1pin2, OUTPUT);
pinMode(m2pin1, OUTPUT);
pinMode(m2pin2, OUTPUT);
pinMode(4, OUTPUT); 
pinMode(5, OUTPUT);

}

void loop() {

request = ' ';
if(hc05.available() > 0){
  request = hc05.read();
  Serial.write(Serial.read());
}
if (request == 'F') {
  
  //Make the motors run forward:
  digitalWrite(m1pin1, HIGH);
  digitalWrite(m1pin2, LOW);
  
  digitalWrite(m2pin1, HIGH);
  digitalWrite(m2pin2, LOW);
  backwardsLights = 0;
  analogWrite(4, 255); //ENA pin
  analogWrite(5, 255); //ENB pin
}
if(backwardsLights == 1){
  digitalWrite(6, HIGH);
  delay(500);
  digitalWrite(6, LOW);
  delay(500);
}
if (request == 'B') {
  //Make the motors run backwards
  digitalWrite(m1pin1, LOW);
  digitalWrite(m1pin2, HIGH);
  
  digitalWrite(m2pin1, LOW);
  digitalWrite(m2pin2, HIGH);
  // set the flag for the backwardsLights
  backwardsLights = 1;
  
  digitalWrite(6, HIGH);
  delay(1000);
  digitalWrite(6, LOW);
  delay(1000);
  
  analogWrite(4, 255); //ENA pin
  analogWrite(5, 255); //ENB pin
}
if (request == 'L') {
  //Make only the left motors run 
  digitalWrite(m1pin1, HIGH);
  digitalWrite(m1pin2, LOW);

  digitalWrite(m2pin1, LOW);
  digitalWrite(m2pin2, LOW);
  backwardsLights = 0;
  analogWrite(4, 255); //ENA pin
  analogWrite(5, 255); //ENB pin
}

if (request == 'R') {
  //Make only the right motors run
  digitalWrite(m1pin1, LOW);
  digitalWrite(m1pin2, LOW);
  digitalWrite(m2pin1, HIGH);
  digitalWrite(m2pin2, LOW);
  backwardsLights = 0;
  analogWrite(4, 255); //ENA pin
  analogWrite(5, 255); //ENB pin
}
//check the avarii flag to see if the red LED should be flickering or not 
if(avarii == 1){
  digitalWrite(7, HIGH);
  delay(500);
  digitalWrite(7, LOW);
  delay(500);
}
if (request == 'S') {
  
  // stop all the motors
  digitalWrite(m1pin1, LOW);
  digitalWrite(m1pin2, LOW);
  digitalWrite(m2pin1, LOW);
  digitalWrite(m2pin2, LOW);
  //stop avarii 
  digitalWrite(7, LOW);
   
  analogWrite(4, 0); //ENA pin
  analogWrite(5, 0); //ENB pin
  //set the flags accordingly
  avarii = 0;
  backwardsLights = 0;
}
if(request == 'A'){
  // turn on avarii
  digitalWrite(7, HIGH);
  delay(1000);
  digitalWrite(7, LOW);
  delay(1000);
  // if avarii were already turned on, turn them off
  if(avarii == 0){
    avarii = 1;
  } else {
    avarii = 0;
  }
}

}

Poze

Demo

https://youtu.be/WCbSVXxYX_Y

Bibliografie

https://www.youtube.com/watch?v=tujih1afqiE https://ocw.cs.pub.ro/courses/pm/prj2021/abirlica/mcb_car https://ocw.cs.pub.ro/courses/pm/prj2021/abirlica/mcb_car?do=export_pdf