Официальный сайт компании Arduino по адресу arduino.cc
Умный курятник....проблемы со всем, нид хелп
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте!
Мой проект «умного курятника»
Есть Arduino mega ADK (питается от отдельного блока)+ Ethernet shield+ DS1307+ 2 DHT22 + актуатор (12V, закр/откр дверки курятника, работает от Motor Driver 43A H-Bridge) + модуль 8 реле к нему + 12V двигатель(обеспечивает работу конвейера) + 2 вентилятора (220V) + 2 двигателя (220 V, открывают ставни) + светильники
Собственно ай нид хелп… ардуинка раз в день виснет рандомно – диодики мигают, реле работают по принципу «ласт стэйт» (после резета все работает нормально какое –то время), периодически начинают «играть» все электроприборы (рандомно вкл/выкл на 1-2 секунды, не больше). Разделил питание ардуинки с Ethernet и всей остальной электроники. Все провода питания – ферритовые кольца. Не помогло(((
…не сплю ужо неделю, на дачу ездить зае…лся(((( Код тут…Что не так? Как можно оптимизировать? Что можно поправить? Пожалуйста посоветуйте (и икра не лезет в горло и компот не льется в рот)….
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif const int f = 41; // RPWM кор\бел откр t const int r = 39; // LPWM коричн закр ////////////////////// #include <Wire.h> #include <DS1307.h> #include <SPI.h> #include <Ethernet.h> #include "DHT.h" #define RELE_1 30 //vent out #define RELE_2 32 //vent in #define RELE_3 34 // svet //#define RELE_4 36 // //#define RELE_5 38 // //#define RELE_6 40 // #define RELE_7 42 // konvyer #define RELE_8 44 //stavni #define ON 0 #define OFF 1 #define DHTTYPE DHT22 DHT dht(45, DHTTYPE); DHT dht1(46, DHTTYPE); int hours; int minutes; int On_Time =0; int Off_Time =0; int Curent_Time = 0; int iNVisitas=0; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xEE, 0xEE }; byte ip[] = { 192,168,1, 177 }; EthernetServer server(84); void setup() { pinMode(f, OUTPUT); pinMode(r, OUTPUT); pinMode(RELE_1, OUTPUT); pinMode(RELE_2, OUTPUT); pinMode(RELE_3, OUTPUT); // pinMode(RELE_4, OUTPUT); // pinMode(RELE_5, OUTPUT); // pinMode(RELE_6, OUTPUT); pinMode(RELE_7, OUTPUT); pinMode(RELE_8, OUTPUT); digitalWrite(RELE_1, OFF); digitalWrite(RELE_2, OFF); digitalWrite(RELE_3, OFF); // digitalWrite(RELE_4, OFF); // digitalWrite(RELE_5, OFF); // digitalWrite(RELE_6, OFF); digitalWrite(RELE_7, OFF); digitalWrite(RELE_8, OFF); Ethernet.begin(mac, ip); server.begin(); dht.begin(); dht1.begin(); } void loop() { hours = RTC.get(DS1307_HR,true); minutes = RTC.get(DS1307_MIN,false); ///////////////////////////температура float h = dht.readHumidity(); float t = dht.readTemperature(); float h1 = dht1.readHumidity(); float t1 = dht1.readTemperature(); ////////////////////////////////////Конвейер On_Time=18*60+15; // 18-15 Off_Time=18*60+16;// 18-16 Curent_Time=RTC.get(DS1307_HR,true)*60+RTC.get(DS1307_MIN,false);//текущее время if(On_Time < Off_Time) //Проверка, таймер в течении одних суток? { if (Curent_Time >= On_Time && Curent_Time <= Off_Time) { digitalWrite(RELE_7, ON); } else { digitalWrite(RELE_7, OFF); } } else // если сутки сменились { if ((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time))//2820=24часа*60 { digitalWrite(RELE_7, ON); } else { digitalWrite(RELE_7, OFF); } } ////////////////////////////// Дверка +вент 1 и 2 if (hours >= 8 && hours < 22) { digitalWrite(f, HIGH ); // вперед откр digitalWrite(r, LOW ); digitalWrite(RELE_1, ON); digitalWrite(RELE_2, ON); } else { digitalWrite(f, LOW); // назад digitalWrite(r, HIGH); digitalWrite(RELE_1, OFF); digitalWrite(RELE_2, OFF); } if (hours >= 18 && hours < 23) { //реле3 свет digitalWrite(RELE_3, ON); } else { digitalWrite(RELE_3, OFF); } if (hours >= 7 && hours < 22) { //реле ставни откр digitalWrite(RELE_8, ON); } else { digitalWrite(RELE_8, OFF); //реле ставни закр } // listen for incoming clients EthernetClient client = server.available(); if (client) { // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); client.println("<html>"); // add a meta refresh tag, so the browser pulls again every 5 seconds: client.println("<meta http-equiv=\"refresh\" content=\"5\">"); client.print("Ulica "); client.print(t); client.println(" *C"); client.print(h); client.print(" %\t"); client.println("<br />"); client.print("Kuryatnik "); client.print(t1); client.println(" *C"); client.print(h1); client.print(" %\t"); client.println("<br />"); client.println("<br />"); client.print(hours); client.print(":"); client.print(minutes);//read minutes without update (false) client.print(":"); client.print(RTC.get(DS1307_SEC,false));//read seconds client.print(" "); // some space for a more happy life client.print(RTC.get(DS1307_DATE,false));//read date client.print("/"); client.print(RTC.get(DS1307_MTH,false));//read month client.print("/"); client.print(RTC.get(DS1307_YR,false)); //read year client.println("<br />"); //////////////////////////////////////////////////// Дверка if (hours >= 8 && hours < 22) { client.print("Kuryatnik otkryt 8-22 "); // вперед откр client.println("<br />"); client.print("FAN ON .....8-22 "); client.println("<br />"); } else { client.print("Kuryatnik zakryt 8-22 "); // назад client.println("<br />"); client.print("FAN OFF "); client.println("<br />"); } if (hours >= 7 && hours < 22) { client.print("Stavni otkryty 7-22 "); // вперед откр client.println("<br />"); } else { client.print("Stavni zakryty 7-22 "); // назад client.println("<br />"); } if (Curent_Time >= On_Time && Curent_Time <= Off_Time) { //реле7 конвейер client.print("Konveer ON 18:15 "); // client.println("<br />"); } else { client.print("Konveer OFF 18:17 "); // client.println("<br />"); } if (hours >= 18 && hours < 23) { //реле3 свет client.print("Svet ON 18-23 "); // client.println("<br />"); } else { client.print("Svet OFF 18-23 "); // client.println("<br />"); } client.println("<br />"); client.print((iNVisitas++)/2); client.println(" visitas <br />"); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); } }
питание опиши подробно
Ардуинка + Ethernet - 12V трансформаторный БП, датчики, часы, реле... ( 12V и 5V) от компьютерного БП. Земля общая.
питание опиши подробно
согласен, где то, в какое то время что то начинает работать одновременно и просаживает питание до "ну его нафиг"
откуда на ардуине берется 5В и 3.3В?
я кому написал? специально для тупых и пьяных, опиши питание подробно!!!
Ардуинка + Ethernet - 12V трансформаторный БП (от него 5V на ардуинке). Датчики, часы, реле... ( 12V и 5V) от компьютерного БП. Земля общая.
от ардуинки выходы , на реле (сигналы + 5V от питания от ардуинки только на логику, тело модуля реле - питание от комп БП) и моторшилд (только сигналы)
да он издевается. откуда берется 5В на ардуине если на бп 12В???
да он издевается. откуда берется 5В на ардуине если на бп 12В???
ты чет какой то злой. пятница же. разлабся. впереди выходные.. или тебя заставляют копать огород?
тяжелый день. очень тяжелый. плюс в пивном ресторане посидел, да еще потусил с компанием с пивом. алкоголь видно спускает тормоза мои
по порядку: Ардуино питается от 12 V трансформаторного БП 1А( 12V вставлены в разъем питания в ардуино! она мега, там можно втыкать 7-12V). Все, больше ничего от него не питается.
Модуль реле, датчики, шилд, часы - от комп БП 400вт. От него 5V на реле, часы, датчики температуры. 12 V на шилд и мотрчики. Ставни (моторы на 220V, стоит отдельное 5 V реле, подключено к реле модулю). Свет, вентиляторы подключены к модулю реле.
понятно. езернет шилду не хватает питания. встроенный стабилизатор в ардуину не справляется. ставь импульсный на MP1584 или XM1584. если таких нет хотя бы LM2596
ну вот я ответил без наездов))) не настолько пьян)))
кстати с импульсного стабилизатора, настроенного на 5В, подавать сразу на пин 5В, а не Vin
т.е. им (импульсный на MP1584 или XM1584) питать ардуинку? или езернет еще как то отдельно питать?
я бы предположил что стабилизатор на ардуине не переваривает 12 вольт. грееться и отваливает..
кто знает что там китайцы впихнули для стабилизации
все вместе питать. ардуина потребляет очень мало по сравнению с эзернет
ARDUINO Mega 2560 Input Voltage (recommended) 7V-12V вроде так. 12V вставлено в штекерное гнездо дуинки
все вместе питать. ардуина потребляет очень мало по сравнению с эзернет
попробую, спасибо)
а еще что может быть? код нормальный?
но это для самой ардуины. ей достаточно конечно с небольшим запасом
но там не говорится если вы на питание ардуины что то повесите, например эзернет, все будет "четко" работать
все вместе питать. ардуина потребляет очень мало по сравнению с эзернет
попробую, спасибо)
а еще что может быть? код нормальный?
да кто ж его знает. вроде логично написан на беглый взгляд. ничего в глаза не бросилось
ок, буду пробовать, спасибо
ARDUINO Mega 2560 Input Voltage (recommended) 7V-12V вроде так. 12V вставлено в штекерное гнездо дуинки
дизайн ардуинки меняеться как кому зачешется... и что у вас стоит в качестве стабилизатора не известно.. берете увеличилку и расматриваете. читаете даташит. делаете выводы...
но скорее всего стоит то что было дешевле всего на момент сборки
Поменял блок питания на ардуинку - 3 А 5 V (фактически выдает 5.10V) ... не помогло((( также свистопляска с двигателями и светом((( Что может еще быть?
Может перейдем к лечению по фотографиям? А то хрустальный шар сбоит.
watchdog пробуйте. у меня тоже периодически одна из семи дунь виснет. это проблемы с библиотекой эзернетовской, она в ей подвисает когда у нее на определенном месте с коннектом проблемы или с данными на передачу (сильно не разбирался потому как некогда, мне проще ее переткнуть). У меня на ней висит просто дхт22. одну за последние 3 дня 3 раза перезапускал.
JollyBiber, у меня стандартный шилд 5100 стоит на дуне, остылает данные с датчиков температуры в сеть. Работает полгода без перезагрузок. Стандартная библа, стандартный скетч без вотч дога. Я это собссно к тому, что по моему мнению все рандомные подвисания и самоперезагрузки -это следствие аппаратных проблем.
JollyBiber, у меня стандартный шилд 5100 стоит на дуне, остылает данные с датчиков температуры в сеть. Работает полгода без перезагрузок. Стандартная библа, стандартный скетч без вотч дога. Я это собссно к тому, что по моему мнению все рандомные подвисания и самоперезагрузки -это следствие аппаратных проблем.
Угу. Например инет работает не стабильно. Через всякие 3г или 4г. Что и наблюдаем в данном случае.
Как я уже написал - у меня стоят 7 штук. 1 китайщина и 6 оригинальных с POE модулем. Китайская не висла ни разу :) Последнее время виснет только одна на чердаке, остальные 3 (2 пару раз перегружал) работают уже больше года без проблем. Не знаю почему, но поначалу почти все перегружал стабильно раз в неделю. Прикипели и поняли что придется работать? :) Поэтому грешу всетаки на коннект.
ТУ Пухлявый: Не, они во внутренней сети. Мой инет ЛТЕ только наружу. Данные с них которые можно посмотреть в инете это опрашивается локальный NAS.
ТУ Пухлявый: Не, они во внутренней сети. Мой инет ЛТЕ только наружу. Данные с них которые можно посмотреть в инете это опрашивается локальный NAS.
ну зная как ты и паяльник ненавидите друг друга. Он прав про проблемы в железе. Где то что-то болтается на соплях
Ты забыл про дуню прибитую на гвоздь к шкафу? Никаких соплей - все только на гвоздях!
Собственно вот фотографии...
https://drive.google.com/file/d/0B5R4bw54L0jMYnZRR3JfZzh2cjA/view?usp=sharing
https://drive.google.com/file/d/0B5R4bw54L0jMbVpabWZQd1pERzA/view?usp=sharing
https://drive.google.com/file/d/0B5R4bw54L0jMcUk5R0tsTDdmMjA/view?usp=sharing
https://drive.google.com/file/d/0B5R4bw54L0jMNVVNWFMwLUhHa2c/view?usp=sharing
https://drive.google.com/file/d/0B5R4bw54L0jMUUFYRHlPWVNnSkU/view?usp=sharing
(не заливаются фотографии на здешний сервер(((
Сегодня убрал комп БП (400 Вт вхолостую жрут свет). Поставил на электроннику 3А БП +5V +12V. На ардуинке отдельный 1.4А БП +9V. Оставил только 7-ое,8-ое и 1-ое,2-ое реле (без них никак). В коде поправил пределы температуры- добавил везде <= или >= (вместо <, >). ....10часов полет нормальный.... Грешу на модуль реле - там вроде 1 реле в серединке вылетело - стало нормально замкнутым вместо разомкнутого. Такая же ситуация быдла и с 4 релейным предыдущем модулем (там вылетели 3 реле из 4). ХЗ может реле кривые...а может и мои руки...
watchdog у меня выполняет электронный таймер))) сам watchdog не решился вставить- боюсь дуинку в loop введу...
или реле... или комп БП...или кривые руки...или злые духи
watchdog у меня выполняет электронный таймер))) сам watchdog не решился вставить- боюсь дуинку в loop введу...
Это как? Наружний?
Да) обычный таймер на розетку))) 2 раза в сутки рестарт) на фотках он есть
то есть если не повезло совсем, то 11 часов 59 минут висит? :)
Грустно, но так. но мне по сути много не надо- в 8.00 открытие ставен на окнах (если не закрыты на ночь и до утра- петух орет с 4 утра- соседи грозятся меня убить), открытие дверки курятника(критично). 18.15-18.17 старт конвейера (не критично- ручками яйца соберу). 19.00-23.00 вкл света (не критично). 22.00 закрытие ставен и дверки (относительно критично). Температура - просто интереса ради. Таймер вкл в 7.59 и в 21.59 чтоб важные моменты включились)))
таймер со вчера забыл включить....но сутки ужо полет нормальный)))) виноваты походу дела реле....
Запитай реле отдельно ( НИ коем случае нельзя питать от радуины больше 2-х реле, питания не хватит) не делай общий минус с реле постави конденсаторы электролит+керамику возле реле и возле дуины
если не поможет вытащи реле и все что 220в из ящику куданибудь подальше от низковольтного, а ящик с низковольным замотай фольгой
если кабель к езернет очень длинный поставь грозазащиту, ну это так чтоб во время грозы не висло .
на модуле реле нужно разорвать GND оптронов от GND питания реле - без этого развязка по питанию НЕ полная
Запитай реле отдельно ( НИ коем случае нельзя питать от радуины больше 2-х реле, питания не хватит) не делай общий минус с реле постави конденсаторы электролит+керамику возле реле и возле дуины
если не поможет вытащи реле и все что 220в из ящику куданибудь подальше от низковольтного, а ящик с низковольным замотай фольгой
если кабель к езернет очень длинный поставь грозазащиту, ну это так чтоб во время грозы не висло .
Только 2 реле одновременно??? Зачем (Нах...я) тогда дуинка нужна??? Проще таджика нанять....
на модуле реле нужно разорвать GND оптронов от GND питания реле - без этого развязка по питанию НЕ полная
Модуль такой http://www.ebay.com/itm/271738487715?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT вроде там есть развязка...хотя ваше предколожение об остающемся общем питании имеет место быть - не с чему дуинке просто так дергаться.... Где искать оставшуюся землю? и потом земля все равно пойдет на датчики ( которые питаются от того же блока что и реле.....) Ставить 3 й блок питания?
Хотя скоро придет это http://www.ebay.com/itm/351248208122?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT попробую...может качественней окажется...
и потом земля все равно пойдет на датчики
это уже будет другая земля....
...помехи любят гулять по понравимавшимся им цепям :(
Только 2 реле одновременно??? Зачем (Нах...я) тогда дуинка нужна??? Проще таджика нанять....
два реле питать, а управляй хоть 30.
просто 5в ардуины дает максимум 500 мА(или 1000мА точно не помню) а на 1 реле на 100-150мА (примерно). както так.
DrLOR, если хотите решить вопрос по -уму, то вам нужно нарисовать схему соединений и предоставить её сюда в студию. Нужно достоверно отобразить места соединений, и если проводники длиннее 20см то проставить их примерную длину. Без схемы всё что тут происходит -одни гипотезы, никаких фактов. Перед этим измерить потребляемый ток от обоих БП, сделать эквивалент нагрузки с удвоенным потреблением, и снять напряжение и пульсации обоих БП под этой нагрузкой. Если последняя часть трудна, то возьмите где нибудь временно заведомо хороший (желательно новый, не из дешевых моделей) комповый БП, и запитайте всё только от него одного.
Рисовать схемы не умею...это лучшая из всех получилась
https://drive.google.com/file/d/0B5R4bw54L0jMLVkySWRZMTlobWM/view?usp=sharing
...вроде получилось
+ если кому пригодится... есть ODROID U3 c Teamviewer на борту (5вольт питание), 2 поворотные камеры Wanscam (1 в курятнике, другая под крышей дома), Роутер асус(не помню точно какой) + 4G модем + антена. Все это обеспечивает видеонаблюдение + данные с ардуинки. Это для тех у кого нет проводного нета на даче.
что такое КОНВЕЕР? сервопривод на 50 ампер?
что такое КОНВЕЕР? сервопривод на 50 ампер?
такой вот двигатель, крутящий конвейер для яиц
http://www.ebay.com/itm/GW31ZY-14-12VDC-Self-Lockable-Robot-Drive-Turbine-Gear-Box-Motor-w-Single-Shaft-/161096757078?pt=LH_DefaultDomain_0&hash=item25821d6f56
актуатор типа такого 12 v 300mm 394 LBS http://www.ebay.com/itm/6-inch-stroke-linear-actuator-198LBS-12V-24V-36VDC-feedback-signal-Potentiometer-/271147164544?pt=LH_DefaultDomain_0&hash=item3f21a16380
кому интересно, могу выложить видео с тестовой работой конвейера
ну в общем то можно гадать до бесконечности... но думаю что один фиг все упреться в питание...
хотя тут же изернет шильд.. наверное метров 50 кабель изернетовский? вперемешку с силовыми.. насколько я помню у W5100 как то все печально с развязкой ... если отсоединить изернетовский кабель то скорее всего виснуть перестанет.
3й день- полет нормальный. Зависаний не было (даже планово не перезагружал- забыл таймер активировать).
Все дело в кЕтайском модуле реле....горят они блин((( либо действительно нельзя много реле одновременно запускать...сейчас максимум 3 одновременно работают...
Все дело в кЕтайском модуле реле....горят они блин((( либо действительно нельзя много реле одновременно запускать...сейчас максимум 3 одновременно работают...
гыыы реле китайские расчитаны на китайское электричество ( которое по заявлению китайцев еще до конца не изучено) и китайские нагрузки... не нужно на них вешать много...
DrLOR, дело в том что ты запитал все реле от ардуины и не важно что включаешь ты только 3, реле управляется минусом и есть вероятность глюка ардуины и одновременное включение всех реле на микросекунду и все считай дуина повисла.
DrLOR, а какая мотивация была использовать два БП ? И логичнее было бы реле запитать от большого бп, а датчики от ардуины.
DrLOR, а какая мотивация была использовать два БП ? И логичнее было бы реле запитать от большого бп, а датчики от ардуины.
http://arduino.ru/forum/apparatnye-voprosy/navodki-pri-kommutirovanii-22...
как только начались глюки взял второй БП для ардуинки