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.
Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Sie können diese auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
Schaltplan
Experimentelle Verfahren
Schritt 1: Bauen Sie den Schaltkreis.
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