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.
Il est définitivement pratique d’acheter un kit complet, voici le lien :
Nom |
ÉLÉMENTS DANS CE KIT |
LIEN |
|---|---|---|
Kit Raphael |
337 |
Vous pouvez également les acheter séparément en suivant les liens ci-dessous.
INTRODUCTION DES COMPOSANTS |
LIEN D’ACHAT |
|---|---|
Schematic Diagram
Experimental Procedures
Étape 1 : Construire le circuit.
É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