DHT11 ja DHT22 – temperatuuri- ja niiskusandurid Arduino jaoks
🔹 Peamine:
Tüübid: DHT11 (eelarve), DHT22 (täpsem, laiem vahemik)
Funktsioonid:
Temperatuuri mõõtmine (°C)
Niiskuse mõõtmine (% RH)
Andmeedastus: digitaalsignaal ühe viigu kaudu
Vajalikud raamatukogud (Arduino IDE-s):
DHT sensor library by Adafruit
Adafruit Unified Sensor (paigaldatakse automaatselt sõltuvusena).
Paigaldamine:
Sketch > Include Library > Manage Libraries > otsi “DHT sensor library”.
📏 Spetsifikatsioonid:
DHT11
Temperatuur: 0-50 °C (±2 °C)
Niiskus: 20-90% (±5%)
Aeglasem, odavam
DHT22
Temperatuur: -40…+80 °C (±0,5 °C)
Niiskus: 0-100% (±2-5%)
Täpsem, kallim
Code
include // Ühenda raamatukogu DHT11/DHT22-ga töötamiseks.
define DHTPIN 2 // Pin, millele ühendatakse anduri signaal.
define DHTTYPE DHT11 // Anduri tüübi määramine: DHT11 või DHT22
DHT dht(DHTPIN, DHTTYPE); // Loo dht objekt, millel on määratud pin ja tüüp.
void setup() {
Serial.begin(9600); // Andmete väljastamise jadapordi käivitamine
dht.begin(); // Anduri initsialiseerimine
}
void loop() {
float temp = dht.readTemperature(); // Loe temperatuuri (°C)
float hum = dht.readHumidity(); // Loe niiskust (% RH)
if (isnan(temp) || isnan(hum)) { // Kontrolli: kui lugemine ebaõnnestub
Serial.println(“Lugemisviga!”); // Teatada veast
return; // Praeguse iteratsiooni katkestamine
}
// Andmete väljastamine portmonitorile
Serial.print(“Temperatuur: “);
Serial.print(temp);
Serial.print(” °C | Niiskus: “);
Serial.print(hum);
Serial.println(” %”);
delay(2000); // Ootame 2 sekundit enne järgmist mõõtmist
}

🧩 Eesmärk
Projekt mängib lihtsat meloodiat, kasutades funktsiooni tone() ja piezo-summerit, mis on ühendatud Arduino plaadi pinniga 9.
🔢 Muutujate deklareerimine
buzzerPin: pin, millega summer on ühendatud.songLength: nootide ja pauside koguarv.notes[]: string, mis sisaldab nootide järjestust; tühik tähistab pausi.beats[]: iga noodi kestus (tingühikutes).tempo: tempo, mis määrab ühe takti kestuse. Mida väiksem väärtus, seda kiirem meloodia.
🧱 Funktsioon setup()
Seab summeri pinni väljundiks (OUTPUT).
🔁 Funktsioon loop()
- Tsüklis mängitakse läbi kõik 18 märki massiivist
notes[]. - Kui märk on
' '(tühik), tehakse paus (delay(duration)). - Kui tegemist on noodiga, käivitatakse funktsioon
tone(), mis mängib ette vastava sagedusega heli ja kestuse. - Iga noodi järel on lühike paus.
🎵 Funktsioon frequency(char note)
Selgitus:
- Võtab noodi tähise ja tagastab sellele vastava sageduse herztides (Hz).
- Kasutatakse funktsioonis
tone(buzzerPin, frequency(...), duration)heli genereerimiseks.
📊 Nootide tabel
| Noot | Sagedus (Hz) |
|---|---|
| c | 262 Hz |
| d | 294 Hz |
| e | 330 Hz |
| f | 349 Hz |
| g | 392 Hz |
| a | 440 Hz |
| b | 494 Hz |
| C | 523 Hz |
🧾 Kokkuvõte
Kood mängib lihtsat meloodiat, järgides eelnevalt määratud nootide ja kestuste järjestust. Peamised funktsioonid:
tone()— heli mängimine.delay()— kestuse kontrollimine.frequency()— noodi tähise teisendamine sageduseks.
Ülesanne 6 Buzzeri kasutamine “Väike Alarm Süsteem”

