Para poder utilizar motores tipo servo, vamos a utilizar pulseio
. En teoría uno puede realizar llamadas directas a pulseio
para definir una frecuencia de 50 Hz y con eso definir el ancho de los pulsos. ¡Pero preferimos hacerlo un poco más elegante y sencillo!
Así que en cambio, ¡vamos a utilizar adafruit_motor
la cual te maneja los motores tipo servo de buena manera! adafruit_motor
es una librería, ¡así que asegúrate de obtenerla del compilado de liberías si no lo has hecho! Si necesitas ayuda con la instalación puedes revisar la página de Librerías de CircuitPython.
Los servos vienen en dos tipos:
- Un servo estándar para hobbies - el puntero se mueve 180 grados (90 grados en cada dirección desde cero grados).
- Un servo de rotación continua - el puntero se mueve una rotación completa como un motor DC. En lugar de indicarse un ángulo, se define una velocidad de movimiento donde 1.0 es toda velocidad hacia adelante, 0.5 la mitad de la velocidad hacia adelante, 0 detenido, -1 es toda velovidad en reversa con sus valores intermedios.
Las conecciones para un servo son igual para cualquiera de los dos tipos.
Conecte el cable de tierra café o negro hacia la tierra de la tarjeta CircuitPython.
Conecte el cable rojo del servo hacia alimentación de 5V, donde un alimentado por USB es suficiente para uno o dos servos. Para más de eso, necesitas baterías externas. ¡No utilice 3.3V para alimentar un servo!
Conecte el cable amarillo o blanco del servo hacia el pin de control/datos, en este caso A1 o A2, pero puedes usar cualquier pin con capacidades de PWM.
Por ejemplo, para cablear un servo a una Trinket, conecte el cable de tira a GND y el de poder a USB, y el de señal a 0.
Recuerde, en las Trinket, A2 está etiquetado como "0".
Para las Gemma, utilice cables de lagarto para conectar el cable de tierra a GND, el de alimentación a VOUT, y el de señal a A2.
Para las Circuit Playground Express y Circuit Playground Bluefruit, utilice cables de lagarto para conectar el cable de tierra a GND, el de alimentación a VOUT y el de señal hacia A2.
Para tarjetas como las Feather M0 Express, ItsyBitsy M0 Express y Metro M0 Express, conecte el cable de tierra a GND, el de alimentación hacia USB o 5V, y el de señal hacia A2.
Para las Metro M4 Express, ItsyBitsy M4 Express y las Feather M4 Express, conecte el cable de tierra hacia cualquier G o GND, el de alimentación hacia USB or 5V, y el cable de señal hacia A1.
Código para Servos Estándar
Con este ejemplo el servo va a mover el puntero conectado al pin A2 desde 0 grados hasta 180 grados (-90 a 90 grados) y de regreso:
# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries # # SPDX-License-Identifier: MIT """CircuitPython Essentials Servo standard servo example""" import time import board import pwmio from adafruit_motor import servo # create a PWMOut object on Pin A2. pwm = pwmio.PWMOut(board.A2, duty_cycle=2 ** 15, frequency=50) # Create a servo object, my_servo. my_servo = servo.Servo(pwm) while True: for angle in range(0, 180, 5): # 0 - 180 degrees, 5 degrees at a time. my_servo.angle = angle time.sleep(0.05) for angle in range(180, 0, -5): # 180 - 0 degrees, 5 degrees at a time. my_servo.angle = angle time.sleep(0.05)
Servo de Rotación Continua
Hay dos diferencias entre los servos de Rotación Continua y los servos Estándar:
- El objeto
servo
se crea de formamy_servo = servo.ContinuousServo(pwm)
en lugar demy_servo = servo.Servo(pwm)
- En lugar de usar
myservo.angle
, se usamy_servo.throttle
con un valor de velocidad de 1.0 (toda velocidad) a 0.0 (detenido) y hasta -1.0 (toda velocidad en reversa). Cualquier número intermedio sería la velocidad parcial hacia adelante (valor positivo) o en reversa (valor negativo). Esto es muy similar al uso típico de un motor DC controlado con la librería de adafruit_motor.
Este ejemplo se mueve con toda velocidad hacia adelante durante dos segundos, se detiene por dos segundos, luego en toda velocidad en reversa por dos segundos, y luego se detiene por 4 segundos.
# SPDX-FileCopyrightText: 2019 Anne Barela for Adafruit Industries # # SPDX-License-Identifier: MIT """CircuitPython Essentials Servo continuous rotation servo example""" import time import board import pwmio from adafruit_motor import servo # create a PWMOut object on Pin A2. pwm = pwmio.PWMOut(board.A2, frequency=50) # Create a servo object, my_servo. my_servo = servo.ContinuousServo(pwm) while True: print("forward") my_servo.throttle = 1.0 time.sleep(2.0) print("stop") my_servo.throttle = 0.0 time.sleep(2.0) print("reverse") my_servo.throttle = -1.0 time.sleep(2.0) print("stop") my_servo.throttle = 0.0 time.sleep(4.0)
¡Muy sencillo!
Ahora asumamos que 0 grados es 0.5ms y 180 es un multo de 2.5ms. Esto es más amplio que el valor oficial de 1ms a 2ms de ancho de pulsos. Si tienes un servo que utilice un rango diferente, puedes inicializar el valor en el objeto servo
con un diferente mínimo (min_pulse
) y máximo (max_pulse
). Por ejemplo:
servo = adafruit_motor.servo.Servo(pwm, min_pulse = 500, max_pulse = 2500)
Para información más detallada sobre utilizar servos con CircuitPython, ¡puedes visitar la sección de CircuitPython en la guía de Servos!
Page last edited January 22, 2025
Text editor powered by tinymce.