This shows you the differences between two versions of the page.
|
pm:prj2023:adarmaz:climate-controller [2023/05/05 17:00] rares_stefan.rosu [Descriere generala] |
pm:prj2023:adarmaz:climate-controller [2023/05/30 17:32] (current) rares_stefan.rosu |
||
|---|---|---|---|
| Line 8: | Line 8: | ||
| - Informatia este procesata si se afiseaza pe un ecran LCD temperatura curenta\\ | - Informatia este procesata si se afiseaza pe un ecran LCD temperatura curenta\\ | ||
| - Se stabileste viteza optima de rotire a motorului utilizand alogitmul pid.\\ | - Se stabileste viteza optima de rotire a motorului utilizand alogitmul pid.\\ | ||
| - | - Voi utiliza un drive ce va transmitee comanda catre motor.\\ | + | - Cand se apasa pe buton motorul va porni cu viteza initiala calculata de algoritmul pid.\\ |
| + | - Voi utiliza un timer prin intermediul caruia se va verifica la fiecare minut daca temperatura a ajuns la valoarea dorita.\\ | ||
| - Motorul va incepe sa creasca / sa micosrese viteza (dupa caz) pana cand temeperatura va ajunge la valoarea dorita. | - Motorul va incepe sa creasca / sa micosrese viteza (dupa caz) pana cand temeperatura va ajunge la valoarea dorita. | ||
| - | {{wiki:dokuwiki-schemawiki.png}} | + | {{pm:prj2023:adarmaz:schemaPm3.png?500}} |
| + | ===== Hardware Design ===== | ||
| + | Componentele alese pentru crearea sistemului sunt: | ||
| + | - Arduino UNO | ||
| + | - Ecran LCD 1602 I2C | ||
| + | - Senzor DHT11 de temperatura | ||
| + | - BREADBOARD 400 Puncte | ||
| + | - MOTOR SERVO 360 | ||
| + | - Push Button | ||
| - | <note tip> | + | ===== Schema Tinkercad ===== |
| - | Prezentarea pe scurt a proiectului vostru: | + | |
| - | * ce face | + | |
| - | * care este scopul lui | + | |
| - | * care a fost ideea de la care aţi pornit | + | |
| - | * de ce credeţi că este util pentru alţii şi pentru voi | + | |
| - | </note> | + | |
| - | ===== Descriere generală ===== | + | |
| - | <note tip> | + | {{pm:prj2023:adarmaz:schema_electricapm.png?500}} |
| - | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | + | |
| - | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | + | ===== Software Design ===== |
| - | </note> | + | |
| - | ===== Hardware Design ===== | + | Mediu de dezvoltare: Arduino IDE |
| - | <note tip> | + | **Functionalitatea programului** |
| - | Aici puneţi tot ce ţine de hardware design: | + | |
| - | * listă de piese | + | |
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | |
| - | * diagrame de semnal | + | |
| - | * rezultatele simulării | + | |
| - | </note> | + | |
| - | ===== Software Design ===== | + | **setup()** |
| - | <note tip> | + | In functia setup() se citeste temperatura curenta si se afiseaza pe ecranul LCD. |
| - | Descrierea codului aplicaţiei (firmware): | + | Se configureaza Timer0 pentru a genera intreruperi periodice prin care se va controla viteza motorului |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | In consecinta am setat modul de functionare CTC, am stabilit valoarea de comparare a registrului OCR0A |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | pentru a specifica intervalul intre intreruperi, am activat intreruperea la nivelul de comparare si am setat prescaler-ul. |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | ** controlMotor()** |
| - | </note> | + | |
| + | |||
| + | In functia controlMotor este calculata viteza de rotatie a motorului in functie de eroarea de temperatura si de | ||
| + | constantele PID. | ||
| + | |||
| + | Primul pas consta in a citi temperatura curenta de la senzorul DHT si de a calcula eroarea dintre temperatura tinta si cea curenta. | ||
| + | In continuare, se calculeaza termenii Proportional, Integral și Derivative utilizand valorile pentru eroarea calculata la pasul curent si eroarea calculata la pasul anterior. | ||
| + | Se calculeaza viteza motorului in procente mapand valoarea vitezei calculata utilizand formula algoritmului PID in intervalul (0, 100). | ||
| + | |||
| + | **Utilitatea intreruperilor** | ||
| + | |||
| + | |||
| + | Am utilizat temporizatorul Timer0 care genereaza intreruperi periodice la un interval prestabilit de 1 minut. In cadrul functiei ISR(TIMER0_COMPA_vect), care este executata atunci cand Timer0 genereaza o intrerupere se verifica daca temperatura curenta nu are inca aceeasi valoare cu cea citita de senzor, iar in acest caz se mareste viteza motorului. | ||
| + | |||
| + | De asemenea, detectarea actiunii de apasare a butonului se realizeaza tot prin intermediul unei intreruperi. In cadrul functiei ISR(PCINT2_vect) starea motorului este alternata la fiecare apasare a butonului, iar motorul se opreste sau reporneste dupa caz. | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Line 58: | Line 67: | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | ===== Download ===== | + | Principala dificultate a realizarii proiectului a constat in calculul constantelor pentru implementarea algoritmului PID, intrucat, nu exista formule de calcul a acestora si valorile lor se stabilesc experimental. Cu toate acestea mi-a facut placere sa dezvolt acest proiect si planuiesc ca in viitor sa inlocuiesc motorul de servo folosit cu un motor DC pentru a putea atinge viteze de rotatii de valori mai mari. |
| + | ===== Download ===== | ||
| + | {{pm:prj2023:adarmaz:rosurares.zip}} | ||
| <note warning> | <note warning> | ||
| - | 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**. | 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**. | ||
| Line 69: | Line 80: | ||
| <note tip> | <note tip> | ||
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | - 28 aprilie - achizitionare piese |
| + | - 7 mai - documentatie initiala | ||
| + | - 8 - 15 mai - realizare hardware | ||
| + | - 16 - 27 mai - realizare software | ||
| </note> | </note> | ||
| Line 75: | Line 90: | ||
| <note> | <note> | ||
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | - Laboratorul 2 Intreruperi: [[https://ocw.cs.pub.ro/courses/pm/lab/lab2-2023]] |
| + | - Laboratorul 3 Timere. PWM: [[https://ocw.cs.pub.ro/courses/pm/lab/lab3-2023]] | ||
| + | - Laboratorul 6 I2C: [[https://ocw.cs.pub.ro/courses/pm/lab/lab6-2022]] | ||
| </note> | </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>\\ |
| + | [[https://ocw.cs.pub.ro/courses/pm/prj2023/adarmaz/climate-controller|Link pagina wiki]] | ||