![](https://habrastorage.org/files/432/a96/ca7/432a96ca763c444fa2f524b973d315d5.jpg)
В результате общения с преподавателями из челябинской коррекционной школы №127 для незрячих и слабовидящих детей, мы – сообщество forblind.org – узнали, что для ускорения процесса обучения детей азбуке Брайля было бы полезно создать устройство, способное, на сколько это возможно, заменить преподавателя и позволить ребёнку обучаться самостоятельно, в том числе вне школы. Мы поставили перед собой задачу из доступных и недорогих комплектующих реализовать устройство, которое позволит формировать и озвучивать один символ алфавита Брайля, поддерживая несколько языков и групп символов.
Шрифт Брайля – это система тактильного чтения для незрячих, в которой символы представляются в виде рельефных точек (выпуклостей), помещённых в специальную ячейку. В каждой ячейке для размещения точек предусмотрено шесть пронумерованных позиций, расположенных в ячейках матрицы 3х2. Существуют также восьмиточечные символы Брайля, которые в основном используются в дисплеях Брайля при работе с ПК.
![](https://habrastorage.org/files/632/92b/92c/63292b92c73c4598bf3780cc17f5199f.png)
Алфавит Брайля символам естественного для человека (или в общем случае любого другого) языка сопоставляет символы Брайля. Освоив алфавит Брайля, слепые и слабовидящие могут достаточно быстро читать не только художественную, но и специальную литературу, содержащую ноты, математические или любые другие общепринятые символы.
На освоение шрифта Брайля незрячим детям в специализированных учебных заведениях выделяется ограниченное количество часов. Преподавателей шрифта Брайля не много, а каждому ребёнку нужны индивидуальные занятия. Таким образом, было бы полезным разработать устройство, предназначенное для ускорения и упрощения процесса изучения азбуки Брайля, позволяющее вводить один символ Брайля и воспроизводить его через динамик или наушники.
В первом приближении задача разбивается на две основные: организацию тактильного ввода символа Брайля и его озвучивание.
За основу мы взяли модульный принцип: все основные узлы берутся в виде готовых функциональных модулей. Объёмный монтаж, минимум пайки, доступность компонентов, открытые схемы и исходные коды – всё это позволяет быстро и недорого воспроизвести устройство любому человеку, имеющему минимальные познания в электронике и навыки пайки.
В качестве платы управления мы традиционно используем Arduino Pro Mini – достаточно компактное решение для подобных несложных устройств.
Электрическая принципиальная схема разработанного устройства представлена ниже.
![](https://habrastorage.org/files/71d/ff9/7fa/71dff97fa6be4467a1edabe108f812a5.jpg)
Механизм ввода символов Брайля
Первое, что мне пришло в голову при реализации механизма ввода символа Брайля – использовать кнопки с фиксацией: нажата – нет точки, отжата – есть точка. Пробный макет такого устройства изображён на рисунке:
![](https://habrastorage.org/files/ec4/156/adb/ec4156adbf2f4896a1f8183a5188ddf4.jpg)
Разумеется, такой способ имеет право на существование, только у него есть два недостатка. Во-первых, как было обнаружено в процессе апробации идеи, кнопки даже в нажатом состоянии немного выступают над полем ввода, что затрудняет тактильное восприятие. Во-вторых, такая реализация не имитирует реальное написание брайлевских символов на специальной бумаге, когда точки выдавливаются с обратной стороны листа, как в детском сочинении представленном ниже.
![](https://habrastorage.org/files/d78/561/fe8/d78561fe820a4f2996ea473b3afa7945.jpg)
Конечно, можно «утопить» кнопки так, чтобы они не выступали за пределы поля, но в этом случае нажать и зафиксировать их пальцем будет практически невозможно, т.к. для срабатывания защёлки нужно дать кнопке больший ход, чем её положение фиксации. Перспектива использования специального грифеля для работы с утопленными в корпус кнопками нас не устроила.
Недолго думая, мы решили сделать кнопки сквозными, по принципу «туда-сюда»: нажал с одной стороны – вылезло с другой. В качестве переключающих элементов взяли тумблеры, расположили их бочком в два ряда, приделали к каждому шток и собрали в корпус, нарезанный из ПВХ. Получившееся устройство ввода полностью имитирует используемый незрячими способ написания брайлевских символов на специальной бумаге. Так мы получили первый прототип устройства:
![](https://habrastorage.org/files/417/a80/06c/417a8006c9e64ed3a22456ec138992cb.jpg)
Звуковое воспроизведение
Заставить Arduino воспроизводить аудио-файлы можно, например, посредством ШИМ. Даже есть ардуино-подобная плата «Carduino», имеющая транзистор с открытым коллектором на пине D11 для непосредственного подключения динамика. Основной проблемой при использовании «Carduino» является то, что воспроизводимые фрагменты звуков в формате *.wav необходимо сначала специальным конвертером преобразовывать в заголовочные файлы *.h, подключаемые к проекту, а затем при прошивке записывать непосредственно в память микроконтроллера, объём которой и без того не велик. Как вариант, можно было бы попробовать читать и воспроизводить файлы с SD-карты. Мы же решили не изобретать велосипед, а поискать готовое решение, которым и стал модуль WTV020-SD, позволяющий воспроизводить wav-файлы.
WTV020-SD является полностью готовом к использованию решением с низкой стоимостью и компактными размерами (22 х 19 мм). К преимуществам WTV020-SD можно также отнести простую схему включения, возможность управления воспроизведением по последовательному интерфейсу и удобную смену набора звуковых файлов заменой или перезаписью карты памяти.
Для работы WTV020-SD необходимо обеспечить напряжение питания 2,5-3,6 В. Модуль воспроизводит файлы форматов *.wav и *.ad4 с microSD или SPI-flash карт памяти, поддерживая до 512 различных файлов на карте памяти. Управление воспроизведением треков осуществляется с помощью кнопок “Воспроизведение/Пауза”, “Стоп”, “Следующий”, “Предыдущий”, “Громкость +”, “Громкость-” и по последовательному интерфейсу командами “Воспроизведение/Пауза” (с указанием адреса файла в интервале 0..511), “Стоп”, “Громкость +”, “Громкость-”.
![](https://habrastorage.org/files/c92/a69/43f/c92a6943f6aa4a38bb0ce2dc9ade36b4.jpg)
Для вывода звука в модуле WTV020-SD используется ШИМ-выход с прямым подключением динамика с выходной мощностью 0.25/0.5Вт и ЦАП-выход для подключения внешнего усилителя.
Подводные камни при работе с модулем WTV020-SD
1. Носители информации
Хотя в даташите на WTV020-SD заявлено, что микросхема поддерживает карты памяти емкостью до 1 Гб, на самом же деле, как выяснилось, WTV020-SD может прекрасно работать с картами памяти и на 2 Гб, а может не запуститься с 512-мегабайтной картой памяти. Не подозревая об этом, в придачу к модулям WTV020-SD на AliExpress были заказаны 10 карт памяти на 128 Мб. Не заработала ни одна.
В итоге нам пришлось наудачу покупать карты разных производителей, обивая пороги привокзальных ларьков по продаже б/у телефонов в надежде, что хотя бы одна купленная карта памяти заработает. Из 10-ти карт, полученных вполцены у друзей, из разных ларьков, ремонтных мастерских, получилось запустить только половину. В добавок ко всему, в процессе экспериментирования с режимами работы WTV020-SD несколько карт памяти были испорчены.
Причины такой избирательности установлены не были.
2. Файловая система
Модуль работает только с картами памяти, отформатированными в FAT16, вне зависимости от их ёмкости.
3. Формат файлов
WTV020-SD поддерживает на все wav-файлы. Прежде чем записывать файлы на карту памяти, необходимо убедиться, что они проходят по разрядности (битрейту) и частоте дискретизации (семплрейту). В даташите заявлено, что для wav-файлов частота дискретизации должна быть в пределах от 6 до 16 кГц.
Файлы подходящего формата мы пробовали получить с помощью двух программ AIMP Audio Recorder (при записи непосредственно из аудиопотока) и Audacity (посредством конвертации имеющихся файлов).
Экспериментальным путём было выявлено, что wav-файлы должны иметь следующие атрибуты: 11025 Гц, 16 bit, моно, PCM.
Качество воспроизведения *.wav нас вполне устроило, поэтому мы не стали разбираться с конвертацией в формат *.ad4, хотя использование *.ad4 и могло бы улучшить качество воспроизведения (увеличить частоту дискретизации до 36 кГц).
Адресное пространство модуля позволяет работать с 512-ю файлами, которые должны иметь имена от 0000 до 0511. Присутствие на накопителе сторонних файлов не влияет на работу модуля с целевыми файлами.
4. Питание модуля.
На верхней стороне платы WTV020-SD есть перемычка-переключатель питания 5 – 3,3 В, замкнутая жирной каплей припоя на 3,3 В.
![](https://habrastorage.org/files/521/a3f/329/521a3f329f254be78c3a3b422ff6b649.jpg)
При переброске перемычки с 3,3 на 5 В модуль не будет работать, хотя и не выйдет из строя. По крайней мере, так было в модулях, которые достались нам. Скорее всего, в модуле предполагалось использование стабилизатора на 3,3 В при питании от 5 В, о чём может свидетельствовать пустое посадочное место на обратной стороне модуля, на котором как раз может располагаться такой стабилизатор.
![](https://habrastorage.org/files/53f/62c/970/53f62c970e604662b18ce3ec107ce2e5.jpg)
Таким образом, для обеспечения питания модуля необходимо либо задействовать дополнительный стабилизатор на 3,3 В, как это сделано в нашем проекте, либо воспользоваться выходом 3,3 В при использовании Arduino Nano вместо Arduino Pro Mini.
Поскольку цифровые линии WTV020-SD толерантны к пятивольтовым сигналам, можно не выполнять их согласование по уровням с Arduino.
5. Управление по последовательному интерфейсу
Для управления модулем по последовательному интерфейсу достаточно использовать две линии связи – DATA (линия данных) и CLK (синхроимпульсы). Синхронизация процесса обмена данными с модулем выполняется по фронту. Также можно задействовать вход RESET (сброс) и выход BUSY (прижат к земле, пока идёт воспроизведение).
Для работы в среде Arduino IDE существуют готовые библиотеки, но мы их использовать не стали. Сторонняя библиотека – это всегда чёрный ящик. Никогда не знаешь, как её реализовали, какую периферию задействовали. Разбираться в ней мы не стали, а иметь в проекте неуправляемый кусок кода – чревато конфликтами при использовании одной и той же периферии (например, таймеров).
Собственно, сама посылка данных в WTV020-SD представляет собой последовательность из 16 бит, которая в двоичном формате передаёт номер файла воспроизведения (0 – 511 или 0x00 — 0x200) или команду (0xFFF0 – 0xFFF7 — громкость, 0xFFFE — воспроизведение/пауза, 0xFFFF — стоп).
Модуль чувствителен к таймингам, указанным на временной диаграмме.
![](https://habrastorage.org/files/b08/0f7/7ec/b080f77ec3674c778abda00a645496e7.jpg)
Допускается незначительное отклонение таймингов от рекомендуемых значений. В случае сильного изменения таймингов как в большую, так и в меньшую сторону модуль перестаёт реагировать на посылки данных.
Сброс перед отправкой посылки данных, как показано на диаграмме, делать не обязательно. Можно слать посылки подряд. Если модуль принял номер файла, а воспроизведение предыдущего файла не закончено, то модуль прервёт текущее воспроизведение и приступит к воспроизведению нового файла. Отслеживать завершение воспроизведения запущенного файла можно по линии BUSY.
Для отправки посылок данных нами была написана небольшая функция, работающая в прерывании таймера, в которую передаётся десятичное число – адрес файла или команда.
Получение звуковых файлов и мультиязычность
После того, как мы запаслись несколькими работающими картами памяти и разобрались с форматом файлов и управлением модулем, перед нами встала задача записи библиотеки звуков.
Для качественной записи звуков необходима хорошая дикция и недешёвая звуковая карта. Таких ресурсов у нас не нашлось, поэтому мы решили воспользоваться синтезатором речи, предоставляемым сервисом Google Translate. Для автоматизации процесса записи нами был написан скрипт, преобразующий текстовый файл с набором букв/слов/фраз в набор wav-файлов, озвучивающих требуемые слова и буквы. В итоге нам не только удалось сэкономить время на запись русских букв, но и не привлекая переводчиков и носителей языка, сделать устройство мультиязычным.
Для выбора языка сделали отдельную кнопку, при нажатии на которую языки циклично перебираются, а их названия воспроизводятся.
Несмотря на то, что на сегодняшний день, благодаря Google Translate, нам доступны порядка 40 языков, вместить на одну карту памяти больше, чем 5-8 языков, не получится в связи с ограничением модуля на работу с файлами. Собственно, этого и не нужно.
Азбука Брайля во всех языках состоит из одних и тех же комбинаций точек, однако не всегда одна и та же буква в разных языках имеет одинаковое точечное представление, хотя в большинстве случаев это и справедливо. Кроме того есть буквы свойственные только тому или иному языку. Полное совпадение наблюдается только в цифрах, в математических и в большинстве пунктуационных знаках.
В азбуке Брайля есть ещё одна особенность – один и тот же брайлевский символ может обозначать разные: букву, символ, цифру или знак, в зависимости от предшествующего символа.
Для учёта специальных префиксов в нашей односимвольной клавиатуре изначально мы реализовали сохранение предыдущего символа. Каждый введённый символ озвучивался с учётом предыдущего, что оказалось не очень удобным, и мы решили добавить ещё одну кнопку, в каком-то роде аналог клавиши «Shift» на компьютерной клавиатуре. Работает кнопка смены режимов по тому же принципу, что и кнопка переключения языков, циклично перебирая три режима: алфавит, цифры и мат. символы, знаки пунктуации. Установка нового режима сопровождается озвучиванием его названия на текущем языке.
Для первого прототипа мы заготовили библиотеку из трёх языков: русский, английский, немецкий. Алфавиты, цифры, математические знаки и знаки препинания этих трёх языков заняли около 200 файлов, при том, что были задействованы только самые основные символы математики и пунктуации.
Заключение
В результате у нас получилось устройство, имеющее поле ввода из шести точек, три кнопки управления «Воспроизвести», «Язык», «Режим» и кнопку включения. При изменении состояния точки её номер озвучивается на выбранном языке. При нажатии кнопку «Воспроизвести» производится сопоставление кода шеститочечного брайлевского символа с буквой на выбранном языке. Если буква найдена, устройство воспроизводит её через выход наушников. В случае отсутствия буквы в выбранном алфавите устройство производит звуковое оповещение сигналом «бииип».
![](https://habrastorage.org/files/eb6/54f/556/eb654f5565c04f3984fb96587b6c2e7a.jpg)
В последней реализации мы постарались максимально уменьшить габариты устройства, оснастили его литий-ионным аккумулятором и модулем для зарядки с разъёмом micro-usb, а также устранили все замечания, полученные от преподавателей коррекционной школы для незрячих и слабовидящих: добавили скошенный угол, сделали обрамление для брайлевской ячейки, заменили большие прямоугольные кнопки в брайлевской ячейке кнопками в виде рельефных точек. Единственной нашей недоработкой является то, что на данный момент мы не подобрали удобного корпуса для устройства.
При изготовлении второго прототипа были использованы следующие компоненты:
- Плата управления Adruino Pro Mini.
- Звуковой модуль WTV020-SD.
- Аккумуляторная батарея 3.7 V 300 mAh.
- Модуль повышающего DC/DC преобразователя 0.9V ~ 5V to 5V 600 mA.
- Модуль зарядки Li-Ion 5V to V 1 A.
- Зарядное устройство 220 — 5V LA-520W.
- Микросхема линейного стабилизатора LM317.
- Кнопка PB-22E60.
- Кнопки тактовые (3 шт.).
- Переключатели движковые 2х-позиционные или тумблеры (6 шт.).
- Универсальная макетная плата S7NF.
- Разъём Audio-jack 3,5 для подключения наушников.
- Наушники или динамик.
- Резисторы (5 шт.).
В разобранном виде второй прототип устройства выглядит следующим образом:
![](https://habrastorage.org/files/534/0e7/52a/5340e752a8ae4814a60de940153fa97e.jpg)
На текущий момент мы не стали доводить разработку устройства до логического конца, поскольку, по мнению преподавателей коррекционной школы, гораздо более востребованным устройством был бы дисплей Брайля. Надеюсь, в будущем мы представим вашему вниманию подобное устройство.
Напоследок приводим ссылку на исходный код для Arduino и набор звуков для WTV020-SD; фотографию, иллюстрирующую все этапы разработки, и видеозаписи, демонстрирующие работу с созданными нами прототипами.
![](https://habrastorage.org/files/214/477/eed/214477eede9f4e53b097ab2168807749.jpg)
Смотрите также: Бюджетное устройство на базе Arduino для незрячих (open hardware) .