Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

1.3.2 Servo

Einführung

In diesem Projekt lernen wir, wie man den Servo zum Drehen bringt.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/list_1.3.2.png

Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können diese auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Servo

KAUFEN

Schaltplan

../_images/image337.png

Experimentelle Verfahren

Schritt 1: Bauen Sie den Schaltkreis.

../_images/image125.png

Schritt 2: Wechseln Sie in das Verzeichnis mit dem Code.

cd ~/raphael-kit/c/1.3.2

Schritt 3: Kompilieren Sie den Code.

gcc 1.3.2_Servo.c -lwiringPi

Schritt 4: Führen Sie die ausführbare Datei aus.

sudo ./a.out

Nachdem das Programm ausgeführt wurde, wird der Servo von 0 Grad auf 180 Grad und dann von 180 Grad auf 0 Grad zirkulär drehen.

Bemerkung

Wenn es nach dem Starten nicht funktioniert oder eine Fehlermeldung erscheint: "wiringPi.h: Datei oder Verzeichnis nicht gefunden", beziehen Sie sich bitte auf Installieren und Überprüfen von 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;
}

Code-Erklärung

long Map(long value,long fromLow,long fromHigh,long toLow,long toHigh){
    return (toHigh-toLow)*(value-fromLow) / (fromHigh-fromLow) + toLow;
}

Erstellen Sie eine Map()-Funktion, um Werte im folgenden Code zuzuordnen.

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));
}

Erstellen Sie eine Funktion namens setAngle(), um dem Servo einen Winkel zuzuweisen.

softPwmWrite(pin,Map(angle,0,180,5,25));

Diese Funktion kann den Tastgrad des PWM ändern.

Um den Servo auf 0 ~ 180 ° zu drehen, sollte die Impulsbreite im Bereich von 0,5ms ~ 2,5ms variieren, wenn die Periode 20ms beträgt; in der Funktion softPwmCreate() haben wir festgelegt, dass die Periode 200x100us=20ms beträgt, daher müssen wir 0 ~ 180 auf 5x100us ~ 25x100us mappen.

Der Prototyp dieser Funktion ist unten dargestellt.

int softPwmCreate(int pin, int initialValue, int pwmRange);
  • pin: Jeder GPIO-Pin des Raspberry Pi kann als PWM-Pin festgelegt werden.

  • initialValue: Die anfängliche Impulsbreite beträgt initialValue mal 100us.

  • pwmRange: Die Periode des PWM beträgt pwmRange mal 100us.

Phänomen-Bild

../_images/image126.jpeg