Автоматический полив в саду, эл. клапана на 12 v.

Dlopoel
Offline
Зарегистрирован: 15.05.2017

Здравствуйте, заранее прошу не ругать сильно, в ардуино я не силен, да и вообще в программировании, но идея пришла в голову, что надо матери немного облегчить жизнь в саду. Смысл таков: вода у них постоянная (стоит бочка на горе), я хочу подключить к крану коллектор, к нему 3-4 эл. магнитных клапана и от них соответственно шланги на полив. В наличии есть Arduino UNO, клапана нашел вот такие: https://ru.aliexpress.com/item/New-12V-Electric-Solenoid-Valve-Magnetic-DC-N-C-Water-Air-Inlet-Flow-Switch-1-2/32785400617.html?spm=2114.03010208.8.3.Q6yXXS

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

Насколько данная идея реализуема и можно ли управлять этими клапанами, если они требуют 12V, а ардуино выдает 3.3 и 5V, или я чего не понимаю? Может можно плюс с блока питания дать на клапана, а минус пустить через ардуино?

Dlopoel
Offline
Зарегистрирован: 15.05.2017

Кроме клапанов мне еще что-то требуется заказать? (кроме самого ардуино, блоков питания, проводов, регулировки, что есть в наличии)

Dlopoel
Offline
Зарегистрирован: 15.05.2017

Если правильно все понял, то еще мне потребуется силовой ключ на каждый клапан

yucan
Offline
Зарегистрирован: 20.04.2015

Да. Источники питания для ардуино и клапанов. И ключ на кадждый клапан

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Можно и просто реле использовать. Я вот нашёл ключ такой http://amperka.ru/product/troyka-mosfet а есть ли такие на али? а то мне доставка в 400 рублей при стоимости ключа в 290 не прикалывает.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

sergkr1983 пишет:

а есть ли такие на али?

Именно таких нет, есть другие. Ищите по ключевым словам mosfet arduino и mosfet module

FlowerFreak
Offline
Зарегистрирован: 17.05.2017

Датчик реального времени? Или все будет работать по временным промежуткам?

В комментариях к клапану нашел что он не подходит к самотечным источникам воды, не смуащает? (Или "бочка" на горе это некое подобие водонапорной башни?).

osetroff
Offline
Зарегистрирован: 27.08.2014

Используй клапан прямого действия, а не пилотный.
Грубая проверка: если клапан при подаче напряжения открылся, т.е. через него можно подуть, то прямого.
Я пользую такие https://www.aliexpress.com/item/Free-shipping-G1-4-solenoid-valve-Plasti...

По i2c подключишь к arduino rtc ds3231 и будет у тебя дата и время.
В ds3231 можно задать alarm на конкретное время - будет прерывание.
Т.е.:
- установил alarm,
- усыпил arduino,
- проснулись по прерыванию,
- поливаем N минут,
- на начало.

Ардуино запитай от тех же 12В, что и клапаны.

Для каждого клапана:
один пин ардуино через резистор на 330Ом подключишь на gate n-mosfetа (напр. fdn337n, только их поддельных много);
gate на GND через резистор 20KОм;
+12В идут на клапан, а с клапана на dest;
source соединишь с GND;
между проводами клапана вставишь диод SF14 в обратку.

Чтобы mosfet и катушка клапана не грелись - лучше сделать шим.

Параметры можно менять из командной строки через avrdude, сохраняя их в EEPROM.

Еще на плате с ds3231 тоже EEPROM.
Поэтому, можно данные полива считывать из нее.
Получается, вышел на грядки, вынул плату с ds3231 из разъема. Пришел домой, воткнул ее в другой ардуино и прошил EEPROM и установил правильные дату и время в спокойной обстановке.
Потом вернул на место.
Т.е. плата с ds3231 будет как дискета.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Dlopoel пишет:

Здравствуйте, заранее прошу не ругать сильно, в ардуино я не силен, да и вообще в программировании, но идея пришла в голову, что надо матери немного облегчить жизнь в саду. Смысл таков: вода у них постоянная (стоит бочка на горе), я хочу подключить к крану коллектор, к нему 3-4 эл. магнитных клапана и от них соответственно шланги на полив.  

Походу эта проблема давно решена-"капельный полив". А вот если "капельный полив" уже сделан, то можно туда прикрепить клапаны, но не раньше.

Dlopoel
Offline
Зарегистрирован: 15.05.2017

osetroff пишет:
Используй клапан прямого действия, а не пилотный. Грубая проверка: если клапан при подаче напряжения открылся, т.е. через него можно подуть, то прямого. Я пользую такие https://www.aliexpress.com/item/Free-shipping-G1-4-solenoid-valve-Plastic-valve-normally-closed-2-Way-0-120PSI-12VDC/1477023813.html По i2c подключишь к arduino rtc ds3231 и будет у тебя дата и время. В ds3231 можно задать alarm на конкретное время - будет прерывание. Т.е.: - установил alarm, - усыпил arduino, - проснулись по прерыванию, - поливаем N минут, - на начало. Ардуино запитай от тех же 12В, что и клапаны. Для каждого клапана: один пин ардуино через резистор на 330Ом подключишь на gate n-mosfetа (напр. fdn337n, только их поддельных много); gate на GND через резистор 20KОм; +12В идут на клапан, а с клапана на dest; source соединишь с GND; между проводами клапана вставишь диод SF14 в обратку. Чтобы mosfet и катушка клапана не грелись - лучше сделать шим. Параметры можно менять из командной строки через avrdude, сохраняя их в EEPROM. Еще на плате с ds3231 тоже EEPROM. Поэтому, можно данные полива считывать из нее. Получается, вышел на грядки, вынул плату с ds3231 из разъема. Пришел домой, воткнул ее в другой ардуино и прошил EEPROM и установил правильные дату и время в спокойной обстановке. Потом вернул на место. Т.е. плата с ds3231 будет как дискета.

Я поторопился с покупкой и сюда соответственно не заходил и не читал, что тут писали, клапана, клапана которые пришли конечно не то, что я ожидал, там еле струйка идет даже под хорошим давлением. Естетсвенно я заказал не те модули напряжения, я даже не знаю как правильно называется то, что я заказал: https://ru.aliexpress.com/item/MT3608-2A-Max-DC-DC-Step-Up-Power-Module-Booster-Power-Module-For-Arduino-3-5V/32675974827.html?spm=2114.13010608.0.0.uHn1Jt  Получается, что все, что я заказал мне не понадобится.

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

ds3231 у меня нет, а опять таки заказывать это время, да мне с этим бы хотя бы разобраться, сейчас я хочу ее просто запустить открываться каждые 24 часа, а если получится, то уже и дальше буду развивать.

что значит сделать шим?

Dlopoel
Offline
Зарегистрирован: 15.05.2017

FlowerFreak пишет:

Датчик реального времени? Или все будет работать по временным промежуткам?

В комментариях к клапану нашел что он не подходит к самотечным источникам воды, не смуащает? (Или "бочка" на горе это некое подобие водонапорной башни?).

Да, насос там конечно стоит, о чем я и говорю напор там не как у ручейка.

solonovich
Offline
Зарегистрирован: 11.08.2015

Dlopoel пишет:

Здравствуйте, заранее прошу не ругать сильно, в ардуино я не силен, да и вообще в программировании, но идея пришла в голову, что надо матери немного облегчить жизнь в саду. Смысл таков: вода у них постоянная (стоит бочка на горе), я хочу подключить к крану коллектор, к нему 3-4 эл. магнитных клапана и от них соответственно шланги на полив. В наличии есть Arduino UNO, клапана нашел вот такие: https://ru.aliexpress.com/item/New-12V-Electric-Solenoid-Valve-Magnetic-DC-N-C-Water-Air-Inlet-Flow-Switch-1-2/32785400617.html?spm=2114.03010208.8.3.Q6yXXS

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

Насколько данная идея реализуема и можно ли управлять этими клапанами, если они требуют 12V, а ардуино выдает 3.3 и 5V, или я чего не понимаю? Может можно плюс с блока питания дать на клапана, а минус пустить через ардуино?

 

Думаю это подойдет:

http://arduino.ru/forum/proekty/universalnyi-kontroller-upravleniya-inkubatorom-teplitsei-i-dr-na-atmega-328

 

Dlopoel
Offline
Зарегистрирован: 15.05.2017

osetroff пишет:
fdn337n

Такого не нашел мне дали какой-то аналог, он по видимости не подошел, я даже не запомнил его номер и характеристики, сегодня в интернете нашел вот такой:

 IRL3705N N-Channel Hexfet Power MOSFET.

Купил, на корпусе маркировка: L3705N P602P 2LDT.

Сказали, что для окрытия требуется от 1 до 2В, пробую - не работает! Я даже скетч толком не пишу, пытаюсь простопитание подать на затвор, резюк не открывается, пробовал через шим сигнал ровно 2В дать, тоже не открывает. Что я делаю не так?

Dlopoel
Offline
Зарегистрирован: 15.05.2017

В целом у меня вроде получилось (я изначально непавильно определил Gate у транзистора, чем убил первый). Сейчас вроде заработало, но не на долго, я блок питания на 12В пока не купил, по-этому пока пользуюсь БП от компьютера, там как раз есть 12В, вот только клапан на моей схеме проработал от силы 3-4 секунды, а дальше блок питания выключился и уходит в защиту при попытке включить, скорее всего я его тоже убил.

osetroff
Offline
Зарегистрирован: 27.08.2014

Извини, нет много времени на объяснения.
Поскольку всю Эстрану загнали на огород", приходится становиться специалистами и в этой области.
У N-mosfet есть G D S выходы.
Чтобы не спалить контроллер, от пина контроллера через токоограничивающий резистор (330 Ом для 5 В питания контроллера, 220 Ом при 3 В я пользую) и сигнальный защитный диод (ток идет лишь от пина к mosfet, чтобы переполюсовка, либо повышенное напряжение не убило пин или контроллер) идет провод на G.
G соединяем резистором на 20 КОм с S, а S - с GND ( чтобы, по умолчанию, N-mosfet был в состоянии выкл, т.е. не проводил ток с D на S).
Плюс 12 В через PTC (самовосстанавливающийся предохранитель на макс ток на который рассчитан клапан) подаем на один провод 12В клапана, а второй провод подключаем на D N-mosfet.
Последнее, ставим быстрый диод (напр SF14) в обратку после PTC между двумя проводами клапана, т.е. катодом к PTC.
Это - рабочая схема.
Сложно только сначала, пока не закупишь все на али и не потестируешь.

Если БП компа без подключения к твоей схеме включается и крутит вентилятор - он не сломался. Во многих БП защита встроена. Комп БП - самое то для отладки схем.

solonovich
Offline
Зарегистрирован: 11.08.2015

Dlopoel пишет:

 В наличии есть Arduino UNO, клапана нашел вот такие: https://ru.aliexpress.com/item/New-12V-Electric-Solenoid-Valve-Magnetic-DC-N-C-Water-Air-Inlet-Flow-Switch-1-2/32785400617.html?spm=2114.03010208.8.3.Q6yXXS

 

а вас не смутила надпись в характеристиках клапана:

обратите внимание, это не подходит для использования с самотечных систем

Возможно вам не хватит давления что бы он нормально работал.

Измерейте ток потребления клапана, очень интерестно сколько он потребляет.

 

Dlopoel
Offline
Зарегистрирован: 15.05.2017

osetroff пишет:
Извини, нет много времени на объяснения. Поскольку всю Эстрану загнали на огород", приходится становиться специалистами и в этой области. У N-mosfet есть G D S выходы. Чтобы не спалить контроллер, от пина контроллера через токоограничивающий резистор (330 Ом для 5 В питания контроллера, 220 Ом при 3 В я пользую) и сигнальный защитный диод (ток идет лишь от пина к mosfet, чтобы переполюсовка, либо повышенное напряжение не убило пин или контроллер) идет провод на G. G соединяем резистором на 20 КОм с S, а S - с GND ( чтобы, по умолчанию, N-mosfet был в состоянии выкл, т.е. не проводил ток с D на S). Плюс 12 В через PTC (самовосстанавливающийся предохранитель на макс ток на который рассчитан клапан) подаем на один провод 12В клапана, а второй провод подключаем на D N-mosfet. Последнее, ставим быстрый диод (напр SF14) в обратку после PTC между двумя проводами клапана, т.е. катодом к PTC. Это - рабочая схема. Сложно только сначала, пока не закупишь все на али и не потестируешь. Если БП компа без подключения к твоей схеме включается и крутит вентилятор - он не сломался. Во многих БП защита встроена. Комп БП - самое то для отладки схем.

Что у мосфета GDS я уже понял, когда неправильно подключил первый транзюк и спалил его. Я не до конца понимаю выбор номинала "токоограничивающего резистора" и резистор мосфета с землей (20 кОм), но судя по тому, что вы пишете 330 на 5 в, 220 на 3 в, если я буду делать через шим сигнал на 2 В, то около 150 Ом должно подойти? Вообще схему нашел вот такую, с нее что-то пытаюсь понять. http://cxem.net/arduino/arduino11.php

Диоды я купил как на той схеме 1N4007.

