.. note::
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie tiefer in Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie nach dem Kauf auftretende Probleme und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Vorschauen.
- **Spezielle Rabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und festlichen Aktionen teil.
👉 Bereit, mit uns zu entdecken und zu kreieren? Klicken Sie auf [|link_sf_facebook|] und treten Sie noch heute bei!
1.3.2 Servo
============
Einführung
--------------
In diesem Projekt lernen wir, wie man den Servo zum Drehen bringt.
Komponenten
----------------------------
.. image:: ../img/list_1.3.2.png
Schaltplan
-----------------
.. image:: ../img/image337.png
Experimentelle Vorgehensweise
-------------------------------------------
**Schritt 1:** Bauen Sie die Schaltung auf.
.. image:: ../img/image125.png
**Schritt 2**: Gehen Sie zum Ordner des Codes.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/nodejs/
**Schritt 3**: Führen Sie den Code aus.
.. raw:: html
.. code-block::
sudo node servo.js
Nach der Ausführung des Programms dreht sich der Servo von 0 Grad auf 180 Grad und dann von 180 Grad auf 0 Grad, zyklisch.
**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 Objekt der Klasse Gpio, ServoPin, um die Ausgabe 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))
}
Die Funktion, die den Winkel in die Impulsbreite umwandelt, ist hier definiert. Dies liegt daran, dass die Servo-Steuerungsfunktion ``servoWrite(pulseWidth)`` in der Gpio-Klasse die Impulsbreite anstelle des Winkels schreiben muss. Der Winkelbereich des von uns verwendeten Servos beträgt 0~180 und muss in den Bereich der Impulsbreite, 500~2500, umgewandelt werden.
.. 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 hin und her von 0 bis 180 Grad abweichen.
Phänomenbild
------------------
.. image:: ../img/image126.jpeg