#1 2022-01-20 21:33:47

Rulya82
Учасник
Зареєстрований: 2022-01-20
Повідомлень: 9

Откатные ворота на ардуино

Есть желание и начальная стадия проэкта управления откатными воротами с функцией открытия через приемник 433МГц (или WIFIприемник) и просто с кнопки. Принципиальное желание осужествить это на платформе АРДУИНО УНО или на плате ATtini t88.
По сути не такой уже и терминатор, но учитывая что платформа ардуино для меня лично начала свое существование месяц где то назад - дается не легко.

Неактивний

#2 2022-01-20 21:37:42

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 819

Re: Откатные ворота на ардуино

дерзайте.
информируйте об успехах.

Неактивний

#3 2022-01-20 21:39:30

Rulya82
Учасник
Зареєстрований: 2022-01-20
Повідомлень: 9

Re: Откатные ворота на ардуино

skhema-vorot_20220120-2036.jpg

Неактивний

#4 2022-01-20 21:47:23

Rulya82
Учасник
Зареєстрований: 2022-01-20
Повідомлень: 9

Re: Откатные ворота на ардуино

концевик, по моему мнению, будет один на открытие и закрытие. Начальный скетч до горя печальный, но если есть в хозяйстве лишние пальцы и масса приводов - можно использовать!)))
По предварительному проэкту оказалось есть возможность одновременно запускать привод в обоих направлениях)))
Еще я не научился избавляться от delay(), по сему не смог осуществить на макате мигание двумя светодиодами в процессе открывания или закрывания ворот. Строго не судите пожалуйста, помогите разобраться.

#include <GyverButton.h>
GButton Knopka (3,HIGH_PULL,NORM_OPEN);
GButton Knopka2 (10,HIGH_PULL,NORM_OPEN);
int releOpen = 8;
int releClose = 9;
int LedB = 7;
int LedR = 6;
GButton Open  (5,HIGH_PULL,NORM_OPEN);
GButton Close (4,HIGH_PULL,NORM_OPEN);
void setup() {
  
  Serial.begin(9600);
  Knopka.setDebounce(100);
  Knopka2.setDebounce(100);
  pinMode(releOpen, OUTPUT);
  pinMode(releClose, OUTPUT);
  pinMode (LedB, OUTPUT);  
  pinMode (LedR, OUTPUT);
  Open. setDebounce (100);
  Close. setDebounce (100);
  
}
void loop() { 
   Knopka.tick();
   Knopka2.tick();
   Open.tick();
   Close.tick();
   
   //____________открытие ворот__________
  if (Knopka.isPress()){
    digitalWrite (releOpen, HIGH && Serial.println ("Ворота открываются") ); 
   if (releOpen || releClose, HIGH)
   { digitalWrite (LedB,HIGH);
     digitalWrite (LedR,LOW);
     }
  }     
 if (Open.isPress())   {
    digitalWrite (releOpen, LOW); 
    digitalWrite (LedB,LOW);
    digitalWrite (LedR,HIGH);
    Serial.println ("Ворота открыты");
    
  }
  //_____________________закрытие ворот_____________
  
  if (Knopka2.isPress()){
   digitalWrite (releClose, HIGH && Serial.println ("Ворота закрываются")); 
   if (releClose, HIGH)
   { digitalWrite (LedB,HIGH);
     digitalWrite (LedR,LOW);
       }
   
  }
   
   if (Close.isPress())   {
    digitalWrite (releClose, LOW); 
    digitalWrite (LedB,LOW);
    digitalWrite (LedR,HIGH);
    Serial.println ("Ворота закрыты");
    
  }
}

Неактивний

#5 2022-01-20 21:53:48

Rulya82
Учасник
Зареєстрований: 2022-01-20
Повідомлень: 9

Re: Откатные ворота на ардуино

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

primitivnaja-otkryvashka-vorot.jpg

Неактивний

#6 2022-01-21 01:36:02

akapulko
Гість

Re: Откатные ворота на ардуино

После:

#include <GyverButton.h>

отпадает желание читать дальше.
Я не буду помогать с кодом, но только потому что уверен - даже если у Вас получится что-то функционирующее, это не пойдет на пользу, а скорее наоборот. Вместо видосов в Ютубе рекомендую книгу - Make: AVR Programming by Elliot Williams (она на ENG, естественно, но даже если со словарём - лучше чем Gyver). Успехов!

#7 2022-01-21 20:36:28

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 947

Re: Откатные ворота на ардуино

akapulko пише:

После:

#include <GyverButton.h>

отпадает желание читать дальше.
Я не буду помогать с кодом, но только потому что уверен - даже если у Вас получится что-то функционирующее, это не пойдет на пользу, а скорее наоборот. Вместо видосов в Ютубе рекомендую книгу - Make: AVR Programming by Elliot Williams (она на ENG, естественно, но даже если со словарём - лучше чем Gyver). Успехов!

+ 100 !

Неактивний

