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.

../_images/list_1.3.2.png

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

Name

ITEMS IN THIS KIT

LINK

Raphael Kit

337

Raphael Kit

Vous pouvez également les acheter séparément aux 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

Step 1: Construisez le circuit.

../_images/image125.png

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

../_images/image126.jpeg