Raccordement : utiliser un câble connecteur Grove <-->  connecteur servomoteur et une alimentation externe




  

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

Microbit Micropython

Programme permettant de piloter un servomoteur avec  BPA et BPB


#pour servomoteur Feetech FS5115M ou autre

from microbit import *


pin1.set_analog_period_microseconds(20000)    #MLI période 20ms

impulsion = 1500


def set_servo(impulsion):

    alpha = (impulsion / 20000) * 100         #rapport cyclique de 0 à 100 %

    duty = (alpha / 100 ) * 1023              #rapport cyclique de 0 à 1023

    pin1.write_analog(duty)                   #écriture sur la broche P1 du rapport cyclique (MLI)

    print('impulsion=',impulsion, ' alpha=', alpha, ' duty=', duty)     #affichage sur la console REPL



while True:

    if button_a.was_pressed() and impulsion>500 :

        impulsion = impulsion - 100

        display.show('-', delay=90, clear=True)


    if button_b.was_pressed() and impulsion<2500:

        impulsion = impulsion + 100

        display.show('+', delay=90, clear=True)



    set_servo(impulsion)

    sleep(500)



Micro:bit

Programme permettant de piloter un servomoteur à partir d'un potentiomètre

Pour piloter un servomoteur, il faut générer une impulsion comprise entre 0.2 et 2.3 ms (par exemple) avec une période de 20ms.

  • pour 0.2 ms le rapport cyclique est de 0.2 / 20 = 0.01 (1%) soit write.analog( )  0.01 x 1023 = 10
  • pour 2.16 ms le rapport cyclique est de 2.3 / 20 = 0.115 (11.5%) soit write.analog( )  0.115 x 1023 = 118



from microbit import *

pin1.set_analog_period(20)   # MLI avec période de 20ms


def servo(angle):

    rapport_cyclique = ((118-10)/180) * angle + 10  # calcul du rapport cyclique entre 0 et 1023 (0-100%)

    pin1.write_analog(rapport_cyclique)             # écriture du rapport cyclique sur la broche P1


while True:

    pot = pin0.read_analog()                   

    angle = pot /1023 * 180 

    print ('angle = ',angle , 'deg')

    servo(angle)                                    # appel de la fonction angle

    sleep(500)


































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