Note

Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.

👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !

1.3.2 Servo

Introduction

Dans ce projet, nous allons apprendre à faire tourner le servo-moteur.

Required Components

Pour ce projet, nous avons besoin des composants suivants.

../_images/list_1.3.2.png

Il est définitivement pratique d’acheter un kit complet, voici le lien :

Nom

ÉLÉMENTS DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément en suivant les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Servo

ACHETER

Schematic Diagram

../_images/image337.png

Experimental Procedures

Étape 1 : Construire le circuit.

../_images/image125.png

Étape 2 : Aller dans le dossier du code.

cd ~/raphael-kit/nodejs/

Étape 3 : Exécuter le code.

sudo node servo.js

Après l’exécution du programme, le servo tournera de 0 degrés à 180 degrés, puis de 180 degrés à 0 degrés, en boucle.

Code

const Gpio = require('pigpio').Gpio;

SERVO_MIN_ANGLE = 0
SERVO_MAX_ANGLE = 180
SERVO_MIN_PULSE = 500
SERVO_MAX_PULSE = 2500

ServoPin = new Gpio(18,{mode: Gpio.OUTPUT})

function map(value, inMin, inMax, outMin, outMax){
    return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin
}

function angle2pulse(angle){
    return Math.floor(map(angle,SERVO_MIN_ANGLE,SERVO_MAX_ANGLE,SERVO_MIN_PULSE ,SERVO_MAX_PULSE))
}

let angle=90;
let step=5;
setInterval(() => {
    if(angle>=180||angle<=0){
        step=-step
    }
    angle+=step;
    ServoPin.servoWrite(angle2pulse(angle));
}, 20);

Explication du Code

const Gpio = require('pigpio').Gpio;

ServoPin = new Gpio(18,{mode: Gpio.OUTPUT})

Importer le module pigpio et créer un objet de la classe Gpio, ServoPin, pour contrôler la sortie de Gpio18.

SERVO_MIN_ANGLE = 0
SERVO_MAX_ANGLE = 180
SERVO_MIN_PULSE = 500
SERVO_MAX_PULSE = 2500

function map(value, inMin, inMax, outMin, outMax){
    return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin
}

function angle2pulse(angle){
    return Math.floor(map(angle,SERVO_MIN_ANGLE,SERVO_MAX_ANGLE,SERVO_MIN_PULSE ,SERVO_MAX_PULSE))
}

La fonction qui mappe l’angle à la largeur d’impulsion est définie ici. Ceci est nécessaire car la fonction de contrôle du servo servoWrite(pulseWidth) encapsulée dans la classe Gpio doit écrire la largeur d’impulsion au lieu de l’angle. La plage d’angles du servo que nous utilisons est de 0 à 180, qui doit être mappée à la plage de largeur d’impulsion, de 500 à 2500.

let angle=90;
let step=5;
setInterval(() => {
    if(angle>=180||angle<=0){
        step=-step
    }
    angle+=step;
    ServoPin.servoWrite(angle2pulse(angle));
}, 20);

Laisser l’angle du servo dévier d’avant en arrière de 0 à 180.

Photo du Phénomène

../_images/image126.jpeg