Skip to content
This repository has been archived by the owner on Mar 29, 2020. It is now read-only.

2019 spring course

Valerii Zuev edited this page Feb 1, 2020 · 1 revision

Вступление

В мире всё больше незрячих, и всё меньше среди них владеют шрифтом Брайля - рельефно-точечной азбукой, заменяющей чтение и письмо. Дело в том, что инвалиду по зрению трудно пойти на специальные курсы, если они вообще есть в месте, где он живёт; обучение идёт небыстро, особенно у поздноослепших. Польза от азбуки Брайля есть: чтение (даже по Брайлю) - это приятно, возможность делать заметки разгружает память, умение читать и писать по Брайлю помогает найти хоть какую-то занятость. На рынке есть дисплеи Брайля - приставки к компьютеру с пьезоэлектрической строкой Брайля (демонстрация). Стоят 100-200 т. р. Можно было бы сделать тренажёр на их основе, если бы ни цена. Есть прибор "Умка-01": 6 кнопок, маленький чип и динамик. Нажимаете нужную комбинацию - динамик говорит букву. Наверное, понятно, что это не очень хороший тренажёр (хотя бы потому, что нет памяти пальцев). Идея проекта: сделать электромеханический самоучитель шрифта Брайля. Конечно, он должен содержать хотя бы одну ячейку Брайля.
В ФабЛабе уже не первый год команда Глеба Мирошника разрабатывала такие устройства. Вот один из последних их образцов: (демонстрация). Внутри фабричная пьезоэлектрическая ячейка, вынутая из дисплея Брайля.
Вот то, что мы сделали в течение школы (демонстрация). Здесь ячейка не пьезоэлектрическая, а механическая. Она занимает много места, зато сделана из распространённых материалов, поэтому создание всего устройства обошлось менее чем в 2000 р (даже меньше Умки). К тому же, устройство легко воспроизвести в любом уголке мира, где есть 3Д-принтер. Вот клавиатура для обучения вводу и кратких заметок. Вот джойстик для навигации. Вот кнопка выключения звука. Мы написали несколько программ, основная - обучение; все они написаны на Python и запускаются с компьютера. Arduino запрограммирован выполнять команды компьютера через USB и отправлять сигналы с джойстика и кнопок. Евгений из Владивостока написал для нас нейронную сеть, распознающую речь; это как раз надо для обучения, точнее, для проверки знаний. В проверочных заданиях на дисплей выводится буква и надо ответить в микрофон, что за буква.
Сейчас устройство работает, и довольно надёжно, но может быть существенно улучшено. В течение курса я хотел бы сделать то, что уже не стыдно будет показать публике и, возможно, даже производить серийно. Мы сделаем прибор компактнее: вот новая ячейка (демонстрация). Теперь надо сделать корпус, кнопки, соединить узлы и программировать.
Мы ездили во Всероссийское общество слепых. Нас в целом похвалили и дали замечания: сказали увеличить немного размеры (для обучения маленькая не нужна) - размеры увеличены; сказали сделать компактнее - будет компактнее. Сказали лицевую панель лучше сделать не шершавой, а то неприятно - наверное, вырежем из оргстекла. В течение курса, думаю, 2-3 раза съездим в ВОС и покажем, что выходит.

Важная информация

Работа разделена на 10 этапов. По каждой куратор ставит оценку группе, а Валера - всем участникам.
Ваша роль: есть задания. Их наверняка хватит до конца курса, так что, даже если у вас не будет своих идей или главное для вас - получить зачёт, достаточно в срок выполнять свои задачи. По желанию - ездить в ВОС. В конце составим презентацию.
Когда вы берёте задачу, составляется issue. Обычно для новой задачи нужно создать новую ветку из master, и работа оценивается по commit-ам в неё. Не берите задачу, не обозначив это в GitHub, чтобы не работать параллельно с кем-то ещё.

  • Commit-ы и слияния в master: нельзя до проверки на устройстве. Иначе снижаю оценку.
  • Встречи: хотели каждую субботу в 14-00, но в итоге решили, что каждая подргуппа работает так, как удобно.
  • Куратор: точно не с Примата. Вероятно, Глеб Мирошник.
  • Не забывайте, есть ещё теория!
  • Группа большая. Предлагаю разделиться на две: ближе к ПО и ближе к железу.

Задачи по ПО

  1. Снабдить комментариями имеющийся код
    1. Небольшое (и частично выполненное) задание для ознакомления с проектом
  2. Улучшение воспроизведения аудио по нажатию джойстика (QT)
    1. Добиться того, чтобы по нажатию джойстика происходила реакция даже во время воспроизведения аудио
    2. Отключать звук по нажатию кнопки на устройстве
  3. Озвучка и наполнение уроков и тестов
    1. Большое и монотонное задание. Нужно спросить у Нины Константиновны (эксперта ВОС), что лучше - синтезатор или живая речь - и посмотреть программы специальных интернатов, после чего создать наполнение для всех уроков и тестов.
  4. Случайные слоги и слова в обучении
    1. Задание по C++ - то самое, что я присылал интересующимся (создание структуры-дерева для хранения слов).
  5. Распознавание речи
    1. Отладить библиотечное распознавание или добиться от Евгения безошибочной работы
  6. Обработка Serial-ошибок
    1. В Python обрабатывать ошибки, связанные с Serial (отсутствие устройства, потеря связи с устройством) - выводить информационное аудиосообщение
  7. Создание исполняемого установщика для Windows
    1. Написать установщик для Windows. Обеспечить подгрузку библиотек, возможно, установку компиляторов Python и C++, если таких нет. По установщикам нашёл статью, но надо ещё разобраться
  8. Создание приложения - заметки
    1. На текущий момент Лёша начал над этим работать.
  9. Создание приложения - инструкции для работы
  10. Создание приложения - настроек (зависит от группы "ближе к железу")

Задачи по железу

  1. Собрать ячейку
  2. Подключить PWM Shield
  3. Подключить иные узлы (динамик, клавиши, джойстик или кнопки)
  4. Собрать корпус
    1. Это ещё надо смоделировать. В принципе Валере по силам одному, но не помешает доброволец, который бы освоил базовые навыки работы в SolidWorks и помог бы.
  5. Подключить кнопки
  6. Ответ на нажатия кнопки
    1. В отсутствие подключения к компьютеру по нажатию клавиш выводить нажатую комбинацию в ячейку.
  7. Подключить Nano Pi
    1. Проверить код на кросс-платформенность на Linux
    2. Убрать общение через Serial, либо переписав программу на чистых C++ и создав API с Python, либо переписать на Python
    3. Ознакомиться с Nano Pi и перенести на него программу
    4. Сделать отдельное усройство под управлением Pi
  8. Сделать возможность настроек (скорость воспроизведения и высота штырьков)

Журнал курса

18-24 марта

Участник Что сделал
Саша
  • Написал первую часть приложения "Заметки"
  • контролировал написание приложений "Заметки" и "Блиц"
Макар
  • (?) нет данных
Миша
  • Подкорректировал фразы в гугл-таблице
  • Написал в общих чертах приложение-блиц
Паша
  • Помог Мише написать приложение
Лёша
  • Спаял три кнопки на плате
  • Встретился с Валерой (2 раза)
Ваня
  • Переработал модель накладки на USB
Валера
  • переписал PrintTextPWM
  • смоделировал и распечатал 2 уголка
  • Смоделировал кнопки на плате
  • Смоделировал гнездо для Arduino
  • спаял выходы кнопки выкл. звука и динамика
  • Вырезал с помощью сотрудников ФабЛаба на лазере нижнюю крышку, 4 стенки, верхнюю крышку
  • Купил крепёж (М3) в Максидоме
  • распечатал 2 раза основную деталь (11 часов печати)
  • распечатал крышечки гнёзд серво
  • забрал на почте серво из Гонконга
  • распечатал модель накладки на USB
  • встретился с Ваней
  • встретился с Лёшей (2 раза)
  • собрал новую ячейку в корпусе (пока 3 клавиши)
Никита
  • ничего

две недели: 25 марта-7 апреля

Участник Что сделал
Саша
  • Встретился с Валерой
  • написал вывод быстрой помощи по нажатию центра джойстика и придумал несколько фраз
  • участвовал во встрече в Discord
Макар
  • Написал прерывание потока по повторному вызову
Миша
  • Написал голосовое распознавание (яндекс-не заработало, pocketsphinx - в общих чертах заработало)
  • Сделал функцию listen обёрткой распознавания с помощью Яндекс и Гугл
  • съездил в ВОС и снимал видео
  • участвовал во встрече в Discord
Паша
  • с Мишей написал голосовое распознавание
  • съездил в ВОС и снимал видео
Лёша
  • Спаял кнопку (будущая кнопка помощи) и новый джойстик
  • Спаял ещё три кнопки клавиатуры и все подключил; сделал разные звуки клавиш
  • Встретился с Валерой (по разу в неделю)
Ваня
  • Смоделировал вторую (маленькую) накладку
  • Смоделировал гнездо для USB-кабеля
  • Смоделировал уголок с гнездом для штекера
  • Внёс незначительные исправления в деталь-накладку
  • участвовал во встрече в Discord
Валера
  • вновь изменил (с Женей С.) PrintTextPWM
  • подкорректировал и распечатал ещё два уголка: один-смоделированный Ваней, другой - поддержка pwmShield
  • Смоделировал и распечатал колпачки клавиатуры
  • собрал всё устройство
  • распечатал 4 ножки прибора (drumsticks)
  • распечатал ещё одну модель накладки на USB
  • встретился со всеми
  • встретился с Лёшей
  • собрал новую ячейку в корпусе (пока 3 клавиши)
  • озвучил два урока и некоторые пункты меню, буквы с сестрой (заняло много времени, но в итоге зря - в ВОС забраковали)
  • Съездил в ВОС, задал вопросы Нине Константиновне
  • сходил в библиотеку для слепых и взял методическое пособие
  • провёл встречу в Discord
Никита
  • написал рандомайзер, выдающий по заданному набору букв список слов, их содержащих, а также соответствующие названия аудиофайлов

8-14 апреля

Участник Что сделал
Саша
  • Довёл до конца "Заметки"
  • написал с нуля приложение "калькулятор"
  • встретился с Валерой и обсудил ход работы
Макар
  • Написал структуру приложения "Настройки"
  • участвовал во встрече в Discord
Миша
  • Улучшил "Блиц"
  • участвовал во встрече в Discord
Паша
  • Написал обработку ошибок Serial
  • участвовал во встрече в Discord
Лёша
  • помог Валере запустить Serial-клиент для NanoPi Duo, установить драйверы
Ваня
  • Сделал модель клавиши пробела
  • Сделал модель подставки под клавишу пробела
  • Смоделировал квадратную кнопку выключения звука
  • участвовал во встрече в Discord
Валера
  • подкорректировал и распечатал ещё одно гнездо-шеститочие (маленькая деталь по центру)
  • ещё раз подкорректировал и распечатал гнездо для USB-кабеля Arduino
  • Забрал посылку с деталями для новой версии в пункте выдачи
  • NanoPi Duo: помигал светодиодом с помощью библиотеки RPi.GPIO, адаптированной к NPi
  • NanoPi Duo: смог подключить кнопку
  • NanoPi Duo: попробовал подключить PWM Shield (i2c-драйвер сервоприводов) с помощью двух разных библиотек, не вышло; покопался в библиотеках, много часов читал форумы - не вышло
  • Нашёл перспективный метод автоматического синтеза речи оффлайн - pyttsx3+RHVoice
  • смоделировал вырезы в верхней крышке под новые кнопки
  • распечатал ещё две модели накладки на USB
  • провёл встречу в Discord; встретился с Мишей, Ваней; с Сашей; с Лёшей
Никита
  • ничего