P2-012
← Všetky témyArduino a ESP32 · 10 / 18

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

  1. Zapoj DHT22 a vypisuj teplotu a vlhkosť každé 2 sekundy do Serial Monitora.
  2. Zapoj HC-SR04 a vypíš varovanie “Pozor, prekážka!”, keď je vzdialenosť menšia ako 10 cm.
  3. Zapoj fotorezistor a rozsvieť LED, keď hladina svetla klesne pod určitú hodnotu.
  4. 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°)
Postup sa ukladá iba v tomto prehliadači.
18 kapitol · vyhľadávanie aj v texte