Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Arduino Nano + 4-канальное реле: Управление роллетами и АС-моторами

Компоненты и расходные материалы

Arduino Nano R3 × 1
ControlEverything.com 4-CHANNEL RELAY CONTROLLER FOR I2C × 1
Твердотельное реле 4 канала (Solid State Relay) × 1
Мотор роллета (до 4 моторов на один Arduino) × 1
Конденсатор 100 нФ 630 В (на каждый мотор) × 1
Резистор 100 Ом (мин. 0.5 Вт!) (на каждый мотор, НЕ точные синие!) × 1
Варистор 275 VAC (на каждый мотор) × 1
Диод (любой сигнальный или силовой) (на каждый роллет) × 3
Raspberry Pi 3 Model B (опционально, для удалённого управления) × 1
Модуль nRF24L01+ (опционально, 2 шт. для удалённого управления) × 2

Необходимые инструменты

Приложения и сервисы

О проекте

Введение

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

Не любите программировать, но любите паять? Читайте дальше — в конце есть дискретная схема без МК.

Объяснение проблемы

При управлении моторами главная проблема — индуктивность. При размыкании цепи ток стремится продолжить течь, создавая огромное перенапряжение. Малое реле — контакты привариваются. Триак (SSR) — перенапряжение (я замерял пики >1600 В) убивает полупроводник.

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

PS: Схему писал из памяти давно после постройки. Пересматривая плату, увидел: в реальности RC-гаситель стоит между коричневым и серым проводами мотора (по цветам схемы), а не на контактах триака. Оба варианта работают, но второй лучше — гаситель не постоянно под сетевым напряжением.

PS2: SebDominguez сделал наглядную схему реальной конфигурации:

Arduino Nano + 4-канальное реле: Управление роллетами и АС-моторами

Вместо двух пинов на роллет (вверх/вниз) используется общая линия направления — всего 5 входов вместо 8. Без аппаратного фильтра, антидребезг программный.

Алгоритм: Arduino включает релейный модуль (выбор направления), после малой задержки (контакт уже замкнут) — включает триак, питая мотор 230 ВАС через дешёвые реле и триаки без проблем. Размыкание в обратном порядке: сначала триаки, потом реле — реле никогда не коммутируют нагрузку под напряжением.

Можно использовать 1–4 мотора без изменения кода. Неиспользуемая логика не мешает, если пины не нужны для чего-то ещё.

У меня два этажа — две цепи. Команды пульта должны быть уникальны, код работает для любой цепи за счёт закомментирования одной строки при прошивке. Одна цепь — ничего менять не надо. Две — решение бесплатно. На самом деле три цепи, 8 роллетов: в одной все 4 входа заняты, в других — 3 и 1. Дублированные цепи реагируют одинаково, но где ничего не подключено — нечему срабатывать. С MySensors можно до 256 узлов по 4 роллета без изменения кода.

Arduino Nano + 4-канальное реле: Управление роллетами и АС-моторами

Реальная установка в коробке 22×15×5.2 см, плотно. Собрал в открытой деревянной коробке на термоклее: практично, быстро, просто.

В Arduino Web Editor библиотеки подхватятся автоматически.

Удалённое управление (опционально)

Цель урока — решить проблему индуктивности, но добавил и радиоуправление.

Код поддерживает два способа через nRF24L01+: MySensors (рекомендую) или передачу целого числа (номер роллета + 0/1 вверх/вниз).

В обоих случаях мастер — RPi с nRF24L01+, контроллер — Domoticz.

Вариант 1: MySensors

Нужен MySensors MQTT Gateway (инструкция). Моя конфигурация (Ethernet на localhost):

sudo ./configure --my-gateway=mqtt --my-controller-ip-address=127.0.0.1 \
  --my-mqtt-publish-topic-prefix=domoticz/in/MyMQTT \
  --my-mqtt-subscribe-topic-prefix=domoticz/out/MyMQTT \
  --my-mqtt-client-id=mygateway1 --my-transport=rf24 \
  --my-port=1883 --my-rf24-irq-pin=15

Интеграция в Domoticz: добавить HW «MySensors MQTT Gateway», включить ноду — она сама появится в настройках HW.

Вариант 2: Кастомное приложение

Виртуальный переключатель выполняет консольную команду:

./remote -m XY

(X: номер роллета, Y: действие).

