Suchcode

Einen Servo mit Potentiometer und LCD1602 mit Arduino steuern

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

Herstellerverschiedene
TeilenummerLM016L
Logik-/I/O-Spannung5 V
Versorgungsspannung4,5 - 5,5 V
Ausgangsstrom (pro Kanal)bis zu 2 mA
Spitzenstrom (pro Kanal)20 mA
Hinweise zur PWM-Frequenz50 Hz
Eingangslogik-Schwellenwerte0,3 × Vcc(niedrig), 0.7 x VKopie(hoch)
Spannungsabfall über RDS(on)/ Sättigung0,2 V max
Thermische Grenzwerte85 °C
Paket16-poliger DIP
Anmerkungen / Varianten16x2-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.
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot

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

Bilder

SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot
97-This is the Arduino code for controlling a servo with a potentiometer and an LCD1602.
Sprache: C++
/*
 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

Dateien📁

Keine Dateien verfügbar.