#8 2022-01-22 11:46:11

г0сть
Гість

Re: Откатные ворота на ардуино

#include <GyverButton.h>

Не читал, но осуждаю

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

как-то так: если нажата кнопка соответствующая концевику и концевик сработал - то ничего не делаем, иначе - делаем

#9 2022-01-23 17:28:16

Rulya82
Учасник
Зареєстрований: 2022-01-20
Повідомлень: 9

Re: Откатные ворота на ардуино

г0сть пише:

как-то так: если нажата кнопка соответствующая концевику и концевик сработал - то ничего не делаем, иначе - делаем

т.е. через ELSE создать работающее условие, а через IF - отказ?

Неактивний

#10 2022-01-23 22:38:11

Rulya82
Учасник
Зареєстрований: 2022-01-20
Повідомлень: 9

Re: Откатные ворота на ардуино

У меня все работает уже, кроме того, что не могу реализовать приемник 433МГц на плате аттини т88, не подходят библиотеки RCswitch(((

Неактивний

#11 2022-01-24 10:44:35

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 199

Re: Откатные ворота на ардуино

Поищите другие библиотеки, например https://github.com/pouriap/TinyRF

Неактивний

#12 2022-01-28 00:22:52

Rulya82
Учасник
Зареєстрований: 2022-01-20
Повідомлень: 9

Re: Откатные ворота на ардуино

Honey пише:

Поищите другие библиотеки, например https://github.com/pouriap/TinyRF

К сожалению((( Че т не то(

Неактивний

#13 2022-05-22 18:04:48

webDev
Учасник
Зареєстрований: 2022-05-22
Повідомлень: 1

Re: Откатные ворота на ардуино

Цікаво, маю реалізований проект на nodemcu. Спершу теж робив з статичними кнопками та радіо керування, але після декількох місяцяв експлуатації відмовився від ідеї кнопок взагалі (жодного разу не користувався), а радіокерування не виправдало себе тоді перейшов на суто на wifi, якщо є ще інтернет неподалік так плюсів більше ніж в раіокеруванні. Можна відкривати заздалегіть або коли вас дома немає. У мене проблема лише з мотором (від двірників газелі) повільно відкриває. Який мотор використовуєте ви ?

Неактивний

#14 2022-06-12 17:32:14

Sattva
Учасник
З Киев, Голосеево
Зареєстрований: 2019-08-20
Повідомлень: 70

Re: Откатные ворота на ардуино

akapulko пише:

После:
[Вместо видосов в Ютубе рекомендую книгу - Make: AVR Programming by Elliot Williams
!

Спасибо за наводку, книгу скачал.

Хотя за 5 лет обучения по видосам + datasheets уровень позволяет делать интересные проекты:
- разбирать протоколы затем имитировать их,
- работать с Pointers,
- работать напрямую с портами 328P,
- использовать char array вместо String,
- писать клиент-серверные приложения на базе HTTP
- принимать платежи купюрами,
- принимать платеди по PayPass,
- проверять наличие клиента в базе MySQL
- стабильно запускать по RS-485 клапаны, и прочие силовые устройства до 6 кВ мощности.

Ах да, все это работает больше года на десятках объектов.

Кстати бибилиотека Алекса Гайвера для 7-ми сигментного дисплея из 4 цифр - очень даже хороша!

Я это к тому, что если кто-то ругает один путь и указывает другой, как единственно верный, то он манипулирует истиной. Ничего не имею против классики в форме книг на английском.

Однако, Alex Morozov очень злостный и толковый:
https://youtu.be/ygVB7WIu-vU

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

Неактивний

#15 2022-06-13 01:45:07

Vlf-Interval
Учасник
Зареєстрований: 2022-06-13
Повідомлень: 3

Re: Откатные ворота на ардуино

Проект затратно,провальний.
Чогось або недомовляете або недорозуміете.

Неактивний

#16 2022-06-13 01:50:15

Sattva
Учасник
З Киев, Голосеево
Зареєстрований: 2019-08-20
Повідомлень: 70

Re: Откатные ворота на ардуино

Vlf-Interval пише:

Проект затратно,провальний.
Чогось або недомовляете або недорозуміете.

Щиро дякую за конструктивну критику та справедливу оцінку.  tongue

Неактивний

#17 2022-06-13 12:49:45

Vlf-Interval
Учасник
Зареєстрований: 2022-06-13
Повідомлень: 3

Re: Откатные ворота на ардуино

Нема за що.Проект ще дійсний це так.
Тоді тицну у даташіт.
Які на уно стоять імс живлиня і скільки потрібно живлення для праці модулів реле tongue .Ваша відповідь

Неактивний

#18 2022-06-13 13:06:20

Васятко
Гість

Re: Откатные ворота на ардуино

Vlf-Interval пише:

Які на уно стоять імс живлиня

AMS1117 с током до 800мА https://3v3.com.ua/product_7562.html

Vlf-Interval пише:

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

5-20 мА https://arduino.ua/prod1706-modyl-rele-5v-10a-nizkogo-yrovnya-low-level

tongue .Ваша відповідь

з/ы если что - я знаю что реле лучше запитывать от отдельного источника, а это так, просто наш ответ Чемберлену  smile

#19 2022-06-13 23:04:48

Vlf-Interval
Учасник
Зареєстрований: 2022-06-13
Повідомлень: 3

Re: Откатные ворота на ардуино

3v3 я ваш давній кліент.Привіт Харкову.
Ну якщо такі подробиці знаете тоді чого голову ламаете і тему відкриваете.За півдня зробилиби.
З такой мигалкой оггого.
Щидевр як не поглянь.
Передавайте привіт Чемберленду.

Неактивний

#20 2022-08-01 15:32:44

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 199

Re: Откатные ворота на ардуино

Rulya82 пише:

У меня все работает уже, кроме того, что не могу реализовать приемник 433МГц на плате аттини т88, не подходят библиотеки RCswitch(((

У самого нещодавно виникла подібна задача, RCswitch також не вийшло адаптувати для роботи з пультами 433МГц. Тому зчитав з приймача сигнал і написав для нього свій парсер. Дарую)

mini_hcs301.png
Більш детально про формат є в даташиті.

#define HCS301_TE    400
#define HCS301_BITS  66

typedef struct {
  uint32_t SerialNum;
  uint32_t Encrypted;
  uint8_t Btn1   :1;
  uint8_t Btn2   :1;
  uint8_t Btn3   :1;
  uint8_t Btn4   :1;
  uint8_t BatLow :1;
  uint8_t Repeat :1;
} hcs301_t;

void hcs301_msg(hcs301_t *msg, uint8_t *a) {
  msg->SerialNum = ((uint32_t)(a[7] & 0xf) << 24) | ((uint32_t)a[6] << 16) |
                   ((uint32_t)a[4] <<  8) | a[5];
  msg->Encrypted = ((uint32_t)a[0] << 24) | ((uint32_t)a[1] << 16) |
                   ((uint32_t)a[2] <<  8) | a[3];
  msg->Btn1 = (a[7] >> 5) & 1;
  msg->Btn2 = (a[7] >> 6) & 1;
  msg->Btn3 = (a[7] >> 7) & 1;
  msg->Btn4 = (a[7] >> 4) & 1;
  msg->BatLow = (a[8] >> 6) & 1;
  msg->Repeat = (a[8] >> 7) & 1;
}

#define RF_RECV_PIN       2
#define is_roughly(d,t)   ((d) > (t)-(t)/4 && (d) < (t)+(t)/4)
#define RF_TE             HCS301_TE
#define RF_BITS           HCS301_BITS
uint32_t                  RF_last_change = 0;
uint8_t                   RF_byte, RF_array[(RF_BITS+7)>>3];
uint8_t                   RF_mode = 0;
volatile boolean          RF_catched = false;

void RF_interrupt() {
  if (RF_catched)
    return;

  uint32_t duration = micros() - RF_last_change;
  uint8_t  pin = digitalRead(RF_RECV_PIN);
  RF_last_change += duration;

  if (!(RF_mode & 0x80)) {
    if (RF_mode > 20 && pin == HIGH && is_roughly(duration, 10*RF_TE))
      RF_mode = 0x80;
    else if (!is_roughly(duration, RF_TE))
      RF_mode = 0;
    else if (!(RF_mode & 0x40))
      RF_mode++;
  } else {
    uint8_t bit = 0;
    if (is_roughly(duration, RF_TE))
      bit = 0x80;
    else if (!is_roughly(duration, 2*RF_TE))
      RF_mode = 0;
    if (RF_mode) {
      if (pin == HIGH) {
        if ((bit ^= RF_byte) & 0x80)
          RF_mode++;
        else
          RF_mode = 0;
        RF_byte >>= 1;
      } else {
        RF_byte |= bit;
        RF_array[(RF_mode >> 3) & 0xf] = RF_byte;
        if (RF_mode >= 0x80 + RF_BITS - 1) {
          RF_catched = true;
          RF_mode = 0;
        }
      }
    }
  }
}

void setup() {
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(RF_RECV_PIN), RF_interrupt, CHANGE);
  Serial.println("Listening RF");
}

void loop() {
  if (RF_catched) {
    hcs301_t msg;
    hcs301_msg(&msg, RF_array);
    RF_catched = false;
    Serial.print("#");
    Serial.print(msg.SerialNum, HEX);
    Serial.print(" ");
    Serial.print(msg.Encrypted, HEX);
    Serial.print(" ");
    if (msg.Btn1) Serial.print("1");
    if (msg.Btn2) Serial.print("2");
    if (msg.Btn3) Serial.print("3");
    if (msg.Btn4) Serial.print("4");
    if (msg.BatLow) Serial.print(" BatLow");
    if (msg.Repeat) Serial.print(" R");
    Serial.println();
  }
}

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму