Введение
Ультразвуковой дальномер HC-SR04 — один из самых популярных и доступных датчиков для измерения расстояния. Он используется в проектах умного дома, робототехнике, системах контроля уровня жидкости и парковки. Но в одиночку датчик — это просто набор сырых данных. Для превращения показаний в автоматизированные сценарии (например, отправка уведомления при заполнении бака или включение реле при приближении объекта) требуется связующее звено — AI-агент.
ASI Biont — это AI-агент для промышленности и IoT, который подключается к любому оборудованию через Python-скрипты, MQTT, Modbus, COM-порт и другие протоколы. В этой статье мы разберём, как подключить HC-SR04 к AI-агенту ASI Biont с помощью платы Arduino (или ESP32), прочитать данные и настроить автоматические реакции — без необходимости писать сложный код вручную.
Почему именно HC-SR04 и AI-агент?
HC-SR04 работает на принципе эхолокации: посылает ультразвуковой импульс и замеряет время возврата отражённого сигнала. Расстояние вычисляется по формуле: distance = (time * speed_of_sound) / 2. Датчик прост, дёшев (около 2–5 долларов) и точен в диапазоне от 2 см до 4 метров.
Однако для практических задач — мониторинга уровня воды в резервуаре, контроля свободных мест на парковке, обнаружения препятствий на пути робота — нужно не просто получить дистанцию, а:
- сравнивать её с порогами,
- отправлять уведомления (Telegram, email),
- записывать историю измерений,
- управлять исполнительными устройствами (реле, сервоприводами).
AI-агент ASI Biont берёт на себя логику анализа и принятия решений. Вы просто подключаете датчик к микроконтроллеру (Arduino, ESP32), а AI через чат пишет код интеграции и настраивает триггеры.
Какой способ подключения используем?
Для интеграции HC-SR04 с ASI Biont мы выберем Hardware Bridge через COM-порт. Это оптимальный сценарий для датчика, подключённого к ПК через Arduino или USB-UART адаптер. ASI Biont работает в облаке, а bridge.py, запущенный на вашем компьютере, соединяется с ним через WebSocket и обеспечивает доступ к COM-порту. AI использует команду industrial_command с протоколом serial://, чтобы отправлять запросы и читать ответы.
Почему не MQTT или SSH? HC-SR04 — простой датчик, не имеющий собственного IP-стека. Для работы через MQTT потребуется ESP32 с Wi-Fi, что усложняет схему. Hardware Bridge подходит, если датчик подключён к ПК напрямую (через Arduino) — это надёжно, дёшево и не требует настройки сети.
Схема подключения HC-SR04 к Arduino
Для считывания данных с HC-SR04 мы используем Arduino Uno (или Nano). Схема подключения проста:
| HC-SR04 | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| Trig | D9 |
| Echo | D10 |
Кроме того, для управления реле или светодиодом можно добавить, например, светодиод на D13 через резистор 220 Ом.
Прошивка Arduino: отправка данных в COM-порт
Загрузите на Arduino следующий скетч. Он измеряет расстояние каждые 2 секунды и выводит результат в порт в формате DIST:45.2, где 45.2 — расстояние в сантиметрах.
#define TRIG_PIN 9
#define ECHO_PIN 10
#define LED_PIN 13
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Отправка импульса
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Измерение времени отклика
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
// Вывод в порт
Serial.print("DIST:");
Serial.println(distance);
// Визуальная индикация: если объект ближе 20 см — включаем LED
if (distance < 20) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
delay(2000);
}
После загрузки откройте монитор порта (9600 бод) — вы увидите строки вида DIST:34.7.
Подключение ASI Biont через Hardware Bridge
Теперь настроим связь между AI-агентом и Arduino.
- Скачайте bridge.py из дашборда ASI Biont (раздел Devices → Create API Key → Скачать bridge).
- Установите зависимости (выполните в терминале):
bash pip install pyserial requests websockets - Запустите bridge, указав токен API и порт Arduino (например, COM3 на Windows или /dev/ttyUSB0 на Linux):
bash python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud 9600
Bridge соединится с облаком ASI Biont через WebSocket. Теперь AI может отправлять команды на COM-порт.
Как AI получает данные: команда serial_write_and_read
В чате с AI-агентом вы пишете запрос, например:
«Подключись к Arduino на COM3, скорость 9600. Каждые 10 секунд читай строку с датчика HC-SR04 и если расстояние меньше 30 см — отправь мне уведомление в Telegram»
AI использует инструмент industrial_command с протоколом serial://. Внутри bridge выполняет атомарную операцию: записывает данные в порт и сразу читает ответ. Для HC-SR04 мы не отправляем команды (датчик сам шлёт данные), поэтому AI использует операцию чтения без записи.
Пример того, как AI обрабатывает задачу:
# Этот код выполняется в sandbox ASI Biont (execute_python)
import requests
import time
TELEGRAM_TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = "YOUR_CHAT_ID"
def send_telegram(message):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
requests.post(url, json={"chat_id": CHAT_ID, "text": message})
# AI вызывает industrial_command для чтения данных с порта
# (в реальности AI использует tool call, но для наглядности — псевдокод)
# response = industrial_command(protocol='serial://', command='serial_write_and_read', data='')
# data = response['data'] # строка вида "DIST:45.2"
# Допустим, AI получил строку
data = "DIST:12.3"
try:
dist = float(data.split(':')[1])
if dist < 30:
send_telegram(f"⚠️ Внимание! Объект на расстоянии {dist} см!")
except:
pass
Обратите внимание: код с while True недопустим из-за таймаута sandbox (30 секунд). AI использует industrial_command каждый раз по вашему запросу или по расписанию (в будущих версиях).
Сценарий 1: Контроль уровня жидкости в резервуаре
Задача: Датчик HC-SR04 установлен над открытым баком с водой. Когда уровень воды падает ниже 50 см (расстояние до поверхности > 50 см), нужно включить насос. Когда бак заполнен (расстояние < 15 см) — выключить насос и отправить уведомление.
Реализация:
- Подключаем реле к Arduino (например, на D12).
- Прошивка Arduino выводит расстояние, а AI анализирует его и через industrial_command включает/выключает реле.
Пример команды AI для включения реле:
industrial_command(protocol='serial://', command='serial_write_and_read', data='RELAY_ON\n')
На стороне Arduino нужно добавить обработку команд:
if (Serial.available()) {
String cmd = Serial.readStringUntil('\n');
if (cmd == "RELAY_ON") digitalWrite(RELAY_PIN, HIGH);
else if (cmd == "RELAY_OFF") digitalWrite(RELAY_PIN, LOW);
}
Сценарий 2: Система помощи при парковке
Задача: Два датчика HC-SR04 установлены на заднем бампере автомобиля. При расстоянии до препятствия менее 1 м AI отправляет голосовое уведомление на смартфон (через Telegram) и зажигает светодиоды разного цвета в зависимости от дистанции.
Реализация:
- Два Arduino (или один с двумя датчиками) подключены к ноутбуку в автомобиле.
- AI читает данные с обоих портов (можно запустить два bridge с разными портами).
- При опасном сближении AI вызывает Telegram API.
Пример логики (выполняется AI в sandbox):
left_dist = 45.0 # получено с первого датчика
right_dist = 120.0 # со второго
if left_dist < 50 or right_dist < 50:
msg = f"⚠️ Опасность! Левый: {left_dist} см, Правый: {right_dist} см"
requests.post(f"https://api.telegram.org/bot{TOKEN}/sendMessage",
json={"chat_id": CHAT_ID, "text": msg})
Сценарий 3: Умный склад — мониторинг заполненности стеллажей
Задача: На складе 10 стеллажей, на каждом установлен HC-SR04, направленный вниз. Датчик измеряет расстояние до верхней коробки. Если расстояние больше заданного (стеллаж пуст или загружен не полностью) — AI отправляет отчёт в Excel и уведомление менеджеру.
Реализация:
- 10 Arduino (или ESP32 с мультиплексором) подключены к одному ПК через USB-хаб.
- AI читает данные со всех портов, записывает в базу SQLite (через sqlite3 в sandbox) и генерирует отчёт.
Пример кода для sandbox (упрощённо):
import sqlite3
from datetime import datetime
conn = sqlite3.connect('warehouse.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS distances
(shelf_id INTEGER, distance REAL, timestamp TEXT)''')
# Допустим, AI получил данные для стеллажа 1
dist = 120.5
c.execute("INSERT INTO distances VALUES (?, ?, ?)", (1, dist, datetime.now().isoformat()))
conn.commit()
conn.close()
Почему это выгодно?
- Не нужно писать код самому. Вы просто описываете задачу в чате на естественном языке: «Подключи датчик HC-SR04 на COM3 и отправляй уведомление в Telegram, если расстояние < 20 см». AI сам генерирует скрипт, подключается к bridge и настраивает логику.
- Гибкость. Если завтра вы захотите добавить второй датчик или сменить условие — просто пишете новое сообщение в чат.
- Экономия времени. Интеграция занимает минуты, а не часы на отладку.
Заключение
HC-SR04 — простой, но мощный датчик, который в связке с AI-агентом ASI Biont превращается в интеллектуальную систему мониторинга и управления. Hardware Bridge обеспечивает надёжное соединение через COM-порт, а AI берёт на себя анализ данных, принятие решений и интеграцию с внешними сервисами (Telegram, базы данных, Excel).
Попробуйте интеграцию уже сегодня: зайдите на asibiont.com, скачайте bridge из дашборда, подключите Arduino с HC-SR04 и напишите в чат: «Считай расстояние с датчика и включи светодиод, если объект ближе 30 см». AI сделает всё остальное.
Полезные ссылки:
- Документация по Hardware Bridge: asibiont.com/docs/bridge
- Спецификация HC-SR04: datasheet
- Библиотека NewPing для Arduino: GitHub
Комментарии