Мне 15 лет, и последние 5 месяцев я собирал автономный радиомессенджер
Началось всё ещё в октябре. Я, как обычно, залипал в тиктоке. Нашел видео, где парень собрал маленькие устройства, которые могут обмениваться сообщениями.
Такие мини-терминалы: помещаются прямо в ладонь, а текст вводится через небольшое колесико, как на старых телефонах. Идея показалась простой (хотя, по факту, это не так) и одновременно классной.
Тогда я вспомнил, что через несколько месяцев у нас будет научно-практическая конференция. И решил: почему бы не попробовать сделать что-то подобное самому?
Так начался проект, который в итоге занял пять долгих месяцев.
Сразу скажу, путь был максимально кривой. Оно и понятно, так-то.
Для начала я начал подбирать комплектующие. В этом мне помогали и интернет, и несколько ИИ (в основном chatgpt, благо я обладатель платной версии) - они помогали искать документацию, примерный код и варианты железа.
В список попали:
- программируемые платы (Arduino Pro Mini, Raspberry Pi Pico на RP2040 и позже RP2350)
- дисплеи TFT 1.77"
- радиомодули HC-12
- тактовые кнопки
- провода (сначала 22AWG, потом 30AWG)
- резисторы
- выпрямители 1N4007
- модуль зарядки TP4056
- аккумуляторы на 1000 мАч
Все компоненты я брал сразу в двух экземплярах, потому что устройств планировалось два.
Начал я с Arduino Pro Mini. На бумажке всё выглядело отлично: компактная плата, несколько килобайт памяти, процессор 16 мГц, нормальное питание. Для платы размером примерно 5 на 3 см вполне прилично.
Но на практике всё пошло совсем не так.
Первую плату я благополучно убил. Она просто деградировала. Честно говоря, до сих пор не знаю почему. Возможно скачки тока, возможно я где-то неправильно прошил программу.
Вторая плата сгорела. Тут уже моя ошибка - перепутал полярность. Выпрямитель 1N4007, который я купил как раз для защиты, в тот момент подключить забыл.
Третья плата начала сильно греться. Работать она ещё могла, но было понятно, что долго это не продлится.
Четвёртая плата вообще отказалась нормально выполнять программу.
В итоге четыре Arduino отправились в мусор. Жаль, да делать нечего.
Зато дисплеи каким-то чудом остались живы, хотя их я тоже перепаивал не один раз.
После этого стало понятно, что Arduino в моём случае слишком ограничена. Она хорошо подходит для простых проектов, но когда появляется дисплей, радиомодуль и интерфейс - начинаются проблемы.
Тогда я переключился на платы Raspberry Pico.
Полноценные Raspberry Pi (3-4-5) я сразу отмёл, они слишком дорогие и избыточные для такой задачи. Но семейство RP2XXX выглядело очень интересно.
Процессор 133 МГц, два ядра и несколько мегабайт памяти - для такого маленького устройства это огромный запас.
И именно тут я впервые столкнулся с неожиданной проблемой: отрисовкой интерфейса.
Когда дисплей начинал перерисовывать элементы, появлялись артефакты: полосы, случайные пиксели, иногда интерфейс просто начинал тормозить. В какой-то момент система вообще переставала реагировать на кнопки.
Оказалось, что буфер отрисовки дисплея забивает процессор.
Пришлось немного поиграть с архитектурой программы. В итоге я сделал так: одно ядро занимается исключительно дисплеем, а второе логикой интерфейса и передачей сообщений.
После этого артефакты исчезли, а интерфейс стал работать намного быстрее.
Следующая история - кнопки.
Изначально я хотел повторить колесо ввода из того самого видео. Но найти такой механизм оказалось сложно.
Поэтому пришлось перейти на обычные тактовые кнопки. Сначала я купил самые простые, и это снова была ошибка. Они быстро ломались, ножки гнулись, да и сами кнопки изнашивались.
Потом я решил переделать всю схему подключения.
Сначала я вывел кнопки на маленькую плату-сопливку, где объединил земли. Но позже сделал более аккуратную разводку. Нашёл тонкие провода 30AWG, снял с одного длинного провода изоляцию и сделал из него общую шину земли. К каждой кнопке эта шина была припаяна последовательно.
В итоге получилось намного аккуратнее и надёжнее.
Теперь самое интересное - радиосвязь.
Я долго выбирал между тремя вариантами:
Bluetooth,
2.4 ГГц,
433 МГц.
Bluetooth сразу отпал, слишком маленькая дистанция и постоянное соединение.
2.4 ГГц плохо проходит через стены.
В итоге остановился на 433 МГц - том же диапазоне, в котором работают, например, брелоки от шлагбаумов.
Я купил радиомодули HC-12.
У них довольно интересная логика работы: они используют последовательный интерфейс UART и настраиваются AT-командами. Например:
AT+FU1
Эта команда устанавливает режим дальности передачи.
Настройка происходит через специальный пин SET. Если при включении он находится в LOW, модуль входит в режим настройки. Если HIGH - работает в режиме передачи.
И вот тут снова начались приключения.
Arduino Pro Mini почему-то не могла стабильно держать уровни LOW и HIGH на пинах. Из-за скачков питания иногда модуль вместо работы переходил в режим настройки.
Плюс две антенны оказались бракованными.
Пришлось заказывать новую партию.
К декабрю прошло уже два месяца. Рабочего устройства всё ещё не было.
Я решил перейти на Raspberry Pico с процессором RP2040.
На этой плате удалось запустить дисплей, кнопки и радиомодуль одновременно. Интерфейс наконец-то начал работать нормально.
Тогда я начал собирать всё на макетных платах.
Получилась конструкция из нескольких сопливок: одна плата для кнопок, одна для дисплея, одна для основной электроники. Соединял их даже степлерными скобами, потом пропаивал и фиксировал СКФ.
Выглядело самую малость безумно, но держалось очень крепко.
Но и тут без потерь не обошлось. Одна из плат RP2040 умерла. У неё буквально отвалился модуль памяти. Китайский модуль не выдержал.
После этого я решил, что уже устал от таких экспериментов.
Нашёл оригинальные платы RP2350. Их относительно недавно начали продавать, и это уже новое поколение Pico.
Интересная логистика получилась: произведены они в Британии, потом попали в Китай, затем в Японию, а уже оттуда ко мне.
С этой платой всё наконец заработало стабильно.
Я перепаял все компоненты, добавил аккумулятор, модуль зарядки TP4056 и радиомодуль. Всё разместилось на третьей макетной плате.
Корпус я заказал у человека с авито, который печатает детали на 3D-принтере. После печати немного доработал отверстия наждачкой, и устройство получилось довольно аккуратным.
Сейчас прототип умеет:
- вводить текст через multi-tap клавиатуру
- отправлять сообщения
- принимать сообщения
- хранить историю сообщений
- показывать уведомления
Интерфейс пока довольно простой, но работает.
К сожалению, одна из плат Raspberry всё же погибла, я случайно повредил дорожки. Поэтому сейчас полностью рабочий только один терминал.
Но это даже сыграло мне на руку. На защите я покажу один рабочий терминал, а второй - разобранный. Так будет проще объяснить архитектуру устройства.
Уже 10 марта я буду защищать этот проект на научно-практической конференции.
Честно говоря, немного забавно сравнивать проекты. Многие мои сверстники делают генераторы паролей или чат-ботов на питоне. Я же решил собрать собственный автономный радиомессенджер.
Посмотрим, что скажет жюри.
Если будет интересно, могу выложить код и схемы на GitHub.
UPD: Гитхабом займусь завтра. Вижу, тема многих заинтересовала! Надумал создать телеграм-канал, будут фотографии, дальнейшие эксперименты и развитие этого проекта. Если все-таки стало интересно, можете продолжать следить и здесь: https://t.me/neonhead. Благодарен всем-всем.
UPD #2: Этот проект я не позиционирую как тотальную, комфортную и надежную замену всем средствам связи. Для меня это и научный проект, и личное хобби, и способ "набить руку". Естественно, до практической пользы еще далеко. Важнее было понять "как оно устроено" и "могу ли я также". Смог. Теперь делюсь этим опытом с вами, и буду продолжать делать то же самое. Ещё раз, спасибо всем вам за комментарии и реакции.
UPD #3: Новый пост и гитхаб