Raccordement :
Pour le servomoteur Feetech FS5115M
- 0 à 180 ° --> 500 us à 2500 us
- 4,8 à 6V
- Datasheet
|
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
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 shield base 1)
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 cycliques 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