This shows you the differences between two versions of the page.
pm:prj2025:avaduva:denis.vladulescu [2025/05/01 11:43] denis.vladulescu |
pm:prj2025:avaduva:denis.vladulescu [2025/05/19 15:44] (current) denis.vladulescu |
||
---|---|---|---|
Line 2: | Line 2: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | <note tip> | ||
Prezentarea pe scurt a proiectului: | Prezentarea pe scurt a proiectului: | ||
Line 8: | Line 7: | ||
Atunci când se apasă un buton, se va face comutarea de la valoarea curentă a precipitațiilor la valorile salvate în memorie. | Atunci când se apasă un buton, se va face comutarea de la valoarea curentă a precipitațiilor la valorile salvate în memorie. | ||
- | </note> | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | <note tip> | ||
Schema bloc a proiectului: | Schema bloc a proiectului: | ||
- | {{:pm:prj2025:avaduva:schema_bloc_denis.vladulescu.png?200|}} | + | {{:pm:prj2025:avaduva:schema_bloc_proiect_denis.vladulescu.png?400|}} |
- | Sistemul, la pornirea inițială, va afișa cantitatea de precipitații indicată de senzor la momentul curent de timp. La apăsarea unui buton(B1), se va comuta la afișarea cantităților stocate în memorie împreună cu ziua și ora acelei înregistrări. Se poate naviga prin înregistrări cu două butoane(înainte(B2) și înapoi(B3)). Când se dorește revenirea la valorile curent citite, se apasă, din nou, pe butonul (B1). | + | Sistemul, la pornirea inițială, va afișa cantitatea de precipitații indicată de senzor la momentul curent de timp. |
- | </note> | + | |
+ | La apăsarea unui buton(B1), se va comuta la afișarea cantităților stocate în memorie împreună cu ziua și ora acelei înregistrări. Se poate naviga prin înregistrări cu două butoane(înainte(B2) și înapoi(B3)). | ||
+ | |||
+ | Când se dorește revenirea la valorile curent citite, se apasă, din nou, pe butonul (B1). | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | <note tip> | + | Lista de componente pe care le voi utiliza: |
- | Aici puneţi tot ce ţine de hardware design: | + | * 1 x [[https://www.emag.ro/placa-de-dezvoltare-compatibila-uno-r3-ch340-00005372-380493805/pd/D60C5JBBM/|Placa de dezvoltare compatibila ARDUINO UNO R3]] |
- | * listă de piese | + | * 1 x [[https://www.emag.ro/ecran-lcd-1602-iic-i2c-verde-ai849/pd/D9WQLTMBM/|Ecran LCD I2C]] |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | * 1 x [[https://www.emag.ro/placa-de-stocare-micro-sd-tf-card-reader-shield-compatibil-spi-arduino-ai081-s81/pd/DRM568BBM/|Placa de stocare MicroSD]] |
- | * diagrame de semnal | + | * 1 x [[https://www.emag.ro/modul-rtc-ds1302-tri188/pd/DVKF9VBBM/|Modul RTC DS1302]] |
- | * rezultatele simulării | + | * 3 x [[https://sigmanortec.ro/buton-mini-6x6x5-4-pini|Buton Mini în 4 pini]] |
- | </note> | + | * 1 x [[https://sigmanortec.ro/Modul-senzor-ploaie-p126182467|Modul senzor ploaie]] |
+ | * 1 x [[https://sigmanortec.ro/Breadboard-830-puncte-MB-102-p125923983|Breadboard 830 puncte]] | ||
+ | * 1 x [[https://sigmanortec.ro/Buzzer-pasiv-5v-p172425809|Buzzer Pasiv 5V]] | ||
+ | |||
+ | Schema electrică: | ||
+ | |||
+ | {{:pm:prj2025:avaduva:schema_electrica_sistem_precipitatii.png?600|}} | ||
+ | |||
+ | Pinii folosiți în realizarea cablajului sunt următorii: | ||
+ | * Pentru ecranul LCD, folosind protocolul I2C, legat pinul SDA al ecranului la pinul A4 al plăcuței și pinul SCL al ecranului la pinul A5 al plăcuței, fiind pinii standard pentru acest tip de comunicare. | ||
+ | * Pentru modulul RTC DS1032, pinul de CLK la pinul digital 6 al plăcii, pinul de DAT la pinul digital 7 al plăcii și pinul RST la pinul digital 2 al plăcuței. | ||
+ | * Pentru senzorul de ploaie, m-am folosit de pinul analogic al acestuia, A0, pe care l-am legat la pinul A0 al plăcuței. | ||
+ | * Pentru cititorul de card MicroSD, am folosit legarea standard pentru comunicarea peste SPI și anume pinul MOSI la pinul digital 11 al plăcuței, pinul MISO la pinul digital 12 al plăcuței, pinul SCK la pinul digital 13 al plăcuței și pinul pentru CS la pinul digital 10 al plăcuței. | ||
+ | * Buzzer-ul a fost conectat la masă și la pinul digital 9 al plăcuței. | ||
+ | * Cele 3 butoane le-am conectat la masă și la pinii digitali 3, 4 și, respectiv, 5 ai plăcuței. | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Pentru realizarea componentei software am folosit mediul de dezvoltare Arduino IDE. | ||
- | <note tip> | + | Bibliotecile terțe utilizate sunt: |
- | Descrierea codului aplicaţiei (firmware): | + | * ''virtuabotixRTC.h'' pentru setarea și preluarea informațiilor de la modulul RTC DS1302. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * ''pitches.h'' pentru o serie de note folosite în sunetul redat pe Buzzer. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | Execuția codului este una destul de clară care urmează pașii: |
- | * (etapa 3) surse şi funcţii implementate | + | * Se declară două variable, ''virtualbotixRTC myRTC(6, 7, 2)'' și ''LiquidCrystal_I2C lcd(0x27, 16, 2)'' de care va depinde interacțiunea cu modulul RTC și cu ecranul lcd. |
- | </note> | + | * Se declară variable ajutătoare, printre care variable care rețin data și ora de stocat pe cardul SD la un moment dat, tipul de precipitații detectate la un moment de timp("Dry", "Droplets", "Light Rain", "Moderate Rain", "Heavy Rain" sau "Extreme Rain") sau cele două șiruri care rețin notele muzicale respectiv durata acestora. |
+ | * Se inițializează interfața Serială, se setează pinii pentru Chip Select(card SD), B1, B2, B3, buzzer și, respectiv, senzorul de ploaie, se inițializează ecranul, cardul SD și fișierul de stocare al informațiilor. | ||
+ | * În funcția ''loop'' se verifică dacă ar trebui să înceapă melodia(dacă ultimul status a fost "Heavy Rain" sau "Extreme Rain"), respectiv dacă ar trebui sp continue melodia. La apăsarea butonului ''B1'', se comută din modul ''Timp Real(Live Feed)'' în modul ''Memorie(Memory)'' sau invers și se setează variabilele necesare fiecărui mod. La comutare între moduri se va afișa, pentru o secundă "Read From Memory"(comutare mod Timp Real -> Memorie) sau "Live Feed"(comutare mod Memorie -> Timp Real). | ||
+ | * Pentru afișarea datelor, în funcție de modul curent se vor afișa fie informații în timp real după structura ''DD/MM HH:MM RAIN_STATUS'' în cazul modului ''Timp Real'', fie se vor afișa informații salvate în memorie prin care se poate naviga folosind butonul ''B2'' pentru a merge înainte și butonul ''B3'' pentru a merge înapoi în cazul modului ''Memorie''. | ||
+ | * Navigarea în memoria cardului SD(''void readAndDisplayData()'') se face folosind poziția de fișier. Această parte este ușurată datorită formatului ușor de parsat în care stochez informația("DD/MM HH:MM,RAIN_QTY RAIN_STATUS,"). | ||
+ | * Pentru determinarea stării precipitațiilor(''char *getRainCategory(int intesity)''), preiau informația de la senzorul de ploaie pe portul analog ''A0'' și o mapez, pe rând, în intervale de intensitate. | ||
+ | * La fiecare pornire a sistemului, informațiile anterior stocate se șterg. | ||
+ | * Noțiunile folosite din laboratoare sunt comunicarea prin protocolul ''I2C'' pentru interacțiunea cu ecranul lcd; comunicarea prin protocolul ''SPI'' pentru interacțiunea cu cardul micro SD; ''GPIO'' pentru iteracțiunea cu butoanele; ''PWM'' pentru a genera sunet din Buzzer; ''ADC'' pentru a converti informația analogică de la senzorul de ploaie. | ||
+ | * Calibrarea senzorilor am realizat-o pe măsură ce am realizat testarea acestora pentru a obține valorile așteptate(calibrarea a fost necesară doar pentru senzorul de ploaie pentru a fi mai puțin sensibil la apă). | ||
+ | |||
+ | Surse folosite: | ||
+ | * [[https://www.bitmi.ro/modul-rtc-ds1302-compatibil-arduino-10437.html?gad_source=1&gad_campaignid=21312430054&gbraid=0AAAAADLag-kVgFk3-DmzUAq-sV4AYO9UR&gclid=CjwKCAjwravBBhBjEiwAIr30VFuFmr1C3qm5C32U0WrdvwGFpu6Q3FgXUn7Peoksramjf-634d5WjxoCIqEQAvD_BwE|Bibliotecă și exemple modul DS1302]] | ||
+ | * [[https://www.youtube.com/watch?v=rUPZ8T9Kvqo|Conectare modul card SD și utilizare]] | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Stadiul proiectului după conectarea tuturor componentelor și calibrarea senzorului de ploaie: |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | {{:pm:prj2025:avaduva:sistem_precipitatii1.jpeg?600|}} |
+ | |||
+ | {{:pm:prj2025:avaduva:sistem_precipitatii2.jpeg?600|}} | ||
+ | |||
+ | Stadiul proiectului după finalizarea componentei software și pregătirea acestuia în cutia specială: | ||
+ | |||
+ | {{:pm:prj2025:avaduva:sistem_precipitatii_final2.jpeg?600|}} | ||
+ | |||
+ | {{:pm:prj2025:avaduva:sistem_precipitatii_final1.jpeg?600|}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Acest proiect a fost unul interesant de realizat, în principal datorită faptului că a trebuit să realizăm singuri totul(de la alegerea pieselor și conectarea acestora la alegerea bibliotecilor corespunzătoare și proiectarea software) care trece pe oricine prin toate etapele(și toate stările de agonie și, respectiv extaz). |
- | <note warning> | + | Problemele majore întâmpinate au fost la utilizarea excesivă a memoriei dinamice a plăcuței ceea ce ducea la coruperea datelor scrise pe cardul micro SD, în primă instanță, iar mai apoi la imposibilitatea comunicării cu acesta și chiar distorsionarea informațiilor afișate pe display. |
- | 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ă ;-). | + | |
- | 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**. | + | Validarea funcționării conforme a proiectului am realizat-o pe bază experimentală până când am atins rezultatul dorit: un proiect stabil cu un comportament determinist. [[https://youtu.be/P5SfYheTg-I|Link Demo]] |
- | </note> | + | |
+ | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2025:avaduva:sistem_pentru_detectia_si_monitorizarea_precipitatiilor.zip|Link download cod sursă}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | 07.05.2025 - Am plasat comanda pentru piese. |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | 08.05.2025/09.05.2025 - Au ajuns piesele. |
+ | |||
+ | 09.05.2025 - Am comandat câteva fire în plus și unele de dimensiuni mai mari. | ||
+ | |||
+ | 10.05.2025/14.05.2025 - Au ajuns restul de piese. | ||
+ | |||
+ | 13.05.2025 - Primă conectare a pieselor, doar alimentare la curent. | ||
+ | |||
+ | 16.05.2025 - Montaj complet piese | ||
+ | |||
+ | 17.05.2025 - Testare funcționalități piese și începere implementare software. | ||
+ | |||
+ | 19.05.2025 - Finalizare implementare software și realizare cutie de depozitare. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
- | </note> | ||
<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> | ||