В лицевой панели корпуса сделано отверстие для модуля VL53L0X, а также отверстия для крепежных винтов

ЛОКАТОР С ЛИДАРОМ ДЛЯ НЕЗРЯЧИХ

В нашем обыденном мире, где подавляющую часть информации мы получаем визуально, любые трудности со зрением — это серьезная проблема, а полная потеря зрения часто превращается для человека в катастрофу, разделяя мир на «до» и «после», ставя крест на множестве занятий и вариантов времяпрепровождения. Задачу ориентации в пространстве здоровый решает не задумываясь, а для слепого или слабовидящего она превращается в серьезный, а порой и неразрешимый вопрос. Простейшим стандартным средством реабилитации обычно служит белая тактильная трость. Но кроме нее существуют и электронные дальномеры, которые призваны дополнить «палочку». В основном, на рынке сейчас присутствуют устройства — по сути, компактные ультразвуковые локаторы — которые отображают расстояние до препятствия интенсивностью вибрации или звуковыми сигналами [1-2]. Подобные конструкции преобладают и среди некоммерческих разработок [3-5]. Альтернативой ультразвуковым дальномерам можно считать приборы, оснащенные инфракрасными дальномерами или маломощными лидарами, а также их комбинаций [6-10].

Прототипы таких устройств выглядят весьма неказисто, так как изготовить подходящий корпус, по крайней мере, не прибегая к 3D-печати, — непросто. Тем не менее, в продаже встречаются недорогие корпуса портативных аккумуляторных батарей, предназначенных для подзарядки носимой электроники. Обычно они рассчитаны на несколько (от одного до четырех) литий-ионных аккумуляторов типоразмера 18650. Причем, если даже установить не все элементы батареи, то такое устройство остается работоспособным. Последнее обстоятельство открывает широкий простор для творчества радиолюбителей: мы получаем качественный корпус заводского изготовления, в котором уже имеется готовая электронная схема для зарядки аккумулятора и место для его размещения. Остается лишь немного доработать корпус под конкретный прибор. И, к слову, сохранить возможность его применения по прежнему назначению в роли внешней аккумуляторной батареи.

Электрическая принципиальная схема локатора
Электрическая принципиальная схема локатора

Именно таким образом был собран локатор для незрячих, о котором и пойдет речь. В качестве его оболочки использован корпус внешней аккумуляторной батареи, рассчитанный на четыре аккумулятора типоразмера 18650 и имеющий внешние габариты 115x78x23 мм.

Основой конструкции выступает плата Arduino ProMini на базе микроконтроллера ATmega328. Это миниатюрная версия аппаратной платформы Arduino, которая предназначена для установки в готовые устройства. Для загрузки программы в память микроконтроллера и обмена информацией с компьютером плату необходимо подключить через преобразователь интерфейсов USB-TTL-UART-Serial CH340G или аналогичный. В данной конструкции применена плата с микроконтроллером, работающим на частоте 8 МГц и рассчитанная на питание постоянным током с напряжением 3,3 В. Это позволяет подключить плату к одному литий-ионному аккумулятору без преобразователя напряжения. Потребляемый ток составляет 40-70 мА в зависимости от режима работы вибромотора.

Литий-ионный аккумулятор G1 типоразмера 18650 подключен через клавишный выключатель SA1 типа SMRS-101-1С2. Аккумулятор большой емкости может запасти достаточно много энергии, и его короткое замыкание небезопасно, поэтому в цепи питания установлен предохранитель FU1, рассчитанный на ток 100 мА.

Дальномером в устройстве работает модуль, основанный на измерителе расстояний VL53L0X. В нем используется инфракрасный лазер, излучающий на длине волны около 940 нм и принадлежащий к лазерам класса 1. Модуль измерителя можно питать от источника постоянного тока напряжением от 2,6 до 5 В. Для передачи информации используется интерфейс I2C. Между сигнальными цепями и шиной питания включены резисторы R2 и R3 типа МЛТ-0,25 сопротивлением 4,7 кОм, линия SDA подключена к порту А4, a SCL к порту А5 — как этого требуют рекомендации по использованию данного интерфейса [11].

Вибромотор М1 рассчитан на напряжение 3 В и ток 60 мА. Он управляется ШИМ через порт D3 платы Arduino ProMini при помощи транзисторного ключа. Последний выполнен на транзисторе VT1 типа ВС337-16 и резисторе R1 типа МЛТ-0,25 сопротивлением 510 Ом.

В лицевой панели корпуса проделано отверстие для модуля VL53L0X, а также отверстия для крепежных винтов.

Программа, управляющая устройством, создана в среде Arduino IDE.

#include <Wire.h>
#include <VL53L0X.h> VL53L0X sensor;

int M = 3; //номер порта для подключения вибромотора
int PM =0; // переменная для хранения интенсивности работы вибромотора
int i,j; //счетчики в массивах и циклах
int dt = 5;
int distance = 0; //переменная для хранения результата измерения расстояния
//Функция измерения расстояния лидаром VL53L0X
float I_VL () {
int VL_m[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //массив для хранения результатов измерения с датчика VL53L0X
int sort; //вспомогательная переменная для сортировки
int vl; //вспомогательная переменная , для отсечения заведомо ложных данных локатора
for (i = 0; i <= 10; i = i + 1) (
vl = sensor . readRangeSingleMillimeters();
VL_m [ i ] = vl ;
//Serial.print(VL_m[i]);
//Serial.print(‘ ‘);
if (vl > 1100) {
VL_m[i] = 1100; //максимальная дальность } else { if (vl < 100) {
VL_m[i] = 100; I/ минимальная дальность ) else

{
VL_m[i] = vl;

}

}
//Serial.printin();

// for (i = 0; і <= 10; і = і + 1)
// {
// Serial.print(VL_m[і]);
// Serial.print(‘ ‘);
// }
// Serial.printin();

//Сортировка
for (i = 0; i <= 10; i = i + 1) {
for (j = 0; j <= 10; j = j + 1) {
if (VL_m[iJ < VL_m[j]) {
sort = VL_m[i];
VL_m[i] = VL_m[j];
VL_m[j] = sort;
} }
}
// for (i = 0; i <= 10; i = i + 1)
// {
// Serial.print(VL_m[i]);
// Serial.print(‘ ‘);
// )
// Serial.println();

return VL_m[5]; // возвращаем медианное среднее
}

void setup() {
//Serial.begin(9600);

// Инициализация лидара VL53L0X

Wire.begin();
sensor.init() ;
sensor.setTimeout(500);
#if defined LONG_RANGE
// lower the return signal rate limit (default is 0.25 MCPS)
sensor.setSignalRateLimit(0.1);
// increase laser pulse periods (defaults are 14 and 10 PCLKs)
sensor.setVcselPulsePeriod(VL53L0X:: VcselPeriodPreRange, 18) ;
sensor.setVcselPulsePeriod(VL53L0X:: VcselPeriodFinalRange, 14);
#endif
#if defined HIGH-SPEED
// reduce timing budget to 20 ms (default is about 33 ms)
sensor. setMeasurementTimingBudget ( 20000);
#elif defined HIGH_ACCURACY
// increase timing budget to 200 ms sensor.setMeasurementTimingBudget( 200000);
#endif

void loop()
{
// Измерение дистанции лидаром VL53L0X
distance = I—VL();
//Serial.print(«distance= «);
//Serial.printin(distance);
// чем ближе препятствие, тем интенсивнее сигнал PM = -15/100*distance+215, (100 мм — 200, 1100 — 50)
PM = -0.15*distance+215;
analogWrite (М, РМ) ; // уста-
навливаем интенсивность ШИМ на порту управления вибромотором
//Serial.print(«РМ= «);
//Serial.printin(PM);
delay(dt);

В начале программы подключаются необходимые сторонние библиотеки (1-3 строки кода). Затем в строках с 5-й по 9-ю объявляются глобальные переменные. В их число входят: переменная М — номер порта для подключения транзисторного ключа, управляющего вибромотором М1; переменная РМ для текущего значения ШИМ, определяющего интенсивность работы вибромотора; переменные i,j, используемые как счетчики в циклах; переменная dt, определяющая задержку в конце основного цикла программы и переменная distance — для хранения результата измерения расстояния.

Функция l_VL для работы с датчиком VL53L0X располагается в строках с 12-й по 77-ю. В строках 15-17 инициализируются локальные переменные для многократного измерения расстояния и определения медианного среднего по результатам этих измерений [12]. В строках кода с 20-й по 44-ю расположен цикл, в пределах которого происходит 11-кратное измерение расстояния. В строках 48-53 реализован отладочный цикл, который выводит в последовательный порт массив с результатами измерений (после завершения отладки, в окончательной версии программы его следует убрать или закомментировать). В строках 56-67 происходит сортировка элементов массива методом пузырька. В строках кода с 69-й по 74-й расположен второй отладочный цикл, который выводит в последовательный порт массив с упорядоченными результатами измерений. В строке 76 функция возвращает медианное среднее, полученное по результатам всех измерений.

Все детали локатора размещены в корпусе внешней аккумуляторной батареи. Для питания устройства используется один элемент 18650
Все детали локатора размещены в корпусе внешней аккумуляторной батареи. Для питания устройства используется один элемент 18650

В строках 81-104 расположена функция setup(). В данной функции помещен код для инициализации датчика VL53L0X (код взят из файла Single, который в качестве примера прилагается к библиотеке vl53I0x-arduino-master [13]).

В начале цикла lоор() в строке 110 происходит вызов функции l_VL для измерения расстояния. В строке 116 устанавливается значение переменной РМ для управления вибромотором М1 при помощи ШИМ. Необходимое значение ШИМ рассчитывается по формуле РМ —0.15*distance+215, чтобы при дистанции 100 мм коэффициент заполнения ШИМ составлял 78%, а при дистанции 1100 мм, соответственно, примерно 20%. Таким образом, на больших расстояниях мотор вибрирует слабо, а по мере приближения к препятствию интенсивность вибрации возрастает.

Так как локатор построен во многом из готовых элементов, то печатная плата нужна только для транзисторного ключа и подтягивающих резисторов интерфейса 12С. Все это упрощает повторение устройства и делает его доступным для начинающих. Как известно, в рядах Всероссийского общества слепых состоит более 200 тыс. человек [14], таким образом, существует немало людей, которым может попытаться помочь любой радиолюбитель.

ИСТОЧНИКИ ИНФОРМАЦИИ:

1) http://www.smartaids.ru/sighting_loss/84/
2) http://rosopeka.ru/good3430.html
3) http://forblind.org/ru/?cat=6
4) Лекомцев Д. Arduino. Ультразвуковая трость. Журнал «Радио» № 1 2017 г., с. 54-56
5) Лекомцев Д. Ультразвуковой обнаружитель препятствий для незрячих, имеющий большой угол обзора. Журнал «Радио» № 11 2018 г., с. 40-43
6) Нечаев И. ИК локатор для слепых. Журнал «Радио» № 10 1989 г., с. 84-86
7) http://www.southernfriedscience.com/i-built-a-head-mounted-lidar-array-that-lets-you-see-the-world-like-a-dolphin-via-vibrations-sent-through-your-jaw/
8) https://nplus1.ru/news/2018/07/25/DolphinView
9) https://nplus1.ru/news/2015/11/20/senhri
10) Лекомцев Д. Локатор с повышенной надежностью измерений для слепых и слабовидящих людей. Журнал «Радио» № 10 2020 г., с. 43-46
11) Блум Д. «Изучаем Arduino: инструменты и методы технического волшебства». Пер. с англ. — СПб.: БХВ-Петербург, 2015. — 336 с.
12) Савельев В. «Статистика и котики». — М.: ACT, 2018. -122 с.
13) https://github.com/pololu/vl53IOx-arduino
14) https://www.vos.org.ru/index.php?option=com_content&view=article&id=660&ltemid=272

Денис ЛЕКОМЦЕВ, г. Орел

Рекомендуем почитать

  • «ОСЫ» ЖАЛЯТ БЕЗ ЖАЛОСТИ«ОСЫ» ЖАЛЯТ БЕЗ ЖАЛОСТИ
    В 1960 году по постановлению СМ (№ 1157 - 487 от 27.10.60 г.) начались работы по созданию зенитного ракетного комплекса ближней самообороны «Оса». Проектировался он по единым...
  • ТРАКТОРОМОБИЛЬТРАКТОРОМОБИЛЬ
    Десять лет назад буквально из металлолома я смастерил агрегат, которому больше всего подходит название тракторомобиль. По внешнему виду и основным функциям он — трактор, а скорость и...
Тут можете оценить работу автора: