This shows you the differences between two versions of the page.
pm:prj2024:avaduva:vlad_vasile.ion [2024/05/26 23:23] vlad_vasile.ion [Software Design] |
pm:prj2024:avaduva:vlad_vasile.ion [2024/05/27 00:00] (current) vlad_vasile.ion [Bibliografie/Resurse] |
||
---|---|---|---|
Line 36: | Line 36: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | Pentru programarea plăcii am folosit Arduino IDE, fără biblioteci specifice Arduino. Singurele biblioteci incluse sunt `<avr/io.h>` și `<util/delay.h>`, în rest s-au folosit funcții implementate manual (fiind un proiect orientat pe software). La baza design-ului software stau laboratoarele de I2C, SPI și datasheet-ul pentru senzorul DHT22, practic am încercat să integrez cât mai mult cod similar cu cel din laborator (plăcile fiind aproape identice). Particularități de implementare: | + | Pentru programarea plăcii am folosit Arduino IDE, fără biblioteci specifice Arduino. Singurele biblioteci incluse sunt `<avr/io.h>` și `<util/delay.h>`, în rest s-au folosit funcții implementate manual (fiind un proiect orientat pe software). La baza design-ului software stau laboratoarele de I2C, SPI și datasheet-ul pentru senzorul DHT22, practic am încercat să integrez cât mai mult cod similar cu cel din laborator (plăcile fiind aproape identice). Implementarea ocupa de 2 ori mai putin spatiu decat cea cu biblioteci arduino. Particularități de implementare: |
* **Implementarea comunicației I2C**: | * **Implementarea comunicației I2C**: | ||
Line 50: | Line 50: | ||
* **Citirea datelor de la senzorul DHT22**: | * **Citirea datelor de la senzorul DHT22**: | ||
- | - Citirea datelor de la senzorul DHT22 se face folosind manipulări directe ale pinului de date(D6). Funcția `readDHT` inițializează comunicarea trimițând un semnal de start și apoi citește datele folosind cicluri de asteptare si delay-uri: | + | - Citirea datelor de la senzorul DHT22 se face folosind manipulări directe ale pinului de date(D6). Funcția `readDHT` inițializează comunicarea trimițând un semnal de start și apoi citește datele folosind cicluri de asteptare si delay-uri |
- | + | ||
- | { | + | |
- | + | ||
- | bool readDHT(float &temperature, float &humidity) { | + | |
- | uint8_t data[5] = {0}; | + | |
- | pinMode(DHTPIN, OUTPUT); | + | |
- | digitalWrite(DHTPIN, LOW); | + | |
- | _delay_ms(20); | + | |
- | digitalWrite(DHTPIN, HIGH); | + | |
- | _delay_us(40); | + | |
- | pinMode(DHTPIN, INPUT_PULLUP); | + | |
- | + | ||
- | // Așteptare pentru răspunsul senzorului | + | |
- | if (!waitForSignal(LOW, 80) || !waitForSignal(HIGH, 80) || !waitForSignal(LOW, 80)) { | + | |
- | return false; | + | |
- | } | + | |
- | + | ||
- | // Citire date | + | |
- | for (uint8_t i = 0; i < 5; i++) { | + | |
- | data[i] = readByte(); | + | |
- | } | + | |
- | + | ||
- | // Verificare checksum | + | |
- | if (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) { | + | |
- | humidity = ((data[0] << 8) + data[1]) * 0.1; | + | |
- | temperature = (((data[2] & 0x7F) << 8) + data[3]) * 0.1; | + | |
- | if (data[2] & 0x80) { | + | |
- | temperature = -temperature; | + | |
- | } | + | |
- | return true; | + | |
- | } | + | |
- | return false; | + | |
- | } | + | |
- | + | ||
- | } | + | |
- | + | ||
- Pasii functiei sunt luati din datasheet-ul DHT22 | - Pasii functiei sunt luati din datasheet-ul DHT22 | ||
Line 101: | Line 65: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{:pm:prj2024:avaduva:poza_proiect_ivv.jpeg?500|}} |
</note> | </note> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Avand in vedere implementarea low-level si functionalitatea robusta, pot afirma ca proiectul isi atinge toate obiectivele propuse. Natura constructiei si codul compact poate reduce costurile semnificativ, intrucat placuta nu este folosita la capacitate maxima. | ||
===== Download ===== | ===== Download ===== | ||
<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ă ;-). | + | {{:pm:prj2024:avaduva:proiect_ivv.zip|}} |
- | + | ||
- | 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**. | + | |
</note> | </note> | ||
- | ===== Jurnal ===== | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | https://ocw.cs.pub.ro/courses/pm/lab/lab5-2023-2024 |
+ | https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf | ||
+ | https://ww1.microchip.com/downloads/en/DeviceDoc/40001906A.pdf | ||
+ | https://www.nxp.com/docs/en/user-guide/UM10204.pdf | ||
+ | https://github.com/johnrickman/LiquidCrystal_I2C/blob/master/LiquidCrystal_I2C.cpp | ||
</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> | ||