Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Кишеньковий планетарій. Як створити гаджет для відстежування руху планет

Привіт! Мене звати Дмитро, і я Delivery Director в компанії Levi9. Я завжди захоплювався астрономією і хотів мати підручний гаджет, який би показував, як рухаються планети Сонячної системи в реальному часі. Так народився мій кишеньковий планетарій на базі мікроконтролера Raspberry Pi Pico, що відображає поточне положення планет у нашій Сонячній системі. В цьому матеріалі хочу детальніше поділитися принципом його роботи та технічною специфікою, а також власним прикладом довести дві речі:

  1. Raspberry Pi Pico може виводити корисну, кольорову графіку з потужним FPS.
  2. Написаний на Python код може добре працювати на мікроконтролерах.

Чим є девайс

Століттями астрономи використовували орбіти, щоб моделювати рух планет навколо Сонця. Насправді механічні моделі Сонячної системи виникли близько 150 року до нашої ери, але свою назву вони отримали, коли англійський дворянин Чарльз Бойл, четвертий граф Орері, замовив у 1713 році власний планетарій за проєктом годинникарів Джорджа Грема і Томаса Томпіона.

Мій пристрій здатний відображати дані про Сонячну систему в режимі реального часу — виводить на дисплеї вісім планет, які рухаються визначеним шляхом. Працює як з RTC-модулем, так і без нього, якщо використовувати при розробці Raspberry Pi Pico W. Щобільше, девайс може працювати і як звичайний годинник.

Якщо придивитися, то з правого боку на екрані можна побачити попереднє розташування Плутона. На перший погляд, планета просто рухається заздалегідь визначеною траєкторією без прив’язки до інших процесів у програмі, але це не так. Завдяки «стрибкам» Плутон відраховує секунди, а його рух продиктований чітким алгоритмом. Так, чим більше секунд залишається до наступної хвилини, тим вище Плутон підстрибує. А безпосередньо перед зміною хвилин на циферблаті планета котиться вниз екрану, досягаючи «землі».

Технічний бік питання

Для реалізації такого проєкту я обрав Raspberry Pi Pico. Це доволі бюджетна плата, що має потужний мікроконтролер. Це маленький комп’ютер із невеликим обсягом пам’яті та обмеженими можливостями підключення додаткових гаджетів, як клавіатура чи монітор. Взагалі, мікроконтролери — це дивовижна річ. Лише уявіть, що такий крихітний об’єкт може виконувати ваші команди та робити практично все з надзвичайно низьким енергоспоживанням.

Дізнавшись про мікроконтролер RP2040 і перевіривши його характеристики, я зрозумів, що його точно треба спробувати. Ця плата — перша в лінійці Raspberry Pi Foundation на базі RP2040, яку вони розробили самі. Було цікаво протестувати — зокрема, наскільки вона ефективна у порівнянні зі старішими «гравцями». Крім того, плата доволі потужна і має доволі цікавий підхід до імплементування власних протоколів PIO (не використовується в цьому проєкті).

Оскільки всі мікроконтролери мають лімітований обсяг памʼяті та ресурсів, здебільшого для їхнього програмування використовують С. Так, він більш низькорівневий і дозволяє краще впливати на використання памʼяті та використовувати обчислювальні цикли мікроконтролера. Мені це часто допомагає в розробці й написанні відповідних програм. При цьому для програмування мікроконтролера в цьому проєкті я захотів використати MicroPython замість C. MicroPython — це обмежена версія Python для мікроконтролерів, яка робить написання програм швидшим, простішим і навіть більш кросплатформеним. Але важлива примітка: вона не дозволяє контролювати памʼять і використовує значно більше ресурсів для інтерпретатора.

