Wa Koodu

Ẹkọ 86: Ṣàkóso ipò mọ́tọ̀ servo ní lílo potentiometer

Ẹ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íò:

Arduino wiring or servo motor with pot
Ìsopọ̀ wáyà Arduino fún servo motor pẹ̀lú pot

Ẹ 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í myservo tí 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ú val ní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

Aworan

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
892-Lesson 86: Controlling a servo position using a potentiometer (variable resistor)
Ede: C++
/*
 * 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
}
 

Orisun & itọkasi

Fáìlìs📁

Awọn faili miiran