Управление на SG90 серво мотор с ESP32 R32 и MicroPython: библиотека и примерен код

Управление на SG90 серво мотор с ESP32 R32 и MicroPython библиотека и примерен код

Серво моторите, като популярния SG90, са изключително полезни в хоби и професионални проекти – от роботи и автоматизирани механизми до интелигентни системи за управление. ESP32, особено популярният модел ESP32 R32, е идеален микроконтролер за такива задачи, благодарение на своята мощ и възможност за работа с MicroPython. Може да намерите пълните характристики на тази платформа в нашето ревю за нея: ESP32-R32 – Мощта на ESP32 в позната UNO форма

В тази статия ще ви представим проста, но ефективна библиотека, написана от нас, за управление на SG90 серво мотор чрез ESP32 и MicroPython. Ще ви покажем и примерен код, който демонстрира как лесно да позиционирате сервото във всякакъв ъгъл с плавно движение.

Статията включва:

  • Библиотеката Servo за MicroPython
  • Подробно обяснение как работи
  • Примерен код за плавно завъртане на SG90
  • Подробно описание на основния скрипт

Библиотека за управление на серво мотор

Отдолу ще ви предоставим библитеката написана от нас за управление на серво мотори с MicroPython.

from machine import Pin, PWM

class Servo:
    def __init__(self, pin, freq=50, min_us=500, max_us=2500, angle_range=180):
        self.pwm = PWM(Pin(pin), freq=freq)
        self.min_us = min_us
        self.max_us = max_us
        self.angle_range = angle_range
        self.freq = freq

    def write_angle(self, angle):
        if angle < 0:
            angle = 0
        elif angle > self.angle_range:
            angle = self.angle_range

        us = self.min_us + (self.max_us - self.min_us) * angle // self.angle_range
        duty = int(us * 1024 * self.freq // 1000000)
        self.pwm.duty(duty)

    def deinit(self):
        self.pwm.deinit()

Обяснение на библиотеката

Тази библиотека предоставя лесен начин да управлявате позицията на SG90 серво мотор чрез PWM сигнал. Ето как работи всеки елемент:

Импортиране на библиотеките

from machine import Pin, PWM

Тази библиотека използва вградените в MicroPython библиотеки “Pin“, “PWM“. Може да научите как се използва широчинно импулсна модулация (PWM) в статията ни: Генериране на PWM сигнали с ESP8266 и MicroPython: Практически примери

Инициализация на класа Servo

def __init__(self, pin, freq=50, min_us=500, max_us=2500, angle_range=180):
  • pinGPIO пин на ESP32, към който е свързан серво моторът.
  • freq=50 – Стандартна честота за серво моторите (50 Hz).
  • min_us и max_us – Минималната и максималната ширина на PWM импулса в микросекунди. За SG90 тези стойности обикновено са между 500 и 2500 µs.
  • angle_range=180 – Указва ъгловия обхват на сервото.

Метод write_angle()

def write_angle(self, angle):
  • Проверява дали подаденият ъгъл е в допустимите граници (0 до 180).
  • Изчислява ширината на импулса (в микросекунди), отговарящ на желания ъгъл.
  • Преобразува тази стойност в “duty cycle” за MicroPython PWM.

Метод deinit()

def deinit(self):
    self.pwm.deinit()
  • Спира PWM сигнала и освобождава ресурси. Полезно, когато приключим с използването на сервото.

Схема на свързване на SG90 серво мотор с ESP32 R32

Може да намерите схема на свързването на ESP32 R32 с SG90 серво мотора на картинката отдолу.

Управление на SG90 серво мотор с ESP32 R32 и MicroPython библиотека и примерен код схема

След като сме свързали компонентите нека продължим с примерния код за управление на серво мотора SG90 с ESP32 R32 и MicroPython.

Примерен код за използване на библиотеката

from servo import Servo
from time import sleep

servo = Servo(pin=26)  # Свържи SG90 към GPIO26

while True:
    
    for i in range(0, 180):
        servo.write_angle(i)
        sleep(0.02)
        
    for i in range(180, -1, -1):
        servo.write_angle(i)
        sleep(0.02)

Обяснение на кода

Този код прави сервото да се движи плавно напред и назад между 0 и 180 градуса. Нека разгледаме детайлно какво се случва:

Импортиране на библиотеки и инициализация

from servo import Servo
from time import sleep

servo = Servo(pin=26)
  • Импортираме нашата собствена библиотека Servo.
  • Създаваме обект servo, като указваме, че серво моторът е свързан към GPIO26 на ESP32 R32.

Забележка: Може да използвате и друг пин, стига той да поддържа PWM на ESP32.

Основен цикъл за движение

while True:
    for i in range(0, 180):
        servo.write_angle(i)
        sleep(0.02)
  • Цикълът завърта сервото от 0 до 180 градуса с 1 градус на стъпка.
  • sleep(0.02) забавя движението, за да изглежда плавно.
for i in range(180, -1, -1):
        servo.write_angle(i)
        sleep(0.02)
  • След това серво моторът се връща обратно от 180 до 0 градуса.

Заключение

С тази библиотека и примерен код вие можете лесно да контролирате SG90 серво мотор (както и други серво мотори) чрез ESP32 R32 с MicroPython. Решението е гъвкаво и може да бъде интегрирано в по-сложни проекти – като роботизирани рамена, автоматични врати или интелигентни механизми.

Този подход е особено полезен за начинаещи, тъй като:

  • се използва MicroPython, който е четим и лесен за разбиране;
  • библиотеката опростява работата с PWM;
  • ESP32 R32 предоставя достатъчно GPIO пинове и възможности за управление на множество серво мотори.

Ако разработвате проекти с ESP32 и търсите надежден начин да интегрирате серво мотор, този код и библиотека са идеалната отправна точка.

Translate »