Position du servo fixée par angle¶
Ce que l'on va faire ici¶
Dans ce programme Micropython, nous allons fixer la position d'un servomoteur en exprimant sa position en degré.
Matériel¶
- une carte Pi Pico flashée avec MicroPython et préparée pour utilisation en vertical sur plaque d'essai
- un (mini)servomoteur
- une petite plaque d'essai
- quelques jumpers
Le schéma théorique¶
- Le V+ du servomteur est connecté au 5V
- le 0V à la masse GND de la carte
- la broche de commande à une broche en sortie de la carte à micro-controleur
Le montage à réaliser¶
On connecte :
- Le V+ du servomteur est connecté au 5V
- le 0V à la masse GND de la carte
- la broche de commande à une broche en sortie de la carte à micro-controleur, par exemple la GP18
Le code¶
- un objet PWM est créé basé sur la broche utilisée
- on configure la fréquence PWM à 50Hz
-
un Timer pour assure le rappel de la fonction loop
-
la valeur du duty cyle en µs est calculée à partir de l'angle via une fonction
rescale
# code Micropython - www.micropython.fr - CC-BY-SA
from machine import Pin, Timer,PWM # importe les classes Pin et Timer
pwm=PWM(Pin(18)) # crée un objet PWM sur la broche
pwm.freq(50) # fixe la fréquence de l'onde PWM pour servomoteurs - 50 Hz
timer=Timer() # création objet timer
compt=0
angles=[30, 90, 180, 135, 60, 0] # en degres
# fonction pour changement d'échelle
def rescale(valeur, in_min, in_max, out_min, out_max):
return (valeur - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
def loop(timer): # fonction de clignotement
global compt
compt=compt+1
#print(compt)
#print(compt%len(pos)) # debug
#print(pos[compt%len(pos)]) # debug
# la fonction pwm.duty_ns() fixe largeur en ns... utile pour servo
angle=angles[compt%len(angles)]
duty_us=rescale(angle,0,180,500,2500)
pwm.duty_ns(int(duty_us*1000)) # doit être un int
# rappel fonction loop à fréquence voulue
timer.init(freq=1, callback=loop)
Résultat¶
Le servomoteur prend les positions angulaires successives.
Info
N'hésitez pas à modifier la valeur de la fréquence de clignotement pour voir la LED clignoter à des fréquences différentes.