Помогите разобраться со скетчем поддержания чего либо Суть такая, хочу контролировать и поддерживать температуру почвы рассады. Собрал схему: Нано + нагревательный элемент через мосфит. Но скетч не работает почему-то. Хочу, что бы подогрев включался при температуре почвы меньше 25 С *0.85. И выключался при температуре больше 25 С. Подскажите пожалуйста. Код (C++): #include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(10); // вход датчиков 18b20 DallasTemperature ds(&oneWire); DeviceAddress sensor1 = {0x28, 0xFC, 0x19, 0x43, 0x98, 0x22, 0x0, 0xAB}; int soil_temperature = 25; // переменная температуры почвы int soil_temperature_management = 8; void setup() { pinMode(soil_temperature_management,OUTPUT); Serial.begin(9600); ds.begin(); } void loop() { soil_heating(); } void soil_heating (){ // функция подогрева почвы int soil_temperature85; soil_temperature85 = soil_temperature * 0.85; ds.requestTemperatures(); // считываем температуру с датчиков ///////////////////////////////////////////////////////////////////////////// Serial.print("Sensor 1: "); Serial.print(ds.getTempC(sensor1)); // отправляем температуру Serial.println("C"); ///////////////////////////////////////////////////////////////////////////// if (sensor1 < soil_temperature){ digitalWrite (soil_temperature_management,HIGH); } if (sensor1 < soil_temperature && sensor1 > soil_temperature85){ digitalWrite (soil_temperature_management,HIGH); if (sensor1 < soil_temperature85);{ digitalWrite (soil_temperature_management,HIGH); } }else{ digitalWrite (soil_temperature_management,LOW); } delay(1000); }
Видимо у вас достаточно инерционный нагреватель. Почитайте про ПИД регулирование Что у вас за нагревательный элемент, спираль?
А со скетчем все в порядке? Просто я его тестирую на обычном светодиоде, условие все равно не отрабатывается.
Я раньше сам это изучал. Вам к теме будет знать про гистерезис терморегулятора. Скетч внимательно гляну подождите
Не думаете что снимать температуру каждую секунду это слишком долго, я бы поменял задержку на 100 мс то есть delay(100) Вообще ваш скетч далеко не идеален, я начинал с таких же. Его минус в том что температура может плавать на 1-2 а может и даже 5 градусов Буду дома отправлю вам то что у меня сохранилось. Буквально через час
@SDV, вы считываете температуру и выводите ее в сериал нигде не сохранив ее значение Код (C++): Serial.print(ds.getTempC(sensor1)); , а затем затем сравниваете адрес устройства с желаемой температурой Код (C++): if (sensor1 < soil_temperature)
Скачайте книгу "Мейкерство. Arduino и Raspberry Pi. Управление движением, светом и звуком" , там начиная со стр 225 найдете полезные примеры
Все одно, скетч не работает. Код компилируется но пишет: warning: invalid conversion from 'uint8_t* {aka unsigned char*}' to 'int' [-fpermissive] Где ошибка подскажите? Код (C++): #include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(10); // вход датчиков 18b20 DallasTemperature ds(&oneWire); DeviceAddress sensor1 = {0x28, 0xFC, 0x19, 0x43, 0x98, 0x22, 0x0, 0xAB}; DeviceAddress sensor2 = {0x28, 0x72, 0x12, 0x43, 0x98, 0x25, 0x0, 0x4C}; #define soil_temperature_management 9 int soil_temperature = 25; // переменная температуры почвы void setup() { Serial.begin(9600); pinMode(soil_temperature_management,OUTPUT); ds.begin(); } void loop() { soil_heating(); } void soil_heating (){ // функция подогрева почвы int soil_temperature85; int sensor_soil; soil_temperature85 = soil_temperature * 0.85; ds.requestTemperatures(); // считываем температуру с датчиков ///////////////////////////////////////////////////////////////////////////// Serial.print("Sensor 1: "); Serial.print(ds.getTempC(sensor1)); // отправляем температуру Serial.println("C"); ///////////////////////////////////////////////////////////////////////////// sensor_soil = sensor1; if (sensor_soil < soil_temperature){ digitalWrite (soil_temperature_management,HIGH); } if (sensor_soil < soil_temperature && sensor_soil > soil_temperature85){ digitalWrite (soil_temperature_management,HIGH); if (sensor_soil < soil_temperature85);{ digitalWrite (soil_temperature_management,HIGH); } }else{ digitalWrite (soil_temperature_management,LOW); } delay(1000); }
Элементарнейшая задача по управлению чем-либо в зависимости от температуры (влажности, освещенности...)... Разницы нет. Тем про это здесь уже море... Листали или - сразу вопрос в лоб ?
А полистать форум для начала ? Хотя, да, тырнет стерпит... А то, гдядишь, можно было бы ответ найти, даже не задавая вопроса...
SDV - у вас путанный код с кучей ошибок. Совершенно не удивительно, что он не работает. В сообщении #8 Вам ZAZ уже указал на две, самые грубые - и в новой редакции кода вы их даже не попытались исправить. Какой смысл вам отвечать. если вы ответы не слушаете?