Table of Contents

Android Car

Autor: Denis Balan

Introducere

Proiectul are la baza construirea unei masinute care se poate controla prin bluetooth de pe un telefon cu android + afisarea pe un lcd a comenzilor pe care le primeste masina :

Descriere Generala

Aplicatia instalata pe telefon se conecteaza la modulul bluetooth al masinii si poti controla fiecare miscare scrisa mai sus. Pe acel LCD vor aparea miscarile in timp real. Daca ai apasat sageata in fata o sa apara FORWARD, la fel si pentru celelalte. Miscarile laterale se realizeaza prin fuctionarea unor motorase de pe partea stanga sau dreapta (in functie de directie) mai rapid decat cele de pe partea opusa.

Hardware Design

Lista componente:

Schema bloc:

Schema Electrica

Software Design

Librarii:

  1. #include <LiquidCrystal_I2C.h> –> Pentru LCD
  2. #include <SoftwareSerial.h> –> Pentru bluetooth

In functia de setup fac Serial.begin(9600) si setez pinii pentru care dau output. In functia de loop primesc input si afisez pe LCD inputul, dupa care setez viteza si directia pentru motoare. Inputul primit de la telefon este prelucrat in functia loop() si comparat cu diferite comenzi in functie de directia de miscare dorita.

Poze

Jurnal

  1. 11.05.2021 –> comandare sasiu + suport beterii + driver
  2. 19.05.2021 –> comandare modul bluetooth (am uitat de el)
  3. 20 - 1 .06.2021 –> asamblare + verificare cod

Demo

https://www.youtube.com/watch?v=GM5x62Ts5JQ&t=1s&ab_channel=DenisBalan

Cod

  1. #include <LiquidCrystal_I2C.h>
  2. #include <SoftwareSerial.h>
  3. SoftwareSerial hc05(0, 1);
  4. LiquidCrystal_I2C lcd(0x27,20,4);

Declarare variabile

  1. int motor1pin1 = 2;
  2. int motor1pin2 = 3;
  3. int motor2pin1 = 4;
  4. int motor2pin2 = 5;
  5. int motor3pin1 = 6;
  6. int motor3pin2 = 7;
  7. int motor4pin1 = 8;
  8. int motor4pin2 = 9;
  9. char command;
  10. #define trig_pin A4
  11. #define echo_pin A5
Setup()

void setup() {

Serial.begin(9600);
hc05.begin(9600);
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(motor3pin1, OUTPUT);
pinMode(motor3pin2, OUTPUT);
pinMode(motor4pin1, OUTPUT);
pinMode(motor4pin2, OUTPUT);
pinMode(10, OUTPUT); 
pinMode(11, OUTPUT);
pinMode(12, OUTPUT); 
pinMode(13, OUTPUT);

}

Loop()

void loop() {

// initiez LCD -ul
lcd.init(); 
lcd.backlight();
lcd.clear();
// verific daca am input si-l preiau
if(hc05.available() > 0){
  command = hc05.read();
  Serial.write(Serial.read());
}
else {
  command = ' ';
}
// daca comanda este F atunci afisez pe LCD
// si dau comanda la motoare sa se miste
// la fel si in celelalte if-uri
if (command == 'F') {
  lcd.print("FORWARD");
  //Controlling spin direction of motors:
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);

  digitalWrite(motor2pin1, HIGH);
  digitalWrite(motor2pin2, LOW);

  digitalWrite(motor3pin1, HIGH);
  digitalWrite(motor3pin2, LOW);

  digitalWrite(motor4pin1, HIGH);
  digitalWrite(motor4pin2, LOW);
  // setez viteza motoarelor
  analogWrite(10, 255); //ENA pin
  analogWrite(11, 255); //ENB pin
  analogWrite(12, 255); //ENA pin
  analogWrite(13, 255); //ENA pin
}
if (command == 'B') {
  lcd.print("BACKWARD");
  
  //Controlling spin direction of motors:
  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, HIGH);

  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, HIGH);

  digitalWrite(motor3pin1, LOW);
  digitalWrite(motor3pin2, HIGH);

  digitalWrite(motor4pin1, LOW);
  digitalWrite(motor4pin2, HIGH);
  
  analogWrite(10, 255); //ENA pin
  analogWrite(11, 255); //ENB pin
  analogWrite(12, 255); //ENA pin
  analogWrite(13, 255); //ENA pin
}
if (command == 'L') {
  lcd.print("LEFT");
  
  //Controlling spin direction of motors:
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);

  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, LOW);

  digitalWrite(motor4pin1, HIGH);
  digitalWrite(motor4pin2, LOW);

  digitalWrite(motor3pin1, LOW);
  digitalWrite(motor3pin2, LOW);
  analogWrite(10, 255); //ENA pin
  analogWrite(11, 255); //ENB pin
  analogWrite(12, 255); //ENA pin
  analogWrite(13, 255); //ENA pin
}
if (command == 'R') {
  lcd.print("RIGHT");
  
  //Controlling spin direction of motors:
  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, LOW);

  digitalWrite(motor2pin1, HIGH);
  digitalWrite(motor2pin2, LOW);

  digitalWrite(motor4pin1, LOW);
  digitalWrite(motor4pin2, LOW);

  digitalWrite(motor3pin1, HIGH);
  digitalWrite(motor3pin2, LOW);
  analogWrite(10, 255); //ENA pin
  analogWrite(11, 255); //ENB pin
  analogWrite(12, 255); //ENA pin
  analogWrite(13, 255); //ENA pin
}
if (command == 'S') {
  lcd.print("STOP");
  
  //Controlling spin direction of motors:
  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, LOW);

  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, LOW);

  digitalWrite(motor4pin1, LOW);
  digitalWrite(motor4pin2, LOW);

  digitalWrite(motor3pin1, LOW);
  digitalWrite(motor3pin2, LOW);
  analogWrite(10, 0); //ENA pin
  analogWrite(11, 0); //ENB pin
  analogWrite(12, 0); //ENA pin
  analogWrite(13, 0); //ENA pin
}

}

Concluzii:

Nu am ales un proiect greu, dar din care am avut ce invata. Am invatat sa folosesc driverele L298n v1 in paralel + datorita videoclipurilor vazute pe YT despre mai multe proiecte asemanatoare am inteles cum functioneaza fiecare piesa si am observat ca nu aveam nevoie de 2 drivere, puteam si cu unul singur.

Bibliografie/Resurse:

Download:

Pagina wiki