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.