Position du servo fixée par résistance variable¶
Ce que l'on va faire ici¶
Dans ce programme Micropython, nous allons fixer la position d'un servomoteur en fonction de la valeur d'une résistance variable.
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 résistance variable
- 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 à une fréquence suffisamment élevée pour reléter instantanément la valeur de la résistance variable.
-
la valeur du duty cyle en µs est calculée à partir de la mesure de la résistance variable et ré-échelonnée de 0-65635 (16 bits) vers 500-2500µs (limite position du servo)
# code Micropython - www.micropython.fr - CC-BY-SA
from machine import Pin, Timer,PWM, ADC # 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
sensor=ADC(0) # capteur connecté sur ADC0
# 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
# la fonction pwm.duty_ns() fixe largeur en ns... utile pour servo
duty_us=rescale(sensor.read_u16(),0,65535,500,2500)
pwm.duty_ns(int(duty_us*1000)) # doit être un int
# rappel fonction loop à fréquence voulue
timer.init(freq=20, callback=loop)
Résultat¶
Le servomoteur prend une position fonction de la position de la résistance variable.
Info
N'hésitez pas à modifier la valeur de la fréquence de clignotement pour voir la LED clignoter à des fréquences différentes.