Привод ворот на Меге

Denis_1704
Offline
Зарегистрирован: 28.05.2014

Так проходят испытания скетча. 

Фото покрашенного ящика

Вчера все покрасил, если сегодня добью скетч в суботу буду собирать.

Denis_1704
Offline
Зарегистрирован: 28.05.2014

дописал логику мотора(плавный старт и торможение определяет по скорости движения воротины и ее положению), попытался поправить веб, но не  вышло только зря время убил.

Осталось дописать освещение, мигалки, сирену.

к понедельнику надеюсь все подключу и донастрою, тогда выложу скетч. и буду уже думать насчет веб.

Denis_1704
Offline
Зарегистрирован: 28.05.2014

valeraba пишет:

как пример, моя плата на подоконнике
http://gambler-walrus-24202.bitballoon.com/

 

Сценарий сделан на каком то конструкторе или ручками???

Веб весит на бесплатном хост. и конектится к ардуини и ИП камерам так?

общается с дуиной по ГЕТ или ПОСТ запросам??

Ардуина от веба не виснет??

 

shemnik69
Offline
Зарегистрирован: 28.10.2013

интересный проект.

У меня сам привод тоже в коробе, а вот электронику не стал монтировать на улице. 

Плату делал сам но вот "глючила" она не от влажности, а от низких темпрератур. при (-25-30) вообще можно сказать не работала.

Перенес все в помещение все работает прекрасно. 

Также придерживаюсь позиции, что на улице, следует размещать только исполнительные элементы ну и средства ндентификации (датчики). 

Еще вопрос, а что за привод у ВАс . И так смотрел и так это от ЖД (трамвайных) стрелок что ли?

Уж больно он миниатютен.

 

valeraba
Offline
Зарегистрирован: 08.09.2014

Сценариев на веб-странице нет, сценарии закладываются только в  скетч ардуины.
Это не IP камеры, это jpeg камеры поключённые по UART к той же самой ардуине, что и светодиоды.
Веб-страничка и ардуина подключаются к одному сервису, через него они и общаются.
Транспортный протокол бинарный (TCP/IP), делается авторизация и поточное шифрование в обе стороны. При этом данные передаются в упакованном виде, поэтому трафик очень компактый.
Библиотека для ардуины динамической памяти не использует.
При включении имеется задержка в стандартной библиотеке w5100, в моей библиотеке задержек нет.
На моих тестах ардуина работало несколько месяцев, без подвисаний (при этом трафик от камер довольно приличный).

Ничего руками не пишу, всё генерируется автоматически (и сайт и скетч).  Через два дня всё выложу в общий доступ. Но если очень нужно, я могу сгенерировать готовый проект.

Для этого мне нужна таблица всех входных и выходных сигналов в таком виде:
1) имя сигнала (можно несколькими словами, можно русскими буквами)
2) тип сигнала (bool, int32, float и т.д.)
3) рабочий диапазон значений (min-max)
4) разрешённые операции (чтение, запись, асинхронный приём)
 

 

Denis_1704
Offline
Зарегистрирован: 28.05.2014

shemnik69 пишет:

интересный проект. Спасибо.

У меня сам привод тоже в коробе, а вот электронику не стал монтировать на улице. 

Плату делал сам но вот "глючила" она не от влажности, а от низких темпрератур. при (-25-30) вообще можно сказать не работала. надеюсь такого не будет коробка вроде хорошо утеплена.

Перенес все в помещение все работает прекрасно.  до помещения 20 метров нереально

Также придерживаюсь позиции, что на улице, следует размещать только исполнительные элементы ну и средства ндентификации (датчики). 

Еще вопрос, а что за привод у ВАс . И так смотрел и так это от ЖД (трамвайных) стрелок что ли?

Уж больно он миниатютен. Так кажется фото его уменьшает :) Привод: ППВО-С ООО "ТРУД" про них мало пишут.

 

Denis_1704
Offline
Зарегистрирован: 28.05.2014

Извеняюсь Я немножко медленый :)   не понял, весь ваш сайт перелазил все от балды протыкал, но  так и не понял Весь веб находится  в ардуине. или на сервере.

Прикольный ваш сайт: http://samde.ru/ru/index.html

valeraba
Offline
Зарегистрирован: 08.09.2014

Denis_1704 пишет:

Извеняюсь Я немножко медленый :)   не понял, весь ваш сайт перелазил все от балды протыкал, но  так и не понял Весь веб находится  в ардуине. или на сервере.

Прикольный ваш сайт: http://samde.ru/ru/index.html

Это старая версия сайта, вам это не годится, вам нужна автономная система.
Хотя накидывать интерфейс будете всё равно на этом сайте, а уже потом генерировать свой автономный сайт. И вся система будет работать автономно, без моего онлайн сервиса.

valeraba
Offline
Зарегистрирован: 08.09.2014

На ардуине нет веба, только бинарный протокол, она конектится к сервису (серверу) и держит постоянное соединение.
Про старый функционал сайта:
http://habrahabr.ru/post/251589/

Denis_1704
Offline
Зарегистрирован: 28.05.2014

valeraba пишет:

На ардуине нет веба, только бинарный протокол, она конектится к сервису (серверу) и держит постоянное соединение.
Про старый функционал сайта:
http://habrahabr.ru/post/251589/

Тоесть если правильно понял Схема: ардуино>>комп(тефон и т.д короче клиент)>>ардуино.

 не какого посредника нет :)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Denis_1704 пишет:
На основе ик луча описание датчика выше.

Опасно. Стандартные решения еще ток мотора контролируют.

А отсутствие веб сервера на ардуино - не спортивно. Сейчас таких сервисов, хоть пруд пруди. А ведь нет никаких проблем написать веб сервер на ардуино, тем более, что в проекте вижу и мегу и шилд с SD картой. Какой нибудь аякс или джисон прям как для нас придумали.

valeraba
Offline
Зарегистрирован: 08.09.2014

brokly пишет:

А отсутствие веб сервера на ардуино - не спортивно. Сейчас таких сервисов, хоть пруд пруди. А ведь нет никаких проблем написать веб сервер на ардуино, тем более, что в проекте вижу и мегу и шилд с SD картой. Какой нибудь аякс или джисон прям как для нас придумали.

Согласен с вами, что этот путь не для настоящего самурая :)

Denis_1704
Offline
Зарегистрирован: 28.05.2014

brokly пишет:

Denis_1704 пишет:
На основе ик луча описание датчика выше.

Опасно. Стандартные решения еще ток мотора контролируют.

ток контролтровать смысла нет, т. к. мотор  в скетче есть таймеры:

3 сек на старт 1зуб далее по 2 сен на прохождение  зуба иначе остановка. поэтому смысла нет мерить токи за три секунды не что не умрет

Denis_1704
Offline
Зарегистрирован: 28.05.2014

valeraba пишет:

Согласен с вами, что этот путь не для настоящего самурая :)

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

valeraba
Offline
Зарегистрирован: 08.09.2014

HTTP очень прост, вы просто ленитесь :)

К завтрешнему дню всё доделаю.

У вас получилось открыть редактор мнемосхем?
(Хром, собака, на прошлой неделе все плагигы отключил, нужно руками включать)

Denis_1704
Offline
Зарегистрирован: 28.05.2014
#include <RCSwitch.h> //433
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h> //качать здесь: http://homes-smart.ru/upload/arduino/OneWire.zip для версий 1.0.х


RCSwitch mySwitch = RCSwitch(); //433
EthernetServer server(80); //порт сервера
// ========================данные сети========================================== 
byte mac[] = { 0xCA, 0xAF, 0x78, 0x1C, 0x13, 0x77 }; //mac - адрес ethernet shielda
byte ip[] = { 192, 168, 0, 22 };        // ip адрес ethernet shielda
byte subnet[] = { 255, 255, 255, 0 }; //маска подсети

// ========================конец данных сети========================================== 





//пины

int pin433=0; //433 pin2- 0 (int) pin3=1 pin21=2 pin20=3 pin19=4 pin 18 - 5 (communication) 433
//ЗУ
int pinZY = 3;
int pinVakb = 13;   // Напряжение на АКБ
int pinAakb = 14;   // Ток на АКБ

int pinTemp1 = 22;  //ДТ1820
int pinTemp2 = 24;  //ДТ1820
int pinTemp3 = 26;  //ДТ1820
int pinledBox = 28;
int pinkeyBox = 30;

//зуб                
int pinZyb1 = 32;                   
int pinZyb2 = 34;
int pinSensorClose1 = 36;  // не стал ставить                 
int pinSensorOpen = 38;    // не стал ставить
int pinSensorIR = 40; //ик луч аварийная остановка

//видеодомфон
int pinOffAudio = 11; // отключение звука 
int pinVideo = 43; //     переключения камер
int pinPowerVideo = 45; ///+ питание камер 
int pinZamok = 47;                   // кнопка на входе 7 
int pinZvonok = 49; // звонок
int pinAudio = 12;
int pinCAM_VOR = 11; 

//мотор
int pinMotorL = 8; //крутить мотор ворот
int pinMotorR = 9;
//пины


//переменные
//температура
  byte i; 
  byte present = 0; 
  byte N=pinTemp1; 
  byte PozTemp=0; 
  byte data[12]; 
  byte addr[8]; 
  float Temp1, Temp2, Temp3, Temp4,celsius;
  byte ohibka=0;
  byte koldat=0;
  float T_doma=0;
//температура
//Зубья ворот
int ZybAll=100; // количество зубьев
int ZybDat_1=0; ///  1 на зубе датчик зуба 1
int ZybDat_2=0; ///  0 не на зубе датчик второй
int ZybSav_1=0;
int ZybSav_2=0;
//Зубья ворот
//ЗУ
float Vakb = 0;   // Напряжение на АКБ 10=1вольт
float Aakb = 0;   // Ток на АКБ амперы 10=1ампер
byte HimZY;
byte V220;
//ЗУ
//433+ key
int open433=0;
int close433=0;
int time433=0;
int keyBox=0;
int SavkeyBox=0;
//433+ key

// Видеодымофон
int keybolt=0;
int keydoor=0;
int timeDomofon=0;
int timePowerVideo=0;
int timevideo=0;
int timeZvonok=0; 
//Видеодымофон

//ворота

int maxHimVorota=0;
int Nastroika=0;
int ZadpozVorot = 0; 
int maxSpeedMotor = 10;
int onMotor=0; //Включаем мотор
int timeMotor=0; 
int pozVorot=150; // позиция ворот
int himMotorR=0; ///255=2550
int himMotorL=0; //255=2550
int SavpozVorot=0;
int Speedmotor=0;
int timeSpeedMotor=0;
int timeCloseVorota=0;
//ворота



//таймер
unsigned long currentTime;            //таймер
unsigned long loopTime_1=50;        //таймер
unsigned long loopTime_10=250;
unsigned long loopTimeZY=65;        //таймер
unsigned long loopTimeTemp=215;    //таймер

    //таймер
//таймер



///----------------------------------------------------------------------------------------------------------------------------------------
void setup() {
// плата с датчиками
pinMode(pinledBox, OUTPUT);
pinMode(pinkeyBox, INPUT);
pinMode(pinZyb1, INPUT);         
pinMode(pinZyb2, INPUT); 
pinMode(pinSensorClose1, INPUT);         
pinMode(pinSensorOpen, INPUT);  
pinMode(pinSensorIR, INPUT);         
// плата с датчиками
// Видеодымофон
pinMode(13, OUTPUT); 
pinMode(pinOffAudio, OUTPUT);    // отключение звука 
pinMode(pinVideo, OUTPUT);      digitalWrite(pinVideo,1); // переключения камер
pinMode(pinPowerVideo, OUTPUT); digitalWrite(pinPowerVideo,1);  //+ питание камер 
pinMode(pinZvonok, OUTPUT);   // звонок
pinMode(pinZamok, OUTPUT);   // Калитка
//Видеодымофон

  Serial.begin(9600);
  mySwitch.enableReceive(pin433); 
  Ethernet.begin(mac, ip, subnet);
  


}




