Raccordement :

  • câble connecteur Grove <-->  connecteur servomoteur
  • adaptateur 3.3-5V
  • alimentation externe 5V


    

Pilotage : il faut générer un signal MLI (Modulation de Largeur d'Implusion, PWM Pulse Width Modulation en anglais) de période 20ms (= 50Hz)

Principe général (attention, les valeurs peuvent varier en fonction du servomoteur) :


Programme permettant de piloter un servomoteur en position et vitesse

Programme permettant de piloter un de piloter un servomoteur avec 2 boutons-poussoirs


Pour le servomoteur Feetech FS5115M

    • 0 à 180 ° --> 500 us à 2500 us
    • 4,8 à 6V
    • Datasheet



ESP32 Micropython

Programme permettant de piloter un servomoteur en position et vitesse

La commande  s'effectue à l'aide de l'instruction suivante :       servo.deplacement ( Angle départ, Angle voulu, Temps déplacement )      avec :


Angle départ

en °

exemple 0 à 180°

Angle voulu

en °

exemple : 0 à 180°

Temps déplacement


en ms



# pour servomoteur Feetech FS5115M

from machine import Pin, PWM

from time import *


servo1 = PWM(Pin(17), 50)   # MLI période 20ms = 50Hz sur broche 17 (D4)


def rp_cy(angle):

    temps_haut = (2000/180) * angle + 500

    rp_cyclique = (temps_haut / 20000) * 100

    return int((rp_cyclique / 100) * 1023)


def servo_deplacement(angle_depart, angle_voulu, temps_deplacement_ms):

    delta = angle_voulu - angle_depart

    nb_iteration = int(temps_deplacement_ms / 10)

    print('delta=', delta, ' nb_iteration=', nb_iteration)


    for i in range(nb_iteration):

        angle_depart = angle_depart + (delta / nb_iteration)

        print('angle=', angle_depart, ' i=', i)

        servo1.duty(rp_cy(angle_depart))                         # Ecriture du rapport cyclique

        sleep_ms(10)


while True:

    servo_deplacement(0, 180, 500)      # Déplacement de la position 0° à la position 180° en 500ms

    sleep_ms(2000)

    servo_deplacement(180, 0, 500)

    sleep_ms(1000)




ESP32 Micropython

Programme permettant de piloter un de piloter un servomoteur avec 2 boutons-poussoirs


from machine import Pin, PWM

from time import *


servo1 = PWM(Pin(17), 50)   # MLI période 20ms = 50Hz sur broche 17 (D4)

bp_1 = Pin(26, Pin.IN)      # crée une broche d'entrée sur la broche 26 (D2)

bp_2 = Pin(25, Pin.IN)      # crée une broche d'entrée sur la broche 26 (D3)


duree_imp = 1500


def set_servo(duree_imp):

    rp_cyclique = (duree_imp / 20000) * 100                #rapport cyclique de 0 à 100 %

    rp_cyclique_esp = int((rp_cyclique / 100 ) * 1023)     #rapport cyclique de 0 à 1023

    servo1.duty(rp_cyclique_esp)                           #écriture du rapport cyclique

    print('duree_imp = ',duree_imp, ' rp_cyclique = ', rp_cyclique, ' rp_cyclique_esp = ', rp_cyclique_esp)     


while True:

    if bp_1.value() == 1 and duree_imp>500 :

        duree_imp = duree_imp - 100

   

    if bp_2.value() == 1 and duree_imp<2500:

        duree_imp = duree_imp + 100

       

    set_servo(duree_imp)

    sleep_ms(500)






















































































Créé avec HelpNDoc Personal Edition: Environnement de création d'aide complet