Сухі контакти й аналогові входи KC868-A16
Шістнадцять дискретних і чотири аналогові входи — це те, заради чого A16 беруть під великий щиток: аварійний поплавок на кожен бак, пресостати на куб і парогенератор, кнопки на дверцятах, датчик тиску на колону. Помилки тут дешевші, ніж на виходах — вхід не згорить, — але коштують часу: датчик «не спрацьовує», аналоговий канал показує не те, що на клемі, «зайвий» дільник з іншої статті ріже половину шкали. Ця стаття проходить обидві групи входів від клеми до прошивки.
Дискретні входи: сухий контакт на землю#
Дві колодки, 1–8 і 9–16, на кожній своя клема GND. Кожен вхід — оптопара
EL357, і влаштовано його так (аркуш Digital схеми):

Плюс 12 В плати через резистор 2 кОм іде на світлодіод оптопари, а з нього —
на клему INn. Замкнули клему на GND — світлодіод засвітився, вхід
активний. Прошивка читає стан через розширювачі PCF8574P (0x22 для
входів 1–8, 0x21 для 9–16).
Що з цього випливає:
- Живлення на контакт подає сама плата. Поплавок, кнопка, контакти
пресостата чи реле підключаються двома дротами між
INnіGND— без зовнішнього джерела. Полярності немає. - Струм через контакт — близько 5 мА при 12 В:
(12 − 1.2) / 2000. Це достатньо, щоб «пробити» окисел на герконі чи механічному контакті, і замало, щоб щось нагріти. При живленні плати 24 В — близько 11 мА. - Датчик з транзисторним виходом NPN (індуктивний, оптичний, «датчик
наближення» на 12 В) заводиться так само: його вихід на
INn, його мінус наGND, його плюс — на плюс блока живлення. Датчик з виходом PNP сюди не підходить: він видає плюс, а вхід чекає замикання на землю. - Спільна земля з платою — обовʼязкова. Оптопара розвʼязує вхід від
логіки ESP32, але не від 12 В самої плати:
GNDколодки входів — це той самий мінус блока живлення.
Індикаторів стану на входах немає — на молодшій A4 вони були, на A16 їх прибрали. Перевіряти спрацювання доведеться в Периферії oCBot: замкнули контакт — канал змінив стан.
У прошивці кожен вхід — це окрема периферія типу «дискретний вхід» із можливістю інверсії. Пресостат із перекидним контактом підключайте тим контактом (NO чи NC), який дає безпечний стан при обриві дроту: аварійний датчик має спрацьовувати, коли дріт розімкнений, — тоді обрив кабелю зупинить нагрів, а не сховає аварію.
Аналогові входи: 0–5 В без зовнішнього дільника#
Колодка Analog Input 1–4 з клемою GND. Всередині кожен канал проходить
три ступені (аркуш Analog схеми):

- Дільник 5.1 кОм / 10 кОм — 5 В на клемі перетворює на 3.3 В.
- Буфер LM324 (живиться від 12 В плати) — розвʼязує датчик від АЦП.
- Діоди BAT54S на шину 3.3 В — обрізають усе, що вище, щоб не вбити ESP32.
Тобто клема розрахована саме на датчики зі шкалою 0–5 В, і зовнішній дільник, як у статті про датчики тиску, на A16 не потрібен. Та стаття описує підключення до «голого» піна ESP32, який тримає лише 3.3 В; тут ділення вже зроблене на платі. Поставити другий дільник 10 к / 10 к зверху — означає завести на АЦП 1.65 В замість 3.3 і втратити половину шкали.
Далі сигнал іде на внутрішній АЦП ESP32 — GPIO 36, 34, 35, 39 з
атенюацією 12 дБ, 12 біт (rb_environment_parts.cpp). Прошивка віддає
частку від повної шкали, а перерахунок у кПа чи кілограми задається
калібруванням у налаштуваннях периферії.
Дві чесні межі цього тракту:
- Верхні 20–25% шкали нелінійні. АЦП ESP32 при 12 дБ лінійний приблизно до 2.45 В на піні, тобто до 3.7 В на клемі; біля 3.1 В на піні (4.7 В на клемі) характеристика впирається в стелю. Для датчика тиску 0–100 кПа, де робоча точка — 40–50 кПа, це не заважає. Для датчика, який працюватиме біля максимуму шкали, беріть модель з більшим діапазоном.
- Датчик з виходом 4–20 мА сюди не заводиться без шунта: шунт 250 Ом дає 1–5 В, і це працює, але шунт треба ставити самому й калібрувати нуль на 1 В.
Живлення датчика — від блока живлення 12 В, а не від плати: більшість промислових датчиків тиску живляться 12–24 В, а на платі вільних 5 В немає (чому).
Нумерація каналів = нумерація клем — з прошивки FW_VER. Прошивка бере
порядок каналів АЦП із розкладки плати (ain_adc_channel у board_peripheral_map.cpp:
для A16 — GPIO 36, 34, 35, 39, як розведені клеми 1–4), тож «Аналоговий вхід 2» у
Периферії — це клема 2 на корпусі.
Якщо A16 працює на прошивці до FW_VER — там була стала таблиця в порядку
GPIO 36, 39, 34, 35, і канали 2, 3, 4 читали клеми 4, 2, 3. Після
оновлення датчики, привʼязані на старій прошивці до каналів 2–4, треба
переприв'язати на номер клеми, куди вони фізично заведені (або переставити
дроти). На A6 порядок не змінився.
Витратомір: ті самі чотири піни#
Імпульсний вихід витратоміра рахує апаратний лічильник ESP32, і прошивка вішає його на той самий пул GPIO 36/39/34/35, що й аналогові входи. Тобто витратомір займає одну з чотирьох аналогових клем, і датчик тиску з витратоміром конкурують за них. Через дискретні входи на PCF8574 імпульси не порахувати: шина I2C надто повільна (стаття про витратоміри).
На A16 ця клема, як і аналогові, проходить дільник 5.1 к / 10 к — імпульси від датчика Холла з живленням 5 В дають на піні 3.3 В, лічильник їх бачить.
Датчики температури: три роз'єми, не чотири піни#
Роз'єм GPIO's 1–3, 3.3V, GND — це три шини 1-Wire HT1, HT2, HT3 з
підтяжкою 4.7 кОм на платі. DS18B20 підключається трьома дротами: DQ на
HTn, VDD на 3.3V, GND на GND; другу підтяжку не ставити. Це вже
не входи «сухий контакт», і докладно про них — у статті про шини.
Суміжні статті#
- Контролер Kincony KC868-A16 — огляд плати й решта серії.
- Датчики тиску — які брати, як калібрувати нуль; дільник звідти на A16 не потрібен.
- Датчики рівня — поплавки й електроди для води й для спирту.
- Витратоміри — імпульси на літр і чому не через PCF8574.