.. note::
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 [|link_sf_facebook|] und treten Sie heute bei!
.. _1.3.2_c:
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.
.. image:: ../img/list_1.3.2.png
Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- ARTIKEL IN DIESEM KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können diese auch einzeln über die untenstehenden Links kaufen.
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENBESCHREIBUNG
- KAUF-LINK
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_servo`
- |link_servo_buy|
Schaltplan
-----------------
.. image:: ../img/image337.png
Experimentelle Verfahren
--------------------------
**Schritt 1:** Bauen Sie den Schaltkreis.
.. image:: ../img/image125.png
**Schritt 2**: Wechseln Sie in das Verzeichnis mit dem Code.
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/1.3.2
**Schritt 3**: Kompilieren Sie den Code.
.. raw:: html
.. code-block::
gcc 1.3.2_Servo.c -lwiringPi
**Schritt 4**: Führen Sie die ausführbare Datei aus.
.. raw:: html
.. code-block::
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.
.. note::
Wenn es nach dem Starten nicht funktioniert oder eine Fehlermeldung erscheint: \"wiringPi.h: Datei oder Verzeichnis nicht gefunden\", beziehen Sie sich bitte auf :ref:`install_wiringpi`.
**Code**
.. code-block:: c
#include
#include
#include
#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**
.. code-block:: c
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.
.. code-block:: c
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.
.. code-block:: c
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.
.. code-block::
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
------------------
.. image:: ../img/image126.jpeg