Differences

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

Link to this comparison view

pm:prj2026:atoader:aureliu.antonie [2026/05/20 23:32]
aureliu.antonie [Software Design]
pm:prj2026:atoader:aureliu.antonie [2026/05/22 23:33] (current)
aureliu.antonie [Jurnal]
Line 34: Line 34:
 Laboratoare folosite: Laboratoare folosite:
  
-Intreruperi ​(butoanele care: pornesc aparatul, ​schimba ​modul de afisaj ​etc.)+Întreruperi ​(butoanele care: pornesc aparatul, ​schimbă ​modul de afișaj ​etc.)
  
-- PWM (intensitatea LED-urilor de progres ​creste ​treptat)+- PWM (intensitatea LED-urilor de progres ​crește ​treptat)
  
-- I2C (Afisajul ​LCD si modulul RTC)+- I2C (Afișajul ​LCD și modulul RTC
 + 
 +- UART (Pentru calibrarea senzorului de greutate)
  
 Module externe: ​ Module externe: ​
Line 44: Line 46:
 -  Timere (RTC)  -  Timere (RTC) 
  
--  ADC (modulul HX711, care transforma ​semnalul analogic primit de la senzor ​intr-unul digital)+-  ADC (modulul HX711, care transformă ​semnalul analogic primit de la senzor ​într-unul digital)
 ===== Hardware Design ===== ===== Hardware Design =====
  
Line 106: Line 108:
  
 ===== Software Design ===== ===== Software Design =====
-Am terminat partea de software design, integrând toate funcționalitățile menționate mai sus.  
-In alta ordine de idei, ca mediu de dezvoltare am folosit VS Code cu extensia ​ Platformio, asa cum am fost incurajati la laborator. ​ 
  
-<note tip> +Am terminat partea ​de software designintegrând toate funcționalitățile menționate mai sus.
-Descrierea codului aplicaţiei (firmware):​ +
-  * mediu de dezvoltare (if any) (e.g. AVR StudioCodeVisionAVR) DONE +
-  * 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>​+
  
 +Am folosit bibliotecile:​
 +
 +- HX711 pentru a putea conecta senzorul de greutate la breadboard, cât și pentru a putea interpreta datele primite
 +
 +- LiquidCrystal_I2C pentru a afișa diferite mesaje pe ecranul LCD
 +
 +- RTClib pentru a putea realiza statisticile menționate,​ spre exemplu câtă apă am băut în ziua respectivă
 +
 +- SoftPWM pentru a varia intensitatea ledurilor
 +
 +- EEPROM pentru a putea salva statisticile chiar și dacă dozatorul nu mai este alimentat
 +
 +- Wire pentru comunicarea I2C
 +
 +Elementele de noutate ale proiectului sunt reprezentate de funcționalitățile diverse:
 +
 +- utilizatorul poate seta la început volumul sticlei folosite (de la 50 ml la 1000 ml, increment de 50 ml)
 +
 +- după ce se așază sticla cu apa inițială, senzorul detectează exact masa, luând în calcul masa sticlei goale
 +
 +- la pornirea dozatorului,​ progresul este afișat atât pe baza LED-urilor (acestea se aprind alternativ, variind intensitatea pe baza volumului rămas), cât și prin intermediul ecranului LCD (afișează volumul rămas)
 +
 +- există mai multe moduri de afișaj (volumul rămas sau cantitatea de apă consumată în ziua respectivă,​ acest lucru fiind foarte important în nutriție)
 +
 +- dozatorul se poate pune pe pauză în orice moment, respectiv se poate relua activitatea rămasă
 +
 +- după ce sticla se umple, se poate pune o nouă sticlă, fără a fi necesară repornirea aparatului
 +
 +Codul propriu-zis se bazează pe un automat de stări circular, astfel:
 +
 +- starea 0 (selecția) - se citește starea butoanelor. În această etapă, butoanele sunt utilizate pentru selectarea volumului sticlei
 +
 +- starea 1 (așteptare) - se așteaptă punerea sticlei pe cântar și calcularea masei
 +
 +- starea 2 (umplere) - microcontrolerul acționează releul, pornind pompa
 +
 +- starea 3 (pauză) - pompa este oprită, iar totul (LCD, releul etc.) este pus pe pauză, în standby
 +
 +- starea 4 (finalizarea) - pompa s-a oprit, se salvează statisticile în EEPROM și se așteaptă ca sticla să fie ridicată. După ce se ridică sticla, se pornește din nou din starea 0
 +
 +Senzorul de greutate a fost calibrat pe baza unui cod software. Acesta poate fi vizualizat pe [[https://​github.com/​AntonieValentin/​Dozator-de-apa-inteligent/​commit/​44f2458279bb0449c95a98473be8f0663289ac63|git]]. Am pus pe cântar o sticlă cu masă cunoscută (250 ml), iar apoi am reglat, prin UART, factorul de calibrare din software.
 +
 +Optimizări:​
 +
 +- întreruperi externe (ca să nu facem polling) - proiectul este destul de complex. Fără întreruperi nu puteam detecta simultan și masa sticlei, și starea butonului etc.
 +
 +- debouncing (software) - pentru a se înregistra o singură apăsare
 +
 +- variabile volatile - pentru a nu fi optimizat accesul de către compilator
 +
 +- timere în loc de delay - pentru a nu bloca execuția inutil
 +
 +- accesul EEPROM - modificăm cantitatea de apă băută numai după ce sticla s-a umplut complet, pentru a proteja memoria sensibilă EEPROM
 +
 +Ca mediu de dezvoltare am folosit VS Code cu extensia PlatformIO, framework Arduino.
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-[[https://​www.youtube.com/​shorts/​JMbjXX_uIwk|Demonstrație Video]]+[[https://​www.youtube.com/​shorts/​JMbjXX_uIwk|Demonstrație Video Prima Versiune]] 
 + 
 +[[https://​youtube.com/​shorts/​HjKurvxfl2s|Demonstrație Video A Doua Versiune]]
  
 [[https://​github.com/​AntonieValentin/​Dozator-de-ap-inteligent|Link github]] [[https://​github.com/​AntonieValentin/​Dozator-de-ap-inteligent|Link github]]
Line 133: Line 184:
  
 ===== Jurnal ===== ===== Jurnal =====
-Am terminat ​montajul hardware, iar partea de software este aproape finalizată.+Am terminat ​proiectul
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
Line 158: Line 209:
  
 [[https://​www.ti.com/​lit/​ds/​symlink/​lm2596.pdf|Modul DC-DC Step Down LM2596]] [[https://​www.ti.com/​lit/​ds/​symlink/​lm2596.pdf|Modul DC-DC Step Down LM2596]]
 +
 +**Resurse Software**
 +
 +[[https://​docs.platformio.org/​en/​latest/​|PlatformIO Documentație]]
 +
 +[[https://​github.com/​bogde/​HX711|HX711]]
 +
 +[[https://​github.com/​johnrickman/​LiquidCrystal_I2C|LiquidCrystal_I2C]]
 +
 +[[https://​github.com/​adafruit/​RTClib|RTClib]]
 +
 +[[https://​github.com/​bhagman/​SoftPWM|SoftPWM]]
 +
 +[[https://​docs.arduino.cc/​learn/​built-in-libraries/​eeprom/​|EEPROM]]
 +
 +[[https://​docs.arduino.cc/​language-reference/​en/​functions/​communication/​wire/​|Wire]]
 +
  
 <​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/prj2026/atoader/aureliu.antonie.1779309126.txt.gz · Last modified: 2026/05/20 23:32 by aureliu.antonie
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