Реле принимает сигнал от автоматических ворот и переключается как устранить проблему?

koc234245
Offline
Зарегистрирован: 08.09.2018

Помогите пожалуйста я новичек в этой среде

У меня Arduino Pro Mini, HC-05, блок на 8 реле, 2 кнопки вверх вниз с общим нулем и автоматические ворота которые поднимаются и опускаются, когда подключены кнопки при полном опускании или поднимании получается какой-то скачек напряжения и реле сам переключается и ворота начинают обратное действие. Но если работать только с блютузом и отключненными кнопками все нормально.

Вот код

#include <SoftwareSerial.h>

int i = 0;
int ledPin_5 = 5;
int switchPin = 12;
boolean butt1;
boolean butt2;
boolean lastButton1 = LOW;
boolean lastButton2 = LOW;
boolean led_flag1 = 0;
boolean led_flag2 = 0;


void setup() {
  Serial.begin(57600);
  
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(11, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(switchPin, INPUT_PULLUP);
}


void loop() {
  butt1 = !digitalRead(10);
  butt2 = !digitalRead(11);
  if (Serial.available() > 0) {
 int i = Serial.read()-48;
  
    
    if (i == 1) 
    {
    led_flag1 = !led_flag1;
      digitalWrite(7, led_flag1);
    led_flag2 = 0;
      digitalWrite(9, led_flag2);
   delay(500);  
    }
    
    if (i == 3)
    {
    led_flag2 = !led_flag2;
      digitalWrite(9, led_flag2);
    led_flag1 = 0;
      digitalWrite(7, led_flag1);
   delay(500);
    }
    
    if (i == 5)
    {
    digitalWrite(ledPin_5, HIGH);
    delay(1000);
    digitalWrite(ledPin_5, LOW);
}
}
  
 { 
  if (butt1 == HIGH && lastButton1 == LOW)
     {
     lastButton1 == HIGH;
    led_flag1 = !led_flag1;
      digitalWrite(7, led_flag1);
    led_flag2 = 0;
      digitalWrite(9, led_flag2);
   delay(500);  
  }
 }
{    
     if (butt2 == HIGH && lastButton2 == LOW)
     {
     lastButton2 == HIGH;
    led_flag2 = !led_flag2;
      digitalWrite(9, led_flag2);
    led_flag1 = 0;
      digitalWrite(7, led_flag1);
   delay(500);
  }
}
   if (!digitalRead(switchPin) == HIGH) {
    digitalWrite(ledPin_5, HIGH);
  } else {
    digitalWrite(ledPin_5, LOW);
  }
}

 

koc234245
Offline
Зарегистрирован: 08.09.2018

третья кнопка switchPin это отдельная не связанная с воротами кнопка

код писал сам по обучающим видео из ютуба

gfx125
Offline
Зарегистрирован: 27.05.2017

подключите кнопки к другим пинам

Mikhail86
Offline
Зарегистрирован: 01.08.2016

Первое. Китайские шилды бывают с оптической развязкой и без.  Первый тип - реле на 5 вольт - пускается обычым транзистором. Гадость редкостная, т.к. наводки от силовой части 220 частенько запускают слабенький транзистор. 

Второй тип - с оптопарой PC817 на 12 вольт реле. Вот эта схема гораздо стабильнее. Там уже исключен сампороизвольное открытие транзистора, да и наводки от реле для мк тоже исключаются. т.к. схема 5в не задействована в управлении. Смотрите схемы

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

А какая стяжка-подтяжка к кнопкам?

koc234245
Offline
Зарегистрирован: 08.09.2018

Пробовал менять все пины к сожелению не помогло

koc234245
Offline
Зарегистрирован: 08.09.2018

у меня Модуль реле 8-канальный для Arduino (с оптронной изоляцией, 12В, hight and low level trigger, реле Songle) на самом реле написано SRD-O5VDC-SL-C

надо поменять? На модуле с 1 реле такая же проблема

 
koc234245
Offline
Зарегистрирован: 08.09.2018

немного не понял вопроса ибо чайник в электротехнике если вы про то как подключены провода то минус идёт к минусу от блока питания а плюсы к пинам на ардуино

 

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

Плюсы или сигнальные входы? Не запитали реле через ардуину, случаем?

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

А мне чудится, что кнопки антенной работают. ТС - схему нарисуйте, как кнопки подключили?

UPD: Просмотрел, на пулл-апах, Поставьте физические резисторы <=4к7.

 

Ну вот, злой сорок первый уже носом ткнул.)))

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

Раз PULLUP в ините, то вход на массу замыкает кнопкой, полагаю. Разве что усилить внутренний резистор внешним.

koc234245
Offline
Зарегистрирован: 08.09.2018

реле запитал от блока питания вроде на 450вт от старого компа проводом на 5в, а кнопка по сути является 3 проводами которые замыкаются при нажатии

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

От +5 к пинам, на которые подключены кнопки, подключите резисторы 1к-4к7 и проверьте с ними.

gfx125
Offline
Зарегистрирован: 27.05.2017

1)в 62 и 73 строках замените == на =

2)каким образом определяется полное поднятие/опускание ворот - концевиками/программно или на глаз?

3)к каким пинам подключено реле?

 

 

 

koc234245
Offline
Зарегистрирован: 08.09.2018

там в самих воротах что-то типо концовиков стоят, реле к пинам 7 и 9

 

koc234245
Offline
Зарегистрирован: 08.09.2018

сегодня попробовал с резисторами на 10кОМ и 4к7 проблема все та же

 

koc234245
Offline
Зарегистрирован: 08.09.2018

Я тут подумал и попробую с библеотекой OneButton на команду longPressStart поставить подачу сигнала

Может кто помочь с написанием кода?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

koc234245 пишет:

у меня Модуль реле 8-канальный для Arduino (с оптронной изоляцией, 12В, hight and low level trigger, реле Songle) на самом реле написано SRD-O5VDC-SL-C

надо поменять? На модуле с 1 реле такая же проблема

Если у вас реле 5-ти Вольтовые почему вы считаете что их надо питать 12-тью Вольтами?

koc234245
Offline
Зарегистрирован: 08.09.2018

я запитал его 5 вольтами

koc234245
Offline
Зарегистрирован: 08.09.2018

написал программу на библиотеке onebutton но выдаёт ошибку компиляции 'longPressStart1' was not declared in this scope

вот код, ошибка получается на 20 и 21 строке не могу понять почему

#include <OneButton.h>

#include <SoftwareSerial.h>


OneButton button1(A1, true);
OneButton button2(A2, true);
int i = 0;
int ledPin_5 = 5;
int switchPin = 12;
boolean led_flag1 = 0;
boolean led_flag2 = 0;

void setup() {
  Serial.begin(57600);
  
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(5, OUTPUT);
  button1.attachLongPressStart(longPressStart1);
  button2.attachLongPressStart(longPressStart2);
}


void loop() {
  button1.tick();
  button2.tick();
  if (Serial.available() > 0) {
 int i = Serial.read()-48;
  
    
    if (i == 1) 
    {
    led_flag1 = !led_flag1;
      digitalWrite(7, led_flag1);
    led_flag2 = 0;
      digitalWrite(9, led_flag2);
   delay(500);  
    }
    
    if (i == 3)
    {
    led_flag2 = !led_flag2;
      digitalWrite(9, led_flag2);
    led_flag1 = 0;
      digitalWrite(7, led_flag1);
   delay(500);
    }
    
    if (i == 5)
    {
    digitalWrite(ledPin_5, HIGH);
    delay(1000);
    digitalWrite(ledPin_5, LOW);
}
}
  
 { 
  void longPressStart1()
     {
    led_flag1 = !led_flag1;
      digitalWrite(7, led_flag1);
    led_flag2 = 0;
      digitalWrite(9, led_flag2);
   delay(500);  
  }
 }
{    
     void longPressStart2()
     {
    led_flag2 = !led_flag2;
      digitalWrite(9, led_flag2);
    led_flag1 = 0;
      digitalWrite(7, led_flag1);
   delay(500);
  }
}
   if (!digitalRead(switchPin) == HIGH) {
    digitalWrite(ledPin_5, HIGH);
  } else {
    digitalWrite(ledPin_5, LOW);
  }
}

 

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

Слишком много скобок.

koc234245
Offline
Зарегистрирован: 08.09.2018

убрал несколько все-равно не компилирует

 

gfx125
Offline
Зарегистрирован: 27.05.2017

функции void longPressStart1() и void longPressStart2() размести перед лупом

koc234245
Offline
Зарегистрирован: 08.09.2018

gfx125 спасибо закомпилировал и установил на ардуину пошел проверять

 

koc234245
Offline
Зарегистрирован: 08.09.2018

Гип гип УРА! Все заработало, получается там какой-то короткий сигнал идёт на пины кнопок и longPressStart решает эту проблему.

Всем ОГРОМНОЕ спасибо за участие