ትምህርት 86፡ የሰርቮ ሞተርን አቀማመጥ በፖቴንሺዮሜትር መቆጣጠር
ቀላል የሆነ እንዝርት ማዞር እና የሜካኒካል ክንድ እያንዳንዱን እንቅስቃሴዎን በትክክል ሲከተል ማየት ያስቡ። ይህ የፖቴንሺዮሜትር እና የሰርቮ ሞተርን የማጣመር አስማት ነው። ይህ ፕሮጀክት፣ የሮቦጃክስ የአርዱኖ ደረጃ በደረጃ ኮርስ አካል፣ በኤሌክትሮኒክስ ውስጥ መሠረታዊ እና እጅግ ጠቃሚ የሆነ ጽንሰ-ሐሳብን ያሳያል፡- የአናሎግ ግብዓትን ወደ ትክክለኛ አካላዊ እንቅስቃሴ መቀየር። ከፖቴንሺዮሜትር ተለዋዋጭ ቮልቴጅ እንዴት ማንበብ፣ ያንን እሴት ወደ ማዕዘኖች ክልል እንዴት ካርታ ማድረግ እና የሰርቮ ሞተርን ወደዚያ ትክክለኛ ቦታ እንዲሽከረከር ማዘዝ ይማራሉ። ይህ በእጅ ቁጥጥር እና አውቶሜሽን የሚገናኙበት ሊታወቅ የሚችል እና በይነተገናኝ ፕሮጀክቶችን ለመገንባት መግቢያዎ ነው።

የዚህ ክህሎት አፕሊኬሽኖች ሰፊ እና ተግባራዊ ናቸው። እነዚህን ለማነሳሳት ጥቂት ሀሳቦች እነሆ፡-
- የሮቦቲክ ክንድ ቁጥጥር፡- ለትክክለኛ የመልቀም እና የማስቀመጥ ስራዎች የሮቦቲክ ክንድ እያንዳንዱን መገጣጠሚያ በእጅ ለማስቀመጥ ፖቴንሺዮሜትር ይጠቀሙ።
- የካሜራ ፓን እና ቲልት ሲስተም፡- ለጊዜ-ላፕስ ወይም ለክትትል በርቀት የሚቆጣጠር የካሜራ መቀመጫ ይገንቡ፣ በመደወያ ማዞር በተቀላጠፈ ሁኔታ ፓን እና ቲልት ያደርጋል።
- የአናሎግ መለኪያ ቅጂ፡- በሴንሰር መረጃ ላይ ተመስርቶ የሚንቀሳቀስ አካላዊ የዳሽቦርድ መለኪያ (እንደ የፍጥነት መለኪያ ወይም የሙቀት መደወያ) ይፍጠሩ፣ ፖቴንሺዮሜትሩ እንደ በእጅ መቆጣጠሪያ ወይም የመለኪያ መሳሪያ ሆኖ ያገለግላል።
- በይነተገናኝ የጥበብ ጭነቶች፡- ለተመልካች ግብዓት ምላሽ የሚሰጡ ኪነቲክ ቅርጻ ቅርጾችን ይፍጠሩ፣ መደወያ ማዞር የሚንቀሳቀሱ ክፍሎችን ቦታ ይቀይራል።
- የሞዴል ተሽከርካሪ መሪ፡- የሞዴል መኪና ወይም ጀልባ የመሪ አንግል በርቀት ይቆጣጠሩ፣ ከዲጂታል አዝራሮች የበለጠ ሊታወቅ የሚችል እና የአናሎግ ስሜት ይሰጣል።
ይህ መመሪያ በሮቦጃክስ የቪዲዮ ትምህርት ትምህርት 86፡ የሰርቮ ሞተርን ቦታ ፖቴንሺዮሜትር በመጠቀም መቆጣጠር (በቪዲዮው በ00፡00) ላይ የተመሠረተ ነው። ከሽቦ አያያዝ መረዳት ጀምሮ ሁሉንም ነገር እንዲሰራ የሚያደርገውን ኮድ እስከማብራራት ድረስ ሙሉውን ሂደት ይመራዎታል። እንጀምር።
ሃርድዌር እና ክፍሎች
ከዚህ ፕሮጀክት ጋር ለመከታተል የሚከተሉትን ክፍሎች ያስፈልግዎታል፡-
- የአርዱኖ ቦርድ (ለምሳሌ፣ Uno፣ Nano)
- መደበኛ የሰርቮ ሞተር (ለምሳሌ፣ SG90 ወይም MG996R)
- ፖቴንሺዮሜትር (ተለዋዋጭ ተከላካይ፣ በተለምዶ 10kΩ)
- መዝለያ ሽቦዎች
- ብሬድቦርድ (አማራጭ፣ ለቀላል ግንኙነቶች)
የሽቦ አያያዝን መረዳት
የዚህ ፕሮጀክት ሽቦ አያያዝ ቀላል ነው። ቁልፉ ለሁለቱም ሰርቮ እና ፖቴንሺዮሜትር ትክክለኛ የኃይል እና የምልክት ግንኙነቶችን መስጠት ነው። ሰርቮው ብዙ ኃይል የሚፈልግ መሳሪያ ነው፣ ስለዚህ ኃይሉን በቀጥታ ከአርዱኖው 5V ፒን ያገኛል። ፖቴንሺዮሜትሩ እንደ ቮልቴጅ ከፋፋይ ሆኖ ይሰራል፣ እና ቦታውን ለመወሰን በዊፐር (መካከለኛው ፒን) ላይ ያለውን ቮልቴጅ እናነባለን። (በቪዲዮው በ01፡05)
ይህ ፕሮጀክት የሚጠቀምበት አንድ ብልህ ዘዴ ፖቴንሺዮሜትሩን ለማብራት በዲጂታል ፒን ላይ ተጨማሪ 5V ምንጭ መፍጠር ነው፣ ምክንያቱም አንዳንድ የአርዱኖ ቦርዶች አንድ የተወሰነ 5V ፒን ብቻ አላቸው። ይህ በኮዱ ውስጥ ዲጂታል ፒን (ፒን 8) ወደ HIGH በማዘጋጀት ይከናወናል፣ ይህም 5V ያወጣል። (በቪዲዮው በ00፡39)
በቪዲዮው ውስጥ የተጠቀሰው የሽቦ አያያዝ ሥዕላዊ መግለጫ ይህ ነው፡-
ግንኙነቶቹን እንከፋፍላቸው፡-
- የሰርቮ ሞተር፡-
- ኃይል (ቀይ ሽቦ) → የአርዱኖ 5V ፒን
- መሬት (ቡናማ/ጥቁር ሽቦ) → የአርዱኖ GND ፒን
- ምልክት (ብርቱካናማ/ቢጫ ሽቦ) → የአርዱኖ ፒን 3 (PWM አቅም ያለው ፒን)
- ፖቴንሺዮሜትር፡-
- ግራ ፒን → የአርዱኖ GND ፒን
- መካከለኛ ፒን (ዊፐር) → የአርዱኖ አናሎግ ፒን A0
- ቀኝ ፒን → የአርዱኖ ፒን 8 (በኮዱ ውስጥ እንደ VCC2 ይገለጻል)
የኮድ ማብራሪያ
የዚህ ፕሮጀክት ኮድ በሚያስደንቅ ሁኔታ ቀላል ነው። ፖቴንሺዮሜትሩን ለማንበብ እና ሰርቮውን ለመቆጣጠር ጥቂት ቁልፍ የአርዱኖ ተግባራትን ይጠቀማል። ለራስዎ ፕሮጀክቶች ሊያስተካክሏቸው በሚችሏቸው በተጠቃሚ ሊዋቀሩ በሚችሉ ክፍሎች ላይ እናተኩር። (በቪዲዮው በ03፡00)
በስኬቹ አናት ላይ ፒኖቹን ይገልጻሉ እና የሰርቮ ነገሩን ይፈጥራሉ። እነዚህ በሽቦ አያያዝዎ ላይ ተመስርተው የሚቀይሯቸው ዋና ተለዋዋጮች ናቸው፡-
#include <Servo.h>
Servo myservo; // ሰርቮውን ለመቆጣጠር የሰርቮ ነገር ይፍጠሩ
int potpin = A0; // ፖቴንሺዮሜትሩን ለማገናኘት የሚያገለግል አናሎግ ፒን
int servoPin = 3; // ለሰርቮ ዲጂታል ፒን (ከPWM ጋር) ይግለጹ። ፒን 3፣ 5፣ 6፣ 9፣ 10፣ 11 ብቻ መጠቀም ይቻላል
int VCC2 = 8;// ለፖቴንሺዮሜትር ተጨማሪ VCC ይግለጹ
int val; // ከአናሎግ ፒን የሚገኘውን እሴት ለማንበብ ተለዋዋጭ
እያንዳንዱ ክፍል የሚሰራው ይህ ነው፡-
- Servo myservo;፡- ይህ መስመር የተወሰነውን የሰርቮ ሞተር ለመቆጣጠር የምንጠቀምበትን
myservoየተባለ ነገር ይፈጥራል። እንደገና ሊሰይሙት ይችላሉ፣ ግን በኋላ በኮዱ ውስጥ ተመሳሳይ ስም መጠቀም አለብዎት። - int potpin = A0;፡- ይህ የፖቴንሺዮሜትሩ ዊፐር የተገናኘበትን የአናሎግ ፒን ይገልጻል። ሽቦውን ወደ ሌላ የአናሎግ ፒን ካዛወሩት፣ ይህንን ቁጥር ማዘመን አለብዎት።
- int servoPin = 3;፡- ይህ ለሰርቮው የምልክት ሽቦ ዲጂታል ፒኑን ያዘጋጃል። PWM አቅም ያለው ፒን (ብዙውን ጊዜ በቦርዱ ላይ በ'~' ምልክት የተደረገባቸው) መጠቀም ወሳኝ ነው። አስተያየቱ ለአብዛኛዎቹ አርዱኖዎች ትክክለኛ ፒኖችን ይዘረዝራል።
- int VCC2 = 8;፡- ይህ ለፖቴንሺዮሜትሩ እንደ ሁለተኛ ደረጃ 5V ምንጭ የምንጠቀምበት ፒን ነው። ብዙ 5V ፒኖች ያሉት ቦርድ ካለዎት፣ በቀጥታ ማገናኘት እና ይህንን የኮድ ክፍል ማስወገድ ይችላሉ።
በsetup() ተግባር ውስጥ፣ ኮዱ ሰርቮውን ያስጀምራል እና ተጨማሪ የኃይል ፒን ያዘጋጃል። የmyservo.attach(servoPin) ተግባር አስፈላጊ ነው ምክንያቱም የትኛው ፒን ከሰርቮው የሲግናል ሽቦ ጋር እንደተገናኘ ለአርዱኖ ይነግራልና።
void setup() {
Serial.begin(9600); // ሰሪያል አዘጋጅ
myservo.attach(servoPin); // ሰርቮውን በፒን 3 ላይ ከሰርቮ ነገሩ ጋር ያያይዛል
pinMode(VCC2, OUTPUT);// ፒን 8 እንደ ውጤት አዘጋጅ
digitalWrite(VCC2, HIGH);// ፒን 8 ከፍተኛ አድርግ ስለዚህ እንደ 5V ፒን ይሠራል
}
ዋናው አመክንዮ በloop() ተግባር ውስጥ ነው። የፖቴንሺዮሜትሩን እሴት ያነባል፣ ወደ አንግል ይቀይረዋል፣ እና ሰርቮው እንዲንቀሳቀስ ያዛል። እዚህ ላይ ሁለቱ ወሳኝ ተግባራት analogRead() እና map() ናቸው። (በቪዲዮው በ04:27)
void loop() {
val = analogRead(potpin); // የፖቴንሺዮሜትሩን እሴት ያነባል (እሴቱ በ0 እና 1023 መካከል)
val = map(val, 0, 1023, 0, 180); // ከሰርቮው ጋር ለመጠቀም ይለካዋል (እሴቱ በ0 እና 180 መካከል)
myservo.write(val); // ሰርቮውን በተሰላው እሴት መሠረት ያስቀምጣል
Serial.print(val);
Serial.println();
delay(50); // ሰርቮው እዚያ እስኪደርስ ይጠብቃል
}
እንዴት እንደሚሠራ እነሆ፡
- analogRead(potpin): ይህ ተግባር ከፖቴንሺዮሜትሩ መቆጣጠሪያ የሚመጣውን ቮልቴጅ ያነባል እና በ0 (0V) እና 1023 (5V) መካከል ያለ እሴት ይመልሳል።
- map(val, 0, 1023, 0, 180): ይህ የፕሮጀክቱ ቁልፍ ነው። ከፖቴንሺዮሜትሩ የተገኘውን ጥሬ እሴት (0 እስከ 1023) ወስዶ በተመጣጣኝ ሁኔታ ወደ ሰርቮ አንግል (0 እስከ 180 ዲግሪ) ይቀይረዋል። ለምሳሌ፣ ፖቴንሺዮሜትሩ 511 (ግማሽ ያህል) ቢያነብ፣ የ
map()ተግባር 90 ይመልሳል፣ ሰርቮውን ወደ መሃል ቦታው ያንቀሳቅሰዋል። - myservo.write(val): ይህ ተግባር የተሰላውን አንግል (አሁን በ
valውስጥ የተከማቸ) ወስዶ ሰርቮው ወደዚያ ቦታ እንዲሽከረከር ይነግረዋል። - delay(50): ይህ በእ প্রতিটি loop መጨረሻ ላይ ትንሽ ቆም ያደርጋል። የማዘመን ፍጥነቱን ይቆጣጠራል። ትልቅ መዘግየት (እንደ 200ms) ሰርቮው በደረጃ እንዲንቀሳቀስ ያደርጋል፣ ትንሽ መዘግየት (እንደ 50ms) ደግሞ እንቅስቃሴውን በጣም ለስላሳ ያደርገዋል። ምላሽ ሰጪነቱን ለመቀየር ይህንን ማስተካከል ይችላሉ። (በቪዲዮው በ07:26)
የቀጥታ ፕሮጀክት ማሳያ
በቪዲዮው ውስጥ፣ ፕሮጀክቱ በሚሠራበት ጊዜ ማየት ይችላሉ። የፖቴንሺዮሜትሩ እጀታ ሲዞር፣ የሰርቮ ሞተሩ ክንድ ቦታውን በተመጣጣኝ ሁኔታ ይከተላል። ሰሪያል መቆጣጠሪያው የአሁኑን አንግል ያትማል፣ ይህም ካርታው በትክክል እየሠራ መሆኑን ያረጋግጣል። ፖቴንሺዮሜትሩ በዝቅተኛ ቦታው ላይ ሲሆን፣ ሰርቮው በ0 ዲግሪ ላይ ነው። እጀታውን ወደ ከፍተኛው ሲዞሩ፣ ሰርቮው በተቀላጠፈ ሁኔታ ወደ 180 ዲግሪ ይሽከረከራል። (በቪዲዮው በ06:33)
ይህ የእውነተኛ ጊዜ ግብረመልስ ዑደት የአናሎግ ዳሳሽ ከዲጂታል አንቀሳቃሽ ጋር እንከን የለሽ ውህደትን ያሳያል፣ ምላሽ ሰጪ እና ሊታወቅ የሚችል የቁጥጥር ሥርዓት ይፈጥራል።
ምዕራፎች
- [00:00] መግቢያ እና የፕሮጀክት አጠቃላይ እይታ
- [01:05] ስዕላዊ መግለጫ እና የሽቦ አያያዥ ዲያግራም
- [02:07] የአካላዊ ሽቦ ማሳያ
- [03:00] የኮድ ማብራሪያ
- [06:33] የቀጥታ ማሳያ እና ሙከራ
- [07:26] የሰርቮ ምላሽ ፍጥነትን ማስተካከል
/*
* 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
}
እንደሚያስፈልግዎት ይችላል
-
አማዞን
-
አማዞን
-
ኢቤይ
-
አሊኤክስፕሬስPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
ምንጮች እና ምንጮች
ፋይሎች📁
ሌላ ፋይሎች
-
SG90 Seroo ሞተር ዳታሺት
robojax-servo-SG90_datasheet.pdf0.12 MB