RadioRadar - Радиоэлектроника, даташиты, схемы

https://www.radioradar.net/radiofan/miscellaneous/locator_increased_reliability_blind_visually_impaired_people.html

Локатор с повышенной надёжностью для слепых и слабовидящих людей

Отличительная особенность локатора - наличие трёх различных датчиков расстояния, что, по мнению автора, повышает надёжность и снижает вероятность ошибок обнаружения препятствий.

Для человека зрение - основной источник информации об окружающем мире, а потому любое серьёзное нарушение зрения, не говоря уже о полной слепоте, сразу же резко негативно сказывается на качестве жизни человека. Во всём мире постоянно ведутся разработки устройств, которые призваны облегчить жизнь слепых и слабовидящих людей. Одна из важнейших функций зрения - ориентирование в окружающем пространстве. Сегодня коммерчески доступные устройства, предназначенные для этого, чаще всего представляют собой портативные ультразвуковые локаторы, которые отображают расстояние до препятствия интенсивностью вибрации или звуковыми сигналами [1-3]. Подобные конструкции преобладают и среди некоммерческих разработок [4-6]. Альтернативой ультразвуковым дальномерам можно считать использование устройств, оснащённых инфракрасными дальномерами и маломощными лидарами [7-9]. Некоторые разработки предполагают применение не одного датчика-дальномера, а использование сразу пяти- восьми датчиков для обеспечения большого угла обзора [10, 11].

Как правило, в дальномерах для слепых и слабовидящих людей используют датчики одного типа, что упрощает конструкцию, однако накладывает на устройство дополнительные ограничения. Например, самый распространённый тип дальномера - ультразвуковой эхолокатор не всегда хорошо справляется с измерением расстояния до пористых, тканых, покрытых ворсинками материалов, поскольку поверхности, сформированные из таких материалов, могут поглощать ультразвук. С другой стороны, широко распространённые дешёвые оптические дальномеры имеют дальность измерения расстояния в пределах одного метра, что в значительной степени нивелирует достоинства сложного электронного дальномера перед обыкновенной белой тактильной тростью. В предлагаемом устройстве автор постарался сделать так, чтобы датчики трёх разных типов взаимно дополняли друг друга, повышая общую надёжность измерения расстояния. Схема локатора показана на рис. 1.

Схема локатора

Рис. 1. Схема локатора

 

Питание устройства осуществляется от одного литий-ионного аккумулятора G1 типоразмера 18650 с номинальным напряжением 3,7 В. Ток, потребляемый локатором от аккумулятора, - 150...180 мАв зависимости от интенсивности работы вибромотора. Аккумулятор установлен в отсеке KLS5-18650-L (FC1-5216) или аналогичном отсеке 1х18650. Процессом зарядки-разрядки аккумулятора управляет контроллер TP4056 (блок А4 на рис. 1). Использование платы TP4056 позволяет заряжать аккумулятор от любого источника питания с разъёмом microUSB. Выключатель питания SA1 - ПД1 или любой другой подходящих габаритов. Для получения напряжения, пригодного для питания платы Robotdyn ProMini, используется повышающий DC-DC преобразователь MT3608 (блок А6 на рис. 1) [12]. Напряжение на выходе преобразователя устанавливают подстроечным резистором.

Следует иметь в виду, что если на входе RAW платы Robotdyn ProMini напряжение превысит 9 В, это приведёт к выходу устройства из строя. На выходе преобразователя MT3608 установлен оксидный конденсатор С1.

Информацию с датчиков обрабатывает плата Robotdyn ProMini с микроконтроллером ATmega168PA [13] (блок А5 на рис. 1), которая представляет собой аналог платы Arduino ProMini. Здесь применена версия платы, рассчитанная на питание напряжением 5 В. Для загрузки программы в память микроконтроллера и обмена информацией с компьютером Robotdyn ProMini использует преобразователь интерфейсов USB-TTL-UART-Serial CH340G.

Вибромотор M1 управляется сигналом с ШИМ через порт D3 платы с помощью транзисторного ключа. Вибромотор имеет номинальное напряжение 3 В и ток потребления 60 мА. Транзисторный ключ выполнен на транзисторе VT1 (BC337-16) и резисторе R3. Для подачи звуковых сигналов о состоянии устройства предусмотрен пьезокерамический звукоизлучатель HA1 (KRP-3510), подключённый к порту D12. Звукоизлучатель KRP-3510 можно заменить любым аналогичным, способным работать на частоте около 1 кГц, например ЗП-1. Аналоговый порт A7 используется для измерения напряжения на входе DC-DC преобразователя MT3608.

Первый дальномер, используемый в локаторе, - это ультразвуковой измеритель расстояния US-100 (блок А1 на рис. 1). Дальность действия US-100 равна 4...4,5 м, рабочий угол - 15 градусов. В устройстве он используется для определения расстояний до препятствий в "дальней" зоне, от 140 до 400 см, где уже не могут работать оптические дальномеры. Интервал рабочих температур датчика - от -20 до +70 оС. US-100 может работать при напряжении питания от 2,4 В до 5,5 В, что выгодно отличает его от HC-SR04, который требует для работы напряжения 5 В [14]. Ток, потребляемый этим датчиком, - около 2 мА, что пренебрежимо мало по сравнению с другими компонентами локатора. В устройстве US-100 питается напряжением 5 В, поэтому вместо него можно без каких-либо изменений поставить датчик HC-SR04. Выводы дальномера US-100 Trig и Eсhо подключены к портам D9 и D10 платы А5.

Второй дальномер - это инфракрасный измеритель расстояния GP2Y0A02YK0F (блок А2 на рис. 1), который работает в интервале от 15 до 150 см. В этом датчике в качестве излучателя используется инфракрасный излучающий диод, работающий на длине волны около 850 нм. Дальномер GP2Y0A02YK0F требует напряжения питания от 4,5 до 5,5 В, ток потребления - около 30 мА [15]. Особенность этого датчика - нелинейная зависимость между измеренным расстоянием и напряжением на информационном выходе, что несколько усложняет использование датчика. Информационный выход инфракрасного дальномера GP2Y0A02YK0F подключён к аналоговому порту А6 платы А5.

Последний, третий дальномер - это модуль на основе лазерного измерителя расстояний VL53L0X (блок А3 на рис. 1). В этом модуле используется инфракрасный лазер, излучающий на длине волны около 940 нм и относящийся к лазерам класса 1. Модуль на основе лазерного измерителя расстояний VL53L0X требует напряжения питания от 2,6 до 5 В. При напряжении 5 В потребляемый ток - около 20 мА [16]. Для передачи информации модуль использует интерфейс I2C. В соответствии с рекомендациями по работе с этим интерфейсом [17] между сигнальными цепями и линией питания включены резисторы R1 и R2. Линия SDA подключена к порту А4, а SCL - к порту А5.

Все детали локатора размещены в корпусе электрического фонаря STERN (рис. 2). Выключатель питания SA1 расположен на месте штатного выключателя фонаря (рис. 3). Кроме того, в полости ручки размещён вибромотор. На рис. 4 показано расположение компонентов устройства внутри корпуса.

Электрический фонарь STERN

Рис. 2. Электрический фонарь STERN

 

Выключатель питания SA1 расположен на месте штатного выключателя фонаря

Рис. 3. Выключатель питания SA1 расположен на месте штатного выключателя фонаря

 

Расположение компонентов устройства внутри корпуса

Рис. 4. Расположение компонентов устройства внутри корпуса

 

Виден преобразователь интерфейсов USB-TTL-UART-Serial CH340G, подключённый к плате Robotdyn ProMini.

На месте зарядного разъёма фонаря установлен контроллер зарядки TP4056 так, чтобы разъём microUSB был доступен снаружи для подключения внешнего зарядного устройства. Следует иметь в виду, поскольку при подключении/отключении кабеля питания этот узел конструкции подвергается существенным механическим нагрузкам, необходимо принять меры к надёжному креплению платы TP4056 внутри корпуса (рис. 5). Для снижения механической нагрузки на разъём microUSB можно дополнить устройство промышленно выпускаемым беспроводным зарядным устройством [18].

Крепление платы TP4056 внутри корпуса

Рис. 5. Крепление платы TP4056 внутри корпуса

 

В передней части корпуса на месте светодиодного модуля фонаря располагаются датчики для измерения расстояния, закреплённые на круглом держателе диметром 75 мм, вырезанном из старого бокса для компакт-дисков (рис. 6).

Датчики для измерения расстояния, закреплённые на круглом держателе

Рис. 6. Датчики для измерения расстояния, закреплённые на круглом держателе

 

Программа, управляющая устройством, разработана в среде Arduino IDE (файл _ultra3_9). В начале программы подключаются необходимые сторонние библиотеки и назначаются номера портов для внешних устройств (1 - 10 строки кода). Затем в строках с 12-й по 27-ю объявляются глобальные переменные. В их число входят переменная bat, отражающая состояние аккумулятора (true - норма, false - требуется зарядка); переменная voltage для хранения измеренного напряжения на входе DC-DC преобразователя MT3608; вспомогательная переменная t для работы со звукоизлучателем, задающая  частоту и длительность звуковых колебаний; переменная PM для текущего значения ШИМ, определяющая интенсивность работы вибромотора; переменные i, j, используемые как счётчики в циклах; переменная dt, определяющая задержку в конце основного цикла программы и вспомогательная переменная c для работы с датчиком US-100. В строках 22-27 объявляются переменные для определения разности между показаниями дальномеров и переменные для хранения расстояния, полученного разными датчиками.

Строки 29-60 занимает функция для работы с ультразвуковым измерителем расстояния US-100. Эта функция запрашивает у основной программы номера портов, к которым подключён датчик, и возвращает усреднённое значение расстояния, полученное по результатам десяти измерений. В теле функции задаются локальные переменные для хранения результирующего значения расстояния, для хранения суммы всех измеренных расстояний, а также массив для хранения результатов отдельных измерений (строки 32-34). В строках 36-44 записан цикл, в котором десять раз происходит измерение расстояния датчиком US-100 по алгоритму, аналогичному алгоритму работы датчика HC-SR04 [19]. В строках 47-55 происходит вычисление среднего арифметического по результатам предыдущих измерений, при этом заведомо ложные результаты измерения отбрасываются. В нашем случае ложными признаются результаты, приближающиеся к границам интервала измерений датчика US-100 (менее 4 см и более 400 см). В строке 59 окончательный результат измерений возвращается в основную программу.

Строки 62-114 занимает функция для работы с инфракрасным измерителем расстояния GP2Y0A02YK0F. Этот датчик отличается тем, что напряжение на его информационном выходе связано с измеренным расстоянием нелинейной зависимостью [20]. По этой причине для расчёта расстояния, измеренного датчиком GP2Y0A02YK0F, применён алгоритм кусочно-линейной интерполяции [21]. В строках 65-68 определяются необходимые переменные для десятикратного измерения расстояния. В строке 70 вводятся переменные, необходимые для кусочно-линейной интерполяции, а в строках 72 и 74 записаны массивы значений напряжения на информационном выходе датчика GP2Y0A02YK0F и соответствующие им значения расстояния. Эти данные взяты из технического описания данного устройства [20]. Строки 76-98 - это цикл, в котором десять раз происходит измерение расстояния датчиком GP2Y0A02YK0F.

В строках с 80-й по 98-ю реализован алгоритм кусочно-линейной интерполяции. В этом алгоритме весь интервал изменения функции разбивается на короткие кусочки, на каждом из которых кривая графика функции заменяется отрезком прямой. Таким образом, кривая графика функции заменяется ломаной линией так, что начало следующего отрезка совпадает с концом предыдущего. При этом концы и начала отрезков - это точки, в которых известно значение функции. Подобным способом на основе таблицы значений функции в определённых точках можно получить приближённое значение функции в произвольной точке на всём интервале, где проводится интерполяция [21]. Строки 99-113 полностью аналогичны строкам 47-59, на этом участке программы происходит вычисление среднего арифметического значения по результатам всех измерений. При вычислении среднего арифметического не учитываются результаты, приближающиеся к границам интервала измерений датчика GP2Y0A02YK0F (менее 20 см и более 140 см).

Последняя, третья функция для работы с датчиком VL53L0X располагается в строках с 117-й по 142-ю. Общий алгоритм построения этой функции аналогичен двум предыдущим. В строках 119-121 инициализируются локальные переменные для трёх измерений расстояния и вычисления среднего арифметического по их результатам. В строках 123-126 происходит трёхкратное измерение расстояния датчиком VL53L0X. Для непосредственной работы с датчиком использована сторонняя библиотека vl53l0x-arduino-master [22]. В строках 127-141 вычисляется среднее арифметическое с отбрасыванием результатов более 140 см, где, по наблюдениям автора, показания этого датчика становятся менее надёжными.

В строках 146-177 расположена функция setup(). В этой функции инициализируются порты для подключения датчика US-100 (строки 150, 151), затем инициализируется порт подключения звукоизлучателя HA1 и в течение 1 с звучит сигнал частотой 1 кГц, который сигнализирует о подаче питания на устройство (строки 154-157). В строках 160-176 размещён код для инициализации датчика VL53L0X, код взят из файла Single, который в качестве примера прилагается к библиотеке vl53l0x-arduino-master [22].

В начале основной части loop() производится измерение напряжения на аккумулятореG1 (182, 183 строки кода). Для измерения напряжения питания используется аналоговый порт A7. Далее следует сравнение имеющегося напряжения питания с заданным значением. В случае, если напряжение на аналоговом порту A7 оказывается ниже заданного порога, звучит предупреждающий сигнал, а переменной bat присваивается значение false, что означает запрет работы вибромотора (186-197 строки кода). В строках 200-210 производится вызов функций для работы с датчиками GP2Y0A02YK0F, US-100 и VL53L0X. В строках 216-252 вычисляется результирующее расстояние по данным отвсехтрёхдатчиков. При этом используется метод голосования, т. е. находятся два датчика, показания которых отличаются друг от друга меньше всего. Эти показания используются для вычисления среднего арифметического, и это значение считается окончательным результатом всего цикла измерений. Так можно отсечь некорректные показания датчика US-100 в интервале 20...140 см. В строках 216-218 производится попарное вычисление разностей между показаниями датчиков. Затем реализуется выбор меньшего из трёх значений разностей. После определения искомой пары датчиков производится вычисление среднего арифметического от показаний этих двух датчиков (строки 227-252). В строках 256-260 реализована обработка случая, когда показания датчиков говорят о том, что препятствие лежит в интервале от 140 до 400 см. В этом случае функции, обрабатывающие сигналы с датчиков GP2Y0A02YK0F и VL53L0X, возвращают значения, близкие к нулю. В этом случае в качестве окончательного значения используются показания с датчика US-100. В строках 265-280 проверяется условие разряда батареи (значение переменной bat). Если батарея не разряжена bat!= false, устанавливается значение переменной PM для управления вибромотором М1 с помощью ШИМ (строка 269). Необходимое значение ШИМ рассчитывается по формуле PM = -distance*155/400+155, где 400 - максимальная рабочая дистанция в сантиметрах, 155 - максимальное значение интенсивности работы вибромотора. Таким образом, на больших расстояниях мотор вибрирует слабо, а по мере приближения препятствия мощность вибромотора возрастает. Если батарея разряжена, вибромотор отключается (строки 275-280).

Правильно собранное устройство начинает работать сразу после подачи питания, настройка локатора состоит в установке максимальной мощности вибромотора.

Если проводить сравнение описанной выше конструкции с промышленными аналогами, то основное преимущество самодельной конструкции - наличие трёх датчиков для измерения расстояния с различными физическими принципами работы. Также важным можно считать существенное снижение производственных издержек, которое достигается путём использования унифицированных электронных модулей платы Robotdyn ProMini (Arduino Pro Mini), измерителей расстояния US-100 (HC-SR04), GP2Y0A02YK0F и VL53L0X, DC-DC преобразователя MT3608, контроллера зарядки TP4056. Фактически печатная плата нужна только для транзисторного ключа и подтягивающих резисторов интерфейса I2C. Всё это упрощает повторение устройства и делает его доступным для начинающих радиолюбителей. Как известно, Всероссийское общество слепых насчитывает более 200 тыс. человек [23], таким образом, существует немало людей, которым может попытаться помочь любой радиолюбитель.

Скетч для платы Robotdyn ProMini размещён здесь.

Литература

1. Электронные вспомогательные устройства. - URL: https://www.smartaids.ru/ catalog/sighting_loss/elektronnye-vspomogatelnye-ustroystva/ (26.08.20).

2. Электронная трость RAY арт. ИА3430. - URL:https://rosopeka.ru/catalog/ elektronnaya_trost_ray_art_ia3430.html (26.08.20).

3. Ультразвуковой фонарь Сонар-5УФ-В1. - URL: https://слышувижу.рф/product/ultra zvukovoj-fonar-sonar-5uf-v1 / (26.08.20).

4. Электронный поводырь для слепых "Электросонар". - URL: https://habr.com/ ru/post/173751/ (26.08.20).

5. Ультразвуковая трость. Аппаратная часть. - URL: http://forblind.org/ru/?cat=6 (26.08.20).

6. Лекомцев Д. Arduino. Ультразвуковая трость. - Радио, 2017, № 1,с. 54-56.

7. Нечаев И. ИК локатор для слепых. - Радио, 1989, № 10, с. 84-86.

8. Southern Fried Science. I build head-mounted LiDAR array that lets you see the world like a dolphin via vibrations sent through yourjaw. - URL: http://www.southernfriedscience.com/ i-built-a-head-mounted-lidar-array-that-lets-you-see-the-world-like-a-dolphin-via-vibra-tions-sent-through-your-jaw/ (26.08.20).

9. Самодельные очки помогут "увидеть" мир по-дельфиньи. - URL: https://nplus1. ru/news/201 8/07/25/DolphinView (26.08.20).

10. Вибрирующий обод заменит слепым трость. - URL: https://nplus1 .ru/news/ 2015/11 /20/sentiri (26.08.20).

11. Лекомцев Д. Ультразвуковой обнаружитель препятствий для незрячих, имеющий большой угол обзора. - Радио, 2018, № 11, с. 40-43.

12. Повышающий преобразователь напряжения МТ3608. - URL: https://2shemi. ru/povyshayushhij-preobrazovatel-napryazheniya-mt3608/ (26.08.20).

13. Robotdyn ProMini ATmega168PA для Ардуино. - URL: https://radioskot.ru/publ/ mk/robotdyn_promini_atmega1 68pa_dlja_ arduino/9-1-0-1276 (26.08.20).

14. Подключение ультразвукового датчика к Ардуино. - URL: https://2shemi.ru/ podklyuchenie-ultrazvukovogo-datchika-k-arduino/ (27.08.20).

15. Инфракрасный дальномер GP2Y0A02Y K0F. - URL: https://2shemi.ru/infrakrasnyy-dalnomer-gp2y0a02yk0f/ (27.08.20).

16. Лидар - обзор модуля для Ардуино. - URL:https://2shemi.ru/lidar-obzor-modulya-dlya-arduino/ (27.08.20).

17. Блум Д. Изучаем Arduino: инструменты и методы технического волшебства. Пер. с англ. - СПб.: БХВ-Петербург, 2015. - 336 с.

18. Беспроводное зарядное к смартфону: обзор. - URL: https://radioskot.ru/publ/zu/ besprovodnoe_zarjadnoe_k_smartfonu_ obzor/8-1 -0-1391 (27.08.20).

19. Лекомцев Д. Arduino. Подключение типовых внешних устройств. - Радио, 2016, № 11, с. 51-54.

20. GP2Y0A02YK0F datasheet. - URL: https://datasheet.su/datasheet/Sharp%20 Microelectronics/GP2Y0A0 2YK0F (27.08.20).

21. Турчак Л., Плотников П. Основы численных методов. - М.: Физматлит, 2003. - 304 с.

22. VL53L0X library for Arduino. - URL: https://github.com/pololu/vl53l0x-arduino (27.08.20).

23. Пресс-релиз (К XXII съезду ВОС). - URL:https://www.vos.org.ru/index.php? option=com_content&view=article&id=660& Itemid=272 (27.08.20).

 
Автор: Д. Лекомцев, г. Орёл