Differences

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

Link to this comparison view

pm:prj2024:mdinica:iulia.chesches [2024/05/04 01:51]
iulia.chesches
pm:prj2024:mdinica:iulia.chesches [2024/05/27 13:51] (current)
iulia.chesches [Rezultate Obţinute]
Line 5: Line 5:
 Grupă: 332CA Grupă: 332CA
  
-Email: iulia.chesches@stud.acs.upb.ro+Email: ​<iulia.chesches@stud.acs.upb.ro>
  
 ===== Introducere ===== ===== Introducere =====
Line 17: Line 17:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-Interacțiunea cu sistemul este realizată prin intermediul unui display, care afișează instrucțiuni și opțiunile disponibile ale utilizatorului. Acesta poate introduce durata dorită a programului,​ după care urmează etapa de plată, unde se va folosi de cardul de fidelitate. Dacă plata este realizată cu succes, programul de spălare începe și periile rotative sunt puse în funcțiune de un stepper ​motor.+Interacțiunea cu sistemul este realizată prin intermediul unui display, care afișează instrucțiuni și opțiunile disponibile ale utilizatorului. Acesta poate introduce durata dorită a programului,​ după care urmează etapa de plată, unde se va folosi de cardul de fidelitate. Dacă plata este realizată cu succes, programul de spălare începe și periile rotative sunt puse în funcțiune de un servo motor.
  
