Little Sun Gazer: гаджет, завдяки якому Сонце завжди під наглядом
Привіт! Мене звати Дмитро, Delivery Director в компанії Levi9. Я завжди захоплювався астрономією. Раніше я розповідав про створений мною кишеньковий планетарій на базі мікроконтролера Raspberry Pi Pico, що відображає поточне положення планет у Сонячній системі. Створений пристрій ліг в основу іншого проєкту — Little Sun Gazer.
Що за девайс
Ми схильні забувати, наскільки витонченим і водночас хореографічним є Всесвіт. І хоча іноді ми зупиняємося, зачаровані усвідомленням великої картини, уже за кілька хвилин забуваємо про неї. Тому я хотів створити щось, на що я міг би дивитися щодня, аби побачити, як з плином часу Земля здійснює свій оберт навколо Сонця. Крім того, я зрозумів, що під час роботи над кишеньковим планетарієм не вдалося дослідити положення Місяця, а мені дуже хотілося візуалізувати його і бачити, як він обертається навколо Землі. Так і зробив.
Little Sun Gazer покликаний імітувати положення Місяця і Землі навколо Сонця, а також відображати час сходу і заходу Сонця. Одна з цілей, яких я хотів досягти за допомогою цього проєкту, — відсутність потреби підʼєднання до інтернету, тому всі розрахунки відбуваються на борту. Хоч астрономія — це моє захоплення, до рівня обчислювальних формул я раніше не занурювався, тому чимало часу було витрачено на вивчення великої кількості ресурсів, таких як «Астрономічні алгоритми» Жана Меуса (Jean Meeus) або ж «Обчислення положення планет» Пола Шлайтера (Paul Schlyter). Внаслідок цього пристрій здатний вираховувати й відображати всю найважливішу інформацію про пару Земля-Сонце: кут Сонця відносно положення глядача на Землі, положення Землі навколо Сонця, схід / захід, час, а також положення Місяця відносно Землі.
Технічна сторона
Так само як і в кишеньковому планетарії, у Little Sun Gazer я використовую плату Raspberry Pi Pico з мікроконтролером RP2040. У минулому матеріалі я згадував, що ця плата — перша в лінійці Raspberry Pi Foundation на базі RP2040, яку вони розробили самі. Оскільки проєкт мав працювати від батареї, єдиною опцією було використання саме мікроконтролера, а не SoC-комп’ютера, наприклад, RPi Zero через обмеження енергоспоживання. Було ще кілька переконливих аргументів на користь Pico. По-перше, він має достатньо оперативної пам’яті для зберігання буфера кадрів і режим глибокого сну, що дозволяє заощадити трохи заряду батареї. По-друге, я хотів поекспериментувати з
Також плюсом є те, що електронний папір споживає енергію тільки під час оновлення, яке відбувається раз на хвилину, або, якщо бути більш точним, коли змінюється хвилина. Наприклад, якщо пристрій увімкнено о 23:59:58, то наступне оновлення екрана відбудеться за 2 секунди. Звісно, менш енергоощадним є Pico. За замовчуванням він споживає близько 20 мА. Тому, щоб заощадити трохи заряду акумулятора, я вимушений обрати режим глибокого сну. Вимкнувши деякі додаткові функції, я отримав близько 2,3 мА, що все ще багато, але погодьтеся, краще. До речі, для підʼєднання Pico до акумулятора з можливістю підзарядки або ж повної роботи від USB, я обрав Pimoroni LiPo SHIM for Pico. Ця плата живлення має захист від перерозряду і перевантаження по струму, кнопку живлення, щоб вмикати / вимикати пристрій або живлення від батареї, а також два світлодіодні індикатори: білий, який показує, коли живлення подається, і червоний — коли батарея заряджається.
Підсумовуючи, завдяки обраним елементам, проведеним маніпуляціям, а також акумулятору
Також для зручності дебагінг я проводив віддалено (ви можете побачити це на фото вище), щоб кожного разу не перезбирати програму і не завантажувати її через USB порт Pico. До Little Sun Gazer був підʼєднаний RPi Zero, який зі свого боку був підключений через бездротову мережу до мого компʼютера. У такий спосіб я міг розробляти й дебажити код на реальному пристрої віддалено, тому не було необхідності завжди тримати девайс підʼєднаним до ноутбука.
Так само як і в планетарії, окрім Pico, для проєкту знадобився модуль Precision RTC із вбудованим чипом DS3231, який дозволяє пристрою обчислювати положення Землі й Місяця відносно Сонця на основі поточного часу і дати. Щодо коду, враховуючи величезну кількість бібліотек, Pico’s SDK, драйверів для периферії та астрономічних алгоритмів з книг і статей, що перераховані вище, я не можу сказати, що він написаний «з нуля». Частину коду «кишенькового планетарію» я переробив для обчислення положення Місяця в Little Sun Gazer, але, на відміну від початкового проєкту, цього разу замість MicroPython я використовував С++. Основною причиною тому стала необхідність більшого контролю виконання програми і потреба в доступі до функціоналу глибокого сну. Корпус девайсу я надрукував на 3D-принтері. Як інструмент для 3D-дизайну в основному використовую Fusion360 та Blender. Що стосується принтера — дуже подобається мій Pursa mini+.
Про плани
Хоча я не встиг належно оформити зручний посібник для спрощення технічної реалізації, лишив багато корисного на Github. Можливо цього разу все буде трішки складніше, ніж з гайдом до планетарію, але знаю, що з часів анонсу цього проєкту деякі люди вже давно створили свої власні Sun Gazers, тож усе у ваших руках.
Наразі, хоча проєкт уже можна назвати закінченим, маю ще кілька ідей того, що б хотілося додати: візуалізація того, як обертається Земля, відображення відсотків заряду батареї, що відповідало б тематиці пристрою, часткове оновлення дисплея (не все ж треба щоразу вираховувати). Ну і якщо бути відвертим, сама кодова база не в найкращому стані: код не читається. Це був ігровий майданчик або пісочниця для дослідження можливостей та ідей, а не реальна розробка програмного забезпечення, тож ця база потребує доопрацювання та оформлення. У будь-якому разі про всі доопрацювання та новинки я розкажу в майбутніх статтях.
7 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів