Search Code

Darasi na 86: Sarrafa matsayin motar servo ta amfani da potentiometer

Darasi na 86: Sarrafa matsayin motar servo ta amfani da potentiometer

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot

Bari mu fassara haɗin:

  • Motar Servo:
    • Wutar lantarki (Jar waya) → Fil 5V na Arduino
    • Ƙasa (Ruwan ruwan waya) → Fil GND na Arduino
    • Sigina (Orange/Yellow waya) → Fil 3 na Arduino (fil mai iya PWM)
  • Potentiometer:
    • Fil na hagu → Fil GND na Arduino
    • Fil na tsakiya (Wiper) → Fil analog A0 na Arduino
    • Fil na dama → Fil 8 na Arduino (an ayyana shi a matsayin VCC2 a cikin lambar)

Bayanin Lambar

Lambar wannan aikin tana da sauƙi sosai. Tana amfani da wasu mahimman ayyuka na Arduino don karanta potentiometer da sarrafa servo. Bari mu mai da hankali kan sassan da za ka iya daidaita don ayyukanka. (a cikin bidiyo a 03:00)

A saman lambar, za ka ayyana filaye da ƙirƙirar abu na servo. Waɗannan su ne manyan masu canji waɗanda za ka canza bisa ga haɗin ka:

#include <Servo.h>

Servo myservo;  // ƙirƙirar abu na servo don sarrafa servo

int potpin = A0;  // fil analog da aka yi amfani da shi don haɗa potentiometer
int servoPin = 3; // ayyana fil dijital (tare da PWM) don servo. Za a iya amfani da fil 3, 5, 6, 9, 10, 11 kawai
int VCC2 = 8;// ayyana ƙarin VCC don potentiometer
int val;    // mai canji don karanta ƙimar daga fil analog

Ga abin da kowane ɓangare yake yi:

  • Servo myservo;: Wannan layin yana ƙirƙirar abu mai suna myservo wanda za mu yi amfani da shi don sarrafa motar servo ɗinmu. Za ka iya canza sunan, amma dole ne ka yi amfani da sunan ɗaya daga baya a cikin lambar.
  • int potpin = A0;: Wannan yana ayyana wane fil analog ne wiper na potentiometer ke haɗe. Idan ka motsa wayar zuwa wani fil analog daban, dole ne ka sabunta wannan lambar.
  • int servoPin = 3;: Wannan yana saita fil dijital don wayar sigina ta servo. Yana da mahimmanci ka yi amfani da fil mai iya PWM (yawanci waɗanda aka yiwa alama da '~' a kan allo). Sharhin ya lissafa filaye masu inganci don yawancin Arduino.
  • int VCC2 = 8;: Wannan shine fil da muke amfani da shi a matsayin tushen 5V na biyu don potentiometer. Idan kana da allo mai filaye 5V da yawa, za ka iya haɗa shi kai tsaye kuma ka cire wannan ɓangaren lambar.

A cikin aikin setup(), lambar tana fara servo kuma tana saita ƙarin fil ɗin wutar lantarki. Aikin myservo.attach(servoPin) yana da mahimmanci domin yana gaya wa Arduino wane fil ne aka haɗa da wayar siginar servo.

void setup() {
  Serial.begin(9600);          //  saita serial
  myservo.attach(servoPin);  // haɗa servo a fil 3 zuwa abin servo

  pinMode(VCC2, OUTPUT);// saita fil 8 a matsayin fitarwa
  digitalWrite(VCC2, HIGH);// saita fil 8 HIGH don ya zama fil 5V
}

Mahimman dabaru suna cikin aikin loop(). Yana karanta ƙimar potentiometer, yana canza shi zuwa kusurwa, kuma yana umurtar servo ya motsa. Ayyukan biyu masu mahimmanci a nan sune analogRead() da map(). (a bidiyo a 04:27)

void loop() {
  val = analogRead(potpin);            // karanta ƙimar potentiometer (ƙima tsakanin 0 da 1023)
  val = map(val, 0, 1023, 0, 180);     // canza shi don amfani da servo (ƙima tsakanin 0 da 180)
  myservo.write(val);                  // saita matsayin servo bisa ga ƙimar da aka canza
  Serial.print(val);
  Serial.println();
  delay(50);                           // jira servo ya isa can
}

Ga yadda yake aiki:

  • analogRead(potpin): Wannan aikin yana karanta wutar lantarki daga wiper na potentiometer kuma yana mayar da ƙima tsakanin 0 (0V) da 1023 (5V).
  • map(val, 0, 1023, 0, 180): Wannan shine mabuɗin ga dukan aikin. Yana ɗaukar ƙimar da ba a sarrafa ba daga potentiometer (0 zuwa 1023) kuma yana canza shi daidai gwargwado zuwa kusurwar servo (0 zuwa 180 digiri). Misali, idan potentiometer ya karanta 511 (kusan rabin), aikin map() zai mayar da 90, yana motsa servo zuwa matsayinsa na tsakiya.
  • myservo.write(val): Wannan aikin yana ɗaukar kusurwar da aka ƙididdige (yanzu an adana shi a cikin val) kuma yana gaya wa servo ya juya zuwa wannan matsayin.
  • delay(50): Wannan yana ƙara ɗan dakatawa a ƙarshen kowane zagaye. Yana sarrafa ƙimar sabuntawa. Ƙarin jinkiri (kamar 200ms) yana sa servo ya motsa a matakai, yayin da ƙaramin jinkiri (kamar 50ms) yana sa motsi ya yi laushi sosai. Kuna iya daidaita wannan don canza saurin amsawa. (a bidiyo a 07:26)

Nunin Aikin Kai Tsaye

A cikin bidiyon, kuna iya ganin aikin yana aiki. Yayin da aka juya ƙullin potentiometer, hannun motar servo yana bin matsayinsa daidai gwargwado. Mai buga serial yana buga kusurwar yanzu, yana tabbatar da cewa canjin yana aiki daidai. Lokacin da potentiometer yake a mafi ƙarancin matsayi, servo yana a 0 digiri. Yayin da kuke juya ƙullin zuwa iyakar, servo yana juya laushi zuwa 180 digiri. (a bidiyo a 06:33)

Wannan zagayen amsawa na lokaci-lokaci yana nuna haɗin kai tsakanin na'urar firikwensin analog da na'urar motsa dijital, yana ƙirƙirar tsarin sarrafawa mai amsawa da fahimta.

Babuka

  • [00:00] Gabatarwa da Bayanin Aikin
  • [01:05] Tsarin Zane da Wayoyi
  • [02:07] Nunin Haɗin Wayoyi na Jiki
  • [03:00] Bayanin Lambar
  • [06:33] Nunin Kai Tsaye da Gwaji
  • [07:26] Daidaita Saurin Amsar Servo

Hotuna

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)
Harshe: 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
}
 

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Sauran fayiloli