///----------------------------------------------------------------------------------------------------------------------------------------
void loop() {
 //analogWrite(5, 40);  //шим  
 //analogWrite(6, 70);  //шим  
 //analogWrite(7, 70);  //шим  
 //analogWrite(8, 70);  //шим 
 //analogWrite(9, HimZY);  //шим  
 //analogWrite(11, 255);  //шим  
 //analogWrite(12, HimZY);  //шим  
 //analogWrite(13, HimZY);  //шим  
 currentTime = millis(); 
 ZYB(); 

 
 


  if(currentTime >= (loopTime_1 + 1)){              // 1000=1 секунда
  loopTime_1 = currentTime;                       // в loopTime записываем новое значение
  Web(); motor(); }


  if(currentTime >= (loopTime_10 + 10)){              // 1000=1 секунда
  loopTime_10 = currentTime;  // в loopTime записываем новое значение
  F433(); vid();}

 
  if(currentTime >= (loopTimeZY + 7)){              // 1000=1 секунда
  loopTimeZY = currentTime;                       // в loopTime записываем новое значение
  ZY();}
  
  if(currentTime >= (loopTimeTemp + 3000)){              // 1000=1 секунда
  loopTimeTemp = currentTime;                         // в loopTime записываем новое значение
  Temperatura();  }
  
  
  //обнуление 50 дней на всякий случай
  if((currentTime < (loopTime_10-100000)) && (loopTime_10>200000)){              
  loopTime_10  = 150;}
  if((currentTime < (loopTime_1-100000)) && (loopTime_1>200000)){              
  loopTime_1  = 150;}
  if((currentTime < (loopTimeZY-100000)) && (loopTimeZY>200000)){              
  loopTimeZY  = 200;} 
  if((currentTime < (loopTimeTemp-100000)) && (loopTimeTemp>200000)){              
  loopTimeTemp  = 200;}    
}

Скетч ворота

 

Denis_1704
Offline
Зарегистрирован: 28.05.2014
// ========================Задаем необходимые библиотеки================================ 

byte address;
byte address1;


String readString = String(20); //string for fetching data from address
String stroka = String(20); //string for fetching data from address
int chislostrok = 0; 
int ZadpozVorotWeb; 
// ========================данные сети========================================== 

void Web(){
   // =============Создаем клиентское соединение====================================
  EthernetClient client = server.available();
  if (client) { while (client.connected()) { if (client.available()) {  char c = client.read();///---------------------------------
      // прочитать символ по HTTP запросу полукокса
      if (readString.length() < 20) {readString.concat( c); } // количество  символово в строке readString.concat( c); 
       // выходные символы на последовательный порт
        // если HTTP запрос закончилась
        if (c == '\n') {
        chislostrok=readString.indexOf("p="); //
        if(chislostrok >=0) {stroka=readString; stroka=stroka.substring(chislostrok+2,chislostrok+5); //stroka.replace("&", "    "); stroka=stroka.substring(0,3);  stroka.replace(" ", ""); 
        ZadpozVorotWeb=stroka.toInt();  if ((0<= ZadpozVorotWeb) && (ZadpozVorotWeb<= ZybAll)) {ZadpozVorot=ZadpozVorotWeb; onMotor=1; timeMotor=5000;}            }
        chislostrok=readString.indexOf("s="); //
        if(chislostrok >=0) {stroka=readString; stroka=stroka.substring(chislostrok+2,chislostrok+5); //stroka.replace("&", "    "); stroka=stroka.substring(0,3);  stroka.replace(" ", ""); 
        maxSpeedMotor=stroka.toInt();  if(maxSpeedMotor >50) {maxSpeedMotor=55;} if(maxSpeedMotor <5) {maxSpeedMotor=5;}         }     
   // =============Формируем HTML-страницу=================================================
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("<head> ");
                
          
          
          client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
          client.println("<title>  :: ВоротА:: </title>");
          client.println("</head> ");
          client.println("<body> ");
          if(chislostrok >5){
          client.println("<form method=get name=v> <input type=submit value=Назад> </form>");
                  }
          
          if(chislostrok <5)  {

          
          client.println("<meta http-equiv=\"refresh\" content=\"10\">"); //прописать во время движения ворот обновления каждую секунду content=\"10-секунд тормозит жуть
          client.println("<h1> <span style=color:#8B3626>::ВОРОТА:: </h1>");
          client.println("<h2>Положение Ворот: </h2> ");  
          client.println("<form method=get name=v>");
          client.print("<h3> Открыть<<  <input type=range name=p min=0 max=");client.print(ZybAll); client.print(" step=1 value=");  client.print(ZadpozVorot);   client.println(" CHECKED>  >>Закрыть </h3>");
          client.println("<h2>Скорость  Ворот см/сек.:</h2>");
          client.print("<h3> Мин<<<<<<  <input type=range name=s min=5 max=55 step=1 value=");  client.print(maxSpeedMotor);    client.println(" CHECKED>  >>>>Макс </h3>");
          client.println("<input type=submit value=Выполнить></form>");
          client.println("<h2> Датчики: </h2>");
          client.print("Напряжение  АКБ = "); client.println(Vakb);client.print("вольт  ");
          client.println("<br> "); //перенос на след. строчку
          client.print("Ток Зарядки АКБ = "); client.println(Aakb);client.print("Ампер"); 
          client.println("<br> "); //перенос на след. строчку
          client.print("ШИМ ЗУ = "); client.println(HimZY);
          client.println("<br> "); //перенос на след. строчку 
          client.print("220в"); if (V220 == 0) {client.println("----");}  else {client.println("+++");}
          client.println("<br> "); //перенос на след. строчку
          client.print(" Т1= "); client.println(Temp1);client.print(" Т2= "); client.println(Temp2);client.print(" Т3= "); client.println(Temp3);
          client.println("<br> "); //перенос на след. строчку
          client.print("Код Последнего Ключа = "); client.print(Nastroika); client.print("  ");client.println(timeSpeedMotor);
          client.println("<br> "); //перенос на след. строчку
          client.println("</body></html>");
          }
            //очищаем строку для следующего считывания      
            //==============Останавливаем web-client===============================
            readString=""; chislostrok=0;
            //delay(30); 
            client.stop();
            //====================================================================
          }
        
}}}//------------------------------
} 
 

Скет веб

 

Denis_1704
Offline
Зарегистрирован: 28.05.2014

Прошу сильно не пинать за сетч . я не занаю С++ , я хорошо знаю Язык 1с. 

valeraba
Offline
Зарегистрирован: 08.09.2014

:) ок, скетч вроде не сложный, завтра постараюсь адаптировать под свой вариант.

Denis_1704
Offline
Зарегистрирован: 28.05.2014

valeraba пишет:

У вас получилось открыть редактор мнемосхем?

Да я там даже чтото порисовал и сохранил под названием ворота, но далее во все не вьехал.

Denis_1704
Offline
Зарегистрирован: 28.05.2014

valeraba пишет:

:) ок, скетч вроде не сложный, завтра постараюсь адаптировать под свой вариант.

он не весь здесь только главный модуль и выб и в главном модуле еще не хватает переменных по освещение и мигалки - пока ен доделал

valeraba
Offline
Зарегистрирован: 08.09.2014

смотрите сами, если этого хватит для проверки, то давайте на этом остановимся...

а лучше оформите для меня таблицу сигналов, чтобы я не блуждал по скетчу

valeraba
Offline
Зарегистрирован: 08.09.2014

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

valeraba
Offline
Зарегистрирован: 08.09.2014

внешние параметры :)

Denis_1704
Offline
Зарегистрирован: 28.05.2014

valeraba пишет:

смотрите сами, если этого хватит для проверки, то давайте на этом остановимся...

а лучше оформите для меня таблицу сигналов, чтобы я не блуждал по скетчу

скетч простой все переменные в первом скетче ворота в остальных только функции.

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

в конце выложу фаил со всеми скетчами. 

всем пока я на работу. 

 

valeraba
Offline
Зарегистрирован: 08.09.2014

:) мне не нужны внутренние переменные, только внешние параметры для взаимодествия

...хотя всё понятно и так, хорошее оформление кода

a5021
Offline
Зарегистрирован: 07.07.2013

Denis_1704 пишет:

3 сек на старт 1зуб далее по 2 сен на прохождение  зуба иначе остановка. поэтому смысла нет мерить токи за три секунды не что не умрет

Возрастание тока свидетельствует о возникшем препятствии вращению, чего в обычных условиях случиться никак не может. И если в момент, когда вы закрепляли шестерню, мотор неожиданно включился, а вашу руку стало наматывать на вал, я совершенно не уверен, что вы продолжите сохранять твердое мнение, будто за три секунды никто не умрет.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Именно так. Измерение тока - не сложно, но спасет от травм. Да же автомобильное окно может сломать руку ребенку. Профи системы не просто измеряют ток, но и запоминают график его изменения и сравниваются с запомненым как с эталоном. То есть под контролем наладчика производится тестовое открывание закрывание, а потом эти измерения и используются. У распашных ворот, вообще створки при столкновении с препятствием отходят 1.5-5  градусов в обратную сторону.

a5021
Offline
Зарегистрирован: 07.07.2013

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

