Babagram: Телеграм Для Бабушки

Однажды мне рассказали о самодельном устройстве под названием Яяграм (почему-то описанном создателем в Твиттер , и здесь здесь по-русски ).

Я посмотрел на это и решил сделать свой, с предпочтениями и аркадными кнопками поэтессы и старым термопринтером.

Так родился BabaGram, черный ящик, открывающий общение в Telegram для моей бабушки.



Что такое Бабаграм



BabaGram: Телеграм для бабушки

Мне хотелось сделать что-то похожее на Яяграмму — устройство, которое распечатывало бы входящие сообщения на встроенном принтере, а бабушка позволяла бы отправлять сообщения мне и другим контактам.

При этом бабушка не умеет печатать на клавиатуре телефона и очень неуверенно читает с экрана.

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

Я решил использовать аркадные кнопки — мне кажется, это более естественный выбор.

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

Итого нам нужно устройство с принтером, микрофоном, кнопками, доступом в Интернет и логикой, которая всем этим управляет.

Оглавление

Начнем с «железной» части — термопринтер И периферия , контролеры , питание .

Далее немного о производство корпусов .

И, наконец, о код .



Термопринтер

Однажды мне подарили старый кассовый аппарат. Думаю, это была Ока 102к, но это не так важно.

Выпаяв из него все, что могло пригодиться, я стал обладателем старинного термопринтера.

Как этот.

BabaGram: Телеграм для бабушки

Документации на этот термопринтер я не нашел, но нашел обозначение самой термопечатающей головки (T1001B) и после долгосрочный Погуглил, даташит на него.

Я считаю себя квалифицированный интернет-детектив после этого выложу даташит на Google Диске .

Я не помню, где я это нашел.

Далее нам предстояло разобраться с платой, управляющей этим термопринтером.

Не утомляя вас подробностями, скажу лишь, что логика там примитивная: головка представляет собой 128-битный сдвиговый регистр, где каждый бит — это один резистор в термоголовке.

Вам необходимо последовательно отправить 128 бит, а затем кратковременно подать сигнал «пожар», который включает нагрев выбранных резисторов.

Важно не перегреть, иначе они сгорят. И вы не можете включать более 32 строк одновременно, поэтому более полные строки будут печататься медленнее.

Выжечь строчку на бумаге – это только полдела.

Вы должны иметь возможность перемещать ленту.

Для этого в принтере имеется шаговый двигатель.

От него идут 6 проводов, 2 из которых одного цвета и после долгого тыкания мультиметром, определяется как один провод в двух плоскостях (для увеличения поперечного сечения) .

Существует стандартный шаговый двигатель с 5 проводами и таким расположением контактов:

BabaGram: Телеграм для бабушки

Управлять таким мотором довольно просто – знайте, дергайте фазы по очереди (а красная всегда либо GND, либо VCC).

Экспериментально определив последовательность фаз, приводящую к движению ленты вверх, я двинулся дальше.

Начался долгий процесс обнюхивания термоголовкой.

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

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

Мне даже удалось добиться оттенков серого.

В некоторой степени.



BabaGram: Телеграм для бабушки

Вот так печатаются фотороботы! Или фотографии фоторобота? Но вот проблема: то, что было напечатано, было существенно сжато по вертикали.

Что это? Прямоугольные пиксели? Или я делаю слишком мало шагов двигателя? Стоит ли смотреть двигатель? Знаешь, что я видел? Два двигатель на одном валу.

У каждого по 3 провода, один из которых видимо центральный между фазами.

Эти центральные провода были соединены в один на плате.

Поэтому тыканье мультиметром показало, что они замкнуты, а на самом деле в моторе (моторах!) они не замкнуты.

Один мотор вращает ремень вперед, другой назад. Так вот, когда я делал 4 шага по фазе, моторы включались попеременно, причем мотор «вперед» честно двигал ленту (и даже чуть дальше), а мотор «назад» мешал.

Выкинув 2 фазы из 4, я все исправил.

Никогда не слышал об однонаправленных шаговых двигателях, но оказывается они существуют?

Периферия

Помимо термопринтера, который у меня уже был, мне понадобились кнопки и микрофон.

Я купил их на Amazon. Про микрофон сказать особо нечего - самый дешевый USB-микрофон, по совпадению, точно такой же, как и в Яяграме.

Когда бабушка распаковала бабаграмму, ее вырвали из футляра и сломали провод внутри, потому что бабушка подумала, что это ручка.

Пришлось быстро исправлять - первый раз в жизни паял под Новый год. Еще добавил твитер из комплекта Ардуино, но это мелочи.

И здесь кнопки интереснее.

Ну, совсем немного.

У них светодиоды со встроенными резисторами, и при напряжении 3,3в они тускло светятся.

Светодиоды сменные, в одной кнопке я заменил штатный белый светодиод на красный.

Нет, не в кнопку записи, а в кнопку SOS. Кнопки отлично крепятся на корпусе – имеют «юбочку».

И очень легко понять.

Контакты для клемм есть, но обжимать 24 клеммы мне было лень, поэтому я просто припаял провода.

В комментариях справедливо отмечено, что это не очень хорошая идея из-за возможного перегрева пластика.

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

BabaGram: Телеграм для бабушки

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

Модели публиковать не буду - получилось не очень.

На самом деле он одноразовый и немного прилипает.

Контроллеры

Проблема возникла, когда мы этого не ожидали.

Я хотел собрать устройство на Raspberry Pi, а оно 3,3 вольта.

Но вся логика управления термопринтером 5-вольтовая, а кнопки на 3,3в плохо светятся.

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

Я использовал Raspberry Pi Model 3B, но любой Pi (или аналогичный) должен работать, если у него есть Wi-Fi. Ну или можно сделать Babagram-over-Ethernet.

BabaGram: Телеграм для бабушки

Для логики 5в я выбрал (из-за наличия дома) Attiny88. А вообще я очень люблю Атмелы из этой серии.

Их сложно убить и очень легко запрограммировать, если у вас дома есть какой-нибудь Arduino. А возможностей за копейки много.

Единственный минус - у них очень мало памяти, как и у ОЗУ (512 байт ) и флэш (8Кб для 8х моделей).

Но здесь подросток будет очень прямолинейным исполнителем.

Максимум, что ему придется хранить, — это одна строка печати, 128 бит, 16 байт. Справлюсь.

Для связи между Тайни и Пи я использовал шину I. 2 C: Требуется несколько проводов — SDA, SCL и земля.

Кроме того, контакты Pi не допускают напряжения 5 В, поэтому для любого протокола, использующего высокий уровень от ведомого устройства, потребуется делитель напряжения.

Лень подсказала мне, что я 2 С — мой выбор.

Однако мне пришлось исправить код, который я 2 Из клиента в аттини - в штатном есть подтягивающий резистор, который будет выдавать 5в, но мне он не нужен.

Высокий уровень будет установлен мастером, которым является наш Пи.

Все знакомые мне Atmel понимают 3,3 В как логическую единицу.

Attiny88 гарантирует это при питании от 5В (для него В ИХ > = 0,6 В, то есть 3 В).



BabaGram: Телеграм для бабушки

Я неожиданно узнал, что у гребенки Raspberry Pi количество контактов и шаг между ними точно такое же, как и у IDE-кабеля.

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

Я уже давно удалил разъемы IDE из нескольких старых материнских плат, поэтому просто вырезал очень простую плату для разводки этого разъема.

И еще один для атмела для подключения к плате термопринтера (тоже кабель).

А вот так на стенке корпуса выглядит блок питания, Pi и плата термопринтера:

BabaGram: Телеграм для бабушки

Pi с кабелем, блоком питания и платой термопринтера

Питание

Термопринтеру требовалось 12 Вольт, а у меня был блок питания 220 -> 12 В (на фото выше слева вверху).

Для 5в я сначала использовал дешевый асинхронный DC-DC преобразователь с алиэкспресса, но потом столкнулся с эпическими глюками из-за шумного блока питания (несмотря на развязывающие конденсаторы), и выбросил этот преобразователь.

Вместо этого я использовал блок питания USB-C, который валялся где-то поблизости.



BabaGram: Телеграм для бабушки

Для меня, привыкшего к старому USB-A, стало открытием, что адаптеры USB-C требуют нетривиальной настройки, чтобы выдавать даже стандартные 5 вольт. Нет, я понимаю, что сразу 12в ставить в линию не стоит. А вот 5 вольт могло бы быть.

Ладно, надо просто добавить резистор между линиями CC и GND. На 5,1 кОм, который доступен только в серии E24 и выше, но ближайший «обычный» номинал 4,7 кОм меня вполне устраивает. В итоге получается вот такая колбаска:

BabaGram: Телеграм для бабушки

Где бы мы были без горячего клея?

Рамка

С электроникой все понятно, осталось только придумать, как сделать коробку.

Яяграм видимо использовал заводской, но это не наш метод. Я купил фанеру толщиной 4 мм и вырезал корпус на лазерном станке с ЧПУ (диодном!).

Оказывается, если разрезать фанеру, не предназначенную для этого, появляются забавные артефакты — некоторые волокна фанеры плохо распиливаются, и остается много неразрезанных точек.

А в некоторых местах горит внутри.

Мой лазер на 40 китайских ватт. При питании от 12В он потребляет ~1,7А - такая китайская арифметика, но я отвлекся.

По крайней мере, он режет фанеру.

Он абсолютно идеально режет специальную «лазерную» фанеру.



BabaGram: Телеграм для бабушки

ЧПУ с лазером Внезапно стало ясно, что машина не совсем картезианская.

То есть его оси не перпендикулярны.

Раньше я вырезал только доски, где перпендикулярность была не так важна.

И вот я вырезал два прямоугольника на пределе размера стола и сложил их, перевернув.

И я увидел расхождение ~1,5 мм.

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

Для сборки корпуса я распечатал на принтере уголки, некоторые из них были обычные мебельные, а некоторые «трехсторонние» — см.

ниже.

Здесь .

Очень удобно собирать на месте – два часа отверткой, и корпус грубо собран.

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

После покраски встал вопрос как нанести текст на тело.

От рельефных пластиковых полосок, как в Яяграме, я сразу отказался — хотелось честных изображений на поверхности.

Я пробовал гравировать резцом по краске, предполагая, что срежу краску и оставлю более-менее светлую фанеру, но это оказалась фигня.

Бред сивой кобылы

BabaGram: Телеграм для бабушки

Фотография красивее, чем в реальности благодаря вспышке.

В реальной жизни контраст еще меньше.

Поэтому я перешел на более тяжелую артиллерию.

Одну эмблему (для кнопки подачи бумаги) я нарисовал более простым способом: вырезал лазером трафарет на клейкой этикетке, приклеил к дереву и закрасил акрилом из аэрографа.

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

Другими словами, черная область связана.

Фото трафаретной росписи

BabaGram: Телеграм для бабушки



BabaGram: Телеграм для бабушки



BabaGram: Телеграм для бабушки

Этот режим не подходит для обычного текста.

Либо вам придется использовать трафаретный (трафаретный?) шрифт, который правильно соединяет все буквы, либо придумать другой метод. Я не хотел ограничиваться тем, что могу нарисовать, поэтому выбрал второй вариант. Чтобы нарисовать случайное (одноцветное) изображение, я покрыл всю поверхность малярным скотчем, затем лазером выгравировал участки, где должна быть краска (в итоге белая).

При этом малярная лента и немного дерева испарились, и я нанес их на маску аэрографом.

Фото более сложного процесса

BabaGram: Телеграм для бабушки



BabaGram: Телеграм для бабушки



BabaGram: Телеграм для бабушки



BabaGram: Телеграм для бабушки

Шрифт как на усилителях ВЭФ.

На самом деле сделать это было не так уж и сложно.

И качество на удивление хорошее.

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

Хотя казалось бы.

Фото собранной и покрашенной бабаграмы:

BabaGram: Телеграм для бабушки

Это изображение было на превью, это верно.



Код

Я написал код для Attini как для Arduino и загрузил его через интернет-провайдера, которым был Arduino Uno. Код для малины основан на python-telegram-бот и работает как Telegram-бот. Там много чего сделано криво, в частности плохо реализована многопоточность.

Возможно, я обновлю этот код на что-нибудь более красивое.

.

Вы не можете запустить код как системную службу — это должна быть пользовательская служба, иначе pyaudio не сможет использовать микрофон.

Не знаю почему, возможно из-за какой-то аутентификации в PulseAudio. Я не основывал его на коде Яяграммы, потому что в некоторых местах он даже хуже.

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



BabaGram: Телеграм для бабушки

Чтобы распечатать текст на термопринтере, вам понадобится шрифт. Его нужно было выбрать, и это было сложно.

Я пробовал векторные шрифты (потому что растровые были нечитабельны), и они выглядели в разной степени криво.

Как я понял позже, растровые не работали из-за описанного выше неправильного управления шаговым двигателем.

Но прежде чем я это осознал, я перепробовал десятки шрифтов и потратил впустую много бумаги.

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

Какое это было счастье! Когда уже все заработало, я понял, что мне не всегда удобно слушать аудиосообщения, а хочется читать текст. Для этого есть много разных сервисов, но я выбрал Google .

Покопавшись в дебрях версий компилятора Rust и glibc, я наконец установил google-cloud-speech, и всё заработало.

Если хотите моего совета, устанавливайте нестабильную версию raspbian — там более подходящие пакетные версии.

Я больше не могу обновлять свой Pi, потому что.

оказывается, Wi-Fi пропадает во время обновления .

Весь код здесь: https://github.com/gurux13/babagram

Заключение

Бабушке очень нравился Бабаграм.

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

BabaGram: Телеграм для бабушки

Спасибо, что дочитали до конца.

Ну или долистнули :) Надеюсь было интересно.

Теги: #Программирование микроконтроллеров #Сделай сам или Сделай сам #поделки #Разработка на Raspberry Pi #Telegram #Raspberry Pi #Atmel #бабушкин телефон #лазерная резка

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.