562+2+92

Что такое серводвигатель?

Серводвигатель или сервопривод — это электромеханическое устройство, которое позволяет очень точно контролировать скорость и угловое смещение своей оси, обычно ограниченное 180 градусами. Он в основном состоит из двигателя постоянного тока, редуктора, вала, схемы управления и механизма обратной связи, обычно потенциометра.

Как работает серводвигатель?

Микроконтроллер, например Raspberry Pi, посылает электрический импульс (ШИМ) на серводвигатель. Он считывает амплитуду импульса через свою схему управления и приводит в действие двигатель постоянного тока. Редуктор, состоящий из зубчатой ​​передачи, уменьшает скорость вращения вала. Угловое смещение оси вращает потенциометр, поскольку он соединен с ним. Выходное напряжение потенциометра считывается схемой управления, которая использует это значение для расчета положения, направления и угловой скорости вала.

В этом проекте мы будем использовать Raspberry Pi 4 для непрерывного вращения оси сервопривода на 180 градусов.

Необходимый материал

Для этого проекта мы будем использовать Raspberry Pi 4 и микро-сервопривод Sunfunder 9g SG90.

схема проводки

Серводвигатели обычно поставляются с проводами трех разных цветов: оранжевый для управления; красный для еды; и коричневый для земли.

Подключите кабели серводвигателя к контактам Raspberry следующим образом: оранжевый кабель к контакту 23 GPIO; черный провод с любым из контактов GND; и красный провод с контактом 3,3 В.

Код

импортировать RPi.GPIO как время импорта GPIO SERVO_MIN_PULSE = 500 SERVO_MAX_PULSE = 2500 Servo = 23 def map(value, inMin, inMax, outMin, outMax): return (outMax — outMin) * (value — inMin) / (inMax — inMin) + outMin def setup(): global p GPIO.setmode(GPIO.BCM) GPIO.setup(Servo, GPIO.OUT) GPIO.output(Servo, GPIO.LOW) p = GPIO.PWM(Servo, 50) p.start( 0) def setAngle(угол): угол = макс(0, мин(180, угол)) ширина_импульса = карта(угол, 0, 180, SERVO_MIN_PULSE, SERVO_MAX_PULSE) pwm = карта(ширина_импульса, 0, 20000, 0, 100) p .ChangeDutyCycle(pwm) def loop(): пока True: для i в диапазоне (0, 181, 5): setAngle(i) time.sleep(0,002) time.sleep(1) для i в диапазоне (180, -1) , -5): setAngle(i) time.sleep(0.001) time.sleep(1) def destroy(): p.stop() GPIO.cleanup() if __name__ == ‘__main__’: setup() try: loop () кроме KeyboardInterrupt: destroy()

Код SunFounder

ВАМ ТАКЖЕ МОЖЕТ ПОНРАВИТЬСЯ