This shows you the differences between two versions of the page.
pm:prj2024:vstoica:valentin.ionescu02 [2024/05/18 13:43] valentin.ionescu02 [Hardware Design] |
pm:prj2024:vstoica:valentin.ionescu02 [2024/05/26 21:10] (current) valentin.ionescu02 [Download] |
||
---|---|---|---|
Line 31: | Line 31: | ||
* Rezistenta de 400 Ohmi | * Rezistenta de 400 Ohmi | ||
* Acumulatoare | * Acumulatoare | ||
+ | Pieste pentru lama de taiat iarba: | ||
+ | * Baterie 9v | ||
+ | * Motor DC | ||
+ | * Elice de plastic | ||
+ | * Fire | ||
+ | |||
</note> | </note> | ||
* ATmega328P: Este responsabil pentru interpretarea comenzilor Bluetooth primite de la modulul HC-05 și pentru controlul funcțiilor mașinii și a LED-urilor. | * ATmega328P: Este responsabil pentru interpretarea comenzilor Bluetooth primite de la modulul HC-05 și pentru controlul funcțiilor mașinii și a LED-urilor. | ||
Line 48: | Line 54: | ||
=== Schema electrica === | === Schema electrica === | ||
- | {{:pm:prj2024:vstoica:sc_electric.png?800|}} | + | {{:pm:prj2024:vstoica:circuit_schema_el.png?800|}} |
+ | |||
+ | === Schema electrica elice === | ||
+ | {{:pm:prj2024:vstoica:elice.png?500|}} | ||
=== Componentele conectate === | === Componentele conectate === | ||
Line 54: | Line 64: | ||
{{:pm:prj2024:vstoica:masin1.jpeg?200|}} | {{:pm:prj2024:vstoica:masin1.jpeg?200|}} | ||
{{:pm:prj2024:vstoica:untitled.jpeg?200|}} | {{:pm:prj2024:vstoica:untitled.jpeg?200|}} | ||
+ | {{:pm:prj2024:vstoica:iarba3.jpeg?200|}} | ||
+ | {{:pm:prj2024:vstoica:iarba1.jpeg?200|}} | ||
+ | {{:pm:prj2024:vstoica:iarba2.jpeg?200|}} | ||
=== Pini folositi == | === Pini folositi == | ||
Line 68: | Line 81: | ||
* Comenzile primite de la modulul HC-05 sunt trimise la modulul care controleaza motoarele prin pinii de semnale digitale | * 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 | 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 | * 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) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Line 77: | Line 102: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | * **Mediu de dezvoltare:** Arduino IDE | ||
+ | * **biblioteci folosite:** Wire.h si LiquidCrystal_I2C.h (pentru controlul motoarelor, comunicație I2C și afișarea pe LCD.) | ||
+ | * **Pentru viteza motoarelor** am folosit o variabila globala. | ||
+ | * Am definit pinii pentru controlul motoarelor(**in1,2,3,4**), pentru viteza(**ena,enb (PWM)**) si pentru led uri | ||
+ | **Funcția setup** este utilizată pentru a inițializa hardware-ul și setările necesare. | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | void setup() { |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Serial.begin(9600); |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | DDRD |= (1 << in1) | (1 << in2) | (1 << in3) | (1 << in4); |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | DDRB |= (1 << ena) | (1 << enb) | (1 << led); |
- | * (etapa 3) surse şi funcţii implementate | + | PORTB |= (1 << led); |
- | </note> | + | analogWrite(ena, 0); |
+ | analogWrite(enb, 0); | ||
- | ===== Rezultate Obţinute ===== | + | lcd.init(); |
+ | lcd.backlight(); | ||
+ | lcd.setCursor(1, 0); | ||
+ | lcd.print("SPEED IS 0"); | ||
+ | } | ||
+ | |||
+ | </note> | ||
+ | * Inițializare comunicarea serială (Serial.begin(9600)) | ||
+ | * **in1, in2, in3, in4**: pini digitali setați ca ieșiri,pentru a controla direcția motoarelor. | ||
+ | * **ena, enb**: pini de ieșire care controlează viteza motoarelor folosind PWM. | ||
+ | * **led**: pin de ieșire pentru LEDuri,pentru semnalizarea diferitelor stări. | ||
+ | * **analogWrite**: setează viteza inițială a motoarelor la 0, oprind motoarele la pornirea sistemului. | ||
+ | **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. | ||
+ | <note tip > | ||
+ | void loop() { | ||
+ | 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); | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </note> | ||
+ | Funcțiile **“Forward()“,“BACK()“ ,“LEFT()“, “RIGHT()“ și “STOP()“** sunt responsabile de controlul mișcării masinii. | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | void Forward() { |
- | </note> | + | PORTD |= (1 << in1) | (1 << in3); |
+ | PORTD &= ~((1 << in2) | (1 << in4)); | ||
+ | } | ||
- | ===== Concluzii ===== | + | void Back() { |
+ | PORTD |= (1 << in2) | (1 << in4); | ||
+ | PORTD &= ~((1 << in1) | (1 << in3)); | ||
+ | } | ||
- | ===== Download ===== | + | void Left() { |
+ | PORTD |= (1 << in1) | (1 << in4); | ||
+ | PORTD &= ~((1 << in2) | (1 << in3)); | ||
+ | } | ||
+ | |||
+ | void Right() { | ||
+ | PORTD |= (1 << in2) | (1 << in3); | ||
+ | PORTD &= ~((1 << in1) | (1 << in4)); | ||
+ | } | ||
- | <note warning> | + | void Stop() { |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | PORTD &= ~((1 << in1) | (1 << in2) | (1 << in3) | (1 << in4)); |
+ | } | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | ||
</note> | </note> | ||
- | ===== Jurnal ===== | ||
- | <note tip> | + | |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | ===== Rezultate Obţinute ===== |
- | </note> | + | |
+ | https://drive.google.com/file/d/1ADtn8xu3hT9tyJ2f52uw-6Ngnt1La_3Z/view?usp=drive_link | ||
+ | ===== Concluzii ===== | ||
+ | |||
+ | 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. | ||
+ | ===== Download ===== | ||
+ | {{:pm:prj2024:vstoica:proiect_pm.zip|}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | **Resurse Software**: |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * **Arduino Libraries** |
- | </note> | + | * **LiquidCrystal_I2C Library Documentation** |
+ | * **Wire Library Documentation** | ||
+ | |||
+ | **Resurse Hardware**: | ||
+ | * **Datasheet Arduino Uno** | ||
+ | * **Datasheet L298N Motor Driver** | ||
+ | * **Datasheet HC-05** | ||
+ | * **https://www.youtube.com/watch?v=CvqHkXeXN3M** | ||
+ | * **https://www.youtube.com/watch?v=bNZv3dZpmSU** | ||
+ | * **https://www.youtube.com/watch?v=ykgt4v7_4y4** | ||
+ | * **https://www.youtube.com/watch?v=E2sTbpFsvXI** | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||