/*
#include <OneWire.h>
#include <DallasTemperature.h>
// Пин для подключения датчика температуры
#define ONE_WIRE_BUS 2
// Пин для подключения реле
const int relayPin = 8;
// Настройка экземпляров для работы с датчиком DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
// Инициализация датчика температуры
sensors.begin();
// Установка пина реле как выход
pinMode(relayPin, OUTPUT);
}
void loop() {
// Запросить температуру с датчика
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
// Вывести температуру в Serial Monitor
Serial.print("Current temperature: ");
Serial.println(temperatureC);
// Управление реле в зависимости от температуры
if (temperatureC <= 13) {
digitalWrite(relayPin, HIGH); // Включить реле
} else if (temperatureC >= 16) {
digitalWrite(relayPin, LOW); // Отключить реле
}
// Задержка для предотвращения слишком частого чтения датчика
delay(1000);
// Чтение значений с датчиков или других источников условий
int sensorValue = analogRead(A0); // Пример чтения значения с аналогового пина A0
// Проверка условий и управление реле
if (sensorValue > 625) {
// Если условие выполняется (например, значение с датчика больше 500)
digitalWrite(relayPin, HIGH); // Включить реле
}
else {
// Если условие не выполняется
digitalWrite(relayPin, LOW); // Выключить реле
}
// Другие условия для управления реле могут быть добавлены с помощью дополнительных блоков if-else
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Value A0: ");
lcd.setCursor(10, 0);
lcd.println(sensorValue);
lcd.setCursor(0, 1);
lcd.print("Value D2: ");
lcd.setCursor(9, 1);
lcd.println(temperatureC);
delay(100);
}
// Считываем значение с аналогового пина A0
int sensorValue = analogRead(A0);
// Выводим значение на последовательный порт
Serial.print("Value on A0: ");
Serial.println(sensorValue);
// Небольшая задержка, чтобы не перегружать последовательный порт
delay(1000);
*/
/*
Контролируем температуру с использованием датчика DS18B20 и аналогового
(например, для аналогового температурного датчика типа NTC термистора),
и включать/выключать реле в зависимости от показаний этих датчиков. Реле включается
при температуре 13 градусов и ниже и выключается при температуре 16 градусов и выше.
*/
/*
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// Пин для подключения DS18B20
#define ONE_WIRE_BUS 2
// Пин для подключения реле
#define RELAY_PIN 8
// Аналоговый пин для подключения термистора
#define THERMISTOR_PIN A0
const float BETA = 3950;
// Настройка экземпляров для работы с DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Функция для преобразования показаний термистора в температуру (может потребоваться настройка)
float readThermistorTemperature(int analogValue) {
// Например, если используете NTC термистор 10 кОм
float R1 = 10000; // Резистор на 10 кОм
float logR2, R2, T;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
R2 = R1 * (1023.0 / (float)analogValue - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
T = T - 273.15; // Конвертируем в градусы Цельсия
return T;
}
void setup() {
// Инициализация последовательного порта
Serial.begin(9600);
// Инициализация реле
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Отключить реле при старте
// Инициализация DS18B20
sensors.begin();
}
void loop() {
int analogValue = analogRead(A0);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Serial.print("Temperature: ");
// Serial.print(celsius);
// Serial.println(" ℃");
delay(1000);
// --- Чтение температуры с DS18B20 ---
sensors.requestTemperatures();
float temperatureDS18B20 = sensors.getTempCByIndex(0);
// --- Чтение температуры с аналогового термистора ---
int analogValue = analogRead(THERMISTOR_PIN);
float temperatureThermistor = readThermistorTemperature(analogValue);
// Среднее значение температур (или используйте другой метод комбинирования)
float averageTemperature = (temperatureDS18B20 + celsius) / 2;
// Вывод температур для отладки
Serial.print("DS18B20 Temperature: ");
Serial.print(temperatureDS18B20);
Serial.print(" °C, Thermistor Temperature: ");
Serial.print(temperatureThermistor);
Serial.print(" °C, Average Temperature: ");
Serial.println(averageTemperature);
// Управление реле в зависимости от средней температуры
if (averageTemperature <= 13) {
digitalWrite(RELAY_PIN, HIGH); // Включить реле
} else if (averageTemperature >= 16) {
digitalWrite(RELAY_PIN, LOW); // Отключить реле
}
lcd.init();
lcd.backlight();
// lcd.setCursor(6, 0);
// lcd.print("+");
lcd.setCursor(8, 0);
lcd.println(celsius);
lcd.setCursor(5, 1);
lcd.print(averageTemperature);
lcd.setCursor(0, 0);
lcd.println(temperatureDS18B20);
// Задержка
delay(100);
}
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// Пин для подключения DS18B20
#define ONE_WIRE_BUS 2
// Пин для подключения реле
#define RELAY_PIN 8
// Аналоговый пин для подключения термистора
#define THERMISTOR_PIN A0
const float BETA = 3950;
// Настройка экземпляров для работы с DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
// Инициализация последовательного порта
Serial.begin(9600);
// Инициализация реле
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Отключить реле при старте
// Инициализация DS18B20
sensors.begin();
// Инициализация LCD
lcd.init();
lcd.backlight();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int analogValue = analogRead(THERMISTOR_PIN);
float celsius;
if (analogValue > 0) {
celsius = 1 / (log(1 / (1023.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
} else {
celsius = 0; // Или любое другое значение по умолчанию
}
// Чтение температуры с DS18B20
sensors.requestTemperatures();
float temperatureDS18B20 = sensors.getTempCByIndex(0);
// Среднее значение температур (или используйте другой метод комбинирования)
float averageTemperature = (temperatureDS18B20 + celsius) / 2;
// Управление реле в зависимости от средней температуры
if (averageTemperature <= 13) {
digitalWrite(RELAY_PIN, HIGH); // Включить реле
} else if (averageTemperature >= 16) {
digitalWrite(RELAY_PIN, LOW); // Отключить реле
}
// Обновление информации на дисплее
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Thermistor: ");
lcd.print(celsius, 3);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("DS18B20: ");
lcd.print(temperatureDS18B20, 3);
lcd.print(" C");
lcd.setCursor(0, 3);
lcd.print("Average: ");
lcd.print(averageTemperature, 3);
lcd.print(" C");
}
}