#include <LiquidCrystal.h>
const int potPin = A3;
const int tempPin = A4;
const int ldrPin = A5;
const int lcdRs = 11;
const int lcdEn = 12;
const int lcdD4 = 4;
const int lcdD5 = 5;
const int lcdD6 = 6;
const int lcdD7 = 7;
const int musicPin = 3;
const int alarmPin = 3;
const int switchThreshold = 512; // pot > mid → system ON
const float tempThreshold = 23.0; // °C
const int lightThreshold = 200; // ADC units
const int songLength = 18;
char notes[songLength + 1] = "cdfda ag cdfdg gf ";
int beats[songLength] = {
1,1,1,1,1,1,4,4,2,1,1,1,1,1,1,4,4,2
};
int tempo = 150; // madalam → kiirem
LiquidCrystal lcd(lcdRs, lcdEn, lcdD4, lcdD5, lcdD6, lcdD7);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(musicPin, OUTPUT);
pinMode(alarmPin, OUTPUT);
}
void loop() {
// Lüliti/potentsiomeetri lugemine
int controlVal = analogRead(potPin);
bool systemOn = controlVal > switchThreshold;
if (!systemOn) {
// Süsteem OFF
noTone(musicPin);
noTone(alarmPin);
lcd.clear();
delay(500);
return;
}
// TMP36 teisendus: V = raw*(5.0/1023); Temp = (V - 0.5)*100
int rawTemp = analogRead(tempPin);
float voltage = rawTemp * (5.0 / 1023.0);
float tempC = (voltage - 0.5) * 100.0;
// Fototakisti lugemine
int lightVal = analogRead(ldrPin);
Serial.print(tempC, 1);
Serial.print(", ");
Serial.println(lightVal);
if (lightVal < lightThreshold) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tuvastatud ");
lcd.setCursor(0, 1);
lcd.print("pimedus ");
}
else if (tempC > tempThreshold) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp liiga ");
lcd.setCursor(0, 1);
lcd.print("korge! ");
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Light: ");
lcd.print(lightVal);
}
// Alarmitingimus
if (tempC > tempThreshold || lightVal > lightThreshold) {
noTone(musicPin);
tone(alarmPin, 1000); // alarm heli
} else {
noTone(alarmPin);
tone(musicPin, 440); // taustatoon
}
if (lightVal < lightThreshold) {
noTone(musicPin);
noTone(alarmPin);
} else if (tempC > tempThreshold) {
noTone(musicPin);
playAlarmMelody();
} else {
noTone(alarmPin);
playMelody();
}
delay(500);
}
void playMelody() {
for (int i = 0; i < songLength; i++) {
int duration = beats[i] * tempo;
if (notes[i] == ' ') {
delay(duration);
} else {
tone(musicPin, frequency(notes[i]), duration);
delay(duration);
}
delay(tempo / 10);
}
}
// Play alarm melody: 3 quick beeps
void playAlarmMelody() {
for (int i = 0; i < 3; i++) {
tone(alarmPin, 1000, 200);
delay(250);
}
}
// Map note character to frequency
int frequency(char note) {
const char names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'};
const int freqs[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
return freqs[i];
}
}
return 0;
}
📘 Mida programm teeb:
🔄 Tsüklis loop() käib pidev kontroll:
- Kui potentsiomeeter < 512 → süsteem on VÄLJAS:
- Ekraan tühjendatakse.
- Heli peatatakse.
- Kui süsteem sees:
- Loetakse temperatuur ja valgus.
- Kuvatakse:
- Kui pime → tekst: “Tuvastatud pimedus”
- Kui kuum → tekst: “Temp liiga kõrge!”
- Kui kõik korras → tekst: “Temp: XX.X°C, Light: XXX”
- Kontrollib alarmi tingimusi:
- Kui pime → heli ei mängita.
- Kui liiga kuum → mängib alarmheli 3 piiksuga.
- Kui kõik korras → mängib meloodiat.
🧠 Tähtsamad muutujad ja funktsioonid:
| Nimi | Kirjeldus |
|---|---|
potPin | loeb potentsiomeetrit (A3) |
tempPin | TMP36 andur (A4) |
ldrPin | valgusandur (A5) |
musicPin | buzzer (D3) |
alarmPin | buzzer (D3, sama pin) |
tempThreshold | temperatuurilävi (23 °C) |
lightThreshold | valguse lävi (200 ühikut) |
notes, beats | meloodia noodid ja rütm |
playMelody() | mängib vaikemuusikat |
playAlarmMelody() | mängib häireheli (3 kiiret piiksu) |
🖥️ Ekraanil kuvatav tekst võib olla:
makefileCopyEditTemp: 22.5°C
Light: 420
või:
nginxCopyEditTuvastatud
pimedus
või:
nginxCopyEditTemp liiga
korge!
🎵 Heli käitumine:
- Kui valgus < 200 → kõik helid peatatakse (justkui “öörežiim”).
- Kui temperatuur > 23°C → mängib alarmheli.
- Kui kõik on korras → mängib meloodiat tähtedest
"cdfda ag cdfdg gf ".
🛠️ Soovid edasi arendada?
Näiteks saab lisada:
- Ekraani teate, mis ütleb “Süsteem VÄLJAS”, kui potentsiomeeter on alla künnise.
- Eraldi LED, mis süttib häire korral.
- Uue funktsiooni, mis salvestab kõrgeima temperatuuri.

