Arduino – senzory
Poznámka
Táto kapitola popisuje najčastejšie senzory a aktuátory, ktoré v STEMlabe pripájame k Arduinu – teplotu/vlhkosť, ultrazvukový diaľkomer, fotorezistor a servo motor.
DHT11/DHT22 – teplota a vlhkosť
# v Arduino IDE: Sketch → Include Library → Manage Libraries
# vyhľadaj a nainštaluj "DHT sensor library" (Adafruit)#include <DHT.h>
#define PIN_DHT 2
#define TYP_DHT DHT22 // alebo DHT11
DHT dht(PIN_DHT, TYP_DHT);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float teplota = dht.readTemperature();
float vlhkost = dht.readHumidity();
Serial.print("Teplota: "); Serial.print(teplota); Serial.println(" °C");
Serial.print("Vlhkosť: "); Serial.print(vlhkost); Serial.println(" %");
delay(2000); // DHT senzory čítaj max. raz za 2 s
}Upozornenie
Senzor DHT potrebuje medzi jednotlivými meraniami pauzu aspoň 2 sekundy – častejšie čítanie vracia chybné hodnoty (nan).
HC-SR04 – ultrazvukový diaľkomer
#define PIN_TRIG 9
#define PIN_ECHO 10
void setup() {
Serial.begin(9600);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
}
void loop() {
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH); // vyšli ultrazvukový impulz
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
long trvanie = pulseIn(PIN_ECHO, HIGH); // čas návratu echa (mikrosekundy)
float vzdialenost = trvanie * 0.034 / 2; // prevod na cm
Serial.print("Vzdialenosť: "); Serial.print(vzdialenost); Serial.println(" cm");
delay(300);
}Tip
Vzorec trvanie * 0.034 / 2 vychádza z rýchlosti zvuku (~340 m/s = 0,034 cm/µs); delíme 2, pretože impulz prejde dráhu k prekážke a späť.
Fotorezistor (LDR) – meranie svetla
#define PIN_LDR A0
void setup() {
Serial.begin(9600);
}
void loop() {
int svetlo = analogRead(PIN_LDR); // vyššia hodnota = viac tmy (závisí od zapojenia)
Serial.println(svetlo);
delay(200);
}Tip
Fotorezistor sa zapája ako deliteľ napätia spolu s pevným odporom (typicky 10 kΩ) – samotný fotorezistor nemá tri vývody, takže potrebuje partnera v obvode.
Servo motor
#include <Servo.h>
Servo motor;
void setup() {
motor.attach(9); // pripoj servo na PWM pin 9
}
void loop() {
motor.write(0); // pozícia 0°
delay(1000);
motor.write(90); // pozícia 90°
delay(1000);
motor.write(180); // pozícia 180°
delay(1000);
}Upozornenie
Väčšie servo motory potrebujú viac prúdu, než dokáže dodať pin Arduina – pri viacerých alebo silnejších servách použi externé napájanie (Laboratórny DC zdroj (0–30 V, 0–10 A)).
Mini-úlohy – senzory
- Zapoj DHT22 a vypisuj teplotu a vlhkosť každé 2 sekundy do Serial Monitora.
- Zapoj HC-SR04 a vypíš varovanie “Pozor, prekážka!”, keď je vzdialenosť menšia ako 10 cm.
- Zapoj fotorezistor a rozsvieť LED, keď hladina svetla klesne pod určitú hodnotu.
- Naprogramuj servo, aby sa plynulo pohybovalo medzi 0° a 180° (nie skokom).
Cheat sheet – rýchla referencia
dht.readTemperature() / dht.readHumidity() // DHT11/DHT22 (čítaj max. 1x/2s)
pulseIn(PIN_ECHO, HIGH) // HC-SR04 - dĺžka echa v µs
analogRead(A0) // LDR - úroveň svetla (0-1023)
motor.attach(pin); motor.write(uhol); // servo (0-180°)