Blind Stick Navigator: Навигационная трость для слабовидящих на Arduino
Компоненты и материалы
- 1Sheeld — 1 шт.
- Arduino UNO — 1 шт.
- Android-смартфон — 1 шт.
- Реле — 1 шт.
- Тумблер — 1 шт.
- Ультразвуковой датчик HC-SR04 — 1 шт. (в проекте используется два: верхний и нижний)
- DC-мотор (вибромотор) — 1 шт. (два для двух зон)
- Перемычки — 1 набор
- Крона 9В — 1 шт.
Приложения и сервисы
- Arduino IDE
- Приложение 1Sheeld на смартфоне
О проекте
Устройство помогает слабовидящим людям безопасно перемещаться. Два ультразвуковых датчика (верхний и нижний) сканируют пространство перед пользователем. При обнаружении препятствия вибромоторы внутри ПВХ-трубки выдают тактильный сигнал. Модуль 1Sheeld использует GPS и SMS-функции смартфона: при нажатии аварийной кнопки (тумблер) на заданный номер уходит сообщение с координатами и ссылкой на Google Maps.
Принцип работы
- Питание: 9В батарея через USB-адаптер на Arduino. (Автор отмечает необходимость улучшения автономности, например, солнечной панелью.)
- Связь: Смартфон с запущенным приложением 1Sheeld подключён по Bluetooth к Arduino. В приложении активированы щиты GPS и SMS.
- Детектирование препятствий: Верхний датчик (порт 6/7) и нижний (4/5). Если расстояние < 40 см (нижний) или < 100 см (верхний) — включается соответствующий вибромотор (пины 12, 13). Режим вибрации настраивается в коде.
- SOS-кнопка: При замыкании тумблера (пин 8) Arduino читает текущие координаты GPS через 1Sheeld и отправляет SMS: «I need Help! I'm at latitude: X, longitude: Y. Google Maps — https://maps.google.com/place/X,Y».
Код (OneSheeldBlindStickNavigator)
#define CUSTOM_SETTINGS
#define INCLUDE_GPS_SHIELD
#define INCLUDE_SMS_SHIELD
#include
#define trigPinL 4
#define echoPinL 5
#define trigPinH 6
#define echoPinH 7
#define Vib1 12
#define Vib2 13
#define SW 8
boolean isInRange = false;
float lat, lon;
String PhoneNumber = "0134087286";
String Message, Message1, Message2;
char latitude[10], longitude[10];
void setup() {
pinMode(trigPinL, OUTPUT); pinMode(echoPinL, INPUT);
pinMode(trigPinH, OUTPUT); pinMode(echoPinH, INPUT);
pinMode(Vib1, OUTPUT); pinMode(Vib2, OUTPUT);
pinMode(SW, INPUT);
OneSheeld.begin();
}
void loop() {
// Нижний датчик
digitalWrite(trigPinL, LOW); delayMicroseconds(2);
digitalWrite(trigPinL, HIGH); delayMicroseconds(10);
digitalWrite(trigPinL, LOW);
long durationL = pulseIn(echoPinL, HIGH);
int distanceL = (durationL / 2) / 29.1;
// Верхний датчик
digitalWrite(trigPinH, LOW); delayMicroseconds(2);
digitalWrite(trigPinH, HIGH); delayMicroseconds(10);
digitalWrite(trigPinH, LOW);
long durationH = pulseIn(echoPinH, HIGH);
int distanceH = (durationH / 2) / 29.1;
// Вибрация нижнего
if (distanceL > 40) digitalWrite(Vib1, HIGH);
else digitalWrite(Vib1, LOW);
// Вибрация верхнего (пульсация)
if (distanceH < 100) {
digitalWrite(Vib1, HIGH); delay(200);
digitalWrite(Vib1, LOW); delay(200);
}
// SOS кнопка
if (digitalRead(SW) == 0) {
lat = GPS.getLatitude();
lon = GPS.getLongitude();
Message1 = String(lat, 8);
Message2 = String(lon, 8);
Message = "I need Help! I'm at latitude: " + Message1 + " and longitude: " + Message2;
Message += " Google Maps - https://www.google.co.in/maps/place/" + Message1 + "," + Message2;
SMS.send(PhoneNumber, Message);
delay(3000);
}
delay(1000);
}
Перспективы
Автор надеется на коммерциализацию и улучшение: более длительное питание, специализированный смартфон с брайль-клавиатурой, интеграция в ОС Android для автономной активации GPS/SMS.
Схемы
Файл схемы для Fritzing: OneSheeldTONGKAT.fzz
Производственный процесс
- TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Создание рулетки на 37 светодиодов с Arduino Nano
- Мини-аркада на ATtiny85: Snake — ручная OLED-консоль своими руками
- Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
- Сборка аудиореактивной настольной лампы на Arduino Nano
- Автономный робот-следопыт с распознаванием лиц на Arduino Nano и OpenCV
- Медное гальваническое покрытие: умная система на Arduino UNO
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10