Spectrino: TinyML и IoT бесконтактные решения на Arduino Nano 33 BLE Sense и ESP8266
Компоненты и материалы
| Arduino Nano 33 BLE Sense | 1 шт. |
| Espressif ESP8266 ESP-01 | 1 шт. |
| Arducam Mini 2MP Plus | 1 шт. |
| MAX7219 дисплей (4 в 1, 32×8) | 1 шт. |
| Зуммер (Buzzer) | 1 шт. |
| Сервопривод SG90 (или MG995/MG959) | 2 шт. |
| Adafruit Micro-Lipo Charger | 1 шт. |
| Adafruit Li-Po аккумулятор | 1 шт. |
| Arduino MKR WiFi 1010 | 1 шт. |
| RGB LED (общий катод) | 1 шт. |
| Ультразвуковой датчик HC-SR04 | 1 шт. |
Инструменты
- Набор перемычек 10 шт., 5 см
Приложения и сервисы
- Arduino Web Editor
- ThingSpeak API
- Edge Impulse Studio
- TensorFlow
О проекте
Обзор
Пандемия ввела ограничение на социальное взаимодействие: дистанцию. Многие страны вводили карантины, торговые центры закрывались из-за резкого снижения посещаемости. Это привело к массовым увольнениям персонала и экономическим трудностям владельцев бизнеса.
По данным на июль 2020 г., в США потери рабочих мест с доходом <$40 тыс./год составили миллионы в сферах гостеприимства, розничной торговли и развлечений. Глобально — более 103 000 уволенных.

Проблема
Для открытых ТЦ остается неопределенность риска: плотность людей в магазинах. Маски и запрет касаний нарушают. Персонал, не могущий работать удаленно, находится в опасности. Как гарантировать, что конкретный магазин безопасен для входа?
Эксперименты показывают распространение вирусов через касания. Поэтому решено автоматизировать самые используемые устройства для бесконтактного взаимодействия.
Разработанные решения
- Умный домофон на TinyML (Arduino Nano 33 BLE Sense): Компьютерное зрение + TinyML обнаруживают человека у двери и звонят в звонок без касания.
- IoT-система мониторинга температуры с оповещением: При входе ультразвуковой датчик фиксирует человека, термометр (AMG8833) измеряет температуру, данные уходят в ThingSpeak. При превышении порога (38.1°C) — звуковая тревога и блокировка входа.
- Бесконтактный лифт на распознавании речи (TinyML на Arduino BLE 33 Sense): Голосовые команды «вверх»/«вниз» управляют сервоприводами, нажимающими кнопки панели. Точнее ультразвука и жестов, работает на расстоянии.
- Детекция масок (TinyML + IoT): Модель на Arduino BLE 33 Sense определяет наличие маски, данные в ThingSpeak для мониторинга и ограничений.
- Умная очередь в супермаркете (TinyML + IoT + CV): Допуск по 50 человек, затем 15 мин ожидания. Данные в реальном времени на дашборде.
- Мониторинг людей в проходе и авто-санетизация UV: Детекция людей в зоне, при превышении порога — UV-облучение. Данные санитизации в ThingSpeak.
Настройка (требования)
Железо
1) Arduino Nano 33 BLE Sense — nRF52840, Cortex-M4 64 MHz, 1 MB Flash, 256 KB RAM, Bluetooth, NFC, ультра-низкое потребление. Главная фича — Edge AI (TinyML) через TensorFlow Lite.

2) ESP8266 ESP-01 — Wi-Fi модуль для микроконтроллеров, самодостаточный SoC, до 9 GPIO.

3) Arducam Mini 2MP Plus — 2 Мп SPI-камера (OV2640), компактная, простая интеграция с Arduino/Raspberry Pi.

4) Arduino MKR WiFi 1010 — SAMD21 Cortex-M0, WiFi/BLE (NINA-W10), крипточип ECC508, зарядка Li-Po, RGB LED.

Программные инструменты
- Arduino Web Editor — онлайн IDE, IoT Cloud, Device Manager, Project Hub.
- Edge Impulse Studio — сбор данных, обучение ML в облаке, деплой на Arduino одной функцией. Поддержка акселерометра, микрофона, кастомных сенсоров.
- ThingSpeak — IoT аналитика: агрегация, визуализация, MATLAB-анализ живых потоков. REST/MQTT, интеграции с LoRaWAN, 4G/3G.
Реализация подпроектов
1. Бесконтактный лифт (голос «вверх»/«вниз»)
Проблема: загрязненные кнопки. Ультразвук и жесты — ложные срабатывания или близкое расстояние. Решение: голос на Arduino 33 BLE Sense. Команды «up»/«down» → сервопривод нажимает кнопку.
Обучение модели в Edge Impulse:
- Сбор данных: 1:30 мин, по 2 сек на команду.
- Импульс: окно 300 мс, Keras NN для аудио/акселерометра.
- DSP: кепстральные коэффициенты.
- Обучение: низкие/высокие частоты для устойчивости к голосам.
- Архитектура NN: Input → Reshape → 1D ConvPool (30 нейронов, ядро 5) → 1D ConvPool (10, 5) → Flatten.
- Результат: точность 91.2%, лосс 0.29 (100 эпох). Тест: 75% на 24 сек.
- Деплой: Arduino Library → Arduino Web Editor → Nano 33 BLE Sense.







Логика ответа (фрагмент):
if (found_command[0] == 'up') {
last_command_time = current_time;
digitalWrite(LEDG, LOW); // зеленый = вверх
servo_7.write(0); // нажать кнопку
delay(100);
digitalWrite(LEDG, HIGH);
servo_7.write(180); // возврат
}
if (found_command[0] == 'down') {
last_command_time = current_time;
digitalWrite(LEDG, LOW);
servo_7.write(0);
delay(100);
digitalWrite(LEDG, HIGH);
servo_7.write(180);
}
Модель ~24–28 КБ из 256 КБ флеш. Логика: захват аудио → спектрограммы → TFLite inference → решение → серво.




График точности vs дистанция активации: голосовое управление выигрывает у ультразвука и жестов.


2. Умный домофон (лицо → звонок)
CDC: вирус живет на пластике/металле до 3 дней. Традиционные домофоны требуют нажатия кнопки. Решение: детекция лица на TinyML (Arduino 33 BLE Sense) → зуммер + LED-матрица «Person».

Использована предобученная TensorFlow Person Detection (классы: unused, person, notperson). Arducam Mini 2MP → Nano 33 BLE Sense (96×96). TF Lite: Depthwise Conv2D → Conv2D → AveragePool2D → Flatten.
Ключевая функция (Arduino_detection_responder.cpp):
uint8_t person_score = output->data.uint8[kPersonIndex];
uint8_t no_person_score = output->data.uint8[kNotAPersonIndex];
RespondToDetection(error_reporter, person_score, no_person_score);
Логика: если person_score > no_person_score → зуммер ВКЛ, матрица «Person», (опционально серво включает видео домофон).


Компоненты: Nano 33 BLE Sense, зуммер, Arducam, зарядка Li-Po, батарея, MAX7219.
3. Автономный IoT-термометр входа
Ручной замер температуры — контакт, нет логирования. Решение: Arduino MKR WiFi 1010 + AMG8833 (термокамера) + HC-SR04 (ультразвук) → ThingSpeak дашборд. При >38.1°C — закрыть ворота (серво), зуммер.


Логика: ультразвук (дистанция ≤20 см) → MKR WiFi 1010 → открыть ворота (серво 0°) → AMG8833 замер → отправка в ThingSpeak → если T>38.1 → закрыть ворота (180°), зуммер.




ThingSpeak дашборд: график температура/время, публичный доступ для посетителей. Встраиваемый iframe:
<iframe width="450" height="260" style="border: 1px solid #cccccc;"
src="https://thingspeak.com/channels/1121969/charts/1?bgcolor=%23ffffff&color=%23d62020&dynamic=true&results=600×cale=10&type=line"></iframe>



