Автор Тема: Создание периодики на Arduino  (Прочитано 5163 раз)

Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #160 : 29 Август 2017, 18:55:50 »
для начала опишите "хотелки", что ждете от того о чем "начали задумываться"
Хотелки - запилить свой коллайдер. Поднять сервер с рест-интерфейсом/ui и БД на, скажем, Heroku. Повесить на ардуину/вемос пяток датчиков (температура, тдс, освещенность, етц). Подключить к ней помпу для затопления  (думаю лучше взять на 12в, неохота возиться с 220). Учитывая то, что зима близко - отдельно докупить фито-светильники, и управлять ими с той же платы.
В железе - без экрана и кнопочек, все через вебъ.
Беспокоит один момент - пайка. С этим все плохо, получается жесть и уродство. Так что есть желание взять те мозги, куда в плане датчиков нужно просто повставлять в плату штекеры (тдс-метр отдельная тема).
А также чтоб в мозгах хватило портов на все датчики и реле.

Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #161 : 11 Сентябрь 2017, 19:14:58 »
Подскажите такой вот момент. Начал задумываться о периодике, гуглю вот для начала ардуинку для этой темы. Нашел на алике вот такой лот https://ru.aliexpress.com/store/product/UNO-R3-CH340G-ATmega328P-compatible-for-Arduino-UNO-R3/1950989_32523366108.html?spm=a2g0v.12010612.0.0.47d739c1586kW
Такое исполнение подойдет для наших дел? Просто в местных интернет-магазинах оригинал (вроде как) продается вчетверо дороже. Возникает вопрос - все ли с китайским клоном норм или я что-то не вкуриваю?

Вопрос 2: что еще понадобится для обвеса ардуины в минимальном сетапе периодики? Твердотельное реле для коммутации 220в насоса либо просто 12в насос? Что-то еще?
Для периодики в простейшем варианте (периодическое включение помпы) можно применить что угодно: от ATTINY13 за пару центов до Raspberry за 50+$.
Выбранная Вами Ардуино Уно (либо её аналог в меньшем форм-факторе Ардуино Нано) - самый оптимальный вариант по соотношению простоты и цены. Нану за 3-4 доллара не сложно найти даже в оффлайне. За оригиналом гнаться смысла нет, работают они на одинаковых микросхемах, а больше там ломаться нечему.
Можно еще глянуть в сторону Wemos D1 mini - почти то же самое, но плюс ВайФай на борту и за ту же цену. В будущем, если планируется апгрейд, позволит упростить и удешевить конструкцию устройства (весь интерфейс, т.е. отображение информации и управление, можно будет перевести в телефон или компьютер, что избавит от необходимости приобретения кнопок, энкодеров, дисплеев и т.д.). Тут уже на желания/возможности ориентироваться нужно.
Обвес зависит от выбраной (имеющейся в наличии) помпы.
Если это 220V, то я бы взял OMRON G3MB-202P, очень приятная штука.
Если 12V, то: транзистор, сборка Дарлингтона, либо обычное механическое. Последнее можно и для 220V, но OMRON лучше (проще подключать, не нужно тянуть питание, бесшумное, долговечное).

По поводу реле - вот эта штука подойдет http://geekmatic.in.ua/ua/relay/modul_tverdotelnogo_rele ?
У меня уже в руках есть nodeMCU, он юзает 3.3в (хотя есть порт microUSB который подразумевает поддержку 5в). И пока что не особо понятно будет ли оно в связке из коробки работать.
На модуле реле есть 2 контакта для силовой части - тут все понятно. И есть 3 контакта для управления - 5в, земля и сигнал. И чот я пока не могу понять как с ними быть. С сигналом понятно - вешаем на какой-нибудь GPIO. На ноде есть контакт 5в - подойдет ли он для питания реле?

Почитал интернет, пишут что 5в на ней это прямиком от USB идет. Т.е. по идее вышеперечисленная схема коннекта должна работать?
« Последнее редактирование: 11 Сентябрь 2017, 19:19:25 от Ouroboros »

Онлайн Ann

  • Глобальный модератор
  • Habanero
  • *****
  • Сообщений: 1514
  • Лойсы: +118/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #162 : 11 Сентябрь 2017, 19:31:39 »
По поводу реле - вот эта штука подойдет http://geekmatic.in.ua/ua/relay/modul_tverdotelnogo_rele ?
Да, это оно. Можно без модуля взять, чистую Правда она подразумевает пайку.

У меня уже в руках есть nodeMCU, он юзает 3.3в (хотя есть порт microUSB который подразумевает поддержку 5в).
Wemos что ли ? В нем стоит стабилизатор LM1117, который снижает 5 вольт до 3.3 вольт, на котором работает вся логика модуля.

И пока что не особо понятно будет ли оно в связке из коробки работать.
На модуле реле есть 2 контакта для силовой части - тут все понятно. И есть 3 контакта для управления - 5в, земля и сигнал. И чот я пока не могу понять как с ними быть. С сигналом понятно - вешаем на какой-нибудь GPIO. На ноде есть контакт 5в - подойдет ли он для питания реле?
Не понял о каких 3 контактах идет речь. Это реле имеет 4 контакта, 2 силовая часть и 2 управляющая. Подаете на управляющую часть землю и 3-5 вольт - диодик во внутреннем оптроне зажегся, реле замкнуло, подали меньше 2.5 вольт - диодик потух, реле разомкнуло. Оптрон потребляет 7мА, т.е. можно управлять напрямую цифровыми выходами Wemos. Всё очень просто и удобно. У меня сейчас такое в связке с Wemos  работает, больше полугода, нареканий никаких, маленькое, бесшумное и долговечное. Управляю им 3.3 вольтами.
« Последнее редактирование: 11 Сентябрь 2017, 19:40:43 от Ann »

Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #163 : 11 Сентябрь 2017, 19:43:36 »
Само реле - да, по 2 контакта. Но конкретно этот модуль - хз, ибо я вот здесь https://mysku.ru/blog/aliexpress/38586.html увидел вроде как тот же модуль, только с другой стороны, поэтому и подумал про 3 контакта для управления.

Wemos что ли ? В нем стоит стабилизатор LM1117, который снижает 5 вольт до 3.3 вольт, на котором работает вся логика модуля.
Ну почти, вот такое - http://geekmatic.in.ua/ua/NodeMcu_WIFI_ESP8266


Онлайн Ann

  • Глобальный модератор
  • Habanero
  • *****
  • Сообщений: 1514
  • Лойсы: +118/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #164 : 11 Сентябрь 2017, 19:51:18 »
Само реле - да, по 2 контакта. Но конкретно этот модуль - хз, ибо я вот здесь https://mysku.ru/blog/aliexpress/38586.html увидел вроде как тот же модуль, только с другой стороны, поэтому и подумал про 3 контакта для управления.
Понятно, здесь они дополнительно сделали управление через транзистор. Зачем - не понятно, реле и так управляется мизерным током 7мА, может для каких других микросхем, которые и 7мА потянуть не могут. Такое обычно делается в механических реле, там ток работы катушек не маленький.

Ну почти, вот такое - http://geekmatic.in.ua/ua/NodeMcu_WIFI_ESP8266
Ну да, почти то же самое. На плате только кучу пустых и ненужных выводов повыводили зачем-то. Маркетинг...

Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #165 : 11 Сентябрь 2017, 19:57:13 »
Ну почти, вот такое - http://geekmatic.in.ua/ua/NodeMcu_WIFI_ESP8266
Ну да, почти то же самое. На плате только кучу пустых и ненужных выводов повыводили зачем-то. Маркетинг...
Для меня основным фактором было наличие microUSB для питания и отсутствие нужды паять. А маркетологи идут лесом, твари :)