Denis_1704
Offline
Зарегистрирован: 28.05.2014

Наконец добрался до компа, может допишу скетч.

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

В результате едет 40-60см в секудну остановить нереально ( испытуемый был отец весом 100 кг) максимум скорость падала до 20см в сек. и то он бодро скользил по бетону :) . результатом очень доволен. т.к. живу я в России а не на Кипре как некоторые которые предлогают строить защиту по току.

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

Ну вы даете даже законы природы упомянули которые я (может не я) чем то нарушил. :)

Да насчет лазенья руками в шестерни и наматывание руки - без каментариев :)

Фото установленого ящика сделаю завтра.

Denis_1704
Offline
Зарегистрирован: 28.05.2014

brokly пишет:

 У распашных ворот, вообще створки при столкновении с препятствием отходят 1.5-5  градусов в обратную сторону.

а в -20 они постоянно отходят и хозяива им аккуратно помогают открыться (закрыться) все зиму наблюдаю такой цирк :).

a5021
Offline
Зарегистрирован: 07.07.2013

Denis_1704 пишет:

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

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

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

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

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Denis_1704 пишет:

а в -20 они постоянно отходят и хозяива им аккуратно помогают открыться (закрыться) все зиму наблюдаю такой цирк :).

Денис, пожалуйста, прекратите писать бред. Если вы увидели хозяина который по жадности сам настраивал привод, это не значит что все такие. Настроил не один десяток приводов, хотя этим не зарабатываю. Ни один не имеет такх глюков. Бывает все что угодно, от наклона воротных столбов до выпирания грунта, но то что вы описали - полная хрень. Более того "помочь" приводу нельзя, он передет в останов, а прокрутить привод распашонок руками, не отключая оедуктор НЕВОЗМОЖНО.

