This shows you the differences between two versions of the page.
pm:prj2023:alucaci:alarm-clcok [2023/05/29 23:07] mihaela.sandru [Software Design] |
pm:prj2023:alucaci:alarm-clcok [2023/05/30 03:06] (current) mihaela.sandru [Bibliografie/Resurse] |
||
---|---|---|---|
Line 40: | Line 40: | ||
==== Hardware Journey ==== | ==== Hardware Journey ==== | ||
- | De pe placile cu leduri si shift-registere am scos chip-ul care le controla. Am pus cele 2 surse izolate de 3.3V si 5V si USB-C-urile in capacele cuburilor Frekvens, izoland astfel traseele de putere de cele de semnal. Pe placuta de prototipare am lipit cele 3 placi A-Star ATmega328PB, USBASP-ul si RTC si firele dintre ele si am plasat-o in cutia numarul 1 (stanga). \\ | + | De pe placile cu leduri si shift-registere am scos chip-ul care le controla. Am pus cele 2 surse izolate de 3.3V si 5V si USB-C-urile in capacele cuburilor Frekvens, izoland astfel traseele de putere de cele de semnal. Pe placuta de prototipare am lipit cele 3 placi A-Star ATmega328PB, USBASP-ul, modulul RTC si firele dintre ele si am plasat-o in cutia numarul 1 (stanga). \\ |
{{:pm:prj2023:alucaci:ac_img11.jpg?210|}} | {{:pm:prj2023:alucaci:ac_img11.jpg?210|}} | ||
{{:pm:prj2023:alucaci:ac_img12.jpg?180|}} | {{:pm:prj2023:alucaci:ac_img12.jpg?180|}} | ||
Line 52: | Line 52: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Codul se bazeaza pe un automat de stari, conform diagramei de mai jos | ||
- | <note tip> | + | ==== Flow Chart ==== |
- | Descrierea codului aplicaţiei (firmware): | + | Codul se bazeaza pe un automat de stari, conform diagramei de mai jos. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | Automatul porneste din starea Clock in care afiseaza pe display ora curenta primita de la modulul RTC. La o apasare lunga a butonului Select (de aici inainte vom trata acest eveniment ca buton de Return) se va afisa pe ecran intensitatea luminoasa a ecranului, care poate fi modificata prin butoanele de Up si Down. |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | Prin apasarea butonului Select in starea Clock se ajunge in starea Menu, in care se va afisa pe ecran optiunile pe care le are utilizatorul: setarea a patru alarme, configurarea ceasului si a valorii critice la care sa porneasca umidificatorul (mosfetul), afisarea temperaturii si umiditatii. Modificarea valorilor se face prin intermediul butoanelor Up, Down si Select (acolo unde este cazul). |
- | </note> | + | |
+ | Revenirea dintr-o stare la o stare anterioara se face prin butonul Return (valabil pentru orice stare). | ||
+ | {{ :pm:prj2023:alucaci:ac_flow_chart.png |}} | ||
+ | |||
+ | ==== Code Structure ==== | ||
+ | Codul este impartit in doua mari categorii de fisiere: cele destinate componentei master (master.ino, button.h, settings.h), respectiv cele pentru slave-uri (slave.ino, standard_matrices_draw.h). \\ | ||
+ | === Slave === | ||
+ | In fisierul standard_matrices_draw.h, se gasesc matricile pe care le foloseste slave-ul ca sa deseneze pe display, salvate in PROGMEM (memoria flash). | ||
+ | |||
+ | In fisierul slave.ino este implementata logica pentru componenta slave. Sunt initializate o interfata UART Software (comunicarea cu masterul), o interfata seriala de tip hardware pentru debugging si pinii pentru shiftarea bitilor. Slave-ul asteapta inputuri de la master si pe baza comenzilor primite deseneaza in frame buffer imaginea ceruta si shifteaza bitii la output. Inputurile sunt de forma //<nr_slave><luminosity><command>//, unde //nr_slave// reprezinta numarul slave-ului pentru care este destinat mesajul, iar //luminosity// se foloseste la realizarea PWM-ului pentru reglarea intensitatii led-urilor. | ||
+ | |||
+ | |||
+ | === Master === | ||
+ | Masterul comunica cu slave-urile prin Software UART. | ||
+ | La fiecare trecere prin loop, masterul: | ||
+ | * citeste ceasul de la modulul RTC si trimite comanda la slave o data pe minut, atunci cand e in starea CLOCK; | ||
+ | * verifica starea alarmelor (porneste difuzorul timp de un minut la momentul configurat de alarme); | ||
+ | * verifica umiditatea din aer (daca este peste o valoare critica setata,va porni umidificatorul); | ||
+ | * schimba starea automatului in functie de actiunile butoanelor. | ||
+ | Alarmele, valoarea critica pentru umiditate si luminozitatea sunt salvate persistent in EEPROM. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | **Am pornit de aici!** | ||
+ | {{ :pm:prj2023:alucaci:frekvens_front.jpg?230 |}} | ||
+ | **Am trecut pe aici** 8-) | ||
+ | {{ :pm:prj2023:alucaci:ac_mess.jpg?360 |}} | ||
+ | **Si am ajuns la:** | ||
+ | {{ :pm:prj2023:alucaci:ac_fin_frekvens.jpg?nolink&360 |}} | ||
+ | |||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Acest proiect a fost complex atat din punct de vedere hardware, cat si software. | ||
- | ===== Download ===== | + | Am invatat despre interfatarea software-ului cu hardware-ul, despre stocarea datelor in PROGMEM si EEPROM. |
- | <note warning> | + | Desigur, am intampinat multiple probleme: |
- | 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ă ;-). | + | * de cateva ori, am facut lipituri reci, asa ca s-au desprins din loc; |
+ | * cutiile sunt facute sa fie asamblate/dezasamblate foarte greu; | ||
+ | * declararea unei variabile locale intr-o ramura de case afecteaza functionarea switch-ului (compilatorul presupune ca varful stivei ramane la fel pe tot parcursul switch-ului); | ||
+ | * am avut nevoie de un delay mare de debouncing, deoarece butoanele sunt springy. | ||
- | 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**. | + | ===== Download ===== |
- | </note> | + | {{:pm:prj2023:alucaci:alarm_clock.zip|}} |
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | * 7 aprilie: documentare asupra unei teme de proiect |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 12 aprilie: alegerea temei de proiect |
- | </note> | + | * 18 aprilie: comandarea componentelor de la magazinul Optimus Digital |
+ | * 27 aprilie: realizarea documentatiei initiale (introducere, descriere generala, schema bloc, schema electrica) | ||
+ | * 24 aprilie - 16 mai: realizarea componentei hardware | ||
+ | * 17 mai - 28 mai: realizarea componentei software | ||
+ | * 29 mai: definitivarea documentatiei | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | === Datasheet === |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | Datasheet ATmega328PB: |
- | </note> | + | https://ww1.microchip.com/downloads/en/DeviceDoc/40001906A.pdf \\ |
+ | Datasheet RTC PCF8563: | ||
+ | https://www.nxp.com/docs/en/data-sheet/PCF8563.pdf \\ | ||
+ | Datasheet DHT11 sensor: | ||
+ | https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf \\ | ||
+ | Datasheet SCT2024 shift register: | ||
+ | http://www.starchips.com.tw/pdf/datasheet/SCT2024V01_03.pdf \\ | ||
+ | |||
+ | === Another === | ||
+ | https://reference.arduino.cc/reference/cs/language/functions/analog-io/analogwrite/ \\ | ||
+ | https://reference.arduino.cc/reference/en/language/variables/utilities/progmem/ \\ | ||
+ | https://docs.arduino.cc/learn/built-in-libraries/eeprom | ||
<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> | ||