Etiquetas: , , ,

Uno de los principales objetivos en robótica es hacer que las cosas se muevan. Una forma de hacerlo es usar servomotores. En este tutorial, veremos cómo programar su Raspberry Pi para controlar dicho dispositivo.

Prerrequisito : Programación con Raspberry Pi

Material

  • Pantalla
  • HDMI cable
  • Teclado
  • Raspberry PI 3 ( con sistema operativo en micro SD )
  • Ratón
  • Fuente de alimentación micro USB B
  • servomotor

Servomotor

Los servomotores son pequeños dispositivos que contienen mecánica y electrónica integradas. Son ampliamente utilizados en modelismo, robótica y otras aplicaciones. Su nombre proviene del hecho de que controlan su posición (o velocidad) por su cuenta.

Básicamente, un servomotor está compuesto por un pequeño motor de corriente continua, una caja de cambios y componentes electrónicos integrados que pueden controlarse fácilmente mediante la Modulación de ancho de pulso (PWM) desde un microcontrolador.

Wiring

El servomotor se alimenta a través del cable negro / marrón (GND) y el cable rojo (+ 5V) y recibe la señal PWM en el cable amarillo / blanco (pin12). Dependiendo de la cantidad o potencia de los servomotores que desee utilizar, la Raspberry Pi puede alimentar el servomotor, pero se recomienda utilizar una fuente de alimentación externa.

Como recordatorio, aquí está el pinout de la Raspberry Pi 3.

Código básico para controlar un servomotor

Para controlar el servomotor en posición, solo necesitamos aplicar un comando PWM que se hace fácilmente usando la biblioteca RPi.GPIO. Para hacerlo, configuramos un pin como salida PWM.

#!/usr/bin/env python
#-*-coding: latin-1-*-
import RPi.GPIO as GPIO
import time
def AngleToDuty(ang):
return float(pos)/10.+5.
#Setup servoPin as PWM output of frequancy 100Hz
servoPin=12
GPIO.setmode(GPIO.BOARD)
GPIO.setup(servoPin,GPIO.OUT)
pwm=GPIO.PWM(servoPin,100)
#setup sweep parameters
depart =0
arrivee=180
DELAY=0.1
incStep=5
pos=depart
pwm.start(AngleToDuty(pos)) #star pwm
nbRun=3
i=0
while i<nbRun:
print("--------------------------run {}".format(i)) 
for pos in range(depart,arrivee,incStep):
duty=AngleToDuty(pos)
for pos in range(arrivee,depart,-incStep):
duty=AngleToDuty(pos)
pwm.ChangeDutyCycle(duty)
time.sleep(DELAY)
print("position: {}° -> duty cycle : {}%".format(pos,duty))
i=i+1
pwm.stop() #stop sending value to output
GPIO.cleanup() #release channel

Nota: al copiar el código de Python de Internet, puede encontrar problemas de indentación que conducen a un error de compilación.

Fuentes

THE reference https://www.raspberrypi.org/help/

Programación con Raspberry Pi