Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:ddosaru:ioan.teodorescu1206 [2024/05/24 20:33]
ioan.teodorescu1206 [Implementare schema]
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 ==
Line 62: Line 72:
  
 ===== 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, schemeetc. 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 perfectiar 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 =====
  
pm/prj2024/ddosaru/ioan.teodorescu1206.1716572028.txt.gz · Last modified: 2024/05/24 20:33 by ioan.teodorescu1206
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