Para mis proyectos uso varios servos estándar que son controladas por el controlador de servos PWM de ADAFRUIT que a su vez es controlada por una secuencia de comandos de python en Raspberry Pi.
Cada vez me re / montar una bocina en un servo que necesito para volver a ajustar el 'cero ángulo'. Si reemplazar un servo, puede tener diferentes conversión de PWM a la posición del ángulo. Tomó mucho de mi tiempo para ajustar los parámetros con cada cambio que decidí escribir la interfaz gráfica de usuario simple Tkinter que permitiría establecer, verificar y guardar:
* Valor PWM para el 'ángulo cero' (pwm0)
* conversión de ángulo de rotación de grado a cambio PWM (factor)
* superior e inferior se limita en el ángulo para proteger el hardware de daño (pwmHigh, pwmLow)
* canal ID 0-15 de generador PWM al que está conectado el servo
La fórmula de convertir el ángulo del sistema (A) al valor PWM al servo es el siguiente:
PWM = A * factor + pwm0
Si pwm < pwmLow:
PWM = pwmLow
Elif pwm > pwmHigh:
PWM = pwmHigh
La película muestra cómo uno puede utilizar esta GUI para determinar experimentalmente: pwm0, factor, pwmLow, pwmHigh. En esta película he querido la flecha negra a punto en la red '0' cuando puse el ángulo A 0 grados en la escala y la flecha no deben exceder el rango angular marcado por negro 'X' e 'Y'. Después de servo llamado 'futuba-S3003' está calibrado los parámetros se guardan en una salmuera de python.
Entonces, uno puede utilizar los valores como se muestra en este programa corto:
armConfName ="./servo.futuba-S3003.confarmConf=pickle.load( open(armConfName, "r" ) ) print 'loaded arm conf ',armConfName arm = ServoDriver() arm.setupController(armConf['freq']) arm.config(armConf) for ang in [10., 20., -20, -10.]: arm.setAngleDeg(ang) print 'set armAngDeg=%s, status=%s '%(ang,arm.status) time.sleep(2.) print "servos STOP & RELAX" arm.fullStop()
Este código es accesible desde bitbucket GIT repo como:
git clone
Se espera que tenga ya instalado en su R-Pi (y probado) la biblioteca de Adafruit, tal como se describe aquí
https://Learn.Adafruit.com/Adafruit-16-Channel-se...
Con todo el código está en lugar lanzamiento solo calibrador de servo como 'gksu' (de lo contrario no pueden túnel de gráficos). También asegúrese de que el servo esté enchufado al canal PWM en la GUI
$ gksu ./servoCalibMain.py
Después de guardar calibración en a salmuera, utilizarlo para mover el servo con sólo algunas líneas de python
$ sudo ./exampleRun.py
Buena suerte
Jan