-Îmi propun să încorporez în proiectul meu întreruperi,​ timere și trei protocoale de comunicație:​ SPI pentru modulul RFID, I2C pentru display și PWM pentru ​stepper ​motor.+Îmi propun să încorporez în proiectul meu întreruperi,​ timere și trei protocoale de comunicație:​ SPI pentru modulul RFID, I2C pentru display și PWM pentru ​servo motor.
  
  
-{{:​pm:​prj2024:​mdinica:​automaticcarwash.png?600}} +{{:​pm:​prj2024:​mdinica:​carwashdiagiuliachesches.png?600}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> +==== Componente folosite ====  
-Aici puneţi tot ce ţine de hardware design+ 
-  * listă de piese +  * Arduino Uno R3 https://​cleste.ro/​arduino-uno-r3-atmega328p.html 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.ghttp://www.captain.at/electronic-atmega16-mmc-schematic.png) +  * Ecran LCD 1602 IIC/I2C https://​cleste.ro/​ecran-lcd-1602-iic-i2c.html 
-  * diagrame ​de semnal ​ +  * Modul NFC/RFID PN532 https://​www.optimusdigital.ro/​ro/​wireless-rfid/​3905-modul-rfid-pn532-placa-electronica.html 
-  rezultatele simulării +  * Motor Servo SG90 9g https://​cleste.ro/​motor-servo-sg90-9g.html 
-</note>+  * Tastatură Numerică 4x3 https://​cleste.ro/​tastatura-numerica-43.html 
 +  * Mini Breadboard https://​www.optimusdigital.ro/​ro/​prototipare-breadboard-uri/​244-mini-breadboard-colorat.html 
 +  * Fire Dupont https://​cleste.ro/​10xfire-dupont-mama-tata-20cm.html 
 +  * Baterie 9V https://www.bricodepot.ro/electrice/​lanterne-si-baterii/​imported-product-101228926.html 
 +  * Fir pentru baterie https://​www.optimusdigital.ro/​ro/​fire-fire-mufate/​896-fir-pentru-baterie-de-9v.html 
 + 
 +==== Conexiunea pinilor ==== 
 + 
 +**Modulul NFC/RFID PN532** dispune de interfețe I2C, UART și SPI. Eu am decis să folosesc SPI, pe care l-am selectat prin switch-urile de pe modul, primul pe HIGH, al doilea pe LOW. Acesta se ocupă de plata spălării în funcție de programul selectat prin consumarea creditului acumulat de client pe cardul de fidelitate. Tag-urile folosite sunt de tipul Mifare Classic, care au avantajul securizării datelor stocate prin autentificare. Eu voi folosi cheia de acces default, dar pe viitor se poate folosi o cheie specifică, astfel încât modificările cardurilor de fidelitate să poată fi făcute doar de personalul spălătoriei. 
 + 
 +Conexiunile pinilor pentru modulul NFC/RFID PN532: 
 +  * SCK -- 13 
 +  * MISO -- 12 
 +  * MOSI -- 11 
 +  * SS -- 10 
 +  * VCC -- 5V 
 +  * GND – GND 
 + 
 + 
 +**Motorul servo SG90** este folosit pentru mișcarea periilor rotative. Controlul este realizat cu ajutorul unui semnal de tip PWM. Pinii care pot genera acest tip de semnal de pe o placă de dezvoltare Arduino sunt 3, 5, 7, 9, 10, 11, A0 - A5, dintre care am ales să folosesc pinul 9. 
 + 
 +Conexiunile pinilor pentru motorul servo SG90: 
 +  * VCC -- 5V 
 +  * GND -- GND 
 +  * PWM -- 9 
 + 
 + 
 +**Tastatura membrană** pe care o folosesc are 12 taste conectate în formă matriceală 3x4, ceea ce reduce numărul de pini necesari de la 12 la 7. Primii 4 pini conectează liniile, iar următorii 3 conectează coloanele. Toți trebuie să fie pini digitali pe Arduino, așa că am ales să folosesc pinii de la 2 la 8. Cu ajutorul tastaturii, clienții pot selecta tipul programului de spălare a mașinii dorit. 
 + 
 +Conexiunile pinilor pentru tastatură:​ 
 +  * R1 -- 8 
 +  * R2 -- 7 
 +  * R3 -- 6 
 +  * R4 -- 5 
 +  * C1 -- 4 
 +  * C2 -- 3 
 +  * C3 -- 2 
 + 
 + 
 +**LCD-ul** are un adaptor pentru interfață I2C, care are nevoie doar de două conexiuni, SDA, SCL și conexiunea la masă. Acesta funcționează drept o interfață pentru utilizator: afișează instrucțiuni și oferă informații legate de starea automatului,​ cum ar fi prețul programului ales sau timpul rămas de funcționare. 
 + 
 +Conexiunile pinilor pentru LCD: 
 +  * SDA -- A4 
 +  * SCL -- A5 
 +  * VCC -- 5V 
 +  * GND -- GND 
 + 
 + 
 +==== Schema electrică ==== 
 + 
 +Am realizat simbolurile și footprint-urile componentelor pe care le folosesc în Fusion, după care am adăugat label-uri pentru a evidenția conexiunile dintre ele. 
 + 
 +{{:​pm:​prj2024:​mdinica:​carwashfusioniuliachesches.png?​700}} 
 + 
 +==== Testare individuală ==== 
 + 
 +Inițial, am conectat fizic fiecare componentă individual și am testat funcționalitatea prin câte un mic exemplu. Am făcut motorul servo să se rotească timp de 2 secunde, am afișat textul ‘Hello, World!’ pe ecran, am configurat cele două tag-uri să aibă câte un utilizator și un credit de 200 de puncte și am afișat în Serial Monitor fiecare tastă apăsată a tastaturii ca să mă asigur că liniile și coloanele sunt conectate corespunzător. 
 + 
 +{{:​pm:​prj2024:​mdinica:​carwashdemolcdiuliachesches.jpeg?​600}} 
 + 
 +Mai apoi, le-am aranjat împreună astfel încât fiecare să poată folosi pinii necesari. Am avut nevoie și de un mini breadboard pentru a pune la dispoziție alimentarea de 5V de pe Arduino către toate componentele. 
 + 
 +{{:​pm:​prj2024:​mdinica:​carwashdemoiuliachesches.jpeg?​600}}
  
 ===== Software Design ===== ===== Software Design =====
  
 +==== Mediu de dezvoltare ====
  
-<note tip> +Arduino IDE
-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>​+
  
-===== Rezultate Obţinute =====+==== Librării și surse 3rd-party ​====
  
-<note tip> +  * Keypad.h: Am folosit biblioteca Keypad.h pentru gestionarea intrărilor de la tastatură. Aceasta oferă funcții utile pentru a detecta apăsările butoanelor pe o tastatură matriceală și pentru a interpreta valorile apăsate. 
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru+  * Wire.h: Bibliotecă standard ​în Arduino, folosită pentru a comunica cu dispozitive periferice care utilizează protocolul I2C
-</​note>​+  * LiquidCrystal_I2C.h:​ Aceasta simplifică utilizarea ecranului LCD cu interfață I2C, permițându-mi să comunic cu ușurință cu ecranul fără a fi nevoie să implementez manual protocolul I2C. 
 +  * Adafruit_PN532.h:​ Am folosit această bibliotecă pentru a comunica prin SPI cu modulul PN532. 
 +  * Servo.h: Pentru controlul motorului servo, am ales biblioteca Servo.h, pentru că permite poziționarea acestuia la un anumit unghi cu ușurință și precizie.
  
-===== Concluzii =====+Prin utilizarea acestor biblioteci, m-am folosit de resursele existente pentru a implementa funcționalitățile dorite în proiectul meu, economisind timp și beneficiind de funcționalități deja testate și bine documentate.
  
-===== Download =====+==== Algoritmi și structuri implementate ​====
  
-<note warning>​ +  * Citirea și maparea intrărilor de la keypad pentru selectarea unui program. 
-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 şcopiere automată ​pe uC crează întotdeauna o impresie bună ;-).+  * Afișarea mesajelor pe ecranul LCD. 
 +  * Autentificarea șcitirea datelor de pe un card Mifare Classic. 
 +  * Controlul unui motor servo pentru a simula mișcarea unui mecanism de spălare.
  
-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**. +==== Flow firmware ====
-</​note>​+
  
-===== Jurnal ​=====+Initial, utilizatorul este rugat să apese tasta * pentru a începe interacțiunea cu aparatul. 
 + 
 +Mai apoi, este așteptat să introducă numărul programului,​ urmat de tasta #. Momentan numărul introdus este numărul de secunde al programului și suma ce trebuie plătită, dar acest aspect poate fi customizat în viitor în funcție de fiecare spălătorie în parte. 
 + 
 +Clientul este așteptat să apropie cardul, iar dacă plata este efectuată cu succes, periile rotative încep să se rotească iar LCD-ul afișează numărul de secunde rămase până la finalizarea programului. În același timp, creditul de pe cardul de fidelitate al acestuia scade. 
 + 
 +După finalizarea programului,​ automatul revine la starea inițială de repaus. 
 + 
 +Flow-ul programului poate fi vizualizat și în următoarea diagramă:​ 
 + 
 +{{:​pm:​prj2024:​mdinica:​carwashflowchartiuliachesches.png?​200}} 
 + 
 +==== Optimizări ​==== 
 + 
 +Starea aplicației este gestionată utilizând variabile booleene: choose_program,​ pay, start_wash. La un moment dat de timp, maxim două dintre ele sunt active, ceea ce permite utilizatorului să treacă la următorul pas, dar și să rectifice anumite erori precum selectarea greșită a programului sau folosirea unui card cu fonduri insuficiente. De asemenea, evită busy waiting-ul, adică nu verifică dacă se detectează un card sau o apăsare de keypad decât când este momentul, și evită efectuarea unor acțiuni nedorite, precum selectarea unui alt program când unul este deja în execuție. 
 + 
 +==== Elemente de noutate ==== 
 + 
 +  * **Flexibilitatea și comoditatea utilizării**:​ Spălătoria automată integrată într-un lanț de benzinării oferă utilizatorilor flexibilitate și comoditate, permițându-le să își spele mașinile în orice moment, fără să fie restricționați de programul redus al spălătoriilor convenționale sau să depună efort la spălătoriile self-wash. 
 +  * **Sistem de plată inovator**: Utilizarea unui sistem de plată bazat pe puncte acumulate în urma alimentării autovehiculului,​ gestionate prin intermediul unui card de fidelitate. 
 +  * **Interacțiunea utilizatorului prin intermediul unui display**: Permite utilizatorilor să vadă instrucțiuni și opțiuni și să fie informați în timp real legat de starea programului de spălare. 
 +==== Elemente de laborator ==== 
 + 
 +Proiectul meu încorporează trei elemente principale din laborator: protocolul **SPI** pentru modulul RFID, protocolul **I2C** pentru display și **PWM** pentru servo motor. De asemenea, am folosit **UART** pentru comunicarea serială pentru debug și afișarea mesajelor în consola serială. 
 + 
 +===== Rezultate Obţinute ===== 
 + 
 +[[https://​youtu.be/​RFCjguDeOe4|Demo proiect]] 
 + 
 +{{:​pm:​prj2024:​mdinica:​finalpmautomaticcarwash.jpeg?​500}} 
 + 
 +===== Download ​=====
  
-<note tip> +[[https://​github.com/​cheschesiulia/automatic-car-wash|Github repo]]
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</note>+
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * https://​how2electronics.com/​interfacing-pn532-nfc-rfid-module-with-arduino/​ 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * https://​lastminuteengineers.com/​arduino-keypad-tutorial/#​google_vignette 
-</note>+  ​https://​docs.arduino.cc/​learn/​electronics/​servo-motors/​ 
 +  * https://​www.instructables.com/​How-to-Connect-I2C-Lcd-Display-to-Arduino-Uno/
  
 <​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>​
pm/prj2024/mdinica/iulia.chesches.1714776682.txt.gz · Last modified: 2024/05/04 01:51 by iulia.chesches
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