Кошмар, вы постоили убийцу детей :( Ну да бог вам судья.

valeraba
Offline
Зарегистрирован: 08.09.2014

Чтобы доверять такую защиту ардуине, нужно оформлять программу в виде конечного автомата (дробить алгоритмы на мелкие состовляющие). Я не изучал стандартные библиотеки для ардуино, но даже библиотека w5100 может надолго заблокировать программу.
Поэтому выносить критическую логику лучше в обработчик прерывания таймера.

...только много ли из ардуинщиков так умеют программировать, не слишком ли мы требовательны?

shemnik69
Offline
Зарегистрирован: 28.10.2013

Из практики:

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

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

2. Стоп, створы в движении, при наличии (или возникновении) препятствия в проеме ворот (определяется световым (ИК) датчиком (целесообразно использовать готовые т.е от автоматики ворот. В алгоритме порядок таков, при возникновении препятствия привод сразу останавливается ждет 7-10 сек, проверяет наличие препятствия, затем стартует в ранее выбранное направление (как правило на закрытие).  Данный режим очень оправдан имеенно именно если есть дети!!! Однажды наблюдал как малыши дразнят привод стоп/пуск играя на луч датчиков. После введения паузы такой интерес (почему то?) пропал.

3. Ограничить скорость перемещения до величины примерно 10-15 см сек . Иначе при входе в ловушки может возникать сильный удар (особенно при сильном боковом ветре) и причие динамические удары. Это плохо как для привода так и для все конструкции в целом.  Если только Вы не примените алгоритм динамического изменнеия скорости. Данный вариант хорош, но как уже указавалось, должен быть четко связанный сценарий управления двигателем в зависимости от текущего  положения створы открыта. полуоткрытие (зависимость %) все это только лишнее и это попросту, трата времени.  Постоянная скорость самый оптимальные вариант.

 

 

 

 

Denis_1704
Offline
Зарегистрирован: 28.05.2014

shemnik69 пишет:

Из практики:

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

2. Стоп, створы в движении, при наличии (или возникновении) препятствия в проеме ворот (определяется световым (ИК) датчиком (целесообразно использовать готовые т.е от автоматики ворот. В алгоритме порядок таков, при возникновении препятствия привод сразу останавливается ждет 7-10 сек, проверяет наличие препятствия, затем стартует в ранее выбранное направление (как правило на закрытие).  Данный режим очень оправдан имеенно именно если есть дети!!! Однажды наблюдал как малыши дразнят привод стоп/пуск играя на луч датчиков. После введения паузы такой интерес (почему то?) пропал. ИК  стоит настроен так: если закрывается пересек ик -  остановка далее автоматически не включается. 

3. Ограничить скорость перемещения до величины примерно 10-15 см сек . Иначе при входе в ловушки может возникать сильный удар (особенно при сильном боковом ветре) и причие динамические удары. Это плохо как для привода так и для все конструкции в целом.  Если только Вы не примените алгоритм динамического изменнеия скорости. Данный вариант хорош, но как уже указавалось, должен быть четко связанный сценарий управления двигателем в зависимости от текущего  положения створы открыта. полуоткрытие (зависимость %) все это только лишнее и это попросту, трата времени.  Постоянная скорость самый оптимальные вариант. Скорость стоит по максиму алгоритм: за 60 зубов до окначания пути(открыть или закрыть) 20см сек ( 40з - 15см,20з - 11см, 10з - 8см )

А так все собрал все работает есть проблема с 433. когда включен реле с освещением 220вольт 433 не ловит брелки. Причем если отключаеш 220в все работает, так что дело не в реле, а в какихто наводках, наверное закажу какой нибудь дорогой дальний модуль 433, так что посоветуйте 433 модуль с радиусом 100-200м(чтоб без остановки проезжать ворота.

было еще кучу проблем (пару раз хотел все облить бензином и поджечь) но все удалось решить.

открывается закрывается ровно за 19 сек с учотом плавного.( старта и торможения).

shemnik69
Offline
Зарегистрирован: 28.10.2013

на счет приемника .

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

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

Концевики же ставте обязательно. Сам концевик внутри бокса а на створе элементы которые будут воздействовать на сам концевик (своего рода стопоры).  Поверте они лишними не будут.

Denis_1704
Offline
Зарегистрирован: 28.05.2014

shemnik69 пишет:

Я ипользовал целиком блок автосигнализации

Изначально тоже рассматривал автосигнализацию но потом отказался из за не возможности добавления кодов брелков.

Буратино
Offline
Зарегистрирован: 11.11.2016

Почитал и волосы дыбом. Вот как интересно функционирует фирменный автомат для распашных ворот? Смотрел в ютубе разные "решения" и видел видео где все механизмы покрыты иниеем но все работает, ворота открываются и закрываются без проблем. Я сам инвалид, и мне по зарез нужен автомат для распашных ворот. Пока делаю чисто на механике, плюс драйвер ШД L298N. Приводы для ворот применяю от стекло подьемников. створки ворот моего гаража (железный) ходят очень легко. Проблема пока уперлась в своевременном реверсе приводов в согласии с концевиками, который оключают моторы. Пока не могу сообразить как одновременно механикой сделать реверс и отключить питание движков. Питание автомата от аккумулятора. Хорошо б сделать на ардуине но нет таланта. Очень надеюсь на помощь форума

Алгоритм автомата приблизительно такой: радио брелок подает сигнал - приемник в гараже принимает сигнал и включает релюху, которая включат привод багажника приспособленного для открытия засова ворот. Тот в свою очередь включает дравер L298N, приводы открывают ворота. Ворота открыватся до определенного положения и приэтом включают концнвики и специальное устройство переключоет двухканальный переключатель который делает реверс. Вот тут проблема. Все завязано на движении створки ворот. Если она остановится раньше переключения, то переключение не произойдет - не получится сигнала реверса. Если произойдет раньше реверс, то привод продолжит движение ворот в обратном направлении.

Вот тут бы и пригодилась бы ардуинка. При сигнале коцевика ардуино с задержкой делала бы реверс привода. Для закрытия ворот, снова давим на кнопку Р.брелка, весь процес повторяется. Сигнал приемника-привод засова, разблакировка моторов. Ворота закрываются, засовы вверху и внизу, заходят в запоры, срабатывают концевики "закрыто" и отключают моторы приводов, ардуино делает реверс L298N. Помогите с програмированием. Может такая схема кому-то пригодмтся. Спасибо.

 

Буратино
Offline
Зарегистрирован: 11.11.2016

Вот так вижу если с Ардуино. Правда здесь появляется другая проблема. Кнопка на Р.брелке одна. Один раз - окрываю, другой раз - закрываю, так как при открытии ворот, засов становмтся в исходное положение и закрытие ворот можно запускать снова при нажатии кнопки на брелке.