Код (фрагменты):
#include <Wire.h>
#include <Adafruit_AMG88xx.h>
#include <Servo.h>
#include <WiFi.h>
#include <WiFiMulti.h>
Servo servo1;
int trigPin = 9, echoPin = 8;
long distance, duration;
WiFiMulti WiFiMulti;
const char* ssid = "YourSSID";
const char* password = "YourPass";
const char* host = "api.thingspeak.com/1121969";
String api_key = "YOUR_API_KEY";
Adafruit_AMG88xx amg;
void setup() {
Serial.begin(9600);
servo1.attach(7);
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
Connect_to_Wifi();
if (!amg.begin()) { while(1); }
delay(100);
}
void loop() {
ultra();
servo1.write(0); // открыть
if (distance <= 20) {
float temp = amg.readThermistor();
Send_Data(temp);
if (temp > 38.1) { servo1.write(180); digitalWrite(6, HIGH); } // закрыть + зуммер
}
}
void Send_Data(float temp) {
WiFiClient client;
if (!client.connect(host, 80)) return;
String data = api_key + "&field1=" + String(temp) + "\r\n";
client.print("POST /update HTTP/1.1\nHost: api.thingspeak.com\nConnection: close\nX-THINGSPEAKAPIKEY: " + api_key + "\nContent-Type: application/x-www-form-urlencoded\nContent-Length: " + data.length() + "\n\n" + data);
delay(200);
client.stop();
}
4. Умная очередь (TinyML + IoT)
Проблема: ручное управление очередями, нет данных для посетителей. Решение: детекция людей на входе/выходе (Arducam + Nano 33 BLE Sense + Person Detection TF Lite) → серво ворота → счетчики в ThingSpeak через ESP8266. Порог 50 человек → закрытие на 15 мин, ожидание на MAX7219.
Алгоритм ожидания: X (вошли) - Y (вышли) = внутри. Z (лимит) - (X-Y) = свободно. Если отрицательно → время ожидания = |свободно| × среднее время пребывания.



Преимущества над ультразвуком/ИК: точность, использование существующих камер, снижение железа.
5. Детекция масок (TinyML)
Маски защищают от капельного заражения. Добавляем к person detection кастомную модель mask/no_mask (Edge Impulse, MobileNetV2 0.35, 30 эпох, 813 тренировочных / 487 тестовых фото). Точность 92.6% (train), 98.15% (test). Оптимизированная модель ~676 KB, 440 KB RAM.







Логика: mask_score > no_mask_score → открыть ворота (серво 0°), счетчик масок++. Иначе — закрыть, счетчик no_mask++. Данные в ThingSpeak (два поля).

6. Мониторинг проходов и авто-UV санитизация
Вирус живет на поверхностях часами/днями. Ручная UV-санитизация неэффективна. Решение: по модулям на проходах (Arducam + Nano 33 BLE Sense + Person Detection) → счетчик людей → пороги загрязнения → RGB индикация (зеленый/синий/красный) → при >150 человек — UV-лампа (сброс счетчика). Данные в ThingSpeak (4 поля: еда, спорт, одежда, электроника). Разные пороги для зон.






Логика responder (пороги):
if (person_score > no_person_score) { count++; }
if (count 1-25) -> GREEN (безопасно)
if (count 26-50) -> BLUE (внимание)
if (count 51-100) -> RED (загрязнено)
if (count 101-110)-> UV ON (санитизация)
if (count > 111) -> count = 0 (сброс после UV)
Пороги настраиваемы: еда (строже), электроника (мягче). ESP8266 шлет count в ThingSpeak.



Go-to-Market и практичность
- ТЦ/супермаркеты: реальный мониторинг плотности, авто-очереди, авто-санитизация.
- Снижение персонала, data-driven решения.
- Дашборд для посетителей — выбор безопасного времени/места.
- Доступно для массового производства (AI/IoT компании).
- Дешевле роботов-UV, масштабируемо, использует существующие камеры.
Код (ссылки на GitHub)
- Elevator Automation (TinyML speech)
- Autonomous Intercom (TinyML)
- Temperature Monitoring (IoT)
- Mask Detection (TinyML)
- Queue System (TinyML + IoT)
- Aisle Sanitization (Person Detection + UV)
Схемы





Производственный процесс
- Подключение Raspberry Pi 3 к датчику DHT11 и загрузка данных в облако ThingsIo.ai
- Выбор правильного беспроводного протокола для IoT-решений.asset tracking
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Pixie: DIY-наручные часы на Arduino Pro Mini и NeoPixel — стильный светодиодный тахометр времени
- Интерактивный HMI-проект на Nextion с Arduino Mega и датчиками
- Оценка здоровья растений с TinyML: Практическое руководство
- Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
- Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг
- Улучшение операций открытых вагон-платформ с IoT-трекинговыми решениями