Алсо, если подключу это хрень удачно для насоса, наверно еще один возьму для управления светом. Может стоило двойное сразу брать, хз
« Последнее редактирование: 11 Сентябрь 2017, 19:58:56 от Ouroboros »

Онлайн Ann

  • Глобальный модератор
  • Habanero
  • *****
  • Сообщений: 1514
  • Лойсы: +118/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #166 : 11 Сентябрь 2017, 20:07:56 »
Алсо, если подключу это хрень удачно для насоса, наверно еще один возьму для управления светом. Может стоило двойное сразу брать, хз
Да там нечему быть неудачным :D Один управляющий пин и земля. Если по скетчу чего помочь - обращайтесь.

Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #167 : 11 Сентябрь 2017, 22:04:27 »
Алсо, если подключу это хрень удачно для насоса, наверно еще один возьму для управления светом. Может стоило двойное сразу брать, хз
Да там нечему быть неудачным :D Один управляющий пин и земля. Если по скетчу чего помочь - обращайтесь.
Та основы я уже вгрузил - коннекшн к wi-fi отправку тестовых данных на сервер. И конкретно тормознул на вопросе старта двух разных джоб (1- опрос датчиков с отсылкой на сервер, 2 - старт/стоп насоса) с разными кронами. Неохота руками писать свой собственный таймер/scheduler. Видать придется юзать прошивку nodeMCU.

Онлайн Ann

  • Глобальный модератор
  • Habanero
  • *****
  • Сообщений: 1514
  • Лойсы: +118/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #168 : 11 Сентябрь 2017, 22:24:55 »
Та основы я уже вгрузил - коннекшн к wi-fi отправку тестовых данных на сервер. И конкретно тормознул на вопросе старта двух разных джоб (1- опрос датчиков с отсылкой на сервер, 2 - старт/стоп насоса) с разными кронами. Неохота руками писать свой собственный таймер/scheduler. Видать придется юзать прошивку nodeMCU.
Вот куски моего кода отвечающего за помпу


#define D0 16  //TDS
#define D1 5   //SCL
#define D2 4   //SDA
#define D3 0   
#define D4 2   //LED помпа
#define D5 14  // 3 реле
#define D6 12  // DHT
#define D7 13  // 2 реле
#define D8 15  // 1 реле
#define TX 1
#define RX 3

//--------------------Pompa----------------------------
long freq=60; //периодичность включения в минутах
long dlit=5;   //длительность работы в минутах
long freq_last_time;
boolean flag_pompa=false;

//********************SETUP*********************************************************
void setup(void){
        pinMode(D4, OUTPUT);
}

//**********************LOOP**************************************************************
void loop(void){
      Pompa();
}

//----------Помпа-------------------------------------------------
void Pompa(){
  if(  (millis()-freq_last_time)>(freq*60000) && !flag_pompa ){
     digitalWrite(D4, HIGH);
     flag_pompa=true;
     freq_last_time=millis();
    }
  if(  (millis()-freq_last_time)>(dlit*60000) && flag_pompa ){
     digitalWrite(D4, LOW);
     flag_pompa=false;
    }
  }


По датчикам смотреть нужно, на каждый датчик свой подход.

Оффлайн vadkoff

  • Habanero
  • *****
  • Сообщений: 957
  • Лойсы: +73/-2
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #169 : 11 Сентябрь 2017, 22:45:16 »
Вы слушайте-слушайте и внемлите информацию от Ann, он за бутылку, правда хорошую, сам того не зная, забабахал автоматику на аквариумное освещение с рассветами и закатами; не стесняйтесь, он сумасшедший  :D

Онлайн Ann

  • Глобальный модератор
  • Habanero
  • *****
  • Сообщений: 1514
  • Лойсы: +118/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #170 : 11 Сентябрь 2017, 22:52:12 »
