fbpixel
Etiquetas: , , ,
4.5
(2)

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: utf-8 -*-

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


if __name__ == '__main__' :

	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)
			pwm.ChangeDutyCycle(duty)
			time.sleep(DELAY)
		print("position: {}° -> duty cycle : {}%".format(pos,duty))
		
		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

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4.5 / 5. Recuento de votos: 2

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?