Брудер-автомат
- Войдите на сайт для отправки комментариев
Добрый день. Делюсь проектом умного брудера для цыплят-утят-перепелят и т.д. Брудер это специально обустроенная теплая клетка, куда сажают птенцов, вылупившихся из инкубатора. Тема берет свое начало из проекта "Умная Теплица", за который её автору низкий поклон. Итак, на сегодня автоматика умеет поддерживать температуру в 4-х брудерах, плавно снижая ее по дням "отсидки" каждой партии. День старта можно задавать произвольно из меню. Включение и отключение обогрева и освещения в брудерах будет осуществляться тумблерами, остальное делает программа. По железу - Uno, RTC на 1307, дисплей (пока 16х02). Управление нагревателями симисторное через опторазвязку. Термометры аналоговые LM35, выбраны исходя из стоимости. Ну, вроде пока все. Устройство пока собрано на макетке. Вот немножко видео. Вот код:
просто интересно. цыплятам когда вылупятся создают специальные условия пока не окрепнут?
Да, разумеется, малышам нужен особый режим. Терморегуляции у птенцов своей еще нет. Температура в брудере с новорожденными должна быть 37 градусов и плавно снижаться до 20 градусов к 4-м неделям. Так же сетка на полу (если пол с сеткой) должна быть более мелкая, в стандартную они проваливаются. Поилки специальные, в поилках для взрослой птицы малыши тонут. Точнее намокают и замерзают. Ну и кормушки специальные, чтоб достать смогли и корм тоже для малышей свой. Перепелята вообще размером с майского жука рождаются, но очень подвижные. В любую щель выпрыгнут. Однако давайте лучше код обсудим. Программер из меня никакой, так что срадостью приму все советы и замечания. Спасибо. Да, в перспективе будет версия HOME для одного брудера.
ну тогда предложение для начала руссифицировать меню
вот либа. не тестил правда
http://vk.com/away.php?to=http%3A%2F%2Fwww.freeduino.ru%2Farduino%2Ffiles%2FMCP23x17.zip
посмотрите в подпрограмме термостат 1 и 2.
например 334-338 строки. хоть температура ниже, хоть выше выполняется одно и тоже (включается обогрев), хотя в коментах выключается или выключается
в 3 и 4 вроде нормально
+ да и еще. у вас сделаны подпрограммы-функции. но это просто куски кода вынесли. если сделать одну функцию и просто загонять в нее данные по каждому каналу разве это не логичнее?
Спасибо, поправил код. Вот к чему копипаста приводит. Да, я хотел бы убрать кучу одинаковых функций и подставлять в код нужные значения, но не умею этого делать. Нужно использовать не void функцию и передавать в цикле значение переменной в функцию или можно и void использовать, но значения в функцию передавать, она же ничего не возвращает? Опыта нет в Си. Есть какой-нибудь пример понятный? За библиотеку отдельное спасибо, пошел читать.
можете возвращать значения. в функцию значения нет проблем передать.
можно организовать массив и по цифре переданной в функцию будут заполнятся данные массива нужной строки например
вот почитайте
http://arduino.ru/Reference/FunctionDeclaration
Тут повторяющиеся функции отличаются цыфрой в переменных только. Может в цикле просто разные переменные подставлять или цыфру в имя переменной, если так можно. В описании функций мало информации об этом. Мне бы на пример работающий посмотреть.
так там вроде пример есть. что точнее вы хотите?
вот первая попавшаяся функция
хотя и эту функцию можно можно вставить функцию так как 3 куска повторяются
Пример не осилил. Как точнее объяснить что я хочу? Давайте я лучше расскажу как я это себе представляю. Мы пишем void функцию, пусть она пока будет черным ящиком. Затем передаем в нее циклом или еще как номер брудера для обработки его программы. А в самой функции по условию if или switch-case выбираем уже переменные и константы с нужным номером. Так? Но не получится ли тогда длина кода в функции сопоставимая с длиной кода четырех маленьких функций как мы имеем сейчас?
ладно не заморачивайтесь. скорость и объем неважен. оставьте как есть
Не, негоже так быстро сдаваться. Написать смог код, смогу и оптимизировать. Иначе не научусь ни чему.
код на самом деле будет меньше. редактировать его станет проще, будет меньше ошибок копипаста.
вы можете создать массив. номер канала который вы будете передавать в функцию будет соответствовать на пример строке
в строке количество переменных соответствует количеству необходимых переменных (это столбцы)
в функции прописать что делать с каждым элементом в столбце, а строку - номер канала вы будете передавать в функцию
надеюсь понятно
Понятно, спасибо.
У меня сейчас другая проблема вылезла. ШИМ из analogWrite работает на частоте 470Гц. Сможет ли работать на такой частоте симистор? На опторазвязке с zero-cross точно ерунда получится. Снижать частоту таймеров, это получить проблемы с delay. Ломаю голову как просто реализовать низкочастотный ШИМ без delay. Чтобы (условно) полсекунды было включено digitalWrite, а полсекунды отключено. И чтобы эта скважность была переменной и могла меняться из меню. С одним каналом просто, а вот на четырех голову сломал. Понимаю что надо использовать в каждом канале millis(), но не придумаю как в них скважность регулировать. Может делал уже кто-нибудь подобное?
вам наверно пригодится библиотека TimerOne
http://robocraft.ru/blog/arduino/614.html
"Когда программируешь для Arduino, иногда бывает нужно периодически выполнять какие-либо действия через определённые интервалы времени — скажем, 100 раз в секунду; или хочется иметь ШИМ с большим разрешением или другой частотой, чем позволяет стандартная функция analogWrite()"
Проблема решена.
У вас в коде два раза по 4 одинаковых функции
, можете сделать одну и вызывать её с необходимыми параметрами =) Код прошивки прилично похудеет. да и поднимется лэвл по cpp =)
Вот свежий код, после кучи правок. Не последний, но уже в железе работает.
Платы завтра выложу, забыл подтягивающие резисторы к кнопкам. Очень хочу убрать лишний код, но пока не до того. Отладка полным ходом идет на столе. А посколько рулит этим ПроМини, то приходится ее каждый раз выковыривать для прошивки. В общем не быстро, но продвигаемся.
Свежий код. Работает приемлемо. Архив с печаткой в аттаче. Платы две, силовая и управления. Вторая в первую втыкается. В плату управления втыкаются ПроМини, часы, дисплей на 4-проводном шлейфе. Кнопки тактовые и светодиоды прямо на плате. Собран в железе, идет тестироване в реальных условиях.
На очереди проект сольного брудера, на Даллас-термометрах и с энкодером.
https://docs.google.com/file/d/0B0vRuSZ7oRUeSUdobXhId2RxTU0/edit
вы освоили изготовление двухсторонних печатных плат или заказывать будете?
Могу, я же профессиональный р-техник. И лазерным утюгом и фоторезистом. Но это не двухсторонняя плата, это бутерброд из 2-х плат (зелененькая снизу, точки перехода голубые). Как Уно с шилдом примерно. Сделал так потому, что 220В на плате с микроконтроллером иметь не хочется и влияние помех от силовой части тоже нам не нужно, аналоговый термометр и так лагает здорово.
а понятно. вот только там одинокий штырек стоит. так и будете делать?
и я бы для платы управления сделал сплошную землю снизу чтобы наводок не было, так как одна плата над другой
а так очень симпатично получается и удобно
Да, одинокий штырек это =12в (raw) для управления вентиляцией. Защита от перегрева. А вентиляторы в большинстве 12-вольтовые. Я не планировал вентиляцию делать, а двигать потом все дорожки лень было. Дело в том, что у LM35 даже с экранированным проводом иногда скачки показаний странные случаются, даже не иногда, а постоянно. Будет дергаться вентилятор без нужды. Я даже код не стал править под это дело, так, на будущее заготовка. Хотя можно перемычку до ближайшего разъема кинуть. Щас дорисую. А в сольной версии я хочу к DS18B20 вернуться, там вентиляцию можно ставить.
у вас будут большие токи что понадобится вентилятор?
а насчет скачков если это не наводки или шум ацп можно применить пид-регулятор. сам не применял, но вроде как раз его область.
и библиотека есть под ардуино
Я применял в инкубаторе ПИД, работает. Даже визуализатор где-то нашел на Processing. Но для брудера это перебор имхо. Хватит и диммера. Перегрев не прибора я имел ввиду, а самого брудера и малышей в нем. Ну, летом солнце жарко греет и сами малыши как подрастают, занимают гораздо больший объем в маленькой клетке и горячие. У кур и перепелок температура тела 42 градуса! Ну или симистор пробъет и нагреватель на полную включится. Туда бы термопредохранитель вкрячить, да не нашел подходящего пока.
так зачем симистор. можно же применить 12В компьютерные вентиляторы. а если так критично можно и систему вентиляции сделать автономную, в смысле отдельный блок управления хоть на тиньке13
а термопредохранитель какую функцию должен выполнять? выключать брудер при перегреве, или наоборот при определенной температуре включить?
Я наверное не совсем понятно рассказываю. Симисторы для обогревателя. Он от сети 220 питается. А на вентиляторы MOSFET ключики. С них 12в выходит на пропеллеры. Термопредохранитель прямо в нагревательный элемент можно встроить, они биметаллические бывают и на разную температуру, например на 60 градусов. Самовосстанавливающиеся при остывании. С ними нагреватель не нагреется больше заданного предела и не зажарит малышей. Вот как-то так. Но вентилятор тоже не помешает. Когда жарко птички плохо кушают и много пьют, а значит в росте теряют. Если за первые 2 недели не наберут нужный вес, то могут так и остаться маленькими, ну в смысле в росте будут сильно отставать и дальше, при хорошем питании. Этот возраст самый важный пожалуй в жизни птицы. С вентиляцией лучше этой же программе работать, т.к. в первые сутки оптимальная температура для мальков 37, значит перегрев будет от 39 и выше, а в 20-е сутки уже 23 градуса нужно, значит перегрев можно при 26 включать. Тиньку кто этому обучит? Ей тогда тоже часы нужно.
да так понятнее. а температура днем и ночью разная должна быть? может вы писали, уже не помню
давайте посмотрим так. допустим стоит обогреватель, снаружи температура +20, внутри должно быть 37. стало быть включаем обогреватель.
тут ведь еще интересный момент. обогреватель какого типа: массивный радиатор долго остывающий, или "тонкий", быстроостывающий есть выключить, с вентилятором для улучшения теплообмена или нет, какая площать теплообмена.
допустим массивный, в большой собственной теплоемкостью и соответственно медленно нагревается и медленно остывает. и с небольшой площадью теплообмена.
таким из-за инерции нагрева/остывания будет немного сложнее поддерживать точную температуру например 37+-0,5градуса
а еще. если низкая площать теплообмена для обогрева он достаточно сильно будет нагреваться, может до 60-90 градусов (а может и выше), при этом нормально и правильно обогревать.
и при разной окружающей температуре при необходимой 37градусов будет например нагреваться от 50 до 120 градусов. надо проверять. и непонятно какой ставить термопредохранитель.
если на температуру нагревателя при самой низкой окружающей среде (например 120 градусов нагреватель, окружающая -10,), то при окружающей например +20, срабатывание термопредохранителя на 120 градусах бесполезно. циплятки уже сдохнут, температура поднимется наверно градусов до 50-60
долго рассуждал). поэтому считаю термопредохранитель ставить на максимальную температуру, но только для того чтобы ничего не загорелось. а для ципляток плавная регулировка шимом.
и кстати можно поставить доп. защиту. схемотехническую. добавить узел например с транзитором, конденсаторами и резистором. подключить к ардуине. ардуина каждый раз прогоняя loop должна ненадолго подать на базу транзистора через конденсатор испульс. постоянку кондер не пропустит, так что постоянная 0 или 1 будет сигнализировать об аварии. транзистор отключит обогреватель и например подаст сигнал сброса на микроконтроллер (через конденсатор). ну и может дополнительно пищалка.
или еще усложнить. добавить каскад который не срабатывал бы на сигнал сброса, а включал пищалку при определенных уловиях. и желательно со своим мелким аккумулятором и пищалкой, чтобы оповестить об аварии. цыпляток же жалко
можно конечно ватчдогом, но если питание на ардуине пропало, ардуина сдохла ватчдог не поможет
Не, все гораздо проще. Брудер в помещении отапливаемом обычно стоит, у меня в перепелятнике. Перепелка птица перелетная и зимою без обогрева не выживет. Но птичек в клетках много, помещение маленькое и они сами неплохо греют, плюс дополнительная грелка электрическая висит с термостатом примитивным. Короче температура в помещении всегда близка к 20 градусам. Брудер это почти инкубатор, никто ведь инкубаторы под открытым небом не ставит. Ну вот свой брудер не выкладывал, но примерно такой вот принцып.
Авария на перегрев может быть по двум причинам. Ардуино зависла или симистор пробился. Вочдог от зависания спасет, а от пробоя симистора нет. Там либо доп. реле ставить в цепь обогревателя, либо термопредохранитель в сам обогреватель. Обогреватель вот такой. http://www.youtube.com/watch?v=ydcrHtKhty8 точнее он и есть. Его задача имитировать курицу, то есть теплоемкий, инерционный, мощный, но не горячий. В идеале 40-45 градусов. Чтобы к нему малыши могли подойти близко и погреться, а когда жарко отходили. Значит должны быть зоны где теплее и холоднее. Зоны должны быть достаточными по площади, иначе подавят слабых когда толпиться будут. Ну это я по сути азбуку птицеводства рассказываю. Это в каждом брудере должно так быть. Обычно лампами греют или термопленкой продвинутые. Но у нас то умный брудер. В коде программы есть ШИМ низкочастотный постоянный, он в меню задается с шагом в 5%. Я на столе когда гонял блок с нагревателем, выяснил что при 30% мощности сам нагреватель греется до 55. Но это в комнате большой, в брудере будет иначе. Ну и термостат обычный, на релейном принцыпе (вкл-выкл) с гистерезисом в градус. Цыплята это не яйца в инкубаторе, им точность в 0,5 градусов не нужна. + - 3 вполне приемлемо, а если в помещении температура постоянная (летом еще и вентиляция включается), то не сложно будет подобрать мощность диммером (это кусок программы по сути, простой ШИМ с регулируемой скважностью. Это я его диммером зову как отдельное устройство), просто понаблюдать за хорошим спиртовым термометром и самими квартирантами. Поэтому и термопредохранитель лучше в сам нагреватель встроить и на 50-60 градусов чтоб срабатывал. Тогда аварии не должно быть и никто не зажарится и ничего не загорится. Вот.
В сольной версии автоматики будет другой алгоритм. Возьмем два Далласа (DS18B20), один для воздуха в клетке, другой для самого обогревателя. И вентилятор для охлаждения. Тогда полную гибкость получим. Можно даже вентилятором заданную температуру поддерживать, а грелку все время теплую держать. Хотя под конец срока отсидки тогда будет постоянно жужжать вентилятор. Можно снижать планово температуру грелки. Короче обмозговать надо. Но защиту всеравно в виде термопредохранителя не помешает добавить. Я бы и сюда Далласы поставил, но 8 шт. (4 пары) это дорого, они медленные и вообще, у меня куча LM35 давно валяется без дела.
ну в ваших условиях все проще, а с учетом того что температура не везде такая нужна, и цыплята сами подходят и греются, да и разброс температур, можно не так волноваться
я бы предложил термореле. встроить в сам нагреватель. например такие на 50 или 560 градусов (не реклама, просто первое где нашел)
http://tda2000.ru/catalog/passiw_predoxranitel_fuse_rele/-464449/
http://tda2000.ru/catalog/passiw_predoxranitel_fuse_rele/-496378/
основательный вы птичник сделали
я бы предложил термореле. встроить в сам нагреватель.
Ну, я про них и говорил. У китайцев еще дешевле. У меня есть несколько, но на другую температуру. А таких пока нету. Да, симистор 26-амперный, скорее провода сгорят, чем он. Но лучше перебдеть...
да лучше перебдеть
Дело движется. Набросал макет сольного брудера. В качестве термометров DS18B20. Управление меню энкодером. Один термометр в брудере, второй в (возле) нагревателе. Добавил в меню максимальную температуру нагревателя. Осталось аварийную вентиляцию и аварии добавить, правда не знаю какие. Пока дисплей едет, параметры впорт вывожу. Плату пока не рисовал. Вот свежий код, на макетке все работает.
Готов код сольного брудера. Управляется энкодером, дисплей двустрочный.
Код четырехканального брудера переписал под дисплей 20х4 с I2C контроллером.
так все работает как надо? на цыплятках уже опробовано?
Не, на столе пока работает, а обогреватель под столом. Деталюшек не хватает на все каналы, а если так поставлю, то снимать уже не захочу, ждемс. И кнопки тактовые вчера рассыпались.
хорошие кнопки. вы их скотчем обмотайте может перестанут. а говорят китайцы дешевые матричные клавиатуры делают. можно заюзать
https://www.youtube.com/watch?v=Z_G2tjX1TFI
Видео макета автоматики сольного брудера.
аккуратненько. то я про оформление дисплея и вывод данных в терминал
Свежий код сольного брудера. В функции термостата не было чтения значения диммера из EEPROM, обогрев начинал работать только после меню настроек, а при сбросе всё работало, кроме команды на обогреватель. Не сразу нашел. Теперь все в порядке.
Добрый день, давно я сюда не заходил. Работы проведено много, количество правок кода и не вспомню. Теперь в блоке настраиваются стартовая и финишная температура. Можно корректировать дату и время. Добавлено усреднение значений. Добавлено управление вентиляторами по перегреву. Что-то еще добавлено. Изготовлены тестовые образцы плат на заводе в Китае. Вот так оно выглядит примерно.
Исходники программы и печатной платы лежат тут https://drive.google.com/folderview?id=0B0vRuSZ7oRUeelhOUTV4dnBMS1k&usp=docslist_api&ddrp=1#
Вот свежий код, может захочет кто повторить. Работает вроде без багов с июня.
прикольно. а корпус есть?
Свой в электрокоробку упаковал, а род заказ без корпуса делаю. Я ровно не выпилю, а халтуру делать не хочется. Да и блоки такого уровня любят электрошкаф, клеммники, автоматы... А это всего лишь модуль. Вот как-то так я рассуждаю. Был бы лазер или ЧПУ, тогда другое дело, а у меня только Дремель.
Не совсем про Ардуино, в версии с одним датчиком на брудер, где его расположили? Спасибо.
На задней стенке в центре "камеры".
А на температуру относительно нагревателя просто коэффициент вводили?
Как с Вами связаться?
Моя почта olegmak3@rambler.ru
класс
на следующий год понадобится и мне :)
На сайте http://u-m.biz есть мои координаты.
спасибо, но я по большей части любитель и сам попаять ;)