Все статьиHardware

BlindSight: носимый ультразвуковой помощник для незрячих на Arduino

БА
Бексултан Айтен
CTO, Alashed
18 июня 2025 г.
9 мин чтения
BlindSight: носимый ультразвуковой помощник для незрячих на Arduino

Собираем компактное носимое устройство на Arduino Uno, которое предупреждает о препятствиях вибрацией: схема с HC-SR04, транзистором и вибромотором.

Инженерия для помощи людям

Большинство школьных проектов на Arduino решают учебные задачи: помигать светодиодом, измерить температуру, построить робота. Но этот проект -- другой. BlindSight -- это носимое устройство, которое помогает незрячим и слабовидящим людям обнаруживать препятствия перед собой. Ультразвуковой датчик измеряет расстояние до объекта, а вибромотор на запястье сообщает о нём: чем ближе препятствие, тем сильнее вибрация.

Принцип тот же, что у летучих мышей -- эхолокация. Датчик HC-SR04 посылает ультразвуковой импульс, улавливает отражённый сигнал и по времени задержки вычисляет расстояние. Человек постепенно привыкает к ощущениям и начинает «чувствовать» пространство вокруг себя.

Проект прививает понимание того, что технические навыки можно направить на решение реальных социальных задач.

Целевая аудитория: ученики 6-10 классов.

Время на проект: 1-2 занятия по 45 минут.

Необходимые компоненты

  • Arduino Uno (или Nano для компактности)
  • Ультразвуковой датчик HC-SR04
  • Вибромотор (плоский дисковый, 3В)
  • Транзистор NPN PN2222 (или 2N2222, BC547)
  • Резистор 10 Ом (защита вибромотора)
  • Провода-перемычки
  • Батарея 9В с разъёмом для Arduino (или PowerBank)
  • Эластичная лента или напульсник для крепления на руку
Схема сборки BlindSight: датчик HC-SR04, транзистор и вибромотор
Схема сборки BlindSight: датчик HC-SR04, транзистор и вибромотор

Схема подключения

Ультразвуковой датчик HC-SR04:

  • VCC -> 5V на Arduino
  • GND -> GND
  • Trig -> пин D10
  • Echo -> пин D5

Вибромотор через транзистор:

  • Один провод вибромотора -> 3.3V на Arduino (не 5V -- мотор рассчитан на 3В)
  • Другой провод -> коллектор транзистора PN2222
  • Эмиттер транзистора -> GND
  • База транзистора -> пин D11 (ШИМ) через резистор 10 Ом

Питание:

  • Батарея 9В подключается к разъёму питания Arduino

Транзистор здесь необходим как электронный ключ. Пин Arduino не может напрямую обеспечить нужный ток для вибромотора. Аналоговый сигнал (ШИМ) на базе транзистора управляет током через мотор: чем выше напряжение, тем сильнее вибрация. Это позволяет плавно менять интенсивность в зависимости от расстояния.

Схема подключения HC-SR04 и вибромотора к Arduino в Tinkercad
Схема подключения HC-SR04 и вибромотора к Arduino в Tinkercad

Полный код устройства

```cpp

// BlindSight -- носимое устройство помощи незрячим

// Вибрация усиливается по мере приближения к препятствию

// Пины подключения

int trig = 10; // Trig датчика HC-SR04

int echo = 5; // Echo датчика HC-SR04

int motor = 11; // Вибромотор (ШИМ-пин)

// Переменные измерения

int timeInMicro; // Время возврата ультразвука (мкс)

int distanceInCm; // Расстояние в сантиметрах

void setup() {

// Настройка последовательного порта для отладки

Serial.begin(9600);

// Настройка пинов

pinMode(trig, OUTPUT);

pinMode(echo, INPUT);

pinMode(motor, OUTPUT);

Serial.println("BlindSight запущен");

}

void loop() {

// Посылаем ультразвуковой импульс

digitalWrite(trig, LOW);

delayMicroseconds(2);

digitalWrite(trig, HIGH);

delayMicroseconds(10);

digitalWrite(trig, LOW);

// Измеряем время возврата эха

timeInMicro = pulseIn(echo, HIGH);

// Вычисляем расстояние в сантиметрах

// Скорость звука 29 мкс/см, делим на 2 (туда и обратно)

distanceInCm = (timeInMicro / 29) / 2;

// Преобразуем расстояние в силу вибрации

// Чем ближе объект, тем сильнее вибрация

switch (distanceInCm) {

case 0 ... 30:

// Очень близко -- максимальная вибрация

analogWrite(motor, 225);

break;

case 31 ... 40:

// Близко -- сильная вибрация

analogWrite(motor, 200);

break;

case 41 ... 50:

// Средняя дистанция -- умеренная вибрация

analogWrite(motor, 175);

break;

default:

// Далеко или нет препятствий -- вибрации нет

analogWrite(motor, 0);

break;

}

// Вывод данных для отладки

Serial.print("Расстояние: ");

Serial.print(distanceInCm);

Serial.print(" см -> Вибрация: ");

if (distanceInCm <= 30) Serial.println("МАКС");

else if (distanceInCm <= 40) Serial.println("сильная");

else if (distanceInCm <= 50) Serial.println("средняя");

else Serial.println("нет");

// Пауза между измерениями

delay(100);

}

`

Разбор кода

Измерение расстояния. Функция работы с HC-SR04 состоит из трёх шагов. Сначала Arduino посылает короткий импульс (10 микросекунд) на пин Trig. Датчик излучает ультразвуковой сигнал частотой 40 кГц. Затем функция pulseIn() ждёт и измеряет длительность ответного импульса на пине Echo -- это время, за которое звук долетел до препятствия и вернулся. Делим время на 29 (скорость звука в воздухе -- примерно 1 см за 29 микросекунд) и на 2 (путь туда и обратно).

Конструкция switch-case с диапазонами. В Arduino (компилятор GCC) допускается запись case 0 ... 30:, которая обрабатывает все значения от 0 до 30 включительно. Это компактнее цепочки if-else и нагляднее показывает зоны реагирования. Три зоны дают пользователю градацию: на 50 см он чувствует лёгкую вибрацию и знает, что впереди что-то есть; на 30 см вибрация максимальна -- нужно остановиться.

ШИМ для управления мотором. Функция analogWrite(motor, 225) не выдаёт аналоговое напряжение. Вместо этого она быстро переключает пин между 0 и 5В, и среднее напряжение определяется скважностью. Значение 225 из 255 означает, что пин включён 88% времени. Транзистор PN2222 усиливает этот сигнал, пропуская соответствующий ток через вибромотор.

Задержка 100 мс. Между измерениями нужна пауза. Если измерять слишком часто, отражённый сигнал от предыдущего импульса может исказить следующее измерение. 100 мс дают 10 измерений в секунду -- достаточно для плавной реакции.

Сборка носимого устройства

Для превращения макета в устройство, которое можно надеть на руку:

1. Закрепите датчик HC-SR04 так, чтобы он смотрел вперёд -- например, на тыльной стороне ладони

2. Вибромотор прижмите к коже запястья -- вибрация должна хорошо ощущаться

3. Arduino и батарею закрепите на предплечье эластичной лентой или поместите в карман

4. Используйте термоклей для фиксации проводов -- при движении они не должны отходить

5. Провода от датчика оберните вокруг платы Arduino для надёжности

Советы для занятий

  • Попросите учеников завязать глаза и пройти по классу с устройством -- это даёт понимание, как чувствует себя пользователь
  • Обсудите ограничения: датчик «видит» только прямо, не обнаруживает ямы и ступеньки, угол обзора 15 градусов
  • Предложите доработки: добавить второй датчик для обзора в сторону, кнопку включения/выключения, спящий режим для экономии батареи
  • Для продвинутых: перенести на ATtiny85 для миниатюризации или на Arduino Nano BLE для связи со смартфоном
  • Этот проект отлично подходит для школьных научных конкурсов -- жюри ценит социально значимые разработки
  • Обсудите, чем это устройство отличается от белой трости и может ли оно её дополнить

Как Alashed помогает

На платформе Alashed Hardware доступны ультразвуковые датчики, вибромоторы и транзисторы в одном наборе, совместимом с Arduino. В Alashed CodeStudio можно визуализировать показания HC-SR04 в реальном времени на графике, подбирая пороговые значения до сборки финального устройства.

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо