Hierdie tutorialie is deel van: Servomotors
Alle video's wat verband hou met servomotors, word hier gelys. Skakels na ander video's is onder hierdie artikel.
Beheer van 'n Servo met Potensiometer en LCD1602 deur Arduino te gebruik
In hierdie tutoriaal gaan ons leer hoe om 'n servomotor met behulp van 'n potensiometer te beheer en die potensiometerwaarde sowel as die servo-hoek op 'n LCD1602-skerm te vertoon. Hierdie projek is 'n uitstekende manier om verskeie komponente te kombineer en te verstaan hoe hulle saam kan werk om 'n interaktiewe stelsel te skep. Teen die einde van hierdie tutoriaal sal jy 'n werkende opstelling hê wat jou toelaat om die hoek van die servo met 'n knop aan te pas terwyl jy terselfdertyd die waardes op die LCD vertoon.

Voordat ons in die bedrading en kode duik, is dit nuttig om die komponente wat ons gaan gebruik te verstaan. Die potensiometer dien as 'n verstelbare weerstand wat die spanningsuitset kan aanpas op grond van sy posisie, wat ons sal gebruik om die servo se hoek te bepaal. Die LCD1602 sal die huidige potensiometerwaarde en die ooreenstemmende hoek van die servo vertoon. Jy kan na die video verwys (in video by 00:00) vir 'n visuele gids van die hele proses.
Hardeware Verduidelik
Die hoofkomponente wat ons in hierdie projek sal gebruik, is:
- Arduino-bord: Dit sal dien as die beheerder vir die hele stelsel, wat insette van die potensiometer verwerk en die servo se posisie op grond van daardie insette beheer.
- Potensiometer: 'n 10k ohm potensiometer sal gebruik word om 'n analoog inset aan die Arduino te verskaf. Dit het drie terminale: een gekoppel aan 5V, een aan grond, en die middelste een gekoppel aan 'n analoog pen (A0) op die Arduino.
- Servomotor: Hierdie servo sal beheer word deur 'n hoek aan hom te stuur op grond van die potensiometer se posisie. Die sein-draad koppel aan 'n digitale pen op die Arduino (pen 9).
- LCD1602-vertoning: Hierdie skerm sal die potensiometerwaarde en die hoek van die servo vertoon. Dit koppel aan verskeie digitale penne op die Arduino vir beheer.
Die potensiometer werk deur die weerstand en dus die spanning by sy middelste terminaal te varieer, wat die Arduino as 'n analoog inset lees. Die servomotor word beheer deur 'n spesifieke polsswydte-modulasie (PWM) sein wat ooreenstem met die verlangde hoek na hom te stuur. Die LCD1602 gebruik 'n biblioteek wat ons in staat stel om sy vertoning maklik te beheer en inligting oor die potensiometer en servo uit te voer.
Datablad Besonderhede
| Vervaardiger | verskeie |
|---|---|
| Deelnommer | LM016L |
| Logika/IO-spanning | 5 V |
| Toevoerspanning | 4.5 – 5.5 V |
| Uitsetstroom (per kanaal) | tot 2 mA |
| Piekstroom (per kanaal) | 20 mA |
| PWM-frekwensie riglyn | 50 Hz |
| Inset-logika drempels | 0.3 x Vcc (laag), 0.7 x Vcc (hoog) |
| Spanningsval / RDS(on) / versadiging | 0.2 V maks |
| Termiese limiete | 85 °C |
| Pakket | 16-pen DIP |
| Notas / variante | 16x2 karakter vertoning |
- Koppel die potensiometer se middelste pen aan analoog pen A0.
- Verseker dat die servo met 'n 5V-toevoer aangedryf word en aan digitale pen 9 gekoppel is.
- Gebruik die toepaslike biblioteek vir die LCD en verseker dat dit in jou Arduino IDE ingesluit is.
- Wees versigtig met die bedrading om kortsluitings te vermy, veral met die servo-verbindings.
- Kontroleer dat die LCD korrek in die kode geïnisialiseer is om vertoningsprobleme te vermy.

Bedradingsinstruksies
Om die komponente saam te bedraad, begin deur die potensiometer te koppel. Koppel een buitenste pen van die potensiometer aan die 5V-pen op die Arduino, en die ander buitenste pen aan die grond. Die middelste pen gaan na analoog pen A0.
Volgende, vir die servomotor, koppel die bruin of swart draad aan grond, die rooi draad aan die 5V-pen, en die geel of oranje draad aan digitale pen 9 op die Arduino. Vir die LCD1602, koppel die VDD-pen aan 5V, RW aan grond, en V0 aan die middelste pen van die potensiometer vir kontrasaanpassing. Koppel RS aan pen 12, EN aan pen 11, D4 aan pen 5, D5 aan pen 4, D6 aan pen 3, en D7 aan pen 2.
Dit word ook aanbeveel om 'n 220-ohm weerstand in serie met die LED in te sluit as jy een gebruik, en dit aan die 5V-toevoer te koppel. Daarbenewens kan 'n 470 µF kapasitor oor die krag en grond van die servo gekoppel word om enige geraas tydens werking te filter.
Kode Voorbeelde & Deurloop
Die kode begin deur die nodige biblioteke in te sluit en die penne vir die LCD en servo te initialiseer. Die volgende uittreksel toon die opstelling van die LCD en servo:
void setup() {
lcd.begin(16, 2);
myservo.attach(9); // koppel die servo op pen 9 aan die servo-objek
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}
Hierdie uittreksel initialiseer die LCD vir 16 kolomme en 2 rye, koppel die servo aan pen 9, en vertoon 'n welkomsboodskap op die LCD. Die lcd.clear()-funksie verseker dat enige vorige boodskappe verwyder word.
Volgende lees die lus voortdurend die potensiometer se waarde en werk die servo se posisie en LCD-vertoning op:
void loop() {
val = analogRead(potpin); // lees die waarde van die potensiometer
angle = map(val, 0, 1023, 0, 180); // skaal dit om dit met die servo te gebruik
myservo.write(angle); // stel die servo-posisie volgens die geskaalde waarde
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Waarde:");
lcd.setCursor(11, 0);
lcd.print(val);
lcd.setCursor(0, 1);
lcd.print("Hoek :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
}
Hierdie lus lees die potensiometerwaarde, skaal dit na 'n ooreenstemmende hoek vir die servo, en werk die LCD-skerm op met beide die potensiometerwaarde en die servo-hoek. Die delay(500) aan die einde van die lus verhoed dat die skerm te vinnig opdateer.
Demonstrasie / Wat om te Verwacht
Wanneer jy die stelsel aanskakel, sal die LCD "Robojax Servo Knob" vir 2 sekondes vertoon, gevolg deur die potensiometerwaarde en die servo-hoek. Soos jy die potensiometer draai, sal die servo-hoek dienooreenkomstig verander, en die nuwe potensiometerwaarde sal op die LCD weerspieël word. As jy enige onverwagte gedrag ervaar, soos die servo wat in die verkeerde rigting beweeg, kontroleer die bedrading van die potensiometer en servo-verbindings (in video by 10:00).
Hierdie handleiding is deel van: Servomotors
- Beheer van 'n Servo met Drukkoppe deur Arduino te gebruik
- 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)
- Beheer van 'n Servo met 'n Potensiometer deur Arduino te gebruik
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Arduino Servo Motor Beheer met 'n Potensiometer
- Beheer van Servo Posisie met Handgebare vir Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Hoe om 'n Kontinu 360° Servo met Arduino te gebruik
- Arduino-kode en video vir PCA9685 16-kanaal 12-bis Servo-beheerder V1
- Bou 'n Arduino Servo-wisselskakelaar met 'n drukknoppie
/*
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
}
Hulpbronne en verwysings
-
BuitenburgLCD1602 library (from GitHub)github.com
-
BuitenburgUsing LCD1602 LCD display for Arduinoyoutube.com
Lêers📁
Geen lêers beskikbaar.