Завсегдатай, Кандидат в Советники
|
Простой Arduino-контроллер "чайника" - от макета до готового изделия |
В какой-то мере эта тема является продолжением темы уважаемого ZORS, ARDUINO для автоматизации аквариума . По крайней мере, в том, что касается контроллера, который делаю я, пользуясь наработками, схемами и критикой из той темы. |
|
#1968755 Нравится skitol
|
Завсегдатай, Кандидат в Советники
|
|
Для начала была куплена плата Arduino UNO R3 (оригинальная, на радиорынке, причем недешево, на e-bay гораздо дешевле) и блок из 4-х реле (там же на радиорынке). Потом с e-bay были заказаны: |
|
#1968764 Нравится Avela
|
|
Завсегдатай, Кандидат в Советники
|
|
Программу для компиляции скачал с официального сайта, с руссификатором, последняя версия 1.0.5. У меня, кстати, os linux ubuntu, компилятор встал без проблем (а вот на старом добром win xp капризнячал, на win-7 все ОК) Для начала я задался вопросом, как эргономичней соединить ардуину со всей периферией, коей набралось немало. Про "шилды" (платы, которые надеваются на ардуину) я уже знал, но хотелось как-то самому. Сделал DIY-шилд из платки 5*7 см, на которой разместил часы, подтягивающие резисторы термодатчика и кнопок, контакты "мама-папа". Монтаж "навесной", пайкой. Можно было бы и плату протравить, но во-первых, возиться было лень и некогда, а во-вторых - проект несколько менялся, а вместе с ним менялась и допаивалась плата. На готовой протравленной плате так не выйдет. Неаккуратно, конечно (особенно с тыльной стороны), да кто ж смотреть будет? Главное - работает. В итоге к плате были присоеденены: часы, дисплей через плату I2C, блок 4-х реле, термодатчик, 5 тактовых кнопок, временно вместо драйверов - маломощные диоды через 220 ом резисторы (для контроля функции ШИМ). |
|
#1968773 Нравится Organism
|
Завсегдатай, Кандидат в Советники
|
|
Программаная часть в итоге вышла такой скачать можно тут. Конечно, написано корявенько, но работает. По предыдущим замечаниям кое-что изменил, например ввел тип данных boolean для переменных типа "flag", оптимизировал отображения названия месяцев и дней недели (убрал цепочки "ифов" т.е. управляющих операторов if). Довольно замысловатым и запутанным вышло управление меню экрана и переключение некоторых кнопок. Думаю со временем упростить, т.е. опять же уйти от цепочек операторов if....else if.....else к операторам типа switch.....case. А потом включается экран часов-календаря. Тут все понятно При нажатии на кнопку "меню" высвечивается экран состояния ардуины, что подключено и в каком режиме. При повтороном нажатии на кнопочку - опять дата/время, и так далее. Экран состояния выглядит так Покажу интерпретацию. Первая строка. В данном случае СО2 выключен и находится в автоматическом режиме (СО2 "0", т.е. выкл, А - это AUTO; соответственно если будет "1" - это включен, и буковка "Н" - это ручной режим, HAND). Управляется СО2 своей кнопочкой №4. То же самое и со светодиодами LED. Управляется последней кнопкой №5, при этом выключается не ШИМ-выход, а реле (т.е. пин, управляющий реле переходит в состояние LOW), и прерывается подача напряжения на драйверы. Вторая строка. Ну, температура - понятно. Символ "*" показывает, что Т превышает установленный порог+гистерезис и включены кулеры. Ручного управления кулерами нет (нужно ли, не знаю еще). Далее пишется состояние времени суток светильника. Night - все выключено. Morning - рассвет (начало ШИМ-диммирования). Day - все включено на полную катушку. Evening (как на примере) - ШИМ в обратную сторону, закат. Все очень наглядно. У меня осталось свободным одно реле, куда его приспособить - еще подумаю. Можно под дозатор УДО, можно под включение кулеров радиаторов (если потребуется), ну и т.д. Будут вопросы - постараюсь ответить. Будет критика - постараюсь учесть. Код приветствуется к оптимизации, копированию и использованию в ваших целях. Когда засуну все в коробочку - покажу. Пока это вот так выглядит на макете |
|
#1968777 |
Посетитель
|
|
Дядька-рыбомор ПОЗДРАВЛЯЮ! Классно. Надо еще посмотреть как все в корпусе срастется. Код использую в своем проекте. Идея с отдельными кнопками понравилась (одна кнопка - одно действие), только вот выключение подсветки странно реализовано - я по времени бездействия (5 минут) собираюсь отключать. |
|
#1969488 |
Завсегдатай, Кандидат в Советники
|
|
сообщение arch07 А как? Через lcd.backlight()? Изменено 6.5.14 автор Дядька-рыбомор |
|
#1969637 |
|
Посетитель
|
|
Дядька-рыбомор На строковом да: lcd.backlight() - вкл lcd.noBacklight() - выкл А на Nokia 5110 - я завел подсветку на отдельный цифровой вход, если даю 0, то горит, а если high - то тухнет. В инструкции от http://www.adafruit.... подсветка просто заведена на плюс (правда в моей китайской версии нога light дисплея требует земли). Поигрался графическим дисплеем и решил использовать его как строковый - с самым мелким шрифтом. Получается 6х13 символов. При большом количестве дисплеев есть вариант отказаться от меню при просмотре. Оставить его только в настройках. |
|
#1969749 Нравится Дядька-рыбомор
|
Завсегдатай, Кандидат в Советники
|
|
сообщение arch07 Ну да, в главном цикле void loop () что-то типа такого: при нажании кнопки, назовем ее "ButtonLCD" if(digitalRead(ButtonLCD)==HIGH) { lcd.backlight(); delay(10000);//дисплей включается на 10 сек lcd.noBacklight(); } А можно еще поиграться с кодом - тогда вообще при нажатии на любую кнопку экран будет освещаться какое-то время, а потом гаснуть. В общем, будет время, побалуюсь на выходных. Изменено 6.5.14 автор Дядька-рыбомор |
|
#1969785 |
Посетитель
|
|
Дядька-рыбомор тут delay - явно зло! пока горит дисплей 10 секунд основной цикл стопорится. через millis() надо задержку вычислять... При каждом нажатии кнопки забивать в переменную текущее значение millis(); И в главном цикле сравнивать пока текущее значение отличается от записаного в переменной менее чем на х миллиекунд то горит, а если больше, то тухнет. где x - время горения. Изменено 6.5.14 автор arch07 Изменено 6.5.14 автор arch07 |
|
#1969800 |
|
Завсегдатай, Кандидат в Советники
|
|
arch07 Да, наверное вы правы. |
|
#1969801 |
Завсегдатай, Кандидат в Советники
|
|
Пока ардуина на макете работает с целью выявления багов программы (а скетч я все еще корригирую), займусь мат.частью, т.е "железом". |
|
#1970514 Нравится Organism
|
Завсегдатай, Кандидат в Советники
|
|
Драйверы светодиодов будут получать питание от AC/DC блока питания 19V 4,7А (блок питания MW для ноутбуков). Кулеры для охлаждения воды и радиаторов будут запитаны от этого блока через отдельные преобразователи DC/DC на основе LM317, схема простейшая (гуглите сами, в инете их масса), на макете она заработала сразу. |
|
#1970559 Нравится Organism
|
|
Завсегдатай, Кандидат в Советники
|
|
Продолжаю репортаж о постройке ардуины. |
|
#1971559 Нравится Organism
|
Посетитель
|
|
Дядька-рыбомор Кнопочки зачетные. А они с "кликом"? Я подобные не нашел в митино. Все, либо монстры, либо без четкой фиксации нажатия Зато дихлоритана купил - склеил автокормушку и сейчас вожусь с крышкой аквариума. Корпус впечатляет. тока хоть зажигалку бы рядом - а то масштаб трудно оценить, хотя судя по плате достаточно компактный. |
|
#1971590 |
Завсегдатай, Кандидат в Советники
|
|
сообщение arch07 Нет, бесшумные. Обычная тактовая кнопка. Покупал на нашем радиорынке по 20 руб. Хочу на e-bay такие найти, наверняка дешевле выйдет. Корпус впечатляет. тока хоть зажигалку бы рядом - а то масштаб трудно оценить, хотя судя по плате достаточно компактный. Размер понятен по дисплею: ширина 9 см, высота около 7 см, глубина 11 см. Первоначально хотел и плату с драйверами всунуть в один корпус с ардуиной, но слишком громоздкая коробка вышла бы, расположу драйвера в самом светильнике. |
|
#1971769 |
|
Посетитель
|
|
Дядька-рыбомор Дисплей-дисплею рознь... У меня сейчас 1602 - мелкий, а 2004 - буквы раза в 1,5-2 больше, соответственно и дисплей крупный. Но размерчик классный, я по ардуинке потом сориентировался. Э-э-э нет. Тактовая - это с жестким положением нажато-отжато по клику. А енто тогда обычные кнопки. Таких у нас богато. Но не то Хочется "клик". Тактильный отклик. попробую замутить из микрокнопочек тактовых. Бот жалко я профукал старые советские транзисторы в мет. корпусах - из них отличные бы кнопочки получились. А я зато "люстру" доделал и кормушку В "светодиодном освещении" фотки выложил. Теперь переключаюсь на контролер полностью. Надо СО2 и удобрения под свет подгонять. Вот придумаю как с кнопками решить... Р.S. Спасибо за наводку на способ травления лимонкой с солью. Изменено 13.5.14 автор arch07 |
|
#1971969 |
Завсегдатай, Кандидат в Советники
|
|
Чем ближе продвигаешься к намеченной цели, тем больше возникает непредвиденностей, особенно если учесть "чайниковость" ТС, т.е. меня. Себестоимость почти как у кbтайца с e-bay, зато можно собрать на любой общей плате, а не подключать отдельную плату или шилд. ЗЫ. Вот я балда, все-таки. Про закон сохранения энергии забыл, да. Ведь лишние вольты-ватты с кристалла стабилизатора должны куда-то деваться? А их на 7805 нехило выделяется. (19-5)*0,38=5,32 ватта!!! Корпус ТО-220 расщитан только до 1 Вт макс. Это ж придется ставить радиатор аж 100 кв.см, а он не влезет в корпус, ну или нехило так тепло будет внутри корпуса (как говаривал Карлсон: "Домомучительницу? В эту маленькую коробочку?"). Изменено 17.5.14 автор Дядька-рыбомор Изменено 18.5.14 автор Дядька-рыбомор |
|
#1972971 |
Посетитель
|
|
Дядька-рыбомор Линейный стабилизатор 7805 имеет смысл использовать при разнице напряжений в несколько вольт, иначе при сколько нибудь заметном токе КПД ниже плинтуса и проблемы с теплоотводом: 14*0.36= 5ватт пошло в тепло, тут без радиатора не обойтись 5*0,36= 1,8ватт скушала схема КПД = 26% При такой разнице напряжений надо импульсный преобразователь, который сложнее и помехи генерирует, но не будет переводить мощность на обогрев атмосферы. Или искать входной БП на напряжение 7-9В. |
|
#1973009 |
|
Завсегдатай, Кандидат в Советники
|
|
сообщение dkozyrev Да, греем атмосферу, получается. Или искать входной БП на напряжение 7-9В. Я думаю, что оставлю usb-питание от телефонной зарядки, работает она уже много дней, проблен не было. Кстати, при подключении от БП на 9В не кисло греется уже сама плата адруино , вернее стабилизатор, установленный не ней. |
|
#1973019 |
Посетитель
|
|
Чем ближе продвигаешься к намеченной цели, тем больше возникает непредвиденностей Мне нравится Ваш подход и Ваше упорство! Наблюдаю за темой и желаю успешного завершения. Зарядные устройства от современных мобильных устройств (маленькие блоки питания с USB разъемом) выдают 5V и где-то 1-1.5А тока. Я думаю Вам подошел бы такой блок питания, шнурок с USB разъемом и разъемом питания спаять не проблема, в принципе. Там уже есть и трансформатор, и стабилизатор, и фильтр. |
|
#1973244 |
Посетитель
|
|
Большое спасибо вам за тему. Очень нравится ваш подход к делу. Хотелось бы уточнить как вы подключали кнопки? Нет возможности начертить схему так как делает Z0RS? И зачем к датчикам температуры нужны "подтягивающие резисторы термодатчика и кнопок"? |
|
#1974142 |
|
Завсегдатай, Кандидат в Советники
|
|
сообщение Bwzs Так, все смешалось в доме Облонских. Подтягивающие резисторы нужны как к датчику ds18b20, так и для кнопок. Для датчика ds18b20 по даташиту он должен включаться между выводами DATA и VCC и иметь номинал 4,7 ком (это подробно написано в теме ZORS). Для кнопок резистор (не менее 4,7 ком) должен подключаться между GND ардуины и тем выходом, куда подключается кнопка. Это подробно изложено тут . Если используется один аналоговый выход для нескольких кнопок (для экономии выходов), то можно организовать АЦП (аналогово-цифровой преобразователь) при помощи нескольких резисторов разных номиналов, включенных между аналоговым выходом, кнопкой и VCC. Вот набросал примерную схемку (подключение к А0). Кол-во кнопок (и резисторов) естесственно может быть бОльшим. Теперь как рассчитывать параметры. Нужно при нажатой кнопке измерить напряжение на подтягивающем резисторе (у меня на схеме 10 ком). Допустим, оно равно 3 В. Делаем нехитрое действие 3:5*1024=614,4 и в скетче в нужном нам месте указываем этот параметр в некотором диапазоне, к примеру >610 && Если кнопок много, нужно проследить, чтобы диапазоны не пересекались и более точно подбирать номинал резисторов. Общую схему получившегося контроллера и скетч обязательно выложу. |
|
#1974554 |
Завсегдатай, Кандидат в Советники
|
|
Очередной отчет за неделю (работа не дает двигаться быстрей). Как видно, сделал заднюю стенку с разъемами и подключил релейный модуль к основной нагрузке: USB для питания и компиляции, вход/выход 220 В для со2 клапана, вход 19 В от блока питания, выход 19 В для питания драйверов ЛЭД, кулеров, выход ШИМ, входы для термодатчиков (для них использовал 3,5 мини-джек с тремя контактами). Сзади видна кнопочка для коррекции часов "21:00" Пока система проходит тестирование. |
|
#1974567 |
Посетитель
|
|
Дядька-рыбомор Огромное спасибо за ответ. Вот нашел небольшую статью с видео где показывают как подключить кнопки ( если есть еще такие тугие как я) http://nnm.me/blogs/... |
|
#1974665 |
|
Завсегдатай, Кандидат в Советники
|
|
#1974681 |