Пока мы с вами занимались контроллерами AlertBox (1, 2), подключали Wiren Board блоки на DIN-рейку и пытались полечиться при помощи ТГС-7А, компания Kincony тоже не теряла времени даром и выпустила ещё несколько контроллеров в своём неподражаемом форм-факторе «а-ля скейтборд, только колёсики приделать нужно».
На этот раз она нас порадовала концептуальным решением KC868-AI по организации сбора данных со множества (48 шт.) цифровых входов, плюс на плату добавлены приёмники инфракрасных сигналов (IR) и сигналов от радиомодулей на 433 МГц. Получилось что-то вроде универсального (Wi-Fi, Ethernet) умного (ESP32) гейта для сбора информации с какого-то объекта и передачи её для дальнейшей обработки в общую систему.
Ну а наличие интерфейсов RS485 и I2C и разъёма с 4-я свободными GPIO позволяет подключить к KC868-AI дополнительное оборудование, например, блок реле и сделать этот контроллер полноценным управляющим элементом вашей системы автоматизации.
Далее мы попробуем поподробнее разобраться с устройством KC868-AI и даже немного попрограммировать его в своё удовольствие.
❯ Kincony KC868-AI
Как всегда, начнём мы с перечисления компонентов и подсистем, установленных на плате Kincony KC868-AI:
- Микроконтроллер ESP-WROOM-32E
- 48 цифровых опторазвязанных входов («сухой контакт»)
- 4-контактный разъём KCOM для цифровых входов
- Интерфейс RS232 (2 разъёма)
- Интерфейс RS485
- Разъём для модуля приёмника 433 МГц
- IR приёмник
- Разъём I2C
- Разъём с 4-я свободными GPIO
- Ethernet LAN8270A
- Разъём USB для программирования
- Кнопки «Reset» и «Download»
- Питание от 12(24) В постоянного тока
Итак, входы:
- 48 цифровых опторазвязанных входов («сухой контакт»)
- IR приёмник
- Разъём для модуля приёмника 433 МГц
Интерфейсы:
- Интерфейс RS232 (2 разъёма)
- Интерфейс RS485
- Разъём I2C
- Разъём с 4-я свободными GPIO
Межконтроллерные коммуникации:
- Wi-Fi (ESP32)
- Ethernet LAN8270A
Из всего вышеперечисленного вырисовывается отличная гибкая платформа для создания собственных решений по автоматизации — KC868-AI можно использовать как гейт для сбора входных данных и последующей передачи их в общую систему или как отдельный универсальный контроллер для управления каким-то объектом (подключив актуаторы по доступным на плате интерфейсам или через свободные GPIO).
Из недостатков, я бы даже сказал не недостатков, а странностей, можно отметить полное отсутствие в KC868-AI хоть как-то окультуренных аналоговых входов. На плате присутствует разъём со свободными GPIO34, 35, 36, 39 и к ним можно попытаться подключить какие-то аналоговые датчики, но для этого придётся предпринимать дополнительные усилия и «колхозить» эти подключения.
Особенно это странно на фоне названия контроллера KC868-AI, которое как бы намекает на «Analog Input», но сам контроллер не содержит ни одного аналогового входа. Или Kincony под «AI» имела в виду «Artificial Intelligence»?
❯ Внешний вид и конструкция
Для сравнения привожу фотографию KC868-AI рядом с «базовой» моделью KC868-A4 всего семейства контроллеров KC868. Тут комментировать нечего, всё видно «невооружённым глазом», единственное, что хотелось бы заметить, — для огромных по размерам контроллеров Kincony требуются соответствующие шкафы — в то, что на наших просторах обычно называют «электрощитом» Kincony KC868-AI не влезет никак, даже боком или по диагонали (а если влезет, то места для автоматов и контакторов просто не останется).
Отдельно хочется отметить новую «весёленькую» расцветку крепления на DIN-рейку — она очень оживит внешний вид вашей суровой автоматизации.
Вид крепления на DIN-рейку сзади. Очень красиво, жаль, что эту красоту никто не увидит (смайл).
Полностью разоблачённый контроллер. На фото видны отверстия для крепления на любую подходящую поверхность (без DIN-рейки).
❯ Схемотехника
В этой статье мы прервём традицию тотального описания всех подсистем контроллера с приведением соответствующих схем — Kincony в своих изделиях использует типовые схемотехнические решения и повторять их описание из статьи в статью нет особого смысла.
В этом обзоре я буду приводить и разбирать только некоторые фрагменты схемы, характерные для рассматриваемой модели KC868-AI.
Для начала вид платы сверху. Всё сделано в (неподражаемом) духе Kincony. Обращают на себя внимание «брутальные» вертикальные USB и Ethernet разъёмы и отдельная внушительная «земляная» колодка KCOM. Также нужно отметить, что (с нашей подачи) Kincony стала устанавливать на плате разъём для подключения без пайки беспроводного модуля 433 МГц и начала выводить в отдельный разъём свободные GPIO ESP32.
Обратная сторона платы. Если вы любите чистоту, то приготовьте побольше жидкости для удаления остатков флюса — его много на обратной стороне платы и он как-то неохотно оттирается, всё время наровя растечься по плате тонким белесым слоем.
❯ Цифровые входы
Плата имеет 48 цифровых оптоизолированных входов «сухой контакт» на оптронах EL357, распределённых на 6 колодок по 8 контактов. Для обеспечения их работы в связке с ESP32 в KC868-AI применены расширители цифровых входов/выходов c I2C интерфейсом на 6-и микросхемах PCF8574P.
Принципиальная схема подсистемы цифровых входов. Для наглядности и чтобы не загромождать схему показан только один из шести блоков оптронов (остальные полностью ему аналогичны). Расширители портов на PCF8574P показаны все 6 штук. Обращает на себя внимание обозначение SDA2/SCL2 хотя на плате используется только один I2C интерфейс. Причём обозначение SCL2 написано с ошибкой (SDL2).
Отдельно схема колодок подключения цифровых опторазвязанных входов «сухой контакт» (контакты замыкаются на землю колодки KCOM).
❯ Разъёмы I2C
На плате присутствует очень полезный для подключения различных дополнительных компонентов разъём I2C. К нему можно подключить, например, дисплей, дополнительные сенсоры и прочие элементы.
Принципиальная схема контактов разъёма I2C (снова замечу, что двойка в обозначениях SDA2/SCL2 лишняя — на плате используется всего один I2C интерфейс):
❯ Свободные GPIO
Ещё одно полезное дополнение — 4 свободных GPIO в отдельном разъёме. К ним можно подключить различное оборудование или организовать аналоговые входы (которые полностью отсутствуют на плате).
Принципиальная схема разъёма со свободными GPIO (34, 35, 36, 39):
❯ Схема внешних подключений
Немного доработанная оригинальная схема разъёмов и внешних подключений контроллера KC868-AI от производителя. Два разъёма интерфейса RS232 — это на самом деле один интерфейс, параллельно выведенный в два разъёма.
❯ Распиновка
Распиновка на которой видно что и как подключено к микроконтроллеру ESP32 на плате KC868-AI. Похоже, что GPIO2 и GPIO12 никуда не подключены и никак не задействованы (нужно было тоже вывести в разъём со свободными GPIO).
❯ Программирование
Теперь давайте попробуем попрограммировать KC868-AI и для примера создадим скетч получения данных с его цифровых входов. Для этого нам понадобится библиотека PCF8574_library.
/*
KC868-AI DI example
*/
#include "Arduino.h"
#include "PCF8574.h"
#define SDA 4
#define SCL 5
PCF8574 pcf_1(0x24, SDA, SCL);
PCF8574 pcf_2(0x25, SDA, SCL);
PCF8574 pcf_3(0x21, SDA, SCL);
PCF8574 pcf_4(0x22, SDA, SCL);
PCF8574 pcf_5(0x26, SDA, SCL);
PCF8574 pcf_6(0x23, SDA, SCL);
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println(F("KC868-AI DI example start..."));
for (byte i = 0; i < 8; i++) {pcf_1.pinMode(i, INPUT);}
for (byte i = 0; i < 8; i++) {pcf_2.pinMode(i, INPUT);}
for (byte i = 0; i < 8; i++) {pcf_3.pinMode(i, INPUT);}
for (byte i = 0; i < 8; i++) {pcf_4.pinMode(i, INPUT);}
for (byte i = 0; i < 8; i++) {pcf_5.pinMode(i, INPUT);}
for (byte i = 0; i < 8; i++) {pcf_6.pinMode(i, INPUT);}
Serial.print("Init pcf 1..."); if (pcf_1.begin()){Serial.println("OK");} else {Serial.println("Err");}
Serial.print("Init pcf 2..."); if (pcf_2.begin()){Serial.println("OK");} else {Serial.println("Err");}
Serial.print("Init pcf 3..."); if (pcf_3.begin()){Serial.println("OK");} else {Serial.println("Err");}
Serial.print("Init pcf 4..."); if (pcf_4.begin()){Serial.println("OK");} else {Serial.println("Err");}
Serial.print("Init pcf 5..."); if (pcf_5.begin()){Serial.println("OK");} else {Serial.println("Err");}
Serial.print("Init pcf 6..."); if (pcf_6.begin()){Serial.println("OK");} else {Serial.println("Err");}
delay(1000);
}
void loop() {
Serial.println();
for (byte i = 0; i < 8; i++) {Serial.print(pcf_1.digitalRead(i));} Serial.print(' ');
for (byte i = 0; i < 8; i++) {Serial.print(pcf_2.digitalRead(i));} Serial.print(' ');
for (byte i = 0; i < 8; i++) {Serial.print(pcf_3.digitalRead(i));} Serial.print(' ');
for (byte i = 0; i < 8; i++) {Serial.print(pcf_4.digitalRead(i));} Serial.print(' ');
for (byte i = 0; i < 8; i++) {Serial.print(pcf_5.digitalRead(i));} Serial.print(' ');
for (byte i = 0; i < 8; i++) {Serial.print(pcf_6.digitalRead(i));} Serial.print(' ');
delay(300);
}
Поскольку на плате KC868-AI пины I2C интерфейса подключены к нестандартным GPIO4 и 5, то нам нужно учесть этот момент в коде и явно их указать. Тут же указываем адреса (0x24, 0x25, 0x21, 0x22, 0x26, 0x23) расширителей портов PCF8574P на I2C шине. Почему адреса идут не по порядку? Видимо для того, чтобы мы с вами не расслаблялись и жизнь (программирование) не казалась нам таким лёгким занятием.
#define SDA 4
#define SCL 5
PCF8574 pcf_1(0x24, SDA, SCL);
PCF8574 pcf_2(0x25, SDA, SCL);
PCF8574 pcf_3(0x21, SDA, SCL);
PCF8574 pcf_4(0x22, SDA, SCL);
PCF8574 pcf_5(0x26, SDA, SCL);
PCF8574 pcf_6(0x23, SDA, SCL);
Далее всё очевидно: инициализируем линии расширителей как входы и в цикле печатаем матрицу состояний всех 48-и цифровых входов KC868-AI (обратите внимание на нолик в первой позиции каждой строки — это 1-й вход замкнут на землю KCOM).
❯ Заключение
Kincony выпустила очередной отличный контроллер для DIY автоматизации — в нём всё просто и понятно для самостоятельного программирования — если ваша задача вписывается в его ТТХ, можно смело его использовать для реализации вашего проекта.
Комментарии (11)
lumen_xp
06.12.2022 19:22Добрый день. Как раз сейчас думаю над тем, куда завести пару десятков сигналов от датчиков движения и пожарных извещателей. Если с датчиками движения все более-менее понятно и они сядут на эту плату бесшовно, то по извещателям вопрос. Можете посоветовать вариант согласования сигналов? Основная система управления построена на контроллерах Wago, но с нынешним уровнем цен докупать модули ввод-вывода не реально.
smart_alex Автор
06.12.2022 19:33Я затрудняюсь ответить на этот вопрос (тут нужно предметно разбираться). Но если вы говорите о дорогих модулях ввода-вывода Wago, то может быть проблему решат модули ввод-вывода Wiren Board (стоят более-менее вменяемых денег), которые можно подсоединить к KC868-AI при помощи I2C или RS485 интерфейсов.
lumen_xp
06.12.2022 19:40Спасибо за наводку, нашел у них на форуме по теме "Подключение ИП 212-45 к WB6". По стоимости одного канала, железка из статьи явно выигрывает. А поднять Modbus TCP на ESP и передать данные на контроллер вроде не такая трудная задача.
usego
Да в общем-то аналоговые входы и не нужны для сценариев "читать" три десятка пуш батонов на каждом этаже дома. Хорошо, что такие решения стали появляться по адекватным ценам, надо будет причесать свой колхоз на ардуинах.
smart_alex Автор
Да, интересных решений стало появляться много, но это всё ещё не совсем то, что хотелось бы иметь. Ждём-с...
fk0
Я бы не сказал. Есть нюансы. В общем и целом, на мой взгляд, при разработке сигнализации или умного дома, на мой взгляд, проще использовать только аналоговые входы с АЦП. Цифровые входы это не только ноль и один, но и промежуточные состояния, и сразу возникают вопросы. Триггер Шмитта же есть далеко не на каждой ножке микроконтроллера.
Кроме того, аналоговые входы можно использовать для подключения нескольких кнопок на один вход и один кабель или провод. Подразумевается, что каждая кнопка может иметь отдельный встроенный резистор.
Токовые входы и оптроны -- возможно не лучшее решение. Вообще применение оптронов -- чаще сомнительное решение. Оптрон нужен, например, чтоб отвязаться от сети 220в. Но от статического электричества, например, он не защитит (будет пробит и поврежден еще). А когда в кнопку тыкают пальцем -- там несколько десятков киловольт, на что никакой оптрон не расчитан.
Масса входов, но ни одного толкового выхода. Например реле, или способного напрямую подключить реле. Вместо этого -- паяй сам. Но масса входов. Непонятно зачем так.
smart_alex Автор
У Kincony масса контроллеров и с входами и с выходами, на любой вкус, но они дороже.
А это специализированное решение для тех случаев, когда нужно именно много входов, а выходы не нужны.
usego
Я ни разу не электронщик, классический "ардуинщик", поэтому делал себе систему лет 10 назад по первой же показавшейся "рабочей" схеме. У меня сейчас несколько Nano на atmega368P, расширенных входами на 74HC165 и с выходами на 74РС595. Без оптопар, 5V на кнопки по всему дому с приходом назад на ардуины. В общем-то всё чётко работает все эти 10 лет (после отладки и подгонки под ответ, конечно). Антидребезг чисто софтварный. За 10 лет вылетело пара копеешных 74HC165 во время гроз, которые специально садил на кровати для лёгкой замены. Дёшево и удобно. Но такое себе...
Сейчас вот подумываю переделать всё это на более "промышленный" вид, так как такое показывать / продавать человеку со стороны не хочется. Подумываю о подобных решениях Kincony. У них и платы с релюхами есть отдельные типа KC868-E16S, я так понимаю можно подцепить её по I2C.
Не одобряете мысли в эту сторону? Если нет, то интересен ваш взгяд на нормальное решение за разумные деньги. И я не в РУ, всякие wirenboardы не вариант, надо то, что с алика доступно.
smart_alex Автор
Трудно суазать, чем больше этим занимаешься, тем лучше понимаешь, что с электричеством нужно быть аккуратным и лучше сразу всё делать правильно.
Могу также обратить внимание на аспект, который многие упускают из виду: автоматизация делается на многие годы и нужно заранее предусмотреть, что вы (или ещё хуже, кто-то другой) будете делать, когда через 10 лет сгорит ваш уникальный контроллер с уникальной прошивкой.
usego
Именно такие мысли и посещают и потому хотелось бы свести инструкции к 1) купите вот это на алике 2) таким-то способом залейте вот этот файл. Сейчас же само железо самопальное и неподдерживаемое. Правда долго ли проживёт Кинкони на рынке - тоже вопрос ) Но по крайней мере можно пару блоков про запас купить.
smart_alex Автор
Это непростой вопрос. Если делать на Kincony, то я бы посоветовал унифицировать контроллеры (выбрать 1-2 модели для проекта), максимально задокументировать прошивку, топологию и функционал автоматизации и купить в качестве резервных 1-2 унифицированных контроллера (на случай, если они перестанут выпускаться).