Ẹkọ 86: Ṣàkóso ipò mọ́tọ̀ servo ní lílo potentiometer
Fojúrú ọ̀rọ̀ kan tí o rọrùn kí o sì wo apá ẹ̀rọ kan tí ó ń tẹ̀lé gbogbo ìgbésẹ̀ rẹ pẹ̀lú ìpéye. Ìyẹn ni iṣẹ́ àgbà ti ìpapọ̀ potentiometer pẹ̀lú servo motor. Iṣẹ́ yìí, tí ó jẹ́ apá kan ti Arduino Step by Step Course láti ọwọ́ Robojax, ń ṣàfihàn èròǹgbà pàtàkì tí ó wúlò gan-an nínú ẹ̀kọ́ ẹ̀rọ: yíyí input analog padà sí ìṣísẹ̀ tí ó péye. Ìwọ yóò kọ́ bí a ṣe ń ka folti tí ó yàtọ̀ láti potentiometer, bí a ṣe ń ṣàtúnṣe iye yẹn sí àwọn igun, àti bí a ṣe ń pàṣẹ fún servo motor láti yí padà sí ipò pípéye yẹn. Èyí ni ọ̀nà rẹ sí kíkọ́ àwọn iṣẹ́ tí ó ní ìmọ̀lára àti ìbáṣepọ̀ níbi tí ìṣàkóso ọwọ́ ti pàdé automation.

Àwọn ìlò fún ọgbọ́n yìí pọ̀ gan-an àti pé ó wúlò. Èyí ni díẹ̀ lára àwọn èròǹgbà láti mú ìmísí wá fún ọ:
- Ìṣàkóso Apá Ẹ̀rọ Robotic: Lo potentiometer láti fi ọwọ́ ṣètò ipò kọ̀ọ̀kan ti apá ẹ̀rọ robotic fún iṣẹ́ gbígbé àti fífi sílẹ̀ pípéye.
- Ètò Kamẹra Pan àti Tilt: Kọ́ àgbéjáde kamẹra tí a ń ṣàkóso láti ọ̀nà jíjìn fún time-lapses tàbí ìṣọ́, tí ó ń yí padà pẹ̀lú ìrọrùn nígbà tí a bá yí dial kan.
- Àfọwọ́kọ Gauge Analog: Ṣẹ̀dá gauge dashboard tí ó jẹ́ ti ara (bíi speedometer tàbí dial ìwọ̀n otútù) tí ó ń gbé padà nígbà tí data sensor bá wá, pẹ̀lú potentiometer tí ó ń ṣiṣẹ́ bíi ohun èlò ìṣàkóso ọwọ́ tàbí ìtúnṣe.
- Àwọn Iṣẹ́ Ọnà Àwòrán Tí Ó ń Báṣepọ̀: Ṣẹ̀dá àwọn ere tí ó ń yí padà tí ó ń dáhùn sí ohun tí olùwòran bá ṣe, níbi tí yíyí dial kan ti ń yí ipò àwọn apá tí ó ń gbé padà.
- Ìṣàkóso Ọkọ̀ Awoṣe: Ṣàkóso igun ìṣàkóso ọkọ̀ ayọkẹlẹ awoṣe tàbí ọkọ̀ ojú omi láti ọ̀nà jíjìn, tí ó ń pèsè ìmọ̀lára tí ó túbọ̀ jẹ́ ti ẹ̀dá àti analog ju àwọn bọ́tìnì oni-nọ́ḿbà lọ.
Ìtọ́sọ́nà yìí dá lórí fídíò ẹ̀kọ́ Lesson 86: Control position of a servo motor using potentiometer láti ọwọ́ Robojax (nínú fídíò ní 00:00). Ó ń darí ọ lọ́nà gbogbo ìlànà náà, láti òye ìsopọ̀ wáyà dé ìṣàlàyé kóòdù tí ó mú gbogbo rẹ̀ ṣiṣẹ́. Ẹ jẹ́ kí a bẹ̀rẹ̀.
Ohun Èlò àti Àwọn Ẹ̀yà
Láti tẹ̀lé iṣẹ́ yìí, ìwọ yóò nílò àwọn ẹ̀yà wọ̀nyí:
- Bọ́ọ̀dù Arduino kan (fún àpẹẹrẹ, Uno, Nano)
- Servo motor kan tí ó jẹ́ ti ìwọ̀n (fún àpẹẹrẹ, SG90 tàbí MG996R)
- Potentiometer kan (resistor tí ó yàtọ̀, ní ọ̀pọ̀ ìgbà 10kΩ)
- Àwọn wáyà Jumper
- Breadboard kan (kì í ṣe dandan, fún ìsopọ̀ tí ó rọrùn)
Òye Ìsopọ̀ Wáyà
Ìsopọ̀ wáyà fún iṣẹ́ yìí rọrùn. Ohun pàtàkì ni láti pèsè àwọn ìsopọ̀ agbára àti ifihan tí ó tọ́ fún mejeeji servo àti potentiometer. Servo jẹ́ ẹ̀rọ tí ó ń lo agbára púpọ̀, nítorí náà ó gba agbára rẹ̀ taara láti pin 5V ti Arduino. Potentiometer ń ṣiṣẹ́ bíi olùpín folti, àwa sì ń ka folti ní wiper rẹ̀ (pin àárín) láti mọ ipò rẹ̀. (nínú fídíò ní 01:05)
Ọgbọ́n kan tí iṣẹ́ yìí ń lò ni ṣíṣẹ̀dá orísun 5V àfikún kan lórí pin oni-nọ́ḿbà kan láti fi agbára fún potentiometer, nítorí àwọn bọ́ọ̀dù Arduino kan ní pin 5V kan ṣoṣo tí a yà sọ́tọ̀. A ṣe èyí nínú kóòdù nípa ṣíṣètò pin oni-nọ́ḿbà kan (pin 8) sí HIGH, tí ó ń mú 5V jáde. (nínú fídíò ní 00:39)
Èyí ni àwòrán ìsopọ̀ wáyà tí a mẹ́nu kàn nínú fídíò:
Ẹ jẹ́ kí a tú àwọn ìsopọ̀ náà ká:
- Servo Motor:
- Agbára (Wáyà pupa) → Pin 5V ti Arduino
- Ilẹ̀ (Wáyà dúdú/Brown) → Pin GND ti Arduino
- Ifihan (Wáyà ọsàn/ọ̀fun) → Pin 3 ti Arduino (pin tí ó ní agbára PWM)
- Potentiometer:
- Pin òsì → Pin GND ti Arduino
- Pin àárín (Wiper) → Pin analog A0 ti Arduino
- Pin ọ̀tún → Pin 8 ti Arduino (tí a ṣàlàyé bíi VCC2 nínú kóòdù)
Ìṣàlàyé Kóòdù
Kóòdù fún iṣẹ́ yìí rọrùn gan-an. Ó ń lo àwọn iṣẹ́ pàtàkì díẹ̀ ti Arduino láti ka potentiometer àti láti ṣàkóso servo. Ẹ jẹ́ kí a fojú sórí àwọn apá tí olùṣàmúlò lè yí padà fún àwọn iṣẹ́ tirẹ̀. (nínú fídíò ní 03:00)
Ní ìbẹ̀rẹ̀ sketch náà, ìwọ yóò ṣàlàyé àwọn pin náà kí o sì dá ohun èlò servo náà. Àwọn wọ̀nyí ni àwọn oniyipada pàtàkì tí ìwọ yóò yí padà nígbà gbogbo nípa ìsopọ̀ wáyà rẹ:
#include <Servo.h>
Servo myservo; // dá ohun èlò servo láti ṣàkóso servo kan
int potpin = A0; // pin analog tí a lò láti sopọ̀ potentiometer
int servoPin = 3; // ṣàlàyé pin oni-nọ́ḿbà kan (pẹ̀lú PWM) fún servo. O lè lo pin 3, 5, 6,9, 10, 11 nìkan
int VCC2 = 8;// ṣàlàyé VCC àfikún fún potentiometer
int val; // oniyipada láti ka iye láti pin analog
Èyí ni ohun tí apá kọ̀ọ̀kan ń ṣe:
- Servo myservo;: Ìlà yìí dá ohun èlò kan tí a ń pè ní
myservotí a ó lò láti ṣàkóso servo motor wa pàtó. O lè yí orúkọ rẹ̀ padà, ṣùgbọ́n o gbọ́dọ̀ lo orúkọ kanna nígbà tí o bá ń lò ó nínú kóòdù. - int potpin = A0;: Èyí ṣàlàyé èyí tí ó jẹ́ pin analog tí wiper potentiometer ti sopọ̀ sí. Bí o bá gbé wáyà náà sí pin analog mìíràn, o gbọ́dọ̀ ṣàtúnṣe nọ́ḿbà yìí.
- int servoPin = 3;: Èyí ṣètò pin oni-nọ́ḿbà fún wáyà ifihan servo. Ó ṣe pàtàkì gan-an láti lo pin tí ó ní agbára PWM (ní ọ̀pọ̀ ìgbà àwọn tí a fi '~' sàmì sí lórí bọ́ọ̀dù). Àwọn àlàyé náà ń ṣàkọsílẹ̀ àwọn pin tí ó wúlò fún ọ̀pọ̀ Arduino.
- int VCC2 = 8;: Èyí ni pin tí a ń lò bíi orísun 5V kejì fún potentiometer. Bí o bá ní bọ́ọ̀dù tí ó ní ọ̀pọ̀ pin 5V, o lè sopọ̀ taara kí o sì yọ apá yìí kúrò nínú kóòdù.
Nínú iṣẹ́ setup(), kóòdù náà bẹ̀rẹ̀ servo náà pẹ̀lú ṣíṣeto ẹ̀yà agbára àfikún. Iṣẹ́ myservo.attach(servoPin) ṣe pàtàkì gan-an nítorí ó sọ fún Arduino èyí tí ó ni asopọ̀ pẹ̀lú okun ifihan servo.
void setup() {
Serial.begin(9600); // ṣeto serial
myservo.attach(servoPin); // so servo mọ́ pin 3 sí ohun servo
pinMode(VCC2, OUTPUT);// ṣeto pin 8 gẹ́gẹ́ bí iṣẹ́jade
digitalWrite(VCC2, HIGH);// ṣeto pin 8 HIGH kí ó lè ṣiṣẹ́ bí pin 5V
}
Ìpìlẹ̀ ọgbọ́n wà nínú iṣẹ́ loop(). Ó ka iye potentiometer, ó yí i padà sí igun, ó sì pàṣẹ fún servo láti gbé. Àwọn iṣẹ́ pàtàkì méjì níbí ni analogRead() àti map(). (nínú fídíò ní 04:27)
void loop() {
val = analogRead(potpin); // ka iye potentiometer (iye láàrin 0 àti 1023)
val = map(val, 0, 1023, 0, 180); // yí i padà láti lò pẹ̀lú servo (iye láàrin 0 àti 180)
myservo.write(val); // ṣeto ipò servo gẹ́gẹ́ bí iye tí a yí padà
Serial.print(val);
Serial.println();
delay(50); // dúró fún servo láti dé ibẹ̀
}
Èyí ni bí ó ṣe ṣiṣẹ́:
- analogRead(potpin): Iṣẹ́ yìí ka foltiage láti ọ̀nà potentiometer, ó sì dá iye padà láàrin 0 (0V) àti 1023 (5V).
- map(val, 0, 1023, 0, 180): Èyí ni kọ́ńkẹ́ fún gbogbo iṣẹ́ náà. Ó gba iye àìráwọ̀ láti potentiometer (0 sí 1023), ó sì yí i padà sí igun servo (0 sí 180 ìwọ̀n). Fún àpẹẹrẹ, bí potentiometer bá ka 511 (nínú àárín), iṣẹ́
map()yóò dá 90 padà, yóò sì gbé servo sí ipò àárín rẹ̀. - myservo.write(val): Iṣẹ́ yìí gba igun tí a ṣírò (tí ó wà nínú
valnísinsin yìí), ó sì sọ fún servo láti yí padà sí ipò yẹn. - delay(50): Èyí fi ìsinmi kékèé kún un ní ìparí ọ̀kọ̀ọ̀kan loop. Ó ṣàkóso ìwọ̀n ìmúdójúìwọ̀n. Ìsinmi tí ó tóbi (bíi 200ms) mú servo gbé ní ìgbésẹ̀, nígbà tí ìsinmi kékeré (bíi 50ms) mú ìgbékalẹ̀ rẹ̀ dán wò. O lè ṣàtúnṣe èyí láti yí ìhùwàsí padà. (nínú fídíò ní 07:26)
Ìfihàn Iṣẹ́-ṣiṣe Láàyè
Nínú fídíò náà, o lè rí iṣẹ́ náà ní ìgbà tí ó ń ṣiṣẹ́. Bí a ṣe ń yí kọ́bù potentiometer, apá mọ́tò servo ń tẹ̀lé ipò rẹ̀ ní ìwọ̀n. Serial monitor ń tẹ̀ jáde igun lọ́wọ́lọ́wọ́, tí ó ń fi dáyà lójú pé ìyípadà náà ń ṣiṣẹ́ dáradára. Nígbà tí potentiometer bá wà ní ipò rẹ̀ tí ó kéré jùlọ, servo wà ní 0 ìwọ̀n. Bí o ṣe ń yí kọ́bù náà sí ipò rẹ̀ tí ó pọ̀ jùlọ, servo yóò yí padà sí 180 ìwọ̀n láìsí ìdíwọ́. (nínú fídíò ní 06:33)
Ìsopọ̀ ìsọfúnni ní àkókò gidi yìí ń fi ìmúdarapọ̀ sensor analog pẹ̀lú actuator digital hàn, tí ó ń dá ètò ìṣàkóso tí ó ń fèsì padà àti tí ó rọrùn láti lò.
Àwọn Orí Ìpín
- [00:00] Ìfihàn àti Àkópọ̀ Iṣẹ́
- [01:05] Àwòrán àti Àwòrán Asopọ̀
- [02:07] Ìfihàn Asopọ̀ Tí ó Jẹ́ Gidi
- [03:00] Àlàyé Kóòdù
- [06:33] Ìfihàn àti Ìdánwò Láàyè
- [07:26] Ṣàtúnṣe Ìyára Ìfèsì Servo
/*
* Lesson 88: Controlling Servo motor a with Potentiometer
* 📚⬇️ Download and resource page https://robojax.com/RJT763
watch full video tutroial: https://www.youtube.com/watch?v=ntRW77mNFFk
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
Update by Ahmad Shamshiri on Jan 01, 2019 in Ajax, Ontario, Canada
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int servoPin = 3; // define a digital pin (with PWM) for servo. Can use only pin 3, 5, 6,9, 10, 11
int VCC2 = 8;// define extra VCC for potentiometer
int val; // variable to read the value from the analog pin
void setup() {
//
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 3 to the servo object
pinMode(VCC2, OUTPUT);// set pin 8 as output
digitalWrite(VCC2, HIGH);// set pin 8 HIGH so it acts as 5V pin
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
Serial.print(val);
Serial.println();
delay(50); // waits for the servo to get there
}
Ohun ti o le nilo
-
Amazon
-
Amazon
-
eBay
-
AliExpressPurchase SG90 servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Orisun & itọkasi
Fáìlìs📁
Awọn faili miiran
-
SG90 Seroo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB