Dieses Tutorial ist Teil von: Servomotoren
Hier finden Sie alle relevanten Videos zum Thema Servomotoren. Links zu weiteren Videos finden Sie unter diesem Artikel.
Einen Servo mit Potentiometer und LCD1602 mit Arduino steuern
In diesem Tutorial lernen wir, wie man einen Servomotor mit einem Potentiometer steuert und dabei den Potentiometerwert sowie den Winkel des Servos auf einem LCD1602-Display anzeigt. Dieses Projekt ist eine großartige Möglichkeit, mehrere Komponenten zu kombinieren und zu verstehen, wie sie zusammenarbeiten, um ein interaktives System zu schaffen. Am Ende dieses Tutorials haben Sie eine funktionierende Einrichtung, mit der Sie den Winkel des Servos mit einem Drehknopf einstellen können, während die Werte gleichzeitig auf dem LCD angezeigt werden.

Bevor wir uns mit der Verdrahtung und dem Code befassen, ist es hilfreich, die Komponenten zu verstehen, die wir verwenden werden. Das Potentiometer fungiert als variabler Widerstand, der die Ausgangsspannung abhängig von seiner Stellung anpassen kann; diese verwenden wir, um den Winkel des Servos zu bestimmen. Das LCD1602 zeigt den aktuellen Potentiometerwert und den entsprechenden Winkel des Servos an. Für eine visuelle Anleitung des gesamten Ablaufs können Sie sich das Video (bei 00:00) ansehen.
Hardware erklärt
Die Hauptkomponenten, die wir in diesem Projekt verwenden werden, sind:
- Arduino-Board:Dies dient als Steuerung für das gesamte System, verarbeitet die Eingaben des Potentiometers und steuert die Position des Servos anhand dieser Eingaben.
- Potentiometer:Ein 10-kΩ-Potentiometer wird verwendet, um dem Arduino einen analogen Eingang bereitzustellen. Es hat drei Anschlüsse: einer ist mit 5V verbunden, einer mit Masse, und der mittlere ist mit dem analogen Pin (A0) am Arduino verbunden.
- Servomotor:Dieses Servo wird gesteuert, indem ihm ein Winkel entsprechend der Position des Potentiometers gesendet wird. Der Signaldraht wird mit einem digitalen Pin des Arduino verbunden (Pin 9).
- LCD1602-Anzeige:Dieses Display zeigt den Wert des Potentiometers und den Winkel des Servos an. Es wird zur Steuerung an mehrere digitale Pins des Arduino angeschlossen.
Das Potentiometer funktioniert, indem es den Widerstand und damit die Spannung an seinem mittleren Anschluss verändert, die der Arduino als analogen Eingang einliest. Der Servomotor wird gesteuert, indem ihm ein bestimmtes Pulsweitenmodulations-(PWM)-Signal gesendet wird, das dem gewünschten Winkel entspricht. Das LCD1602 verwendet eine Bibliothek, die es uns ermöglicht, sein Display einfach zu steuern und Informationen zum Potentiometer und Servo auszugeben.
Details zum Datenblatt
| Hersteller | verschiedene |
|---|---|
| Teilenummer | LM016L |
| Logik-/I/O-Spannung | 5 V |
| Versorgungsspannung | 4,5 - 5,5 V |
| Ausgangsstrom (pro Kanal) | bis zu 2 mA |
| Spitzenstrom (pro Kanal) | 20 mA |
| Hinweise zur PWM-Frequenz | 50 Hz |
| Eingangslogik-Schwellenwerte | 0,3 × Vcc(niedrig), 0.7 x VKopie(hoch) |
| Spannungsabfall über RDS(on)/ Sättigung | 0,2 V max |
| Thermische Grenzwerte | 85 °C |
| Paket | 16-poliger DIP |
| Anmerkungen / Varianten | 16x2-Zeichenanzeige |
- Verbinden Sie den mittleren Pin des Potentiometers mit dem analogen Pin A0.
- Stellen Sie sicher, dass das Servo mit einer 5V-Versorgung betrieben wird und an den digitalen Pin 9 angeschlossen ist.
- Verwenden Sie die passende Bibliothek für das LCD und stellen Sie sicher, dass sie in Ihrer Arduino-IDE enthalten ist.
- Achten Sie auf die Verkabelung, um Kurzschlüsse zu vermeiden, insbesondere bei den Servoanschlüssen.
- Stellen Sie sicher, dass das LCD im Code korrekt initialisiert ist, um Anzeigeprobleme zu vermeiden.

Verdrahtungsanleitung
Um die Komponenten zu verdrahten, beginnen Sie damit, das Potentiometer anzuschließen. Verbinden Sie einen äußeren Pin des Potentiometers mit dem 5V-Pin am Arduino und den anderen äußeren Pin mit der Masse. Der mittlere Pin geht an den analogen PinA0.
Als Nächstes schließe beim Servomotor das braune oder schwarze Kabel an Masse, das rote Kabel an den 5V-Pin und das gelbe oder orangefarbene Kabel an den digitalen Pin an.9am Arduino. Für das LCD1602 schließen Sie dieVDDPin an 5 V,RWauf den Boden, undV0an den mittleren Pin des Potentiometers zur Kontrasteinstellung. VerbindenRSanheften12,ENanheften11,D4anheften5,D5befestigen4,D6anheften3, undD7anheften2.
Es wird außerdem empfohlen, einen 220-Ohm-Widerstand in Reihe mit der LED einzubauen, falls Sie eine verwenden, und diese an die 5‑V‑Versorgung anzuschließen. Zusätzlich kann ein 470 µF‑Kondensator zwischen Versorgungsspannung und Masse des Servos angeschlossen werden, um während des Betriebs Störgeräusche zu filtern.
Codebeispiele & Schritt-für-Schritt-Anleitung
Der Code beginnt mit dem Einbinden der notwendigen Bibliotheken und dem Initialisieren der Pins für das LCD und den Servo. Der folgende Auszug zeigt die Einrichtung des LCDs und des Servos:
void setup() {
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}Dieser Codeabschnitt initialisiert das LCD für 16 Spalten und 2 Zeilen, schließt den Servo an Pin 9 an und zeigt eine Willkommensnachricht auf dem LCD an. Daslcd.clear()Funktion stellt sicher, dass alle vorherigen Nachrichten entfernt werden.
Anschließend liest die Schleife fortlaufend den Wert des Potentiometers und aktualisiert die Position des Servos sowie die LCD-Anzeige:
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
lcd.setCursor(11, 0);
lcd.print(val);
lcd.setCursor(0, 1);
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
}Diese Schleife liest den Wert des Potentiometers, ordnet ihn einem entsprechenden Winkel für den Servo zu und aktualisiert das LCD-Display sowohl mit dem Potentiometerwert als auch mit dem Servowinkel. Diedelay(500)Am Ende der Schleife verhindert, dass die Anzeige zu schnell aktualisiert wird.
Demonstration / Was Sie erwartet
Wenn Sie das System mit Strom versorgen, zeigt das LCD "Robojax Servo Knob" für 2 Sekunden an, gefolgt vom Potentiometerwert und dem Servowinkel. Wenn Sie das Potentiometer drehen, ändert sich der Servowinkel entsprechend und der neue Potentiometerwert wird auf dem LCD angezeigt. Falls Sie ein unerwartetes Verhalten feststellen, etwa dass sich der Servo in die falsche Richtung bewegt, überprüfen Sie die Verkabelung des Potentiometers und der Servoanschlüsse (im Video bei 10:00).
Dieses Tutorial ist Teil von: Servomotoren
- Einen Servo mit Drucktastern mit einem Arduino steuern
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Einen Servo mit einem Potentiometer und einem Arduino steuern
- Steuerung von Servomotoren mit einer Infrarotfernbedienung und Arduino
- Arduino Servomotorsteuerung mit einem Potentiometer
- Steuerung der Servoposition mit Handgesten für Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Arduino-Code und Video für PCA9685 16-Kanal 12-Bit Servo-Controller V1
- Build an Arduino Servo Toggle Switch with a Push Button
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 November 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
*/
// May 20, 2018 20:08
// Written by Ahmad S. for Robojax.com at Ajax, Ontario, Canada
// Watch the video for this code at https://youtu.be/DN1LPMSZtNA
// This code is taken from http://robojax.com/learn/arduino
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// start of servo settings *******
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int angle; // the angle servo is sent to
// END of servo settings *******
void setup() {
// Robojax Servo knob with LCD1602 Test
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Robojax Servo knob with LCD1602 Test
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}
void loop() {
// Robojax Servo knob with LCD1602 Test
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
// set the cursor to column 0, line 1
lcd.setCursor(11, 0);
lcd.print(val);
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
// Robojax Servo knob with LCD1602 Test
}
Ressourcen & Referenzen
-
ExternLCD1602 Bibliothek (von GitHub)github.com
-
ExternVerwendung des LCD1602 LCD-Displays für Arduinoyoutube.com
Dateien📁
Keine Dateien verfügbar.