Differences

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

Link to this comparison view

pm:prj2026:atoader:aureliu.antonie [2026/05/16 19:36]
aureliu.antonie [Bibliografie/Resurse]
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 71: Line 73:
 | Modul DC-DC Step Down | LM2596 | 1 | | Modul DC-DC Step Down | LM2596 | 1 |
 | Mufă alimentare panou DC mamă | 5.5mm x 2.1mm 3 pini | 1 | | Mufă alimentare panou DC mamă | 5.5mm x 2.1mm 3 pini | 1 |
 +
 +==== Pini folosiți ====
 +
 +^ Componentă ^ Pin componentă ^ Pin ATmega328P (Arduino) ^ Explicație ^
 +| Sursă 12V | V+ (Plus) | - | Tensiunea de 12V merge la intrarea IN+ a convertorului Step-Down și la (+) pompei |
 +| Sursă 12V | V- (Minus) | - | Se conectează la IN- (convertor) și la borna COM a releului|
 +| Convertor Step-Down LM2596 | OUT+ | 5V | Furnizează 5V către magistrala breadboard-ului și pinul 5V al plăcii|
 +| Convertor Step-Down LM2596 | OUT- | GND | Conectat la magistrala de masă (GND) a breadboard-ului |
 +| Pompă de apă 12V | Minus (-) | - | Conectat la borna NO a releului |
 +| Modul Releu 5V | VCC (DC+) | 5V | Alimentarea părții logice a releului cu 5V |
 +| Modul Releu 5V | GND (DC-) | GND | Masă comună |
 +| Modul Releu 5V | S | PC1 | Pin configurat ca OUTPUT digital pentru a da comanda de închidere a circuitului |
 +| Senzor Greutate 1kg | Fir Roșu | - | Se conectează la borna E+ (Excitation Plus) a modulului HX711 pentru alimentarea cu curent de referință |
 +| Senzor Greutate 1kg | Fir Negru | - | Se conectează la borna E- (Excitation Minus) a modulului HX711, reprezentând masa senzorului |
 +| Senzor Greutate 1kg | Fir Alb | - | Se conectează la borna A- (Analog Minus) a modulului HX711. Este primul fir de semnal care citește variația de tensiune |
 +| Senzor Greutate 1kg | Fir Verde | - | Se conectează la borna A+ (Analog Plus) a modulului HX711. Al doilea fir de semnal - împreună cu cel alb creează diferența de potențial amplificată de modul |
 +| HX711 (Senzor Greutate) | VCC | 5V | Modulul este alimentat la 5V de la magistrala breadboard-ului |
 +| HX711 (Senzor Greutate) | GND | GND | Toate componentele trebuie să aibă masă comună |
 +| HX711 (Senzor Greutate) | DT / DAT | PC2 | Pin analogic folosit ca I/O digital pentru citirea datelor |
 +| HX711 (Senzor Greutate) | SCK / CLK | PC3 | Pin analogic folosit ca I/O digital pentru semnalul de clock |
 +| LCD 16x2 I2C | VCC | 5V | Display-ul este alimentat la 5V |
 +| LCD 16x2 I2C | GND | GND | Masă comună |
 +| LCD 16x2 I2C | SDA | PC4 | Pinul hardware standard dedicat pentru date I2C |
 +| LCD 16x2 I2C | SCL | PC5 | Pinul hardware standard dedicat pentru clock I2C |
 +| RTC DS3231 | VCC | 5V | Modulul ceasului este alimentat la 5V |
 +| RTC DS3231 | GND | GND | Masă comună |
 +| RTC DS3231 | SDA | PC4 | Conectat în paralel pe magistrala I2C cu LCD-ul |
 +| RTC DS3231 | SCL | PC5 | Conectat în paralel pe magistrala I2C cu LCD-ul |
 +| Buton 1 (Start/​Pauză) | Semnal | PD2 | Pin dedicat pentru întreruperi hardware (INT0). Configurat cu INPUT_PULLUP |
 +| Buton 2 (Schimbare Afișaj) | Semnal | PD3  | Pin dedicat pentru întreruperi hardware (INT1). Configurat cu INPUT_PULLUP |
 +| Bară 10 LED-uri | Anozi (+) | PD0, PD1, PD4-PD7, PB0-PB3 | Pini digitali folosiți pentru controlul progresului |
 +| Bară 10 LED-uri | Catozi (-) | GND | Masă comună, prin intermediul rezistențelor |
 {{:​pm:​prj2026:​atoader:​circuit_image_aureliu_valentin_antonie.png?​750|}} {{:​pm:​prj2026:​atoader:​circuit_image_aureliu_valentin_antonie.png?​750|}}
-<note tip> 
-Aici puneţi tot ce ţine de hardware design: 
-  * listă de piese DONE 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) DONE 
-  * diagrame de semnal ​ 
-  * rezultatele simulării 
-</​note>​ 
  
 ===== Software Design ===== ===== Software Design =====
  
 +Am terminat partea de software design, integrând toate funcționalitățile menționate mai sus.
  
-<note tip> +Am folosit bibliotecile:
-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>​+
  
 +- 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]]
 ===== Concluzii ===== ===== Concluzii =====
  
Line 105: Line 184:
  
 ===== Jurnal ===== ===== Jurnal =====
-Am terminat ​montajul hardware, iar partea de software este aproape finalizată.+Am terminat ​proiectul
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
Line 130: 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.1778949368.txt.gz · Last modified: 2026/05/16 19:36 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