БП включается без схемы, но при нагрузке выключается, причем даже без схемы если пытаюсь отдельно клапана запитать от 12В - он выключается (Когда клапана только пришли я их таким образом проверил, без проблем все было).

solonovich пишет:

обратите внимание, это не подходит для использования с самотечных систем

Измерейте ток потребления клапана, очень интерестно сколько он потребляет.

На дачу уже ездил с клапаном и БП, подключал к шлангу, напор достаточный, очень даже.

Если разберусь как замерить, то сделаю! А вообще на клапане написано 12V 0,8 mA

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Реализовал похожую идею и тут такое сраное лето.

Клапана заказывал в китае по 270р

_jah_69_
Offline
Зарегистрирован: 31.03.2017

#include <SoftwareSerial.h>
#include "stDHT.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 13
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
String statusHome;
String balance;
DHT sens(DHT11); // Указать датчик DHT11, DHT21 или DHT22. (несколько датчиков вписывать не нужно)
// Подключать можно только одинаковые датчики, то есть нельзя использовать одновременно DHT11 и DHT22

SoftwareSerial GsmSerial(2, 3);               // RX-2 pin, TX-3 pin

String AdminPhone="79051111111";              // Телефон админа

int pinReley1=8;                              // Реле насосной станции на 8 пин
int pinReley2=9;                              // Реле клапана полива теплицы на 9 пин
int pinReley3=10;                             // Реле клапана полива огорода 10 пин
int pinReley4=11;                             // Реле ревуна сигнализации 11 пин

int pinReley5=12;                             // Реле открытия теплицы  
int pinReley6=7;                              // Реле закрытия теплицы 

int But1Pin = 4;                             // Кнопка 1 включаем выключаем насосную станцию на 4 пин
int But2Pin = A5;                            // Кнопка 2 включаем выключаем полив теплицы На A5 пин
int But3Pin = 6;                             // Кнопка 3 включаем выключаем полив огорода На 6 пин
int But4Pin = A1;                            // Кнопка включения выключения сигнализации На А1 пин

int But5Pin = A3;                            // Открываем закрываем дверь по циклу А3 пин
int But6Pin = A4;                            // Освободилась

/////////////////////////////////////////////////////////////////////////////////////////////////////

int flag=0;                                  // Флаг кнопки для вкл/выкл (Насосная и полив)

/////////////////////////////////////////////////////////////////////////////////////////////////////

int flag1=0;                                 // Флаг кнопки для двери 
int regim=0;                                 // режимы для 1 кнопки

/////////////////////////////////////////////////////////////////////////////////////////////////////

int oxrPin = 5;                              // Датчик объема подключен оналогично кнопки на размыкание
int oxr=0;                                   //вкл или выкл
int alarm=0;                                 //колличество сработок
int flag2=0;                                 // Флаг кнопки ручного включения отключения сигнализации     
////////////////////////////////////////////////////////////////////////////////////////////////////////
// Блок автоматических оппераций

int zapuskTemp = 0;                           // Контроль температуры подающей трубы котла
int tempAlarm = 5;                            // Тепература тревоги котла по t3
String statusAlarm;                           // Формировка смс

int autoTepl = 0;                             // Контроль открытия теплицы     по t4
int tempOtkr=20;                              // Тепература открытия теплицы 
int tempZakr=17;                              // Температура закрытия теплицы

unsigned long currentTime;                   // Таймер контроля температуры котла
unsigned long loopTime;

unsigned long currentTime1;                  // Таймер контроля температуры теплицы
unsigned long loopTime1;
////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup() 
{
pinMode(A2, INPUT);                           // Подключаем температурные датчики DHT11 на A2 Kotel
digitalWrite(A2, HIGH);                       // На пин А0-5вольт

sensors.begin();

digitalWrite(pinReley5, HIGH);               // Режим порта реле5 выкл на старте(на обоих контактах - от блока питания нормально замкнутый)
digitalWrite(pinReley6, HIGH);               // Режим порта реле6 выкл на старте(на обоих контактах - от блока питания нормально замкнутый)





pinMode(pinReley1, OUTPUT);                  // Режим порта реле1 на вывод
pinMode(pinReley2, OUTPUT);                  // Режим порта реле2 на вывод
pinMode(pinReley3, OUTPUT);                  // Режим порта реле3 на вывод
pinMode(pinReley4, OUTPUT);                  // Режим порта реле4 на вывод

pinMode(pinReley5, OUTPUT);                  // Режим порта реле5 (com на -12v(источника питания) com-(к двигателю))
pinMode(pinReley6, OUTPUT);                  // Режим порта реле6 (com на -12v(источника питания) com-(к двигателю))


digitalWrite(pinReley1, HIGH);               // Режим порта реле1 выкл на старте
digitalWrite(pinReley2, HIGH);               // Режим порта реле2 выкл на старте
digitalWrite(pinReley3, HIGH);               // Режим порта реле3 выкл на старте
digitalWrite(pinReley4, HIGH);               // Режим порта реле4 выкл на старте



pinMode(But1Pin, INPUT);                     // Режим порта кнопки1 на вход (на замыкание)
pinMode(But2Pin, INPUT);                     // Режим порта кнопки2 на вход (на замыкание)
pinMode(But3Pin, INPUT);                     // Режим порта кнопки3 на вход (на замыкание)
pinMode(But4Pin, INPUT);                     // Режим порта кнопки4 на вход (на замыкание)

pinMode(But5Pin, INPUT);                     // Режим порта кнопки3 на вход (на замыкание)
pinMode(But6Pin, INPUT);                     // Режим порта кнопки4 на вход (на замыкание)


pinMode(oxrPin, INPUT);                      // Датчик объема

///////////////////////////////////////////////////////////////////////////////////////////////

Serial.begin(9600);                          // Скорость порта 9600
GsmSerial.begin(9600);                       // Устанавливаем скорость связи Ардуино и модема
GsmSerial.println("ATE0");                   // выключаем эхо
delay(100);                                   
GsmSerial.println("AT+CLIP=1");              // Включаем АОН
delay(100);
GsmSerial.println("AT+CMGF=1");              // Формат СМС = ASCII текст
delay(100);
GsmSerial.println("AT+CSCS=\"GSM\"");        // Режим кодировки текста = GSM (только англ.)
delay(100); 
GsmSerial.println("AT+CNMI=2,2");            // Текст смс выводится в com-порт
delay(100); 
String str="";
while(str.indexOf("+COPS: 0") == -1)         // Ждем пока модем будет готов
      {
      GsmSerial.println("AT+COPS?");         // Информация об операторе
      str=ReadCom();
      delay(300); 
      } 
///////////////////////////////////////////////////////////////////////////////////////////
 currentTime = millis();                   // Таймер опроса темп котла
  loopTime = currentTime;
///////////////////////////////////////////////////////////////////////////////////////////
 currentTime1 = millis();                  // Таймер опроса уличного термометра 
  loopTime1 = currentTime1;
///////////////////////////////////////////////////////////////////////////////////////////
}

