This is an old revision of the document!
Proiectul va realiza diminuarea problemelor dintr-o încăpere atunci când este prezent un incendiu. Acesta va semnala pe un display faptul că un incendiu are loc și pe un card SD va salva toate log-urile relevante pentru evenimentele anterioare(timestamp, temperatură, etc.). De asemenea, printr-un difuzor va avea si un efect de alarmă.
Scopul lui este de a preveni incendiile într-o încăpere.
Am pornit de la ideea de alarmă de incendiu simplu. Elementele de log-uri și de afișare pe un display au venit ulterior pentru a ține evidența evenimentelor.
La acțiunea unui stimul extern pentru senzorul de temperatură se va transmite un semnal către microcontroller. Apoi, software-ul de pe microcontroller va putea transmite către celelalte componente semnale.
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:
<note tip>
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] == 1) {
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;
}
</note>
- Pasii functiei sunt luati din datasheet-ul DHT22
* Controlul buzzerului:
- Controlul buzzerului se face folosind funcțiile `tone()` și `noTone()` pentru a emite sunete de avertizare atunci când temperatura depășește un anumit prag.
* Afișarea datelor pe ecranul LCD:
- Am implementat funcții pentru inițializare, curățare, setare cursor și scriere text pe LCD utilizând protocolul I2C. Inițializarea LCD-ului implică trimiterea unor comenzi de configurare prin magistrala I2C.
* Utilizarea comunicației seriale:
- Pentru debugging și monitorizarea datelor în timpul execuției programului, am folosit funcțiile `Serial.print()` și `Serial.println()`.
===== Rezultate Obţinute =====
<note tip>
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
</note>
===== Concluzii =====
===== Download =====
<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.
</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 =====
<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>