Окрім Pico, для проєкту потрібен модуль RTC, який Pico перевіряє для обчислення розташування планет. Я використав ще два основні компоненти: модуль розширення Waveshare Precision RTC з вбудованим чіпом DS3231 та Pimoroni Pico Display Pack. Це дозволяє пристрою обчислювати положення планет на основі поточного часу і дати. Після підрахунків девайс одразу показує планети та їхні відносні кругові орбіти на дисплеї. Найкрутіше те, що для цього не потрібні жодні зовнішні дані. Положення планет розраховуються на борту, і єдине, що знає система — це поточний час, який надходить з модуля RTC. Замість того, щоб покладатися на внутрішній годинник RP2040, модель використовує зовнішній годинник реального часу DS3231, який після налаштування можна підтримувати за допомогою додаткової батарейки. Поточну дату можна налаштувати за допомогою кнопок на циферблаті.

Звичайно, куди ж в процесі розробки без челенджів! Одним із сюрпризів стало те, що в дефолтній бібліотеці не було функції для малювання кола — довелося імплементувати власноруч. До того ж враховуючи, що всі планети я створював попіксельно на планшеті сам, то потрібно було мати доступ до цих даних на мікроконтролері. Вирішив обгорнути все в код через конвертування картинок в байти. Так вдалося тримати масив як const, а MicroPython оптимізував процес і пришвидшив роботу з тими даними.

Tips, які полегшать роботу

Як бачите, зібрати аналогічний девайс відносно просто за три кроки:

  1. Зібрати компоненти по принципу «сендвіча». Для цього вам знадобляться Raspberry Pi Pico, Precision RTC DS3231, Pico Display Pack, Pico Header Pack.
  2. Завантажити код і налаштувати RTC.
  3. Надрукувати корпус на 3D-принтері.

Щоб ще більше спростити технічну реалізацію всім охочим спробувати свої сили, вихідний код проєкту я розмістив на GitHub.

Проєкт можна розвивати та трансформувати: від додавання інших небесних тіл, моніторингу сходу й заходу сонця до використання батарейок для живлення та переходу на e-ink екран. В мене, наприклад, цей прилад ліг в основу іншого проєкту — Raspberry Pi Based Sun Tracker, про який я розповім у наступних статтях.

👍ПодобаєтьсяСподобалось21
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Pimoroni Pico Display Pack

Як відчуття від моніторчику (а особливо від його контролеру)? Чи є «апаратне прискорення» якесь, чи його команди обмежені «поставити точку кольору 0xABCDEF за координатами X.Y»?

Display Pack цікавий саме тим що він розроблений для RPi Pico, своїм форм фактором і тим що має додаткові 4 кнопки + RGB LED. Сам дисплей це st7789 з роздільною здатністю 240×135px, тому керування без апаратного прискорення і відбувається через SPI шину. Але, для своїх цілей дісплейчик дуже зручний.

Дуже круто!
Респект друже!
Сам полюбляю такі штуки (www.youtube.com/watch?v=MbwVQMDtMkU).
Окрема подяка за github, цікаво подивитись як інші то роблять!
Можливо колись на dou буде IoT, гадаю там буде достатньо охочих поділитися особистими проєктами та досвідом.
ще раз дякую, дуже сподобався проєкт!

Радий чути! І дуже приємно зустріти «мейкера».
Цікавий проект і відео, дякую що поділився!

Можно поставити на столі, щоб дивитися чи можно сьогодні мерджити, чи краще почекати коли Юпітиер чи Марс трохи відійдуть.

P.S. Девайс крутий насправді.

Дякую! Ідея чудова, закинув в список імпрувментів на майбутнє.

почекати коли Юпітиер чи Марс трохи

місяці треба чекати поки вони відійдуть

Мда, везе ж деяким, а тут краще щоб отревьювали і вмерджили чим швидше, щоб не ти, а індуси або іспанці розрібали мерджконфлікти )

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

Іноді в IT певні речі робляться just for fun

Іноді в IT певні речі робляться just for fun

прямо буквально нагадало ))

youtu.be/oobnef8Xa4k?t=14

тобто то і єсть моя перша і певно і одна реакція сорі ))

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

тогда цель этого устройства какая? Оно создает только неудобства, надо дополнительные траты финансовые, а конечный результат можно было получить и скачав приложение

Не удобно — не используйте

может и удобно, я и хочу разобраться

Підписатись на коментарі