This shows you the differences between two versions of the page.
|
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> | ||