.. 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