void loop() 
{
   
         String strSms = ReadCom();           // Читаем смс, если есть
         while (strSms.length()==0) 
 {
///////////////////////////////////////////////////////////////////////////////////////////////
   currentTime = millis();
   if(currentTime >= (loopTime + 180000) && zapuskTemp == 1)
   {
     int t3 = sens.readTemperature(A2); // чтение датчика на пине A5 Kotel
     int h3 = sens.readHumidity(A2);    // чтение датчика на пине A5 Kotel
     delay(2000);
     sensors.requestTemperatures(); // запрос показаний температуры OUT
     int t4 = sensors.getTempCByIndex(0);
     delay(2000);
     loopTime = currentTime;
     Serial.print(t3);
     Serial.print(h3);
     Serial.print(t4);
     
     if (t3 < tempAlarm)
     {
        statusAlarm = String("<")+String("KotelPotyx")+String(">")+String("<")+String("Out")+int(t4)+String("C")+String(">")+String("<")+String("Kotel")+int(h3)+String("%")+String("Kotel")+int(t3)+String("C")+String(">");              
        SendSms((statusAlarm), AdminPhone);       // Можем отправить смс, что включили
        Serial.println("KotelPotyx");
        zapuskTemp = 0;
     }
   }
////////////////////////////////////////////////////////////////////////////////////////////////
   currentTime1 = millis();
   if(currentTime1 >= (loopTime1 + 180000) && autoTepl == 1)
   {
   sensors.requestTemperatures();               // запрос показаний температуры OUT
   int t4 = sensors.getTempCByIndex(0); 
   loopTime1 = currentTime1;
   Serial.print(t4);
   
   if ((t4 > tempOtkr)  && flag1 == 0  && autoTepl == 1)
        {
                digitalWrite(pinReley5,LOW);             // Включаем мотор на открытие
                delay(500);                              // Подобрать время задержки на достаточное открытие
                digitalWrite(pinReley5,HIGH);
                Serial.println("door=open");
                flag1=1; 
         }
         
    if ((t4 < tempZakr)  && flag1 == 1  && autoTepl == 1)
   
         {
    digitalWrite(pinReley6,LOW);
    delay(500); 
    digitalWrite(pinReley6,HIGH);
    flag1=0; 
        }    
   }

///////////////////////////////////////////////////////////////////////////////////////////////   
             if(digitalRead(But1Pin) == HIGH && flag == 0)      
                 { 
                
                 digitalWrite(pinReley1, !digitalRead(pinReley1));
                 flag = 1;
                 delay(500);
                 }
  
            if(digitalRead(But1Pin) == LOW && flag == 1)
                {
                flag = 0;
                delay(500);
                int Reley1status = digitalRead(8);
                Serial.print(pinReley1);
                } 
///////////////////////////////////////////////////////////////////////////////////////////////
             
            if(digitalRead(But2Pin) == HIGH && flag == 0)      
                { 
                 
                digitalWrite(pinReley2, !digitalRead(pinReley2));
                flag = 1;
                delay(500);
                }
  
            if(digitalRead(But2Pin) == LOW && flag == 1)
                {
                flag = 0;
                delay(500);
                int Reley2status = digitalRead(9);
                Serial.print(pinReley2);
                }  
////////////////////////////////////////////////////////////////////////////////////////////////
            
             if(digitalRead(But3Pin) == HIGH && flag == 0)
                {   
                 
                digitalWrite(pinReley3, !digitalRead(pinReley3));
                flag = 1;
                delay(500);
                }
  
             if(digitalRead(But3Pin) == LOW && flag == 1)
                {
                flag = 0;
                delay(500);
                int Reley3status = digitalRead(10);
                Serial.print(pinReley3);
                }  

///////////////////////////////////////////////////////////////////////////////////////////////////
             
                if(digitalRead(But4Pin) == HIGH && flag2 == 0)   // Сигнализация вкл кнопкой
                   { 
                   flag2 = 1; 
                   delay(500);                 
                   digitalWrite(pinReley4,LOW);             // Включаем ревун
                   delay(1000);                             // Крякаем ревуном 
                   digitalWrite(pinReley4,HIGH);
                   Serial.println("oxr=on");
                   oxr=1;
                   alarm=0;
                   delay(180000);
                   digitalWrite(pinReley4,LOW);             // Включаем ревун
                   delay(300);                              // Крякаем ревуном 
                   digitalWrite(pinReley4,HIGH); 
                   }
  
               if(digitalRead(But4Pin) == HIGH && flag2 == 1)
                   {

                   digitalWrite(pinReley4,LOW);             // Включаем ревун
                   delay(300);                              // Крякаем ревуном 
                   digitalWrite(pinReley4,HIGH);             
                   alarm=0;                                 
                   oxr=0;                                   // Выключаем сигнализацию
                   delay(300);
                   flag2 = 0;
                   }

////////////////////////////////////////////////////////////////////////////////////////////////////
                 
//              if(digitalRead(But5Pin) == HIGH)             // если кнопка нажата
//                 {
//                 digitalWrite(pinReley5,LOW);             // Включаем мотор на открытие
//                 delay(500);                              // Подобрать время задержки на достаточное открытие
//                 digitalWrite(pinReley5,HIGH);
//                 Serial.println("door=open");
//                 flag1=0;
//                 }
//             
//             if(digitalRead(But6Pin) == HIGH)             // если кнопка нажата
//                 {
//                 digitalWrite(pinReley6,LOW);             // Включаем мотор на закрытие
//                 delay(500);                              // Подобрать время задержки на достаточное открытие
//                 digitalWrite(pinReley6,HIGH);
//                 Serial.println("door=closed");
//                 flag1=1;
//                 }
///////////////////////////////////////////////////////////////////////////////////////////////////////
                
                if(digitalRead(But5Pin) == HIGH && flag1 == 0)
                  {
                   digitalWrite(pinReley5,LOW);             // Включаем мотор на открытие
                   delay(500);                              // Подобрать время задержки на достаточное открытие
                   digitalWrite(pinReley5,HIGH);
                   Serial.println("door=open");
                   flag1=1;
                  }
                  
               if(digitalRead(But5Pin) == HIGH && flag1 == 1)
                  {
                   digitalWrite(pinReley6,LOW);             // Включаем мотор на открытие
                   delay(500);                              // Подобрать время задержки на достаточное открытие
                   digitalWrite(pinReley6,HIGH);
                   Serial.println("door=cloced");
                   flag1=0;
                  }



///////////////////////////////////////////////////////////////////////////////////////////////////////

              if(digitalRead(oxrPin) == LOW && oxr == 1 && alarm == 0)      // если первое срабатывание
                 {
                 digitalWrite(pinReley4,LOW);             // Включаем мотор на открытие
                 delay(5000);                            // Подобрать время задержки на достаточное открытие
                 digitalWrite(pinReley4,HIGH);
                 Serial.println("dvigenie");
                 alarm++;
                 }

              if(digitalRead(oxrPin) == LOW && oxr == 1 && alarm == 1)      // если кнопка нажата
                 {
                 digitalWrite(pinReley4,LOW);             // Включаем мотор на открытие
                 delay(12000);                            // Подобрать время задержки на достаточное открытие
                 digitalWrite(pinReley4,HIGH);
                 SendSms("dvigenie-povt", AdminPhone); 
                 Serial.println("dvigenie-povt");
                 alarm++;
                 }
              if(digitalRead(oxrPin) == LOW && oxr == 1 && alarm == 2)      // если кнопка нажата
                 {
                 digitalWrite(pinReley4,LOW);             // Включаем мотор на открытие
                 delay(24000);                            // Подобрать время задержки на достаточное открытие
                 digitalWrite(pinReley4,HIGH);
                 SendSms("dvigenie-povt+", AdminPhone); 
                 Serial.println("dvigenie-povt+");
                 alarm++;
                 }
              if(digitalRead(oxrPin) == LOW && oxr == 1 && alarm == 3)      // если кнопка нажата
                 {
                 digitalWrite(pinReley4,LOW);             // Включаем мотор на открытие
                 delay(48000);                            // Подобрать время задержки на достаточное открытие
                 digitalWrite(pinReley4,HIGH);
                 SendSms("dvigenie-povt++", AdminPhone); 
                 Serial.println("dvigenie-povt++");
                 alarm++;
                 }
              if(digitalRead(oxrPin) == LOW && oxr == 1 && alarm == 4)      // если кнопка нажата
                 {
                 digitalWrite(pinReley4,LOW);             // Включаем мотор на открытие
                 delay(96000);                            // Подобрать время задержки на достаточное открытие
                 digitalWrite(pinReley4,HIGH);
                 SendSms("dvigenie+++", AdminPhone); 
                 Serial.println("dvigenie-povt+++");
                 alarm++;
                 }
                 
              if (alarm>4)
                {
                alarm=0;         // Выключаем сигнализацию
                oxr=0;
                SendSms("Nado-exat!!Oxr=off!!", AdminPhone);     // Шлем СМС 
                Serial.println("dvigenie0");                     // В монитор для проверки
                }
              
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                
          else  
        
          delay(500);
          strSms = ReadCom();
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////                                  

 if (strSms.indexOf("+CUSD") > -1)
  {
   String balance=strSms.substring(strSms.indexOf("Vash"),strSms.indexOf("Bonus"));
   SendSms((balance), AdminPhone);
   Serial.print(balance); 
  }

/////////////////////////////////////////////////////////////////////////////////////////////////////
    
 if (strSms.indexOf(AdminPhone) > -1)                // Если телефон админа, то читаем дальше

          {
          if (strSms.indexOf("+CMT") > -1)         // Если смс
          
                  {
//////////////////////////////////////////////////////////////////////////////////////////////////////////                    
// Кодовое слово "1on" первое реле зажигаем (насосная станция)
                  if (strSms.indexOf("1on") > -1)     // Если обнаружено ключевое слово на включение
                  
                            {
                            digitalWrite(pinReley1,LOW);             // Включаем 1реле
                            SendSms("Reley1=on", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("Reley1=on");
                            }
// Кодовое слово "1off" отключаем первое реле (насосная станция)
                  if (strSms.indexOf("1off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            digitalWrite(pinReley1,HIGH);             // Выключаем светодиод
                            SendSms("Reley1=off", AdminPhone);     // Можем отправить смс, что выключили
                            Serial.println("Reley1=off");
                            }

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Кодовое слово "2on" 2 реле зажигаем (открываем клапан теплицы)
                  if (strSms.indexOf("2on") > -1)     // Если обнаружено ключевое слово на включение
                  
                            {    
                            digitalWrite(pinReley2,LOW);             // Включаем светодиод
                            SendSms("Reley2=on", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("Reley2=on");
                            }
// Кодовое слово "2off" отключаем первое реле (закрываем клапан теплицы)
                  if (strSms.indexOf("2off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            digitalWrite(pinReley2,HIGH);             // Выключаем светодиод
                            SendSms("Reley2=off", AdminPhone);     // Можем отправить смс, что выключили
                            Serial.println("Reley2=off");
                            }

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Кодовое слово "3on" 3 реле зажигаем (открываем клапан огород)
                  if (strSms.indexOf("3on") > -1)     // Если обнаружено ключевое слово на включение
                            { 
                            digitalWrite(pinReley3,LOW);             // Включаем светодиод
                            SendSms("Reley3=on", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("Reley3=on");
                            }
// Кодовое слово "3off" отключаем первое реле (закрываем клапан огород)
                  if (strSms.indexOf("3off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            digitalWrite(pinReley3,HIGH);             // Выключаем светодиод
                            SendSms("Reley3=off", AdminPhone);     // Можем отправить смс, что выключили
                            Serial.println("Reley3=off");
                            }

//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Кодовое слово "poliv-on" Насос и оба клапана
                  if (strSms.indexOf("poliv-on") > -1)     // Если обнаружено ключевое слово на включение
                            { 
                            digitalWrite(pinReley1,LOW);             // Включаем светодиод
                            digitalWrite(pinReley2,LOW);
                            digitalWrite(pinReley3,LOW);
                            SendSms("poliv=on", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("poliv=on");
                            }
// Кодовое слово "poliv-off" Насос и оба клапана
                  if (strSms.indexOf("poliv-off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            digitalWrite(pinReley1,HIGH);
                            digitalWrite(pinReley2,HIGH); 
                            digitalWrite(pinReley3,HIGH);             // Выключаем светодиод
                            SendSms("poliv=off", AdminPhone);         // Можем отправить смс, что выключили
                            Serial.println("poliv=off");
                            }
///////////////////////////////////////////////////////////////////////////////////////////////////////////

// Кодовое слово "poliv-tepl-on" Насос и клапан тепл 
                  if (strSms.indexOf("poliv-tepl-on") > -1)     // Если обнаружено ключевое слово на включение
                            { 
                            digitalWrite(pinReley1,LOW);             // Включаем светодиод
                            digitalWrite(pinReley2,LOW);
                            SendSms("poliv=tepl=on", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("poliv=tepl=on");
                            }
// Кодовое слово "poliv-tepl-off" Насос и клапан тепл
                  if (strSms.indexOf("poliv-tepl-off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            digitalWrite(pinReley1,HIGH);
                            digitalWrite(pinReley2,HIGH); 
                            SendSms("poliv=tepl=off", AdminPhone);         // Можем отправить смс, что выключили
                            Serial.println("poliv=tepl=off");
                            }

////////////////////////////////////////////////////////////////////////////////////////////////////////
// Кодовое слово "poliv-ogor-on"  Насос и клапан огорода
                  if (strSms.indexOf("poliv-ogor-on") > -1)     // Если обнаружено ключевое слово на включение
                            { 
                            digitalWrite(pinReley1,LOW);             // Включаем светодиод
                            digitalWrite(pinReley3,LOW);
                            SendSms("poliv=ogor=on", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("poliv=ogor=on");
                            }
// Кодовое слово "poliv-ogor-off" Насос и клапан огорода
                  if (strSms.indexOf("poliv-ogor-off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            digitalWrite(pinReley1,HIGH);
                            digitalWrite(pinReley3,HIGH); 
                            SendSms("poliv=ogor=off", AdminPhone);         // Можем отправить смс, что выключили
                            Serial.println("poliv=ogor=off");
                            }

///////////////////////////////////////////////////////////////////////////////////////////////////////


 //Кодовое слово "door-open" 5м реле открываем дверь
                  if (strSms.indexOf("door-open") > -1)     // Если обнаружено ключевое слово на включение
                            {
                            digitalWrite(pinReley5,LOW);             // Включаем мотор на открытие
                            delay(15000);                            // Подобрать время задержки на достаточное открытие
                            digitalWrite(pinReley5,HIGH);
                            SendSms("door=open", AdminPhone);       // Можем отправить смс, что включили                            
                            Serial.println("door=open");
                            flag1=0;
                            }
                            
// Кодовое слово "door-closed" 6м реле закрываем дверь
                  if (strSms.indexOf("door-closed") > -1)     // Если обнаружено ключевое слово на включение
                            {
                            digitalWrite(pinReley6,LOW);             // Включаем мотор на открытие
                            delay(15000);                            // Подобрать время задержки на достаточное открытие
                            digitalWrite(pinReley6,HIGH);
                            SendSms("door=closed", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("door=closed");
                            flag1=1;
                            }    
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Кодовое слово "oxr-on" 
                  if (strSms.indexOf("oxr-on") > -1)     // Если обнаружено ключевое слово на включение
                            {
                            digitalWrite(pinReley4,LOW);             // Включаем мотор на открытие
                            delay(5000);                            // Подобрать время задержки на достаточное открытие
                            digitalWrite(pinReley4,HIGH);
                            SendSms("oxr=on", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("oxr=on");
                            oxr=1;
                            } 

// Кодовое слово "oxr-off" 
                  if (strSms.indexOf("oxr-off") > -1)     // Если обнаружено ключевое слово на включение
                            {
                            digitalWrite(pinReley4,LOW);             // Включаем мотор на открытие
                            delay(5000);                            // Подобрать время задержки на достаточное открытие
                            digitalWrite(pinReley4,HIGH);
                            SendSms("oxr=off", AdminPhone);       // Можем отправить смс, что включили
                            Serial.println("oxr=off");
                            oxr=0;
                            }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Кодовое слово "kontrol-on"  контроль температуры котла
                  if (strSms.indexOf("kontrol-on") > -1)     // Если обнаружено ключевое слово на включение
                            { 
                            int zapuskTemp = 1 ;
                            }
// Кодовое слово "kontrol-off" отключаем контроль температуры котла
                  if (strSms.indexOf("kontrol-off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            int zapuskTemp = 0;
                            }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Кодовое слово "AutoTepl-on"  Теплица авто открытие
                  if (strSms.indexOf("AutoTepl-on") > -1)     // Если обнаружено ключевое слово на включение
                            { 
                            int autoTepl = 1;
                            }
// Кодовое слово "AutoTepl-off" Теплица авто закрытие
                  if (strSms.indexOf("AutoTepl-off") > -1)    // Если обнаружено ключевое слово на выключение

                            {
                            int autoTepl = 0;
                            }


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Кодовое слово "balans" 
                  if (strSms.indexOf("balans") > -1)     // Если обнаружено ключевое слово на включение
                            {
                            GsmSerial.println("ATD#100#;\r");                 // делаем запрос баланса
                            }


                            
// Получение статусов/////////////////////////////////////////////////////////////////////////////////////////                                      

                       }      
                  }

        if (strSms.indexOf("RING") > -1)         // Если звонят (выполняется на каждый гудок)
   
                  {
  //              GsmSerial.println("ATD#100#;\r"); // делаем запрос баланса
                  delay(2500);
                  GsmSerial.println("ATH0"); // Сброс после гудка
 
                  int t3 = sens.readTemperature(A2); // чтение датчика на пине A5 Kotel
                  int h3 = sens.readHumidity(A2);    // чтение датчика на пине A5 Kotel
                  delay(2000);
                
                  sensors.requestTemperatures(); // запрос показаний температуры OUT
                  int t4 = sensors.getTempCByIndex(0);
  
                  Serial.print("Kotel: ");
                  Serial.print(h3);
                  Serial.print(" %");
                  Serial.print("Out: ");
                  Serial.print(t3);
                  Serial.println(" C "); 
                  Serial.print(t4);
                  Serial.println(" C ");
                                
                  
                  int Reley1status = digitalRead(8); // Получить состояние пина 8: 
                  int Reley2status = digitalRead(9); //Управляемое устройство 9
                  int Reley3status = digitalRead(10);//Управляемое устройство 10
                  int Reley4status = digitalRead(11);//Управляемое устройство 11
                  
                  //statusHome = String("<")+String("Sign")+String(oxr)+String(":")+String(alarm)+String(">")+String("<")+String("Door")+String(flag1)+String(">")+String("<")+String("Home")+int(h)+String("%")+String("Home")+int(t)+String("C")+String(">")+String("<")+String("Out")+int(h2)+String("%")+String("Out")+int(t2)+String("C")+String(">")+String("<")+String("Kotel")+int(h3)+String("%")+String("Kotel")+int(t3)+String("C")+String(">")+String("<")+int(Reley1status)+String("-")+int(Reley2status)+String("-")+int(Reley3status)+String("-")+int(Reley4status)+String(">");
                  statusHome = String("<")+String("Sign")+String(oxr)+String(":")+String(alarm)+String(">")+String("<")+String("Door")+String(flag1)+String(">")+String("<")+String("Out")+int(t4)+String("C")+String(">")+String("<")+String("Kotel")+int(h3)+String("%")+String("Kotel")+int(t3)+String("C")+String(">")+String("<")+int(Reley1status)+String("-")+int(Reley2status)+String("-")+int(Reley3status)+String("-")+int(Reley4status)+String(">");
                  
                  
                  
                  Serial.print(Reley1status);
                  Serial.print(Reley2status);
                  Serial.print(Reley3status);
                  Serial.print(Reley4status);
                  Serial.print(statusHome);
                  
                  SendSms((statusHome), AdminPhone); // Отправка смс со статусами

                  }

////////////////////////////////////////////////////////////////////////////////////////////////////                  



} 
// LOOP закрылся

// Читает смс

String ReadCom()

{

          int chCode = 0;                                   // Код символа
          String strSms = "";                               // Текст
          if (GsmSerial.available())                        // Есть данные от модема
          {
          delay(300);
// Считываем смс с com-порта модема
          while (GsmSerial.available())                     // Если есть еще символы, то читаем
                   {
                   chCode = GsmSerial.read();               // Считываем очередной символ
                   strSms += char(chCode);                  // Добавляем к строке
                   delay(10);
                   }
           }
           if (strSms.length()>0) 
           
                   {
                   Serial.println("++++++++++");
//Serial.println();
                   Serial.println(strSms.length());
                   Serial.println(strSms);
                   }
            return strSms;
}
// Отправляет текст смс на определенный номер
void SendSms(String text, String phone)

           {
           phone="+"+phone;
           GsmSerial.println("AT+CMGS=\"" + phone + "\""); // Заголовок АТ команды и номер телефона
           delay(500);
           GsmSerial.print(text);                          // Текст смс
           delay(500);
           GsmSerial.print((char)26);                      // Конец сообщения и отправляем смс
           delay(500);
           }

 

 

Dlopoel
Offline
Зарегистрирован: 15.05.2017

_jah_69_ пишет:

Реализовал похожую идею и тут такое сраное лето.

Честно говоря и половины не пойму из вашего скетча мне бы для начала хоть в физической его части реализовать, я не могу запустить клапан через мосфет.

Я купил блок питания на 12В 2,5 Ма, пытаюсь подключить, ничего собственно не работает) Как на БП от компьютера не работало, тут и тут, логично, что ничего не изменилось. Единственное, через мосфет теперь идет 12 в, тестером проверяю, все нормально, но подключаю клапан и все, напряжение падает, клапан не включается. 

UPD. ЗАРАБОТАЛО!!! у меня диод на клапане не в ту сторону стоял, хотя мне кажется в ту, но почему-то без него вообще не работает, перевернул и заработало, но клапан не так сильно открывается и немного гудит. Хотя без схемы, отдельно от блока питания открывается без всяких писков и четко-резко-быстро.

UPD. UPD. Пищать перестал, когда увеличил мощность шим сигнала, соответственно открывать тоже стал четко.

evgta
Offline
Зарегистрирован: 02.09.2016

Гудит. ШИМ что-ли на клапан приходит? И зачем на таких мелких токах использовать мосфеты? Дарлингтон с резистором 1к на базу , и больше ничего ненадо.

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Зачем столько гемороя. От реле просто подаю 12вольт. И прекрасно работает

_jah_69_
Offline
Зарегистрирован: 31.03.2017
_jah_69_
Offline
Зарегистрирован: 31.03.2017

Дёшево и сердито 

Dlopoel
Offline
Зарегистрирован: 15.05.2017

_jah_69_ пишет:

 

Клапан у меня такой, да, насчет мосфета, это то, что я могу купить у себя в городе, т.к. с китая уже не успею заказать, а если и закажу, то придет к концу лета то же реле, по-этому приходится через мосфет делать, изначально планировалось через силовой ключ, но заказал не то.

Я вот тут еще штуку интересую нашел "IC2262/2272" http://makerplus.ru/shop/radio-pult-i-priyomnik-ic2262-2272

Она у меня в наборе лежит, можно ли сделать чтобы она работала параллельно автоматическому поливу?

Например: Клапана будут открываться поочередно каждый день на 10 минут, но например пришла мама на дачу и решила, что сегодня надо побольше полить, нажала на кнопку и клапан включился еще на 10 минут. При этом не отменяя автоматического режима конечно, чтобы он завтра опять включился в положеное время.

Я подключить эту схему смог, но там просто питание и выходы на 4 кнопки, я подключил провод клапана на 1 кнопку, соответственно кнопку 1 нажал и пока держу то клапан открыт, отпустил - закрыт, а задать через скетч время в ней можно?

Dlopoel
Offline
Зарегистрирован: 15.05.2017

Клапан заработал спустя 2 недели пыток, теперь у меня идеи поперли, хочу еще что-то сделать) все равно набор, который заказывал с ардуино уже года 3 пылится. там еще всяких датчиков-экранов-кнопок хватает.

_jah_69_
Offline
Зарегистрирован: 31.03.2017

В огороде разбрызгиватель а в теплице трубы с дырками. Отправляю смс включает нужное реле. Выключаю так же. Можно кнопкой на месте пустит. Плюс ещё датчик объёма повесил от названных гостей. Поставил ещё мотор от стеклоподъемника на открытие двери. Но швахт полный. Мало из 12вольт доходит

Dlopoel
Offline
Зарегистрирован: 15.05.2017

А как правильно реализовать ожидание времени? У меня например каждый клапан поработает 10 минут (40 минут итого) и все выключается, до следующего дня, а команда delay (86300000) как-то не то наверное)

Я понял, как сделать с радио-пультом, если настроить аналоговый сигнал на вход, а не на выход, а потом через ардуино запускать клапан, по старой схеме, так же будет работать?

Кстати, я питание 12В взял из самого ардуино, припаял провода прямо с разъему 12В на ардуино, насколько это вообще правильно? Или лучше было распотрошить блок питания и оттуда провода протянуть?

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Можно и через mills это реализовать. У меня каждые пять минут по такому принципу мерено температуру котла. На случай затухания. На Дверъ теплицы сделал тоже опрос температуры на улице. Но все уперлось в потом рт в проводах

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Delay не катит все колом встанет до следующего дня. Где же на Дуне ты 12 вольт нашёл.   Спалишь к бабке не ходить

bwn
Offline
Зарегистрирован: 25.08.2014

Чтобы доходило 12В на силовые цепи, нужны провода соответствующего сечения.
Зачем вообще в теплице, со всей ее влажностью, блок питания и 220 вольт. Старый авто.аккумулятор и контроль напряжения на нем ардуиной.
Зачем вешать непонятный бутерброд с висящими соплями, а не сделать нормальный девайс на плате.
Зачем ШИМ на клапан, а не просто вкл-выкл?

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Про провода я в курсе. 

Ну поставишь ты акум надо до него провода управления тащить с дуни где модуль с двумя реле будет.

bwn
Offline
Зарегистрирован: 25.08.2014

_jah_69_ пишет:

Про провода я в курсе. 

Ну поставишь ты акум надо до него провода управления тащить с дуни где модуль с двумя реле будет.

А все вместе в тепличке поставить? Не?
 

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Тогда в дом такие же провода тянуть. Шило да на мыло

Dlopoel
Offline
Зарегистрирован: 15.05.2017

Про теплицу я особо нигде и не писал, там ничего стоять не будет, максимум туда шланг один пойдет, все будет внутри дома с угла, за стенкой и наружу я выведу провода с клапанами, там как раз труба с водой проходит, а от них уже в разные стороны шланги.

Насчет 12В не знаю, выше товарищ даже писал, что ардуино будет удобнее запитать от того же блока питания, что и клапана на 12В, да и в инструкции ардуинки прописано "внешнее питание от 6 до 12В".

Насчет ШИМ, мне тоже писали выше, сделать через него, чтобы отрегулировать напряжение и не греть клапан и мосфет, не получается, клапан гудеть начинает, если я с дуины даю например не 5В, а 3. Насчет соплей, я тоже нигде не писал, что они будут)

За ночь я переварил все мысли и начал искать всякие модули в своем городе, нашел вот что: "Toyka-RTC на основе DS1307" Смогу ли я через этот модуль постоить часы и в определенный час каждого дня запускать клапана? И чем он вообще отличаетс от того, что мне предлагали выше "ds3231" ?

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Я пробовал запитать от блока питания на 12 вольт. Только когда включались все реле ее начинало глючить релюхи стрекатали как саранча. Запитал от зарядки телефона 5 вольт по usb и полный порядок после этого. Зачем тебе часы можешь отганизовать через mills будет так же отсчитывать мили сикунды и выполнять по прошествии заданного времени

bwn
Offline
Зарегистрирован: 25.08.2014

Ну, у каждого свой вкус.
Dlopoel. Штатный стабилизатор Ардуины при 12В будет весьма сильно греться (это верхний предел). Лучше поставить дополнительный step-down и питать от 5В (либо предусмотреть это на будущее). Если клапан рассчитан на 12В, то 10-минутное включение его не нагреет (если в инструкции не оговорено иное). Когда собираете бутерброд из шилдов, сопли появляются сами собой. 1307 отличается от 3231 только точностью хода и у последней есть пара фишек типа будильника и термометра.
_jah_69_, миллис хорош только до перезагрузки, дальше хаос. Если нужна привязка к конкретному времени, а не просто отмерять интервалы, RTC надежнее. ИМХО.
 

b707
Offline
Зарегистрирован: 26.05.2017

_jah_69_ пишет:

Зачем тебе часы можешь отганизовать через mills будет так же отсчитывать мили сикунды и выполнять по прошествии заданного времени

Это полный треш. После каждого перезапуска придется время выставлять?

Кстати, по вашему скетчу, выложенному выше - вычисление таймаутов прибавлением интервалов к millis - это неверно, при переполнении millis таймер собьется. И непонятно, почему вы не используете RTC, у вас же модем - практически в каждом модеме есть часы, время можно из сети брать. По коду похоже, что у вас Athinker A6 - там точно есть RTC

Ну и сам скетч явно можно уменьшить раза в 1.5 -2 обертыванием одинакового кода в функции :)

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Это мой первый скетч. Да не фонтан но работает. Да и время не важно в моем случае. Главное интнрвал

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Sim900mini

b707
Offline
Зарегистрирован: 26.05.2017

_jah_69_ пишет:

Sim900mini

в описании есть RTC

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Есть но она энергозависима 

b707
Offline
Зарегистрирован: 26.05.2017

_jah_69_ пишет:

Есть но она энергозависима 

конечно, но автоматически обновлять RTC при каждом старте - это все равно лучше, чем не знать время совсем.

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Ток обновит то он какое нибудь 00.00.00. 01.01.2000

b707
Offline
Зарегистрирован: 26.05.2017

_jah_69_ пишет:

Ток обновит то он какое нибудь 00.00.00. 01.01.2000

Если повезет, то по команде AT+CLTS=1 может из сети реальное время получить (зависит от оператора). Если нет - всегда можно взять время из даты свежей СМС или запросить по GRPS

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Это если на следующий год пока уже в работе. Да к тому времени можно с китая заказать модуль времени

Dlopoel
Offline
Зарегистрирован: 15.05.2017

_jah_69_ пишет:

Это если на следующий год пока уже в работе. Да к тому времени можно с китая заказать модуль времени

Вот у меня те же мысли, сейчас запущу из того, что найду под рукой, а на следующий год из Китая закажу уже много всего).

osetroff
Offline
Зарегистрирован: 27.08.2014

Можно подключить модуль GPS и с него получать время.

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Можно много чего. Вопрос денег только.

А с ними что то ж.ппппппппппа

Dlopoel
Offline
Зарегистрирован: 15.05.2017

Да не, вопрос не денег, вопрос больше времени, пока все, что ты заказал придет уже и лето закончится, по-этому пока ограничиваемся тем, что есть в наличии или в продаже в моем городе.

Вчера кстати купил все таки модуль часов на DS1307  и датчик влажности почвы (где-то тут на форуме успел прочитать, что не рационально каждый день поливать в одно и то же время будет, например если будет идти дождь 5 дней подряд, а ты до кучи еще поливаешь - хорошего мало), правда и головную боль конечно от этого себе нажил хорошую, вчера до часа ночи сидел, что-то сделать пытался (нашел еще у себя экран 1602 "синий" в комплекте), по этому вчера пытался наладить работу этих модулей хотя бы поотдельности, с часами вроде получилось, хотя я не понял почему когда я каждый раз заходил в монитор порта отсчет времени начинался заново, с экраном тоже, сначала получилось вывести элементарную "Hello world", потом подключил потенциометр, отрегулировал яркость, а у меня на экране вместо слов "каракули", потом вообще после некоторых мучений и манипуляций каракули тоже пропали, только при регулировке контрасте в верхней строчке появлялись квадраты.

Буду наверное вечером еще мучать, пока как-то грустно получается, но я уже уперся в то, что это надо сделать. А вообще на экран хочу выводить время, ну и по времени соответственно (напр. в 14.00) запускать клапана поочередно, только проверив перед этим данные с датчика влажности.

_jah_69_
Offline
Зарегистрирован: 31.03.2017

Сделай два режима по авто и ручной через gsm модуль.