инкубатор под управлением Ардуино Уно
- Войдите на сайт для отправки комментариев
Всем привет,надеюсь что не повторяю тему,поиском не нашел.Итак по суте.Хочу сделать инкубатор для яиц птицы нужно следующее:
-поддерживать температуру в заданом пределе
-переворачивать яйца через заданый интервал
-поддерживать влажность
-прекращать перевороты по истечению определеного срока (конец инкубации)
-Увеличивать влажность в этот же период
из апаратной части:
-Funduino(arduino клон) UNO
-ЛСД дисплей16*2
-датчик температуры и влажности DHT11
-Tiny RTC I2C RTC ds1307
-блок реле
-нагреватель
-генератор влажности(возможно пьезо туманогенератор)
-моторедуктор для переворота.
На данном этапе измеряется температура и влажность с выводом на экран и сериал монитор,есть управление включением нагревателя и включением моторедуктора(в моторедукторе концевые выключатели )или шаговый мотор пока еще не определился.
Все настройки вностяся в програму при составлении, кнопок нет .
Нужна помощь в реализации отключения переворота скажем через 15 дней после запуска прогаммы без зависимости от сбоев електропитания и изменение параметров влажности по тем же условиям т.е с 15дня влажность другая.
Код в теперешнем состоянии
int led2 = 4;// "таймер переворот" int led3 = 2;// нагреватель int led4 = 5;//туманогенератор #include <DS1307RTC.h> #include <Time.h> #include <Wire.h> #include <LiquidCrystal.h> #include "DHT.h" #define DHTPIN 3 // куда подключен термодатчик #define DHTTYPE DHT11 // DHT 11 используемый термодатчик //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(8, 9, 10, 11, 12, 13); void setup() { Serial.begin(9600); dht.begin(); while (!Serial) ; // wait for serial delay(200); pinMode(led2, OUTPUT);// сигнал "таймер" pinMode(led3, OUTPUT);// сигнал нагрева pinMode(led4,OUTPUT);//сигнал туманогенератора Serial.println("DS1307RTC Read Test"); Serial.println("-------------------"); lcd.begin(16, 2); // печатаем первую строку lcd.print("Inkubator" ); lcd.setCursor(1, 1); delay(500); // печатаем вторую строку lcd.print("tamerlan-1"); delay(500); } void loop() { float h = dht.readHumidity();//обозначение влажности float t = dht.readTemperature(); //обозначение температуры tmElements_t tm; //вывод на экран дата и влажность {lcd.setCursor(0, 1); print2digits(tm.Day); lcd.write('/'); print2digits(tm.Month); lcd.write('/'); lcd.print(tmYearToCalendar(tm.Year)); lcd.write('h'); print2digits (h); lcd.write("*H "); lcd.setCursor(0, 0);//вывод на экран время и температура print2digits(tm.Hour); lcd.write(':'); print2digits(tm.Minute); lcd.write('`'); print2digits(tm.Second); lcd.write('t'); print2digits (t); lcd.write("*C "); } if (RTC.read(tm)) //информацыя в sereal monitor { Serial.print("Ok, Time = "); Serial.print(tm.Hour); Serial.write(':'); Serial.print(tm.Minute); Serial.write(':'); Serial.print(tm.Second); Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(tm.Month); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(900); } delay(500); if ((tm.Second)>58) //условия таймера { digitalWrite(led2, HIGH);//включает таймер Serial.print("Taimer On!! ");//вывод инфо состояния lcd.setCursor(13, 0);//вывод инфо состояния на LCD lcd.print("%"); } else { digitalWrite(led2, LOW); Serial.print("Taimer OFF"); } if (t<17)//условия терморегуляции { digitalWrite(led3,HIGH); Serial.print("Vkluchen nagrev!!");//вывод инфо состояния lcd.setCursor(15, 0); lcd.print("^");//вывод инфо состояния на LCD //delay (500); } else { digitalWrite(led3,LOW); Serial.print("Temp ok ");//вывод инфо состояния lcd.setCursor(15, 0); lcd.print("~");//вывод инфо на LCD } if (h<60)//условия терморегуляции { digitalWrite(led4,HIGH); Serial.print("Vkluchen tuman!!");//вывод инфо состояния lcd.setCursor(14, 0); lcd.print("#");//вывод инфо состояния на LCD //delay (500); } else { digitalWrite(led4,LOW); Serial.print("Vlagnost ok ");//вывод инфо состояния lcd.setCursor(14, 0); lcd.print("~");//вывод инфо состояния } } void print2digits(int number) { if (number >= 0 && number < 10) { lcd.write('0'); } lcd.print(number); }
немного подумал получилось вот что за остановку переворота будет отвечать "х" но прийдется перед запуском щитать вручную когда будет тот самый день "х", и вписывать в програму.Может его было бы лучше записывать в энергонезависимую память и потом с ней сверять или както связывать с датой компеляции чтоб к ней допустим добавляло те самые дни и так получался "х",но я не знаю как такое делать,это мой первый проект и знакомство с ардуино.
DHT11 в инкубаторе можно использовать только для определения влажности. Для опеределения температры следует использовать что-то типа DS18B20.
В инкубаторе необходимо поддерживать температуру с достаточно высокой точностью (37,9-38,6), DHT 11 дает разрешение в 1 градус и погрешность +- 2 градуса.
да и влажность с высокой погрешностью измеряет. лучше DHT22
Вот обьеденил свой код с кодом меню одного из форумчан (dachnik)после небольшой переделки под свои нужды часть с меню работает а вот часть "терморегулятор" почемуто будто игнорируется нет вывода не на LCD не в Serial будто ее нет вовсе я и перемещал этучасть кода в void loop и в отдельную часть но не помогает.Может вы увидете в чем проблема.
Почитайте: Вставка программного кода в тему/комментарий там написано как сворачивать портянки.
Почитайте: Вставка программного кода в тему/комментарий там написано как сворачивать портянки.
Приветствую всех, очень хорошая идея создать блок управления инкубатором. Тоже очень хочу, Как ваши успехи в написании кода?
tamerlan37, схему (хотя бы примерную) девайса можно взглянуть? к какому пину что...?
на данный момент схема подвергается модификацыи меняется датчик температуры на даллас и вводится пид регулятор вот фото того что сейчас,окончательной схемы еще нет когда доведу до ума выложу.В ближайшее время планирую схему сделать как доделаю выложу
вот набросал схемку возможно не все пины совпадают с теми что сейчас, но скорее всего будет сделано именно как на этой схеме
Код еще не доделан еще не введен PID и Dallas.
меняйте LCD на интерфейс i2c - проще станет жить! )))
ИМХО
Пока недостатка во входах нет а вкладывать деньги на это не хочется.
А что за PID у тебя?
PID это по суте силовой ключ с опторозвязкой ну и к нему нужен код соответственно и библиотека.А функцыя его в том чтобы поддерживать заданую температуру .
Прошу прощения я новичок. И тоже необходимо такой контроллер Из скетча не понял получилось реализовать отключение переворота на 17-21 день или нет. Если нет то может для включения инкубатора использовать двойной тумблер одни контакты будут включать arduino и остальное а другой контакт включать батарею на модуле часов. Как я понимаю таймер обнулится и наверное можно привязать отключение к дате. А перевороты привязать к часам например 4 8 12 16 20 24 вполне достаточно.
Я правда ещё не экперементировал посколько жду когда придут заказанные части.Я не знаю как поведет себя ds1307 после отключения батареи он сброситься грубо говоря на 01 01 01 00:00 (день месяц год часы минуты) или это могут быть не единицы. Можно вывести на экран не число месяц год а только дни с момента включения поскольку вся домашняя птица до месяца проходит режим инкубаций и будет понятно сколько дней осталось до конца . А какой нагреватель планируете использовать? Из моей небольшой практики лучне всего показали себя лампочки накаливания. У них меньше всего инерция после выключения.
Да и ещё поворот яиц вы как планируете делать? Если наклоном то можно прицепить шаговый двигатель. После включения поворачивается на 45градусов и далее по премени на 90градусов после отключения переворота возвращается обратно на 45 в горизонтальное положение.
для отключения можно через if сравнивать заданый день(дата день) месяца с текущим и если больше то прекращать,но нужно при запуске програмировать когда день проклевывания будет.а часы збивать думаю не стоит.И еще вроде можно считать сколько прошло со времени запуска скетча но тоже думаю муторно.
поворот,скорее всего наклоном, но шаговым не знаю выйдет ли ,купил китайский, но он слабоват и думаю не потянет. Так что скорее это будет просто моторчик с концевиками в крайних положениях.
Нагреватели,наверное лампочки дешево сердито и ремонтировать легко если что и видно как работает.
Я ставил моторчик дворника заднего от нивы но мне кажется углы маловаты. его в деле не проверял. До етого был маленький инкубатор где то на 40 перепилиных яиц. Там делал два вала между ними типа конвеера и каждый ряд был зафиксирован пруток . 4 раза в сутки включался конвеер где то на 2 секунды и проворачивал
можно ли подключать, например, по 2 датчика температуры и влажности в 2-ух областях инкубатора папалельно к одному пину? например, датчик температуры 1 сверху, второй снизу но контакт отвечающий за данные объėдинить в 1 пин? новичок... ;)
можно ли подключать, например, по 2 датчика температуры и влажности в 2-ух областях инкубатора папалельно к одному пину? например, датчик температуры 1 сверху, второй снизу но контакт отвечающий за данные объėдинить в 1 пин? новичок... ;)
Здесь используется DHT11 (или DHT22) - вот и поищите в гугле по фразе "подключить два DHT11 на одну шину". Если мерять температуру датчиками DS18* - то там поисковая фраза будет выглядеть как-то так: "подключение датчиков 1-wire"
можно ли подключать, например, по 2 датчика температуры и влажности в 2-ух областях инкубатора папалельно к одному пину? например, датчик температуры 1 сверху, второй снизу но контакт отвечающий за данные объėдинить в 1 пин? новичок... ;)
Здесь используется DHT11 (или DHT22) - вот и поищите в гугле по фразе "подключить два DHT11 на одну шину". Если мерять температуру датчиками DS18* - то там поисковая фраза будет выглядеть как-то так: "подключение датчиков 1-wire"
поправка, использовался в ранней версии, сейчас все же будет 18В20, DHT11 (или DHT22) по отзывам боятся пыли и непригодны для инкубатора,а мой такой датчик еще не дойдя до инкубатора на стадии макета перестал работать(((.Так что 18В20.
если я правильно понял, то меняем ето:
на ето:
a датчик влажности какой? ;)
все датчики подключаются на прямую к ардуино, или нужны какие-то модули-посредники?
Для "датчика влажности почвы" - нужна токопроводящая среда. Страшно представить: какое потребуется напряжение, чтобы воздух стал проводящим на таком расстоянии. :) У меня что-то типа DHT11 живет в ванной в вентиляторе: там и пыль, и влажность.
погрешность в пол градуса у DHT11/22 будет нармальной для поддержания температуры, если её допустимая амплитуда около 1.5 градуса? ;)
Для "датчика влажности почвы" - нужна токопроводящая среда. Страшно представить: какое потребуется напряжение, чтобы воздух стал проводящим на таком расстоянии. :) У меня что-то типа DHT11 живет в ванной в вентиляторе: там и пыль, и влажность.
а причем тут "датчик влажности почвы"?
виноват, я напутал, он ответил, но я исправил. ;) код вашей программы несколько ошибок выкидывает.. хмм.. знает ли кто программу похожую на виртуал бреадбоард но бесплатную, главное чтоб функция тестирования была..? ;) и побольшеб обучалок на ArduBlock... ;)
не знаю с чем связано но код идет на верссии ардуино IDE 1.0.1 а на более поздних выдает ошибки при компеляции(((
А бредборды поискать нуно мож и кто полечил ;) только вот проблема есть, там не все детали/блоки имеются в библиотеке.
искал, старые версии есть бесплатные но не удобно тем что там обозначение детали не картинкой.. ;) а ардуБлок на последней версии уже интересней, много добавлено всего, только кроме мигающего диода ещо ничего не умею, 2 дня как познакомился с Ардуино... ;)
Пара вопросиков.. ;) хотелось-бы сделать переворот по вот такому принцыпу:
..и чтоб сэкономить на пошаговом движке, использовать движок от старого принтера Епсон... какой контроллер посоветуете и нужен-ли такой вообсче (моторчик на 4 пина, сам питается гдето 20-30в, а управление тоже от 5в как у других ?) как пример, возможно подойдёт такой:
1.Double H bridge drive
2.Chip L298N (ST NEW)
3.Logical voltage 5V
4.Drive voltage 5V-35V
5.Logical current 0mA-36mA
6.Drive current 2A(MAX single bridge)
7.Storage temperature -20 to +135
8.Max power 25W
А потянет движок такую нагрузку
Если сделать винтовую передачу, как у актуатора, и прицепить с края - то потянет. А если вращать всю этажерку из центра - то вряд ли.
Если сделать винтовую передачу, как у актуатора, и прицепить с края - то потянет. А если вращать всю этажерку из центра - то вряд ли.
мотор конечно с края надо ставить, ато тот штырь с резьбой в дверьку упрётся, когда подтянет лотки к себе.. ;)
ну а контролировать то можно етот движок от принтера без драивера?
Код былбы то что надо (первый код тамерлана), но что ето за ошибки? компиляцию делал на версиях 1.0.5.. и 1.5....(бета) для ардуино уно... ехх :(
inkubator1:16: error: 'DHT11' was not declared in this scope
inkubator1.ino: In function 'void setup()':
inkubator1:21: error: 'class DHT' has no member named 'begin'
inkubator1.ino: In function 'void loop()':
inkubator1:47: error: 'class DHT' has no member named 'readHumidity'
inkubator1:48: error: 'class DHT' has no member named 'readTemperature'
inkubator1:51: error: 'tmElements_t' was not declared in this scope
inkubator1:51: error: expected `;' before 'tm'
inkubator1:53: error: 'tm' was not declared in this scope
inkubator1:57: error: 'tmYearToCalendar' was not declared in this scope
inkubator1:72: error: 'RTC' was not declared in this scope
inkubator1:72: error: 'tm' was not declared in this scope
inkubator1:85: error: 'tmYearToCalendar' was not declared in this scope
inkubator1:102: error: 'tm' was not declared in this scope
Интересно было бы посмотреть новый код
у меня компеляцыя идет только на ранней версии.Пока новее кода нет. все руки не доходят нужно переделать ее на ПИД и включить туда
DS18B20
.Как только будет выложу свежак.кому не трудно, проверте последний раздел- переворот, какие команды нужно исползовать и т.д, а также дописать и исправить ... испытать смогу лишь через пару недель когда придут детали... первый раз делаю такое.. ;)
виков движка переворота можно использовать ик сенсоры- TCRT5000, но опять-же, нет знаний чтоб их прописаать в код.. :(
Там все просто: при "засветке" открывается транзисторная часть и либо появляется, либо исчезает напряжение - его меряем аналоговым пином. Только там расстояние срабатывания в районе одного сантиметра.
Не испытывал. Но мне кажется что delay(3600000) остановит контроллер на 2 часа не будет регулировки температуры и влажности. Я сам тоже жду детали. И думаю привязать к часам
виков движка переворота можно использовать ик сенсоры- TCRT5000, но опять-же, нет знаний чтоб их прописаать в код.. :(
Там все просто: при "засветке" открывается транзисторная часть и либо появляется, либо исчезает напряжение - его меряем аналоговым пином. Только там расстояние срабатывания в районе одного сантиметра.
в курсе... ;) транзисторы BC547 подойдут?
транзисторы BC547 подойдут?
Куда-нибудь - точно подойдут. Вы куда их планируете использовать?
С ик сенсором.. с сенсора слабый ток идёт, даже диод еле горит.. думал сигнал с сенсора на базу транзистора пустить а коллетор и еммитер 5в уже подключалиб к релюшке..
У меня на тестовом образце ток порядка 10 миллиампер. При наличии в схеме ардуино - какой смысл заводить сигнал сразу на реле?
Хмм.. сразу на реле, чуток в другом проекте.. ;) не проверял тестером, он полетел после ремонта микроволновки... ;) а по свечению диода на глаз, показалось что маловато напряжение.. ;)