Код для RPi описан в статье. Нужна только секция «The Lamp Switch Application». Железо там тоже полезно. Обязательно конденсатор 10 мкФ на питании радио. Рассмотрите модуль с внешней антенной — PCB-антенна внутри стен даёт <10 м.

Код нужно немного поправить: подстроить параметры радио под Arduino, и отправлять команду один раз (не до 5 ретраев), иначе при потере ACK роллет будет дергаться: сработал-остановился-сработал.

Итоговый код для RPi (скомпилированный для Pi 3 в архиве https://goo.gl/ocCwk3):

#include <unistd.h>
#include <string>
#include <getopt.h>
#include <cstdlib>
#include <sstream>
#include <iostream>
#include <RF24/RF24.h>
using namespace std;

RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
unsigned long got_message;

void setup(void){
  printf("\nPreparing interface\n");
  radio.begin();
  radio.setRetries(15, 15);
  radio.setChannel(0x70);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.printDetails();
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1,pipes[1]);
}

bool sendMessage(int action){
  radio.stopListening();
  unsigned long message = action;
  printf("Now sending %lu...", message);
  bool ok = radio.write(&message, sizeof(unsigned long));
  if (!ok) printf("failed...\n\r");
  else printf("ok!\n\r");
  radio.startListening();
  unsigned long started_waiting_at = millis();
  bool timeout = false;
  while (!radio.available() && !timeout) {
    if (millis() - started_waiting_at > 1000) timeout = true;
  }
  if(timeout){
    printf("Puta mierda, no me responde nadie...\n\r");
    return false;
  }else{
    radio.read(&got_message, sizeof(unsigned long));
    printf("Yeah, me han respondido > %lu.\n\r",got_message);
    return true;
  }
}

int main(int argc, char **argv){
  char choice;
  setup();
  bool switched = false;
  int counter = 0;
  while((choice = getopt(argc, argv, "m:")) != -1){
    if (choice == 'm'){
      printf("\nTalking with my NRF24l01+ friends out there....\n");
      while(switched == false && counter < 1){
        switched = sendMessage(atoi(optarg));
        counter++; sleep(1);
      }
    }else{
      printf("\n\rIt's time to make some choices...\n");
      printf("\n\rTIP: Use -m idAction for the message to send.");
      printf("\n\rExample (id 12, action 1):\nsudo ./remote -m 121\n");
    }
  }
  return (counter < 5) ? 0 : 2;
}

Архив содержит исходники, библиотеки и скомпилированный бинарь для RPi 3. Распакуйте и запускайте ./remote -m XY.

Результат

Arduino Nano + 4-канальное реле: Управление роллетами и АС-моторами

Три пары выключателей управляют тремя роллетами. Планшет на стене — Domoticz с виртуальными переключателями. За планшетом RPi с контроллером. Arduino у роллетов, связь по радио.

Arduino Nano + 4-канальное реле: Управление роллетами и АС-моторами

Google Home + IFTTT Webhooks + Domoticz = голосовые команды («Hey Google, blinds down»). Если дошли досюда — с голосом разберётесь сами.

Видео с демонстрацией (ссылка в оригинале).

Надеюсь, урок помог! Пишите в комментариях.

С уважением, gomecin

P.S. Дискретная схема без МК (для любопытства или если ненавидите программирование):

Arduino Nano + 4-канальное реле: Управление роллетами и АС-моторами

Собрал, работает, но сделал до знакомства с Arduino — она менее гибка и надёжна. Не вscope урока, не рекомендую использовать.

Код

Скетч для Arduino

(Код в оригинале не приведён полностью, см. репозиторий автора)

Схемы

Arduino Nano + 4-канальное реле: Управление роллетами и АС-моторами

Производственный процесс

  1. Разрешающие и блокирующие цепи в промышленных системах управления
  2. Продвинутые схемы управления двигателями: защёлкивание, стоп и задержка времени
  3. Расчет рассеиваемой мощности в резистивных цепях
  4. Технология бульдозеров: дизайн, производство и будущие инновации
  5. Edge AI и низкопотребляющее железо питают рост голосового управления
  6. Infineon представила серию TLE985x Embedded Power для автомобильного управления двигателями
  7. Контроль качества: краеугольный камень надежности двигателя
  8. Электрические щиты управления: основы проектирования для безопасности и ROI
  9. Надежная аренда энергоустановок и HVAC для бесперебойного климат-контроля
  10. Управление скоростью гидравлического мотора через ШИМ и ДУ: практическое руководство