Электронный учитель для незрячих на Arduino

В результате общения с преподавателями из челябинской коррекционной школы №127 для незрячих и слабовидящих детей, мы – сообщество forblind.org – узнали, что для ускорения процесса обучения детей азбуке Брайля было бы полезно создать устройство, способное, на сколько это возможно, заменить преподавателя и позволить ребёнку обучаться самостоятельно, в том числе вне школы. Мы поставили перед собой задачу из доступных и недорогих комплектующих реализовать устройство, которое позволит формировать и озвучивать один символ алфавита Брайля, поддерживая несколько языков и групп символов.

Шрифт Брайля – это система тактильного чтения для незрячих, в которой символы представляются в виде рельефных точек (выпуклостей), помещённых в специальную ячейку. В каждой ячейке для размещения точек предусмотрено шесть пронумерованных позиций, расположенных в ячейках матрицы 3х2. Существуют также восьмиточечные символы Брайля, которые в основном используются в дисплеях Брайля при работе с ПК.

image09

Алфавит Брайля символам естественного для человека (или в общем случае любого другого) языка сопоставляет символы Брайля. Освоив алфавит Брайля, слепые и слабовидящие могут достаточно быстро читать не только художественную, но и специальную литературу, содержащую ноты, математические или любые другие общепринятые символы.

На освоение шрифта Брайля незрячим детям в специализированных учебных заведениях выделяется ограниченное количество часов. Преподавателей шрифта Брайля не много, а каждому ребёнку нужны индивидуальные занятия. Таким образом, было бы полезным разработать устройство, предназначенное для ускорения и упрощения процесса изучения азбуки Брайля, позволяющее вводить один символ Брайля и воспроизводить его через динамик или наушники.

В первом приближении задача разбивается на две основные: организацию тактильного ввода символа Брайля и его озвучивание.

За основу мы взяли модульный принцип: все основные узлы берутся в виде готовых функциональных модулей. Объёмный монтаж, минимум пайки, доступность компонентов, открытые схемы и исходные коды – всё это позволяет быстро и недорого воспроизвести устройство любому человеку, имеющему минимальные познания в электронике и навыки пайки.

В качестве платы управления мы традиционно используем Arduino Pro Mini – достаточно компактное решение для подобных несложных устройств.

Электрическая принципиальная схема разработанного устройства представлена ниже.

image03

Механизм ввода символов Брайля

Первое, что мне пришло в голову при реализации механизма ввода символа Брайля – использовать кнопки с фиксацией: нажата – нет точки, отжата – есть точка. Пробный макет такого устройства изображён на рисунке:

image07

Разумеется, такой способ имеет право на существование, только у него есть два недостатка. Во-первых, как было обнаружено в процессе апробации идеи, кнопки даже в нажатом состоянии немного выступают над полем ввода, что затрудняет тактильное восприятие. Во-вторых, такая реализация не имитирует реальное написание брайлевских символов на специальной бумаге, когда точки выдавливаются с обратной стороны листа, как в детском сочинении представленном ниже.

image04

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

Недолго думая, мы решили сделать кнопки сквозными, по принципу «туда-сюда»: нажал с одной стороны – вылезло с другой. В качестве переключающих элементов взяли тумблеры, расположили их бочком в два ряда, приделали к каждому шток и собрали в корпус, нарезанный из ПВХ. Получившееся устройство ввода полностью имитирует используемый незрячими способ написания брайлевских символов на специальной бумаге. Так мы получили первый прототип устройства:

image02

Звуковое воспроизведение

Заставить 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), “Стоп”, “Громкость +”, “Громкость-”.

image01

Для вывода звука в модуле WTV020-SD используется ШИМ-выход с прямым подключением динамика с выходной мощностью 0.25/0.5Вт и ЦАП-выход для подключения внешнего усилителя.

 

Подводные камни при работе с модулем WTV020-SD

  1. Носители информации

Хотя в даташите на WTV020-SD заявлено, что микросхема поддерживает карты памяти емкостью до 1 Гб, на самом же деле, как выяснилось, WTV020-SD может прекрасно работать с картами памяти и на 2 Гб, а может не запуститься с 512-мегабайтной картой памяти. Не подозревая об этом, в придачу к модулям WTV020-SD на AliExpress были заказаны 10 карт памяти на 128 Мб. Не заработала ни одна.

В итоге нам пришлось наудачу покупать карты разных производителей, обивая пороги привокзальных ларьков по продаже б/у телефонов в надежде, что хотя бы одна купленная карта памяти заработает. Из 10-ти карт, полученных вполцены у друзей, из разных ларьков, ремонтных мастерских, получилось запустить только половину. В добавок ко всему, в процессе экспериментирования с режимами работы WTV020-SD несколько карт памяти были испорчены.

Причины такой избирательности установлены не были.

 

  1. Файловая система

Модуль работает только с картами памяти, отформатированными в FAT16, вне зависимости от их ёмкости.

 

  1. Формат файлов

WTV020-SD поддерживает на все wav-файлы. Прежде чем записывать файлы на карту памяти, необходимо убедиться, что они проходят по разрядности (битрейту) и частоте дискретизации (семплрейту). В даташите заявлено, что для wav-файлов частота дискретизации должна быть в пределах от 6 до 16 кГц.

Файлы подходящего формата мы пробовали получить с помощью двух программ AIMP Audio Recorder (при записи непосредственно из аудиопотока) и Audacity (посредством конвертации имеющихся файлов).

Экспериментальным путём было выявлено, что wav-файлы должны иметь следующие атрибуты: 11025 Гц, 16 bit, моно, PCM.

Качество воспроизведения *.wav нас вполне устроило, поэтому мы не стали разбираться с конвертацией в формат *.ad4, хотя использование *.ad4 и могло бы улучшить качество воспроизведения (увеличить частоту дискретизации до 36 кГц).

Адресное пространство модуля позволяет работать с 512-ю файлами, которые должны иметь имена от 0000 до 0511. Присутствие на накопителе сторонних файлов не влияет на работу модуля с целевыми файлами.

  1. Питание модуля.

На верхней стороне платы WTV020-SD есть перемычка-переключатель питания 5 – 3,3 В, замкнутая жирной каплей припоя на 3,3 В.

image11

При переброске перемычки с 3,3 на 5 В модуль не будет работать, хотя и не выйдет из строя. По крайней мере, так было в модулях, которые достались нам. Скорее всего, в модуле предполагалось использование стабилизатора на 3,3 В при питании от 5 В, о чём может свидетельствовать пустое посадочное место на обратной стороне модуля, на котором как раз может располагаться такой стабилизатор.

image08

Таким образом, для обеспечения питания модуля необходимо либо задействовать дополнительный стабилизатор на 3,3 В, как это сделано в нашем проекте, либо воспользоваться выходом 3,3 В при использовании Arduino Nano вместо Arduino Pro Mini.

Поскольку цифровые линии WTV020-SD толерантны к пятивольтовым сигналам, можно не выполнять их согласование по уровням с Arduino.

  1. Управление по последовательному интерфейсу

Для управления модулем по последовательному интерфейсу достаточно использовать две линии связи – DATA (линия данных) и CLK (синхроимпульсы). Синхронизация процесса обмена данными с модулем выполняется по фронту. Также можно задействовать вход RESET (сброс) и выход  BUSY (прижат к земле, пока идёт воспроизведение).

Для работы в среде Arduino IDE существуют готовые библиотеки, но мы их использовать не стали. Сторонняя библиотека – это всегда чёрный ящик. Никогда не знаешь, как её реализовали, какую периферию задействовали. Разбираться в ней мы не стали, а иметь в проекте неуправляемый кусок кода – чревато конфликтами при использовании одной и той же периферии (например, таймеров).

Собственно, сама посылка данных в WTV020-SD представляет собой последовательность из 16 бит, которая в двоичном формате передаёт номер файла воспроизведения (0 – 511 или 0x00 — 0x200) или команду (0xFFF0 – 0xFFF7 — громкость, 0xFFFE — воспроизведение/пауза, 0xFFFF — стоп).

Модуль чувствителен к таймингам, указанным на временной диаграмме.

image12

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

Сброс перед отправкой посылки данных, как показано на диаграмме, делать не обязательно. Можно слать посылки подряд. Если модуль принял номер файла, а воспроизведение предыдущего файла не закончено, то модуль прервёт текущее воспроизведение и приступит к воспроизведению нового файла. Отслеживать завершение воспроизведения запущенного файла можно по линии BUSY.

Для отправки посылок данных нами была написана небольшая функция, работающая в прерывании таймера, в которую передаётся десятичное число – адрес файла или команда.

 

Получение звуковых файлов и мультиязычность

 

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

Для качественной записи звуков необходима хорошая дикция и недешёвая звуковая карта. Таких ресурсов у нас не нашлось, поэтому мы решили воспользоваться синтезатором речи, предоставляемым сервисом Google Translate. Для автоматизации процесса записи нами был написан скрипт, преобразующий текстовый файл с набором букв/слов/фраз в набор wav-файлов, озвучивающих требуемые слова и буквы. В итоге нам не только удалось сэкономить время на запись русских букв, но и не привлекая переводчиков и носителей языка, сделать устройство мультиязычным.

Для выбора языка сделали отдельную кнопку, при нажатии на которую языки циклично перебираются, а их названия воспроизводятся.

Несмотря на то, что на сегодняшний день, благодаря Google Translate, нам доступны порядка 40 языков, вместить на одну карту памяти больше, чем 5-8 языков, не получится в связи с ограничением модуля на работу с файлами. Собственно, этого и не нужно.

Азбука Брайля во всех языках состоит из одних и тех же комбинаций точек, однако не всегда одна и та же буква в разных языках имеет одинаковое точечное представление, хотя в большинстве случаев это и справедливо. Кроме того есть буквы свойственные только тому или иному языку. Полное совпадение наблюдается только в цифрах, в математических и в большинстве пунктуационных знаках.

В азбуке Брайля есть ещё одна особенность – один и тот же брайлевский символ может обозначать разные: букву, символ, цифру или знак, в зависимости от предшествующего символа.

Для учёта специальных префиксов в нашей односимвольной клавиатуре изначально мы реализовали сохранение предыдущего символа. Каждый введённый символ озвучивался с учётом предыдущего, что оказалось не очень удобным, и мы решили добавить ещё одну кнопку, в каком-то роде аналог клавиши «Shift» на компьютерной клавиатуре. Работает кнопка смены режимов по тому же принципу, что и кнопка переключения языков, циклично перебирая три режима: алфавит, цифры и мат. символы, знаки пунктуации. Установка нового режима сопровождается озвучиванием его названия на текущем языке.

Для первого прототипа мы заготовили библиотеку из трёх языков: русский, английский, немецкий. Алфавиты, цифры, математические знаки и знаки препинания этих трёх языков заняли около 200 файлов, при том, что были задействованы только самые основные символы математики и пунктуации.

Заключение

В результате у нас получилось устройство, имеющее поле ввода из шести точек, три кнопки управления «Воспроизвести», «Язык», «Режим» и кнопку включения. При изменении состояния точки её номер озвучивается на выбранном языке. При нажатии кнопку «Воспроизвести» производится сопоставление кода шеститочечного брайлевского символа с буквой на выбранном языке. Если буква найдена, устройство воспроизводит её через выход наушников. В случае отсутствия буквы в выбранном алфавите устройство производит звуковое оповещение сигналом «бииип».

image10

В последней реализации мы постарались максимально уменьшить габариты устройства, оснастили его литий-ионным аккумулятором и модулем для зарядки с разъёмом micro-usb, а также устранили все замечания, полученные от преподавателей коррекционной школы для незрячих и слабовидящих:  добавили скошенный угол, сделали обрамление для брайлевской ячейки, заменили большие прямоугольные кнопки в брайлевской ячейке кнопками в виде рельефных точек. Единственной нашей недоработкой является то, что на данный момент мы не подобрали удобного корпуса для устройства.

При изготовлении второго прототипа были использованы следующие компоненты:

  1. Плата управления Adruino Pro Mini.
  2. Звуковой модуль WTV020-SD.
  3. Аккумуляторная батарея 3.7 V 300 mAh.
  4. Модуль повышающего DC/DC преобразователя 0.9V ~ 5V to 5V 600 mA.
  5. Модуль зарядки Li-Ion 5V to 4,2 V 1 A.
  6. Зарядное устройство 220 — 5V LA-520W.
  7. Микросхема линейного стабилизатора LM317.
  8. Кнопка PB-22E60.
  9. Кнопки тактовые (3 шт.).
  10. Переключатели движковые 2х-позиционные или тумблеры (6 шт.)
  11. Универсальная макетная плата S7NF.
  12. Разъём Audio-jack 3,5 для подключения наушников.
  13. Наушники или динамик.
  14. Резисторы 2 шт.

 

В разобранном виде второй прототип устройства выглядит следующим образом:

image00

На текущий момент мы не стали доводить разработку устройства до логического конца, поскольку, по мнению преподавателей коррекционной школы, гораздо более востребованным устройством был бы дисплей Брайля. Надеюсь, в будущем мы представим вашему вниманию подобное устройство.

Напоследок приводим ссылку{ссылка} на исходный код для Arduino и набор звуков для WTV020-SD; фотографию, иллюстрирующую все этапы разработки, и видеозаписи, демонстрирующие работу с созданными нами прототипами.

image05

Устройство для обучения шрифту Брайля

После общения с Бортниковым Павлом Владимировичем, преподавателем из коррекционной школы №127 (единственная в Челябинске школа для слепых и слабовидящих детей), решили сделать говорящий алфавит Брайля для обучения незрячих и слабовидящих детей шрифту Брайля. Устройство предназначено для обучения детей начальных классов письму и чтению шрифта Брайля. Введённый символ будет озвучиваться и его можно будет прощупать пальцами. Таким образом, ребёнок сможет самостоятельно изучать шрифт Брайля.

На видео показана работа образца.