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