Scopul este de a oferi o modalitate distractivă si practica pentru îndeplinirea unei sarcini ,precum tăierea ierbii în grădină.
Pieste pentru lama de taiat iarba:
* Pentru a folosi USART in comunicarea dintre microcontrolerul ATmega328P și modulul Bluetooth HC-05,conectez piniul RX de la modul la pinul TX de la microcontroler, si TX la RX.De asemenea, VCC ul de la modul il conectez la pinul de 5V de la microcontroler pentru alimentare si GND ul la GND.
* Motoarele sunt conectate la modulul L298N prin prinii out1,out2,out3 si out4 pentru a controla directia lor.
* Pentru a functiona tot ansamblul, cele 2 acumulatoare sunt conectate la pinul de 12V de la modulul L298N,care oferta si alimnetare microcontrolerului prin pinul de 5V.
* Comenzile primite de la modulul HC-05 sunt trimise la modulul care controleaza motoarele prin pinii de semnale digitale Am ales pinii 4,5,6,7 de la microcontroler
* Pinii 10 si 11 de la microcontroler conectati la pinii ENA si ENB de la modulul L298N controleaza viteza motoarelor prin PWM
* LED urile sunt conectate la pin ul digital 9 de la microcontroler si alimentarea la pinul de 3.3V
* Pinii VCC SI GND de la LCD cu interfata I2C sunt conectati la pinii de 5v si, respecitv GND ai microcontrolerului.
* Pinii SDA SI SCL ai LCD ului sunt concectati la microcontroler prin pinii A4 si A5(SDA SI SCL)
Funcția setup este utilizată pentru a inițializa hardware-ul și setările necesare.
Serial.begin(9600); DDRD |= (1 << in1) | (1 << in2) | (1 << in3) | (1 << in4); DDRB |= (1 << ena) | (1 << enb) | (1 << led); PORTB |= (1 << led); analogWrite(ena, 0); analogWrite(enb, 0);
lcd.init(); lcd.backlight(); lcd.setCursor(1, 0); lcd.print("SPEED IS 0");
}
Funcția loop este responsabilă pentru citirea comenzilor de la interfața serială și pentru controlarea comportamentului vehiculului pe baza acestor comenzi.Se verifica daca există date disponibile pe interfața serială. Daca da, se citeste o valoare care reprezinta ce functie trebuie apelata.Se seteaza viteza motoarelor si se afiseaza pe lcd valoare ei.
if (Serial.available() > 0) { char value = Serial.read(); analogWrite(ena, Speed); analogWrite(enb, Speed); lcd.clear(); lcd.print("SPEED IS "); lcd.print(Speed); lcd.print(" "); if (value == 'B') { Forward(); } else if (value == 'F') { Back(); } else if (value == 'L') { Left(); } else if (value == 'R') { Right(); } else if (value == 'X') { Speed = 255; } else if (value == 'Y') { Speed = 120; } else if (value == 'S') { Stop(); } else if (value == 'M' || value == 'N') { PORTB &= ~(1 << led); } else if (value == 'm' || value == 'n') { PORTB |= (1 << led); } }
}
PORTD |= (1 << in1) | (1 << in3); PORTD &= ~((1 << in2) | (1 << in4));
}
void Back() {
PORTD |= (1 << in2) | (1 << in4); PORTD &= ~((1 << in1) | (1 << in3));
}
void Left() {
PORTD |= (1 << in1) | (1 << in4); PORTD &= ~((1 << in2) | (1 << in3));
}
void Right() {
PORTD |= (1 << in2) | (1 << in3); PORTD &= ~((1 << in1) | (1 << in4));
}
void Stop() {
PORTD &= ~((1 << in1) | (1 << in2) | (1 << in3) | (1 << in4));
}
Finalizarea acestui proiect a fost o experiență extrem de satisfăcătoare, oferindu-mi ocazia de a integra și aplica cunoștințele de hardware și software într-un mod creativ și util. Proiectarea și construirea unei mașini de jucărie controlate prin Bluetooth, echipată cu LED-uri pentru faruri și stopuri, și cu o elice pentru tăiatul ierbii, mi-au permis să explorez numeroase aspecte ale ingineriei și programării. Afișarea vitezei pe un ecran LCD a adăugat un plus de interactivitate și funcționalitate proiectului. Acest proiect nu doar că mi-a îmbogățit abilitățile tehnice, dar mi-a și stimulat dorința de a lucra la proiecte similare în viitor.
Resurse Software:
Resurse Hardware: