Несколько дней назад в сети появилась информация о проекте по созданию DIY устройства на Lisp c очень высокой автономностью. При условии регулярного использования девайса (не круглосуточного, но все же несколько часов в день) автор обещает автономность на уровне двух лет. Что это за проект, с чего все началось и с какой целью он был создан? Давайте посмотрим.
Как все начиналось
По словам автора проекта, ему надоело, что ноутбук разряжается быстрее, чем хотелось бы. Притом, что он часто работает над небольшими проектами, для которых не нужно большое количество ресурсов, т.е. современные лэптопы ему особо ни к чему. Андреас, так зовут автора идеи, признался, что для большинства его рабочих задач нужен лишь девайс с очень низким энергопотреблением, возможно, небольшим, но четким монохромным экраном и эргономической клавиатурой.
Ну а поскольку такого девайса в природе не нашлось, то Андреас решил сделать его сам. Начал он с прототипа на плате Adafruit NRF52840 Express. По его словам, все работало неплохо, нажатия кнопок клавиатуры считывались без особых проблем. Но все же возможностей этой платы не хватало для задуманного проекта, поэтому было решено перейти на Sparkfun Artemis ATP с 48 пинами GPIO, благодаря чему функциональность резко расширилась. А энергопотребление после оптимизации — сильно снизилось.
На данный момент девайс в собранном виде потребляет 13,2 мВт, что крайне мало — заряда батареи действительно должно хватит на несколько лет при таком раскладе. Во многом это удалось именно благодаря плате SparkFun RedBoard Artemis ATP на базе SoC Ambiq Apollo3.
Характеристики устройства
Список относительно небольшой. Вот характеристики девайса:
• Sharp Memory in Pixel LS044Q7DH01
• Процессор Arm Cortex-M4F с частотой работы 96 МГЦ.
• Объем ОЗУ — 364 КБ.
• Накопитель — 1 МБ.
• Кавиатура — Happy Hacking Keyboard Lite 2.
• Аккумулятор — 12000 мА*ч.
• Допонительные возможности — солнечная батарея, целый ряд коннекторов и разъемов.
Автор замечает, что на старте возникла проблема с работой SPI, а именно — с разъемом камеры. Он опробовал букльвано сотни различных комбинаций параметров, но успеха не достиг. Лишь спустя время решение пришло само собой — сканирование нажатий клавиатуры с определенным паттерном.
Часть кода для решения этой задачи автор одолжил у создателей Lisp, его можно найти по вот этому адресу.
Ну а что касается ОС, то автор решил использовать PotatOS — модифицированный порт uLisp (Lisp, разработанный специально для микроконтроллеров). Программы для PotatOS можно писать прямо на девайсе. Например, Эриксен уже написал и запустил игру Змейка. Она прекрасно работает.
Спустя какое-то время проект усовершенствовали — автор добавил возможность отображать слова и фразы, набранные на клавиатуре. Ранее текст тоже можно было набирать, но при этом набор текста был весьма глючным.
Проблем изначально было много, но основная — невозможность считывать нажатия кнопок. Откуда проблема? Непонятно. В итоге автор опробовал Arduino pinMode и вызовы digitalWrite / digitalRead, но все это работало медленно, крайне медленно, хотя и верно. В частности, автор планировал сканировать нажатия клавиш с с частотой примерно 500 раз в секунду. Но ничего не получилось.
Сохранение ссылок и прямой их вызов помог решить эту проблему. Так, автор сократил время сканирования до 1 мс на сканирование. Сейчас сканирование занимает примерно 25% загрузки процессора.
Стоит отметить, что с самого начала автору сильно мешало отсутствие проверки ошибок. Если в коде, который он вводил, возникала какая-либо проблема, REPL аварийно завершал работу, и все приходилось перезапускать из консоли. К счастью, он наткнулся на сообщение на форуме uLisp. Там коллектив расширил более раннюю версию uLisp, добавив некоторую базовую обработку ошибок.
А что сейчас?
В целом, компания достаточно быстро решила все «детские проблемы», включая энергопотребление
Тестирование энергопотребления системы
Какие изменения введены в новой версии?
- Исправлена ошибки, из-за которой нажатие клавиш направления значительно увеличивало энергопотребление. Код сканирования клавиатуры теперь также работает намного быстрее.
- Изменена схема подачи питания на SD-карту. Для этого используются контактные площадки GPIO Apollo3. Достоинство решения в том, что оно позволяет полностью отключать питание, когда картане используется, что очень помогает. Это снизило максимальное наблюдаемое среднее энергопотребление до 2 мА, поэтому автор в итоге и заявил о 2 годах автономной работы.
- Опубликован исходный код на — он несколько неполный. Также есть также исправления ошибок и оптимизации ядра Artemis Arduino и библиотек Adafruit GFX/Sharp Memory Display, которые еще не опубликованы. Их еще предстоит опубликовать
- На странице проекта размещен список компонентов, который должен включать все материалы, необходимые для создания такого ПК.
- Переписан текстовый редактор, чтобы использовать структуру данных списка строк. Задержка при редактировании теперь снижена до 40 мс для файлов разумного размера. Измерения проводились путем подсчета кадров в режиме замедленной съемки со скоростью 240 кадров в секунду.
- Теперь можно редактировать файлы размером до 30 КБ без угрозы «вылета».
- Интегрирован простой код для UXN. UXN — это спецификация виртуальной машины, созданная коллективом художников Hundred Rabbits. Теперь PotatoP может запускать жестко закодированные программы UXN и выводить вывод с консольного устройства UXN на дисплей. В ближайшее время планируется закончить реализацию вывода графики для этого, чтобы иметь возможность запускать коллекцию игр и программ на своем компьютере.
Что дальше?
На данный момент все более-менее неплохо работает. Автор выложил свой YouTube ролик, который быстро стал популярным (он чуть выше по тексту). Многие зрители его канала сейчас — добровольные помощники.
Возможно, эти тексты тоже вас заинтересуют:
→ Как геймифицировать аренду серверов со скидкой, связав сайт с внутренней панелью администрирования
→ Как эффективно делиться результатами своей работы? О «хвастовстве» здорового человека
→ Как разработать Telegram-бота для генерации сложных паролей
Сам автор говорит, что сейчас удалось сделать многое. Но он продолжает работу — планирует еще сильнее снизить энергопотребление, а также установить дополнительные солнечные батареи.