This shows you the differences between two versions of the page.
pm:prj2024:ddosaru:ioan.teodorescu1206 [2024/05/24 20:33] ioan.teodorescu1206 [Schema Electrica] |
pm:prj2024:ddosaru:ioan.teodorescu1206 [2024/05/27 14:47] (current) ioan.teodorescu1206 [Download] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Ioan Teodorescu: Card Shuffler ====== | ====== Ioan Teodorescu: Card Shuffler ====== | ||
+ | |||
+ | <note tip> | ||
+ | **Nume: Teodorescu Ioan \\ | ||
+ | Grupa: 333CB \\ | ||
+ | Indrumator: Daniel Dosaru** | ||
+ | </note> | ||
===== Introducere ===== | ===== Introducere ===== | ||
Line 51: | Line 57: | ||
* P10: Se conecteaza la porturile ENA si ENB din driverul L298N | * P10: Se conecteaza la porturile ENA si ENB din driverul L298N | ||
* P11: Se conecteaza la breadboard pentru aprinderea LED-ului | * P11: Se conecteaza la breadboard pentru aprinderea LED-ului | ||
- | * P12: Se conecteaza la portul TXD al modului Bluetooth | + | * P12: Se conecteaza la portul TXD al modulului Bluetooth |
- | * P13: Se conecteaza la portul RXD al modului Bluetooth | + | * P13: Se conecteaza la portul RXD al modulului Bluetooth |
+ | * A4: Se conecteaza la portul SCL al modulului I2C | ||
+ | * A5: Se conecteaza la portul SCL al modulului I2C | ||
== Schema Electrica == | == Schema Electrica == | ||
+ | Arduino Uno ofera PWM (Pulse Width Modulation) pe pinurile 3, 5, 6, 9, 10 si 11. Astfel, pentru a controla viteza celor doua motoare, am folosit pinul 10, care, adaugat in breadboard am scos alte 2 fire pentru a le conecta pe porturile ENA si ENB din L298N. Modului Bluetooth funcționează la o tensiune de alimentare de 3.3V, contribuind la menținerea unui consum redus de energie. | ||
+ | |||
{{ :pm:prj2024:ddosaru:ioan_teodorescu_schema_electrica_final.jpg?nolink&800 |}} | {{ :pm:prj2024:ddosaru:ioan_teodorescu_schema_electrica_final.jpg?nolink&800 |}} | ||
- | ===== Diagrama Electrica ====== | + | == Diagrama Electrica == |
{{ :pm:prj2024:ddosaru:ioan_teodorescu_schema_final.jpg?nolink&700 |}} | {{ :pm:prj2024:ddosaru:ioan_teodorescu_schema_final.jpg?nolink&700 |}} | ||
- | ===== Implementare schema ====== | + | == Implementare schema == |
{{ :pm:prj2024:ddosaru:whatsapp_image_2024-05-24_at_18.54.58_486eaec6.jpg?nolink&700 |}} | {{ :pm:prj2024:ddosaru:whatsapp_image_2024-05-24_at_18.54.58_486eaec6.jpg?nolink&700 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Pentru implementarea software am folosit Arduino IDE. Pe parcursul implementarii proiectul, m-am decis să ofer disponibilitatea utilizatorilor de a gestiona viteze de mestecare a cartilor. | ||
+ | == Biblioteci alese == | ||
+ | * LiquidCrystal_I2C | ||
+ | * Această bibliotecă este utilizată pentru a controla un afișaj LCD prin protocolul I2C, economisind pinii de pe microcontroller și simplificând conexiunile hardware. | ||
+ | * HCSR04 | ||
+ | * Această bibliotecă facilitează interfațarea cu senzorii de distanță ultrasonici HCSR04, permițând măsurarea distanței într-un mod simplu și precis. | ||
+ | * SoftwareSerial | ||
+ | * Aceasta permite comunicarea serială pe pinii digitali selectați de utilizator, fiind utilă pentru modulele care necesită o interfață serială suplimentară, cum ar fi modulul Bluetooth. | ||
+ | == Laboratoare folosite == | ||
+ | * USART | ||
+ | * UART ajuta la interfațarea și comunicarea eficientă cu modulul Bluetooth. Am utilizat biblioteca ''SoftwareSerial'' pentru a crea o interfață serială suplimentară pe pinii digitali 12 și 13 (Rx și Tx) pentru modulul. Apoi, comunicarea serială a fost configurată la o viteză de baud de 9600 bps, atât pentru seriala hardware, cat și pentru cea software. Aceasta este o valoare comună și fiabilă pentru transferul de date între microcontroller și modulul Bluetooth. Utilizand ''bt.read()'', dispozitivul primește date de la modulul Bluetooth, permițându-mi să controleze dispozitivul | ||
+ | * PWM | ||
+ | * PWM ajută la a varia tensiunea dată motoarelor, în mod controlat. În cod, ''enPin'' este configurat ca pin de ieșire PWM care controlează viteza motoarelor. Utilizând funcția ''analogWrite(enPin, motorSpeed)'', valoarea PWM (cuprinsă între 0 și 255) determină viteza motorului. | ||
+ | * I2C | ||
+ | * I2C este foarte important in proiectul acesta, având ca principal scop economisirea pinilor microcontroller-ului și simplificarea conexiunilor hardware. Pentru inceput, am folosit un I2C Scanner pentru a găsi adresa ecranului (in acest caz, 0x27). Cu ajutorul ''LiquidCrystal_I2C'', care a facilitat procesul de controlare al ecranului, am reușit să controlez ecranul cu succes. | ||
- | <note tip> | + | == Explicarea scheletului proiectului == |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
+ | * ''setup()'' | ||
+ | * Se initializeaza configurația piniilor și initializarea componentelor (Ecran LCD, modul Bluetooth). | ||
+ | * ''updateInsertedState()'' | ||
+ | * Verifica distanta fata de cel mai apropiat obiect, pentru fiecare senzor. Daca distanta relativă este mai mică decât 10 la ambii senzori, inseamnă că avem cârți introduse, iar ''inserted'' e 1, altfel, 0. | ||
+ | * ''displaySpeedSelection()'' | ||
+ | * Afiseaza pe ecran mesajul de selectare a vitezei | ||
+ | * ''updateSpeedDisplay()'' | ||
+ | * Pentru functia de mai sus, actualizează doar procentajul. | ||
+ | * ''displayShufflingMessage()'' | ||
+ | * Afiseaza faptul ca se amestecă pachetul. | ||
+ | * ''doneMessage()'' | ||
+ | * Confirmă terminarea procesului. | ||
+ | * ''startMotors(int motorSpeed)'' | ||
+ | * Porneste motoarele. | ||
+ | * ''displayErrorMessage()'' | ||
+ | * Afișează un mesaj de eroare in cazul in care vreau sa incep procesul însă nu am nimic in compartimente. | ||
+ | * ''stopMotors()'' | ||
+ | * Oprește motoarele. | ||
+ | * ''loop()'' | ||
+ | * În primul rând, calculeaza cele 2 distanțe și verificăm dacă starea s-a schimbat (e diferită de starea cea veche). In caz afirmativ, vedem care este valoarea lui inserted (1 - avem cv in compartiment, 0 - nu e nimic) si se afișează mesajele respective. Apoi, verificam daca am primit ceva de la terminal (modul ble); Daca da, extragem ce am citit. Daca avem un numar din intervalul [1, 6], vom actualiza viteza motoarelor; daca primim 'S', vom da start la motoare. In momentul in care distantele de la ambii senzori cresc, se opreste motorul. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Mic demo înainte de a realiza suportul final: https://www.youtube.com/watch?v=jcgRYc394oc |
</note> | </note> | ||
- | ===== Concluzii ===== | + | {{ :pm:prj2024:ddosaru:it_rez_1.jpg?nolink&500 |}} |
- | ===== Download ===== | + | {{ :pm:prj2024:ddosaru:it_rez_2.jpg?nolink&500 |}} |
- | <note warning> | + | {{ :pm:prj2024:ddosaru:it_rez_3.jpg?nolink&500 |}} |
- | 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ă ;-). | + | |
+ | Rezultat final: https://www.youtube.com/watch?v=CSkBXTHyeMI | ||
+ | |||
+ | Tin să menționez faptul că suportul nu este cel mai perfect, iar procesul de amestecare nu este cel mai bun. | ||
+ | |||
+ | ===== Download ===== | ||
- | 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> |
+ | Arhiva contine: | ||
+ | * Fisierul ''card_shuffler.ino'' care contine logica proiectului | ||
+ | * ''HCSR04-ultrasonic-sensor-lib-2.0.2.zip'' arhiva pentru biblioteca HCSR04 | ||
+ | * ''LiquidCrystal_I2C-1.1.2.zip'' arhiva pentru biblioteca LiquidCrystal_I2C | ||
</note> | </note> | ||
+ | Arhiva -> {{:pm:prj2024:ddosaru:proiect_pm.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||