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 un servo-moteur.
Required Components
Dans ce projet, nous avons besoin des composants suivants.
Il est définitivement pratique d’acheter un kit complet, voici le lien :
Name |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Vous pouvez également les acheter séparément aux liens ci-dessous.
INTRODUCTION DES COMPOSANTS |
LIEN D’ACHAT |
|---|---|
Schematic Diagram
Experimental Procedures
Step 1: Construisez le circuit.
Step 2: Accédez au dossier du code.
cd ~/raphael-kit/c/1.3.2
Step 3: Compilez le code.
gcc 1.3.2_Servo.c -lwiringPi
Step 4: Exécutez le fichier exécutable.
sudo ./a.out
Après l’exécution du programme, le servo va tourner de 0 degrés à 180 degrés, puis de 180 degrés à 0 degrés, en boucle.
Note
Si cela ne fonctionne pas après exécution, ou s’il y a un message d’erreur : « wiringPi.h : Aucun fichier ou répertoire de ce type », veuillez vous référer à Installer et vérifier WiringPi.
Code
#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>
#define ServoPin 1 //define the servo to GPIO1
long Map(long value,long fromLow,long fromHigh,long toLow,long toHigh){
return (toHigh-toLow)*(value-fromLow) / (fromHigh-fromLow) + toLow;
}
void setAngle(int pin, int angle){ //Create a funtion to control the angle of the servo.
if(angle < 0)
angle = 0;
if(angle > 180)
angle = 180;
softPwmWrite(pin,Map(angle, 0, 180, 5, 25));
}
int main(void)
{
int i;
if(wiringPiSetup() == -1){ //when initialize wiring failed,print message to screen
printf("setup wiringPi failed !");
return 1;
}
softPwmCreate(ServoPin, 0, 200); //initialize PMW pin of servo
while(1){
for(i=0;i<181;i++){ // Let servo rotate from 0 to 180. setAngle(ServoPin,i);
delay(2);
}
delay(1000);
for(i=181;i>-1;i--){ // Let servo rotate from 180 to 0. setAngle(ServoPin,i);
delay(2);
}
delay(1000);
}
return 0;
}
Explication du Code
long Map(long value,long fromLow,long fromHigh,long toLow,long toHigh){
return (toHigh-toLow)*(value-fromLow) / (fromHigh-fromLow) + toLow;
}
Créer une fonction Map() pour mapper la valeur dans le code suivant.
void setAngle(int pin, int angle){ //Create a funtion to control the angle of the servo.
if(angle < 0)
angle = 0;
if(angle > 180)
angle = 180;
softPwmWrite(pin,Map(angle, 0, 180, 5, 25));
}
Créer une fonction, setAngle() pour écrire l’angle sur le servo.
softPwmWrite(pin,Map(angle,0,180,5,25));
Cette fonction peut changer le cycle de service du PWM.
Pour faire tourner le servo de 0 à 180 °, la largeur d’impulsion doit changer
dans la plage de 0,5 ms à 2,5 ms lorsque la période est de 20 ms ; dans la
fonction, softPwmCreate() , nous avons défini que la période est
200x100us=20ms, nous devons donc mapper 0 ~ 180 à 5x100us ~ 25x100us.
Le prototype de cette fonction est montré ci-dessous.
int softPwmCreate(int pin,int initialValue,int pwmRange);
pin: N’importe quelle broche GPIO du Raspberry Pi peut être définie comme broche PWM.initialValue: La largeur d’impulsion initiale est cette valeur initiale multipliée par 100us.pwmRange: la période du PWM est cette plage PWM multipliée par 100us.
Photo du Phénomène