Вы слушайте-слушайте и внемлите информацию от Ann, он за бутылку, правда хорошую, сам того не зная, забабахал автоматику на аквариумное освещение с рассветами и закатами; не стесняйтесь, он сумасшедший  :D
Ну, не без этого, конечно, бабахи были, куда ж без них  :D


Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #171 : 12 Сентябрь 2017, 18:58:05 »
Та основы я уже вгрузил - коннекшн к wi-fi отправку тестовых данных на сервер. И конкретно тормознул на вопросе старта двух разных джоб (1- опрос датчиков с отсылкой на сервер, 2 - старт/стоп насоса) с разными кронами. Неохота руками писать свой собственный таймер/scheduler. Видать придется юзать прошивку nodeMCU.
Вот куски моего кода отвечающего за помпу


#define D0 16  //TDS
#define D1 5   //SCL
#define D2 4   //SDA
#define D3 0   
#define D4 2   //LED помпа
#define D5 14  // 3 реле
#define D6 12  // DHT
#define D7 13  // 2 реле
#define D8 15  // 1 реле
#define TX 1
#define RX 3

//--------------------Pompa----------------------------
long freq=60; //периодичность включения в минутах
long dlit=5;   //длительность работы в минутах
long freq_last_time;
boolean flag_pompa=false;

//********************SETUP*********************************************************
void setup(void){
        pinMode(D4, OUTPUT);
}

//**********************LOOP**************************************************************
void loop(void){
      Pompa();
}

//----------Помпа-------------------------------------------------
void Pompa(){
  if(  (millis()-freq_last_time)>(freq*60000) && !flag_pompa ){
     digitalWrite(D4, HIGH);
     flag_pompa=true;
     freq_last_time=millis();
    }
  if(  (millis()-freq_last_time)>(dlit*60000) && flag_pompa ){
     digitalWrite(D4, LOW);
     flag_pompa=false;
    }
  }


По датчикам смотреть нужно, на каждый датчик свой подход.
Интересно. Я правда хотел сделать привязку именно к часам, но то такое. Перфекционизм, ёпт.

Есть вопросы по поводу датчиков. Присматриваюсь к DHT-22 & HC-SR04 (для определения уровня компота в емкости). По первому - в том же магазе есть датчик, а есть типа модуль с этим же датчиком "с подтягивающим резистором" - оно вообще надо?
По датчику расстояния я пока вообще хз, какой-то он стремный.

Онлайн Ann

  • Глобальный модератор
  • Habanero
  • *****
  • Сообщений: 1514
  • Лойсы: +118/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #172 : 12 Сентябрь 2017, 19:32:50 »
Интересно. Я правда хотел сделать привязку именно к часам, но то такое. Перфекционизм, ёпт.
Да можно и по часам, в чем проблема. Можно использовать внутренний таймер (есть минус, при включении нужно выставлять время и при выключении сбиваются, либо делать синхронизацию по интернету) либо купить модуль часов.
Есть вопросы по поводу датчиков. Присматриваюсь к DHT-22 & HC-SR04 (для определения уровня компота в емкости). По первому - в том же магазе есть датчик, а есть типа модуль с этим же датчиком "с подтягивающим резистором" - оно вообще надо?
По датчику расстояния я пока вообще хз, какой-то он стремный.
Подтягивающий резистор нужен обязательно, это его схема включения по даташиту, поэтому если проблема с пайкой, лучше купить уже с ним.
HC-SR04 у меня работал пару месяцев. Понравился, на удивление точный и легко программируется. Да и крайне полезная штука, когда летом взрослые расстения начинают глушить по 3+ литра в сутки, очень помогает не забывать подливать раствор.

Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #173 : 11 Октябрь 2017, 14:17:26 »
Вылезла проблема. Засетапил бета-версию, вроде даже работает. Правда пока не все датчики вкрутил и с тдс-метром из вилки пока не разобрался (нужен ман от Ann). Еспшка шлет данные с датчиков в админку каждые 5 минут и вроде бы все работает. Но стоит ей побегать сутки и чуть-чуть, начинается фигня какая-то: есп пытается слать репорт каждые 5 минут, а на хост данные приходят каждые 20, т.е. по дороге ~ 3 из 4 репортов теряются.
В консольке есп, куда выкидывается всякий дебаг, я вижу что отсылка данных нормально триггерится каждые 5 минут (т.е. проблема не внутреннего таймера/кривых рук работы со временем), а вот коннекшн установить не может.
Появилась мысля, что падает хост, но нет. В то время, когда есп не может законнектится, руками заходишь - и работает.
Думал было еспшка теряет соединение wifi - но если бы она его теряла, плата бы просто уходила в тотальное радиомолчание, а она, скотина, просто не может приконнектится в 75% случаев.
const char* host = "...smth...";
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host.port)) {
    serial.println("Cant connect");
}
WiFi инициализируется в режиме WIFI_STA.
Перед каждой отправкой чекаем статус коннекта вайфая, если не WL_CONNECTED то переподключаемся - это попытка пофиксить возможный отвал вайфая, но не помогло.

