Инкубатор
- Войдите на сайт для отправки комментариев
Пт, 06/04/2018 - 13:45
Здравствуйте. Не могли бы вы мне помочь? Уже через три дня привезут яйца на закладку в инкубатор. У меня инкубатор в принципе рабочий. Но не до конца. Влажность как нибудь буду регулировать но проблема не в этом. Проблема с кодом. Когда включается переворот то все останавливается, и я знаю в чем проблема. В самом конце для переворота стоит обыкновенный delay на 15 сек и когда осуществляется переворот останавливается мониторинг температуры, влажности, экран отключается.
В общем проблема ясна, а как решить тямы не хватает вот и прошу помощи.
//_____________________________________________________________________________________________
//______________________________ОБЪЯВЛЕНИЕ_ПЕРЕМЕННЫХ_______________________________________|
#include "DHT.h" //Объявление Библиотек которые буду использоваться в скетче
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <iarduino_RTC.h> //_________
#define DHTTYPE DHT21 // DHT 21 (AM2301) // указываем тип датчика
#define DHTPIN 2 // указываем куда датчик подключен
DHT dht(DHTPIN, DHTTYPE); //Подключить 10К Ом резистор между 2 пином(дата) и питанием. Честно. я не знаю зачем...
LiquidCrystal_I2C lcd(0x27, 16, 2); // параметры ЖК экрана
iarduino_RTC time(RTC_DS1302, 9, 10, 11); // подключаем RTC модуль на базе чипа DS1302, указывая выводы Arduino подключённые к выводам модуля RST, CLK, DAT
boolean flag = 0;
int Green = 12; // вводим переменные для зеленого
int Red = 13; // и красного светодиодов
int IN1 = 5; //ДРАЙВЕР ДВИГАТЕЛЯ
int IN2 = 4; // планируется использовать для управления влажностью с помощью насоса. но пока не испольхуется.
int relay = 6; // Реле для управления температурой
int relay2 = 7; // реле на переворот
int zumm = 3; //Зумер для влажности
//_____________________________________________________________________________________________
//___________________________ЗАПУСК_МОДУЛЕЙ_ПРИ_СТАРТЕ______________________________________|
void setup() {
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
pinMode(7, OUTPUT);
dht.begin(); //запуск датчика
lcd.begin(); // запуск жк экрана
lcd.backlight();
time.begin(); // запуск модуля времени
pinMode(relay2, OUTPUT);
pinMode(relay, OUTPUT); // сюда подключено реле для управления нагревательным элементом
pinMode(zumm, OUTPUT);
pinMode(Green, OUTPUT); // зеленый
pinMode(Red, OUTPUT); // и красный светодиоды для наглядности
//pinMode(IN1, OUTPUT); // драйвер двигателя в данный момент не используется
//pinMode(IN2, OUTPUT); //
}
//_____________________________________________________________________________________________
//___________________________________ПРОГРАММА_______________________________________________|
void loop() {
//_____________________ЧИТАЕМ ДАННЫЕ С ДАТЧИКА____________________________
//delay(2000);
float h = dht.readHumidity(); // Читаем влажность
float t = dht.readTemperature(); // Читаем температуру
int potentiometr1 = map(analogRead(A0), 0, 1023, 320, 410); // Вводим переменную для введения максимума для температуры
int potentiometr2 = map(analogRead(A1), 0, 1023, 400, 800); // Вводим переменную для максимума влажности
float pot = potentiometr1*0.1;
float pot2 = potentiometr2*0.1;
//____ВЫВЕСТИ ТЕМПЕРАТУРУ И ВЛАЖНОСТЬ НА LED ЭКРАН_______________
lcd.setCursor(0,0);
lcd.print("t-"); // печатаем температуру
lcd.setCursor(2,0);
lcd.print(t);
lcd.setCursor(8,0);
lcd.print("Max-");
lcd.setCursor(12,0);
lcd.print(pot);
lcd.setCursor(0,1);
lcd.print("H-"); // печатаем влажность
lcd.setCursor(2,1);
lcd.print(h);
lcd.setCursor(8,1);
lcd.print("Max-");
lcd.setCursor(12,1);
lcd.print(pot2);
//______________________________ВЛАЖНОСТЬ___________________________________
if(h<pot2){ //если влажность ниже порога, то
analogWrite(zumm, 125); // оповещаем сигналом
delay(200);
analogWrite(zumm, 0);
delay(50);
analogWrite(zumm, 125);
delay(200);
analogWrite(zumm, 0); // оповещаем сигналом
delay(1200);
}
//_______________________________НАГРЕВ___________________________________
if(t<pot){ // если температура меньше установленного значения то нагреваем
digitalWrite(relay, HIGH);
digitalWrite(Green, LOW); // зелененький горит = идет нагрев
digitalWrite(Red, HIGH); //
}
else if(t>pot){
digitalWrite(relay, LOW); // если больше то перестаем нагревать
digitalWrite(Green, HIGH); //
digitalWrite(Red, LOW); // красненький горит = не идет нагрев
}
//___________________________ПЕРЕВОРОТ ЯИЦ________________________________
time.gettime(); // получаем время с модуля
int Hour = time.hours; // объявляем переменную которая считывает минуты
if(Hour%2 == 0 && flag == 0){
digitalWrite(relay2, LOW);
delay(15000); //подходящее количество времени для переворота
digitalWrite(relay2, HIGH);
flag = 1;
} else if(Hour%2 != 0){
digitalWrite(relay2, HIGH);
flag = 0;
}
delay(50); //для нормальной работы жк экрана
}
Ну раз яйца придут уже скоро то помогу хоятбы вставкой кода правильной
А вот этот фрагмент очень интересный.
Можно схему попросить выложить подключения двигателя и типа двигателя и принцип поворота.
То есть когда часы кратны 2 (2,4,6,8,10 итд) мы сигналом digitalWrite(relay2, LOW); включаем реле, ждем 15 секунд пока произойдет поворот лотка и командой digitalWrite(relay2, HIGH); выключаем реле.
А нафига нам этот код? Без понимания как у вас все подключено и каков принцип поворота тут не разобраться.
Ух, точно! А я и не заметил. Мы когда на конкурс его делали, очень спешили. все собрано в корпусе и разбирать и перекручивать ради одного проводка нам не хотелось, по этому просто поменяли в коде.
Сейчас убрал кусок кода где был зуммер. стал работать стабильней, но это из за того что в инкубаторе нет воды и это кусок выполнялся постоянно чем и тормозил работу.
Сейчас разберу, поменяю реле и код. Сейчас переворот раз в 2 часа(делали раз в две минуты для наглядности), так что думаю на работе инкубаотра это меньше отразится.
Спасибо
Вот переделал корявенько но без Delay в повороте, но не могу откомпилировать, библиотек не хватает.
По коду:
1. Надо убрать delay совсем.
2. Обновление экрана надо делать только при изменении показаний, а не постоянно.
3. Зуммер тоже так организовавыть не годится. Надо переделывать на millis.
По датчику DHT11 или DHT22 плохой вариант для инкубатора.
Попробуй, должно работать.
Хм. Интересно. Посмотрю в интернете поподробнее про millis();
Сейчас оставлю его на часа два - три. все будет нормально работать - оставлю. не будет - возьму ваш код.
И кстати. Там стоит датчик Dht 21, он измеряет до десятых долей, так что сгодится.
Еще раз Спасибо!
И кстати. Там стоит датчик Dht 21, он измеряет до десятых долей, так что сгодится.
Дело не в точности, дело в конструкции. На будущее присмотритесть к SHT30, он для инкубатора получше будет.