Skip to content

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.