Оффлайн PowerTech

  • Serrano
  • ***
  • Сообщений: 170
  • Лойсы: +11/-0
  • Василий
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #174 : 11 Октябрь 2017, 14:25:18 »
У себя подобное наблюдал при нестабильном/грязном питании esp(помогает электролит по питанию), также редко наблюдаю что рутер не справляется, у меня 20+ устройств онлайн.
« Последнее редактирование: 11 Октябрь 2017, 14:32:02 от PowerTech »

Оффлайн Ouroboros

  • Pimento
  • *
  • Сообщений: 49
  • Лойсы: +0/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #175 : 11 Октябрь 2017, 15:02:54 »
У себя подобное наблюдал при нестабильном/грязном питании esp(помогает электролит по питанию), также редко наблюдаю что рутер не справляется, у меня 20+ устройств онлайн.
Да как бы хз, питание/железо сразу бы морочило голову, имхо. А тут только через сутки, а переподключил - снова работает как часы. Не покидает стойкое чувство, что это софтовая/прошивковая проблема. Мож flush() какой-то не делаю там, где его делать стоило бы.
В любом случае питание идет по юсб от стационарника, попробую воткнуть в зарядку для смарта и в розетку. Посмотрим что изменится от смены железа питания.
И наверное надо в дебаг сделать вывод всей-всей вайфай-релейтед инфы при каждой отправке данных.
Как вариант возможно стоит подумать чтобы еспшка себя ребутала раз в сутки (ну самый крайний вариант)

Онлайн Ann

  • Глобальный модератор
  • Habanero
  • *****
  • Сообщений: 1514
  • Лойсы: +118/-0
    • Просмотр профиля
Re: Создание периодики на Arduino
« Ответ #176 : 11 Октябрь 2017, 16:02:04 »
Проблемы с подключением и у меня были и я их так и не решил окончательно.
Вначале даже ставил ватчдог (принудительный ребут в случае неудачной отправки двух пакетов подряд).
Потом просто сделал переподключение в случае неудачной отправки. И 1-2 раза в сутки такие переподключения случаются. В принципе не критично, поэтому не стал заморачиваться дальнейшим выяснением, списал всё на роутер, он у меня старичок.

Сделайте и себе что-то подобное. В случае если происходит неудачная отправка (сервер не прислал код успеха) переподключите его к вафле, ну и каунтер количества таких переподключений в дебаг, понаблюдать, может какая корреляция проявится.
И выложите весь скетч, мож там неочевидность какая закралась.

По ТДС-метру.
Там есть два варианта: один простейший (через делитель напряжения на аналоговый порт), второй по науке - переменное напряжение на электродах частотой 1кГц. У меня первый, по нему могу помочь.