Mobile Controlled Bluetooth Car

Autor: Macadon Andrei-Cristian

Introducere

  • Proiectul este reprezentat de o masinuta care poate fi controlata dintr-o aplicatie Arduino. Acest lucru este posibil printr-un modul bluetooth HC-05 conectat la placuta arduino uno. De asemenea, atunci cand masinuta da cu spatele un LED verde va palpai. Exista comanda 'A' care va pune masinuta pe avarii. Avariile pot fi oprite dand, din nou, comanda 'A' sau dand comanda 'S'(ce opreste si motoarele). Aceasta se afla pe un sasiu de robot.
  • Masinuta poate avea mai multe scopuri:
    1. Poate fi folosita pe post de vehicul transport/poate cara anumite chestii: Ex: Iti poti aduce o ciocolata din bucatarie in sufragerie doar cu ajutorul telefonului
    2. Poti pune un servetel sub ea, aceasta curatand zonele prin care se va plimba
    3. De asemenea, aceasta poate fi folosita si pe post de simpla jucarie.

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

  • Implementarea codului este destul de simpla. Prin intermediul calculatorului ma conectez la modulul bluetooth, iar printr-un terminal trimit comenzi precum 'F'(masina merge in fata), 'B'(masina da cu spatele), 'L'(masina face stanga), 'R'(masina face dreapta), 'S'(masina se opreste, avariile se opresc), 'A'(se pornesc sau se sting avariile).
  • Pentru a folosi modulul bluetooth am inclus libraria SoftwareSerial.h.
  • In setup() setez pinii de output. In loop() verific mereu requestul primit de la terminal si actionez corespunzator(misc masina sau activez avariile). Folosesc doua flag-uri: “avarii” si “backwardsLights” pentru a gestiona aprinderea si inchiderea LED-urilor.

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

Bibliografie

pm/prj2021/abirlica/mcb_car.txt · Last modified: 2021/06/04 16:02 by andrei.macadon
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0