.. 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_js: 1.3.2 Servo ============ Einführung ---------- In diesem Projekt werden wir lernen, wie man den Servo dreht. Benötigte Komponenten --------------------- Für dieses Projekt benötigen wir folgende Komponenten: .. image:: ../img/list_1.3.2.png Es ist definitiv praktisch, ein ganzes Kit 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 sie auch einzeln über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENEINFÜHRUNG - 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**: Gehen Sie zum Ordner mit dem Code. .. raw:: html .. code-block:: cd ~/raphael-kit/nodejs/ **Schritt 3**: Führen Sie den Code aus. .. raw:: html .. code-block:: sudo node servo.js 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. **Code** .. code-block:: js const Gpio = require('pigpio').Gpio; SERVO_MIN_ANGLE = 0 SERVO_MAX_ANGLE = 180 SERVO_MIN_PULSE = 500 SERVO_MAX_PULSE = 2500 ServoPin = new Gpio(18,{mode: Gpio.OUTPUT}) function map(value, inMin, inMax, outMin, outMax){ return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin } function angle2pulse(angle){ return Math.floor(map(angle,SERVO_MIN_ANGLE,SERVO_MAX_ANGLE,SERVO_MIN_PULSE ,SERVO_MAX_PULSE)) } let angle=90; let step=5; setInterval(() => { if(angle>=180||angle<=0){ step=-step } angle+=step; ServoPin.servoWrite(angle2pulse(angle)); }, 20); **Code-Erklärung** .. code-block:: js const Gpio = require('pigpio').Gpio; ServoPin = new Gpio(18,{mode: Gpio.OUTPUT}) Importieren Sie das pigpio-Modul und erstellen Sie ein Gpio-Klassenobjekt, ServoPin, um den Ausgang von Gpio18 zu steuern. .. code-block:: js SERVO_MIN_ANGLE = 0 SERVO_MAX_ANGLE = 180 SERVO_MIN_PULSE = 500 SERVO_MAX_PULSE = 2500 function map(value, inMin, inMax, outMin, outMax){ return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin } function angle2pulse(angle){ return Math.floor(map(angle,SERVO_MIN_ANGLE,SERVO_MAX_ANGLE,SERVO_MIN_PULSE ,SERVO_MAX_PULSE)) } Hier wird die Funktion definiert, die den Winkel auf die Impulsbreite abbildet. Das liegt daran, dass die im Gpio-Klasse gekapselte Servosteuerfunktion ``servoWrite(pulseWidth)`` die Impulsbreite anstatt des Winkels schreiben muss. Der Winkelbereich des von uns verwendeten Servos liegt zwischen 0~180, welcher auf den Bereich von pulseWidth, 500~2500, abgebildet werden muss. .. code-block:: js let angle=90; let step=5; setInterval(() => { if(angle>=180||angle<=0){ step=-step } angle+=step; ServoPin.servoWrite(angle2pulse(angle)); }, 20); Lassen Sie den Servowinkel zwischen 0 und 180 Grad hin und her ablenken. Phänomen-Bild -------------------- .. image:: ../img/image126.jpeg