Це ECU для RC написане на Micropython, Pi pico. Або простіше можна сказати, що це мозок для радіокерованої моделі.
Це керування RC розраховане на максимальну модульність та швидкість розробки та простоту налаштування моделі. Так, цей ECU не може похвалитися швидкодією, та для усіх моїх проєктів її вистачає.
Простіше. Та все залежить від потреб. Цей ECU містить в собі контролер та готові драйвери, модулі.
Все починається з main.py
. Розпочни зі задання своїх пристроїв, використовуючи драйвери.
Щоб використати готові драйвери:
- імпортуй драйвер:
from drivers import ServoSG90
; - далі потрібно ініціалізувати конкретні пристрої, наприклад для сервоприводу
sg90
:sg90 = ServoSG90(Pin(29))
. ДеPin(29)
– пін на який керує сервоприводом; - використовувати драйвери в модулях.
Далі потрібно ініціалізувати усі потрібно модулі.
Тобто драйвер надає функціонал для взаємодії з фізичним пристроєм, а модуль містить всю логіку для взаємодії з пристоями або іншими модулями
Щоб використати готові модулі:
- імпортуй модуль:
from drivers import Turn
; - далі потрібно ініціалізувати модуль та передати усі драйвери, наприклад, щоб визначити модуль повороту колес:
Turn(sg90)
. Деsg90
– драйвер сервоприводу; - передати модулі у контролер.
Тепер передай усі модулі в контролер та запусти його.
Щоб запустити контролер:
- імпортуй контролер:
from controller import Controller
; - ініціалізуй контролер, та передай у нього необхідні модулі:
car = Controller(turn)
; - запусти контролер:
car.start()
У main.py
вже готовий приклад ініціалізації усіх драйверів, модулів та контролера
Щоб написати свої драйвери:
- імпортуй базовий клас:
from drivers.base import BaseDriver
; - далі наслідуй клас
BaseDriver
та пиши будь-який функціонал; - в
__init(self)__
обов'язково викликай:super().__init__()
; - для постійного оновлення вкажи атрибут класу
delay_update: int = x
, деx
мінімальна затримка виклику в мікросекундах; - при постійному оновлені викликається метод
__update(self, controller: Controller)
; - при запуску контролера викликається метод
_startup(self, controller: Controller)
; - при завершенні роботи контролера викликається метод
_shutdown(self, controller: Controller)
; - за детальнішою інформацією див. вихідний код
Щоб написати свої модулі:
- імпортуй базовий клас:
from parts.base import BasePart
; - далі наслідуй клас
BasePart
та пиши будь-який функціонал; - в
__init(self)__
обов'язково викликай:super().__init__()
; - вкажи атрибут класу
delay_update: int = x
, деx
мінімальна затримка виклику в мікросекундах; - при постійному оновлені викликається метод
__update(self, controller: Controller)
; - при запуску контролера викликається метод
_startup(self, controller: Controller)
; - при завершенні роботи контролера викликається метод
_shutdown(self, controller: Controller)
; - за детальнішою інформацією див. вихідний код
Також є прості способи отримання модулів, комунікації між модулями, збереження та зміни налаштувань, логування тощо. Напишу документацію про це, якщо комусь буде цікаво
PS: багато цікавого є у вбудованих модулях, буде дока, як буде потреба комусь.
Зв'язок в тг: @floms11
cf
– Канал на якому працює радіомодуль, ціле число від 0 до 125ce
– Pipe радіомодуля, ціле додатнє число (адреса)cd
– Потужність передавача радіомодуляcc
– Швидкість роботи радіомодуля
a0
– Значення повороту коліс, ціле число від -100 до 100d0
– Позиція серви у крайньому лівому положенні, дробове від 0 до 1d1
– Позиція серви у нейтральному положенні, дробове від 0 до 1d2
– Позиція серви у крайньому правому положенні, дробове від 0 до 1d3
– Квадратні значення повороту коліс (замість лінійних – параболічні)d4
– Система стабілізаціїd5
– Наскільки різко стабілізація буде реагувати на рухи, ціле число від 1 до 10d6
– Максимальний поворот коліс при 0 швидкості, ціле число від 1 до 10d7
– Максимальний поворот коліс при максимальній швидкості, ціле число від 1 до 10
a1
– Значення прискорення, ціле число від -100 до 100d9
– Квадратні значення прискорення (замість лінійних – параболічні)
b0
– Загальний пробіг в метрахb1
– Швидкість в км/годb2
– Заряд акумулятора у відсоткахb3
– Заряд акумулятора у вольтах
f0
– Радіус колес в ммf1
– Передавальне число від мотора до колесf2
– Максимальна кількість обертів мотора