Управление шлагбаумом

sanek100
Offline
Зарегистрирован: 26.01.2021

Добрый день, взял этот код для своей задачи, задача простая , необходимо открывать шлагбаум по lan сети,  есть два andurino uno и ethernet shield , необходимо открывать с проводной  кнопки, к сожалению никак не могу понять в чем загвозка, залил эти скетчи в итоге постоянно щелкает реле само по себе , то откроет то закроет, что только не менял ничего не меняется,так же необходимо чтобы реле сработало секунд на 5 и выключилась, помогите пожалуйста, с andurino в первый раз столкнулся. 

Андурино с кнопкой

#include <SPI.h>
#include <Ethernet.h>

#define BUT 2     //пин для кнопки


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,0,10);   //IP сервера 
IPAddress ip(192, 168, 0, 11);    //IP этого устройства
EthernetClient client;

int i=0;
uint32_t Time=0;
void setup() {
  pinMode(BUT, INPUT);
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
 delay(1000);
  
  
  Serial.println("connecting...");
  if (client.connect(server, 80)) {
    Serial.println("---------------");
    // Создаем HTTP-запрос
    client.println("GET /utc/now HTTP/1.1");
    client.println("Host: <a href="http://192.168.0.10/$1" rel="nofollow">http://192.168.0.10/$1</a>");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();
    
  } 
  else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
  Time=millis();
}

void loop() {

  if(!digitalRead(BUT) && millis()-Time>3000)
    delay(9);
    if(!digitalRead(BUT) && millis()-Time>3000){
        Serial.println("connecting...");
        if (client.connect(server, 80)){
          Serial.println("---------------");
          // Создаем HTTP-запрос
          client.println("GET /utc/now HTTP/1.1");
          if(i){
            client.println("Host: <a href="http://192.168.0.10/$1" rel="nofollow">http://192.168.0.10/$1</a>");
            i=0;
            
          }else{
            client.println("Host: <a href="http://192.168.0.10/$2" rel="nofollow">http://192.168.0.10/$2</a>");
            i=1;
            
          }  
          client.println("User-Agent: arduino-ethernet");
          client.println("Connection: close");
          client.println();
        } 
        else {
          // if you didn't get a connection to the server:
          Serial.println("connection failed");
        } 
        Time=millis();
    }
  delay(150);
  if (client.available()) {
    while(client.available()){
      char c = client.read();
      Serial.print(c);
    }
  }
  
  if(millis()-Time<0)       //если millis обнулился, то надо обнулить и переменную Time (примерно раз в 50 дней)
    Time=millis();
  
  // Если соединение прервано, отключаем клиент
  if (!client.connected()) {
 //   Serial.println();
 //   Serial.println("---------------");
 //   Serial.println("disconnecting");
    client.stop();
    // Останавливаем выполнение программы
    // while (true);
  }
}

Андурино с реле


#include <SPI.h>
#include <Ethernet.h>

#define OUT 8   //номер выхода для шлагбаума

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };    
uint16_t k=0; 

IPAddress ip(192,168,0,10);  // IP адрес сервера

EthernetServer server(80);

void setup()
{
  pinMode(OUT, OUTPUT);       //инициализируем 8 пин как выход для шлагбаума     
  digitalWrite(OUT, HIGH);           
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  delay(5);
  Serial.println("start");  
}

void loop()
{
  EthernetClient client = server.available();
  if(client){                                      
    while (client.connected()) {  
      if (client.available()) {  
        char c = client.read();       
        Serial.print(c);                                             
                              
        if(c == '$' && k<100){   
          k=0;                           
            c = client.read();
            Serial.println(c);
            if(c == '1'){                        
            Serial.println("ON");
            digitalWrite(OUT, HIGH);                
            }
            
            if(c == '2'){                            
            Serial.println("OFF");
            digitalWrite(OUT, LOW);               
            }    
          client.println("HTTP/1.1 200 OK");          //заголовочная информация
          client.println("Content-Type: text/html");
          client.println("Connection: close");  
          client.println("Refresh: 30");              //автоматическое обновление каждые 30 сек
          client.println();
          client.println("<!DOCTYPE HTML>");          //HTML тип документа
          client.println("<html>");                   //открытие тега HTML 
          client.print("<title>My web Server</title>");                  //название страницы
          client.print("<H1>My web Server</H1>");                        //заголовк на странице
          client.print("<a href=\"/$1\"><button>Up</button></a>");       //кнопка включить
          client.print("<a href=\"/$2\"><button>Down</button></a>");      //кнопка выключить
          client.println("<br />");       
          client.println("</html>");                  //закрываем тег HTML
          break;                                      //выход
        }else{
          k++;  
        }
         
      }
      
    }
  
    delay(1);  
    client.stop(); 
  }
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Я нихрена не понял.

А можно, то, что у Вас как "ардуино с реле" написать с кнопкой на 10-м пине? А вайфу удалить.

sadman41
Offline
Зарегистрирован: 19.10.2016

Схему подключения кнопки нарисуйте.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sanek100 пишет:

с andurino в первый раз столкнулся. 

Начни со светлодиодика. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sanek100 пишет:
постоянно щелкает реле само по себе , то откроет то закроет
Что-нибудь болтается в воздухе. Выкладывайте схему (только свою, а не "картнко из сети") и фото сборки.

sanek100
Offline
Зарегистрирован: 26.01.2021

Здравствуйте, схему прилагаю, как я это вижу , надеюсь не ошибся

https://ibb.co/DYpHjK5

 

sadman41
Offline
Зарегистрирован: 19.10.2016
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sanek100 пишет:

Здравствуйте, схему прилагаю, как я это вижу , надеюсь не ошибся

https://ibb.co/DYpHjK5

Как я и предполагал

ЕвгенийП пишет:
Что-нибудь болтается в воздухе.

А именно кнопка. Вы её неправильно подключили. Как правильно, изучайте по ссылке, которую Вам дал коллега чуть выше.

sanek100
Offline
Зарегистрирован: 26.01.2021

я правильно понял, что между контактом gnd и 2 необходимо поставить резисто на 10Ком и замыкать его потом на 5v при нажатии на кнопку ?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

На Вашей наскальной живописи схеме ни хрена не видно, что куда подключено. Правильно-то оно много как. В данном случае разумно кнопку ставить между пином (пусть 2) и Gnd, пин в программе объявить не INPUT, а INPUT_PULLUP. При считывании, если на нём HIGH - значит кнопка отпущена, если LOW - нажата, а резисторов вовсе не нужно.

sanek100
Offline
Зарегистрирован: 26.01.2021

ЕвгенийП пишет:

На Вашей наскальной живописи схеме ни хрена не видно, что куда подключено. Правильно-то оно много как. В данном случае разумно кнопку ставить между пином (пусть 2) и Gnd, пин в программе объявить не INPUT, а INPUT_PULLUP. При считывании, если на нём HIGH - значит кнопка отпущена, если LOW - нажата, а резисторов вовсе не нужно.

Простите за схему, дело в том что мне достался эта система по наследству, на объекте , и к сожалению незнаю андурино от слова совсем, а так как там сгорел один контроллер пытаюсь восстановить

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sanek100 пишет:

там сгорел один контроллер пытаюсь восстановить

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

sanek100
Offline
Зарегистрирован: 26.01.2021

ЕвгенийП пишет:

На Вашей наскальной живописи схеме ни хрена не видно, что куда подключено. Правильно-то оно много как. В данном случае разумно кнопку ставить между пином (пусть 2) и Gnd, пин в программе объявить не INPUT, а INPUT_PULLUP. При считывании, если на нём HIGH - значит кнопка отпущена, если LOW - нажата, а резисторов вовсе не нужно.

Благодарю все получилось, за исключением одного, необходимо чтобы реле срабатывало на 10 секунд, а так получается, что она срабатывает при каждом нажатии на кнопку

DetSimen пишет:

sanek100 пишет:

там сгорел один контроллер пытаюсь восстановить

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

 

С удовольствием бы это сделал, но к сожалению это единственное средство, хотел сделать по радио, но из за леса не пробивает ничего (((

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sanek100 пишет:

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

Это вопрос к Вашей программе. Как написано, так и срабатывает. Если "необходимо"  так, а не эдак, так и напишите как необходимо. Не можете - запостите заказ в "Ищу исполнителя".

sanek100
Offline
Зарегистрирован: 26.01.2021

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sanek100 пишет:

наверное надо попросить может вас подкорректировать скетч не безвомездно

Нет, я не корректирую скетчи небезвозмездно. Запостите в "Ищу исполнителя", там найдётся тот, кто это сделает.