Comment contrôler un servomoteur avec Raspberry Pi 4 ?

Servomoteur et Raspberry Pi 4

Qu’est-ce qu’un servomoteur ?

Un servomoteur ou asservissement est un dispositif électromécanique qui permet un contrôle très précis de la vitesse et du déplacement angulaire de son axe, généralement limité à 180 degrés. Il est principalement composé d’un moteur à courant continu, d’un réducteur de vitesse, d’un arbre, d’un circuit de commande et d’un mécanisme de rétroaction, généralement un potentiomètre.

Comment fonctionne un servomoteur ?

Un microcontrôleur, par exemple un Raspberry Pi 4, envoie une impulsion électrique (PWM) au servomoteur. Celui-ci lit l’amplitude de l’impulsion, à travers son circuit de commande, et entraîne le moteur à courant continu. Le ralentisseur démarre. La rotation de l’arbre fait tourner le bouton du potentiomètre en modifiant sa tension de sortie. Cette valeur est utilisée par le circuit de commande pour calculer la position, la direction et la vitesse angulaire de l’axe.

Ensuite, nous verrons comment faire tourner un servomoteur de 180 degrés sans interruption avec un Raspberry Pi 4.

Matériel nécessaire

Pour ce projet, nous utiliserons un Raspberry Pi 4 et un Micro Servo Sunfunder 9g SG90.

Servomoteur SunFounder

Câblage du circuit

Les servomoteurs sont généralement livrés avec trois fils de couleurs différentes : orange pour le contrôle ; rouge pour l’alimentation; et marron pour la terre.

Connectez les câbles du servomoteur aux broches du Raspberry comme suit : le câble orange à la broche GPIO 23 ; le fil noir avec l’une des broches GND ; et le fil rouge avec la broche 3.3V.

Code Python pour faire tourner un servomoteur de 180 degrés

import RPi.GPIO as GPIO
import time

SERVO_MIN_PULSE = 500
SERVO_MAX_PULSE = 2500
Servo = 23

def map(value, inMin, inMax, outMin, outMax):
    return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin

def setup():
    global p
    GPIO.setmode(GPIO.BCM)       
    GPIO.setup(Servo, GPIO.OUT)  
    GPIO.output(Servo, GPIO.LOW) 
    p = GPIO.PWM(Servo, 50)     
    p.start(0)                    

def setAngle(angle):      
    angle = max(0, min(180, angle))
    pulse_width = map(angle, 0, 180, SERVO_MIN_PULSE, SERVO_MAX_PULSE)
    pwm = map(pulse_width, 0, 20000, 0, 100)
    p.ChangeDutyCycle(pwm)
def loop():
    while True:
        for i in range(0, 181, 5):   
            setAngle(i)    
            time.sleep(0.002)
        time.sleep(1)
        for i in range(180, -1, -5): 
            setAngle(i)
            time.sleep(0.001)
        time.sleep(1)
def destroy():
    p.stop()
    GPIO.cleanup()

if __name__ == '__main__':    
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

Pour exécuter le code, accédez au bureau de Raspberry Pi OS. Cliquez sur le menu Raspberry > Programmation > mu. Copiez et collez le code. Cliquez sur Save et enregistrez le fichier avec une extension .py. Enfin, cliquez sur Run (Exécuter).

Notre vidéo YouTube: Faire tourner un servomoteur avec Raspberry Pi 4

Voir également :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut