This shows you the differences between two versions of the page.
pm:prj2024:mdinica:iulia.chesches [2024/05/13 23:02] iulia.chesches [Testare individuală] |
pm:prj2024:mdinica:iulia.chesches [2024/05/27 13:51] (current) iulia.chesches [Rezultate Obţinute] |
||
---|---|---|---|
Line 51: | Line 51: | ||
- | **Motorul servo SG90** este folosit pentru mișcarea perilor 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. | + | **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: | Conexiunile pinilor pentru motorul servo SG90: | ||
Line 98: | Line 98: | ||
===== 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 şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | * Afișarea mesajelor pe ecranul LCD. |
+ | * Autentificarea și 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> |