Tento projekt umožňuje měřit teplotu pomocí senzoru DS18B20, zobrazit ji na I2C LCD displeji, a ovládat relé podle teplotních limitů. Relé bude aktivní, když je teplota mezi 0 a 22 stupni Celsia. Projekt může sloužit k ovládání topení, ventilace nebo jiného zařízení podle okolní teploty.
Co potřebuji?
- Arduino Uno (Může být i klon, v našem případě UNO R3)
- DS18B20 (teplotní senzor)
- I2C LCD displej 16x2
- Relé modul
- Drátky
- Rezistor 4,7 kΩ
Zapojení: (Viz schéma):
- DS18B20 teplotní senzor:
- Data pin připojíme k D2 na Arduinu.
- Připojíme rezistor 4,7 kΩ mezi datový pin a napájení 5V.
- Napájení senzoru je na 5V a GND.
- I2C LCD displej:
- Napojíme piny SDA a SCL (SDA -> A4, SCL -> A5).
- Relé modul:
- Napájecí piny připojíme na 5V a GND.
- Pin IN připojíme na D8 na Arduinu
Knihovny:
Aby kód fungoval, bude potřebovat následující knihovny:
- OneWire: Pro komunikaci s DS18B20.
- DallasTemperature: Pro snadné čtení teploty ze senzoru DS18B20.
- LiquidCrystal_I2C: Pro ovládání LCD displeje přes I2C.
Kód:
Následující kód načítá teplotu, zobrazuje ji na displeji a podle nastaveného limitu ovládá relé. Relé se zapne, když je teplota mezi 0 a 22 °C, a vypne, pokud přesáhne 22 °C
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Nastavení LCD displeje (0x27 je běžná adresa)
#define ONE_WIRE_BUS 2 // Datový pin DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define RELAY_PIN 8 // Pin pro relé modul
#define TEMPERATURE_MIN 0.0 // Dolní limit pro aktivaci relé
#define TEMPERATURE_MAX 22.0 // Horní limit pro aktivaci relé
unsigned long previousMillis = 0;
const long interval = 1000; // Interval aktualizace (1 sekunda)
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
sensors.begin();
pinMode(RELAY_PIN, OUTPUT); // Nastavení pinu relé jako výstup
digitalWrite(RELAY_PIN, LOW); // Relé vypnuto při spuštění
}
void loop() {
unsigned long currentMillis = millis();
// Aktualizace každou sekundu
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Načtení teploty ze senzoru
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
if (temperatureC != DEVICE_DISCONNECTED_C) {
// Zobrazení teploty na displeji
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Teplota:");
lcd.setCursor(0, 1);
lcd.print(temperatureC);
lcd.print(" C");
Serial.print("Teplota: ");
Serial.print(temperatureC);
Serial.println(" C");
// Ovládání relé podle teplotního rozsahu
if (temperatureC >= TEMPERATURE_MIN & temperatureC <= TEMPERATURE_MAX) {
digitalWrite(RELAY_PIN, HIGH); // Zapne relé
lcd.setCursor(10, 1);
lcd.print("Zap.");
} else {
digitalWrite(RELAY_PIN, LOW); // Vypne relé
lcd.setCursor(10, 1);
lcd.print("Vyp.");
}
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senzor odpojen!");
Serial.println("Chyba: Senzor DS18B20 není připojen.");
}
}
}
Vysvětlení kódu:
- Inicializace a nastavení: Kód zapne LCD displej, teplotní senzor a relé.
- Čtení teploty: Funkce sensors.requestTemperatures() načítá aktuální teplotu.
- Zobrazení na LCD: Teplota se každou sekundu zobrazí na displeji a sériově odešle do monitoru sériového portu.
- Ovládání relé: Pokud je teplota mezi 0 a 22 °C, relé se zapne. Pokud teplota překročí 22 °C, relé se vypne. Na displeji se ukazuje stav relé („Zap.“ nebo „Vyp.“).
Praktické využití:
Projekt lze použít k automatickému řízení teploty například v malých sklenících, teráriích nebo akváriích. Senzor DS18B20 poskytuje stabilní měření teploty a LCD displej umožňuje přehledně zobrazit aktuální stav. Relé modul může spínat ventilátor nebo topné těleso a udržovat teplotu v daném rozsahu.