Цифровой стадиометр на Arduino: отслеживание роста лазерным датчиком VL53L0X
Компоненты и материалы
| Arduino Nano R3 | 1 шт. |
| Лазерный датчик расстояния CJMCU-530 (VL53L0X, Time-of-Flight) | 1 шт. |
| Ротри энкодер KY-040 (с кнопкой) | 1 шт. |
| OLED-дисплей SSD1306 128×64 (I2C) | 1 шт. |
| Пьезо-звукопискатель (пассивный) | 1 шт. |
| Резисторы 10 кОм (подтяжка I2C) | 2 шт. |
О проекте
Устройство для бесконтактного измерения роста ребёнка. Монтируется в центре верхней части дверного проёма. Лазерный ToF-сенсор VL53L0X (длина волны 940 нм, невидимый, безопасный по классу 1) измеряет расстояние до головы. При фиксации стабильного значения в течение 2.5 с воспроизводится звуковой сигнал-уведомление, результат зафиксировывается на OLED-дисплее.
Шаг 1: Комплектующие
Список выше. Два резистора 10 кОм нужны на линиях SDA/SCL (OLED и VL53L0X висят на одной I2C-шине).
Шаг 2: Датчик VL53L0X
ST Microelectronics VL53L0X — ToF-модуль с массивом SPAD (Single Photon Avalanche Diodes). Измеряет до 2 м, интерфейс I2C (адрес 0x29). Используется библиотека Pololu VL53L0X (проще нативного API ST). Настроен режим HIGH ACCURACY + LONG RANGE — медленнее, но точнее и с большим запасом по высоте установки.
Шаг 3: Монтаж и калибровка смещения (offset)
- Устройство крепится по центру дверного косяка. Слишком близко к стене — паразитные отражения (crosstalk).
- Измерьте расстояние от датчика до пола — это offset (0–2.55 м).
- Калибровка: нажмите кнопку энкодера → режим настройки offset. Вращением энкодера задайте значение в см (по часовой — увеличение, против — уменьшение). Ещё раз нажмите кнопку — сохранение в EEPROM (два тона подтверждения). Таймаут 1 мин — выход без сохранения.
Шаг 4: Алгоритм измерения
В цикле loop() текущее измерение сравнивается с предыдущим. Если значение не меняется >2.5 с и не является ошибкой (Out of range / Timeout) — результат = offset − measured, показывается на дисплее, пищит «успешная» мелодия.
Шаг 5: Корпус
Автор спроектировал корпус в CAD и заказал 3D-печать — так точнее вырезаются окна под датчик и дисплей. Лазерный чип оставлен без защитного стекла (стекло требует сложной калибровки crosstalk по документации ST).
Код (HTAY.ino)
Скетч доступен для скачивания в разделе «Code» оригинала. Основные библиотеки:
— VL53L0X (Pololu)
— Adafruit_SSD1306 + Adafruit_GFX
— EEPROM, Wire
GitHub библиотеки: pololu/vl53l0x-arduino
Схема подключения
См. раздел «Schematics» оригинала: I2C-шина общая (SDA→A4, SCL→A5 через 10 кОм на 3.3В/5В), энкодер — D2/D3/D4 (CLK/DT/SW), buzzer — D5, питание — 5В от Nano.
3D-модель корпуса
Файл HTAY.stl в разделе «Custom parts and enclosures».
Производственный процесс
- Оценка готовности к промышленному IoT: готовы ли вы к успеху Индустрии 4.0?
- Raspberry Pi и HDC2010: полное руководство по настройке I2C датчика температуры и влажности
- Измерение качества воздуха с OpenSensors: руководство по Arduino и Python
- Подключение газового датчика TGS2600 к Raspberry Pi для обнаружения вредных газов
- Проверка и калибровка датчика влажности для точных измерений
- Создание универсального ИК-пульта на Arduino: пошаговое руководство
- Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
- Управление кадровыми проблемами: стратегии найма и удержания талантов в условиях дефицита кадров
- Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266
- Использование термистора: пошаговое руководство для Arduino