ትምህርት 85፡ የሰርቮ ሞተሮች መግቢያ | የአርዱኖ ደረጃ በደረጃ ኮርስ
ይህ የፕሮጀክት መመሪያ ወደ ቀጣይ የማሽከርከር ሰርቮ ሞተሮች ዓለም፣ እንዲሁም 360-ዲግሪ ሰርቮዎች በመባል የሚታወቁትን፣ ያስተዋውቅዎታል። ወደ አንድ የተወሰነ አንግል (እንደ 0 እስከ 180 ዲግሪ) ከሚንቀሳቀሱ መደበኛ ሰርቮዎች በተለየ፣ እነዚህ ሞተሮች በሁለቱም አቅጣጫ ያለማቋረጥ ይሽከረከራሉ። ይህ ትናንሽ ሮቦቶችን፣ የታንክ ትራኮችን፣ ወይም ቀላል እና ተመጣጣኝ የመኪና ሞተሮች የሚፈልግ ማንኛውንም ፕሮጀክት ለመገንባት ተስማሚ ያደርጋቸዋል። ይህ መመሪያ አርዱኖ እና ጥቂት የግፊት አዝራሮችን በመጠቀም እንዴት እንደሚቆጣጠሩት ያሳይዎታል፣ ይህም በአቅጣጫው እና በፍጥነቱ ላይ በእጅ ቁጥጥር ይሰጥዎታል።
ለ360-ዲግሪ ሰርቮ ጥቂት ተግባራዊ አፕሊኬሽኖች እነዚህ ናቸው፦
- ትንሽ ባለ ሁለት-ጎማ ሮቦት መኪና መገንባት።
- ያለማቋረጥ የሚሽከረከር የፓን-እና-ቲልት ካሜራ መያዣ መፍጠር።
- ትንሽ የኮንቬየር ቀበቶ ወይም ዊንች መንዳት።
- ቀላል ራዳር ወይም ዳሳሽ ቃኚ መድረክ መስራት።

ሃርድዌር እና ክፍሎች
ለዚህ ፕሮጀክት የሚከተሉትን ክፍሎች ያስፈልግዎታል፦
- አርዱኖ ቦርድ (ለምሳሌ፣ Uno)
- ቀጣይ የማሽከርከር ሰርቮ ሞተር (ለምሳሌ፣ FS90R ወይም ተመሳሳይ)
- ሶስት የግፊት አዝራሮች
- መዝለያ ሽቦዎች
- ብሬድቦርድ (አማራጭ፣ ለቀላል ሽቦ አያያዝ)
የሽቦ አያያዝ መመሪያ
የዚህ ፕሮጀክት ሽቦ አያያዝ ቀላል ነው። የሰርቮ ሞተሩ ሶስት ሽቦዎች አሉት፦ በተለምዶ ቡናማ (መሬት)፣ ቀይ (ኃይል)፣ እና ብርቱካናማ ወይም ቢጫ (ሲግናል)። የግፊት አዝራሮቹ በቀላል አወቃቀር ተያይዘዋል።
የግንኙነቶቹ ዝርዝር እነሆ፦
- ሰርቮ ሞተር፦
- ቡናማ ሽቦ (መሬት) ከአርዱኖው GND ፒን ጋር ይገናኛል።
- ቀይ ሽቦ (ኃይል) ከአርዱኖው 5V ፒን ጋር ይገናኛል።
- ብርቱካናማ/ቢጫ ሽቦ (ሲግናል) ከአርዱኖ ፒን 9 ጋር ይገናኛል።
- የግፊት አዝራሮች፦
- የእ প্রতিটি አዝራር አንዱ ጎን ከአርዱኖው GND ፒን ጋር ይገናኛል።
- የ"በተቃራኒ ሰዓት አቅጣጫ" አዝራሩ ሌላኛው ጎን ከፒን 2 ጋር ይገናኛል።
- የ"አቁም" አዝራሩ ሌላኛው ጎን ከፒን 3 ጋር ይገናኛል።
- የ"በሰዓት አቅጣጫ" አዝራሩ ሌላኛው ጎን ከፒን 4 ጋር ይገናኛል።
በቪዲዮው ውስጥ፣ ፈጣሪው የሰርቮው ሲግናል ሽቦ በአርዱኖው ላይ PWM አቅም ካለው ፒን ጋር መገናኘት እንዳለበት አፅንዖት ይሰጣል፣ ይህም ብዙውን ጊዜ በቲልዳ (~) ምልክት ይታወቃል። ፒን 9 ከእነዚህ ፒኖች አንዱ ነው። የግፊት አዝራሮቹ የአርዱኖውን ውስጣዊ የመጎተት-ወደላይ ተቃዋሚዎችን ይጠቀማሉ፣ ይህም ውጫዊ ተቃዋሚዎችን የማስወገድ ፍላጎት በማስቀረት ሽቦ አያያዙን ያቃልላል (በቪዲዮው 07:02 ላይ)።
የኮድ ማብራሪያ
ኮዱ የሶስት የግፊት አዝራሮችን ሁኔታ ለማንበብ እና ተጓዳኝ ትዕዛዙን ወደ ሰርቮ ሞተሩ ለመላክ የተነደፈ ነው። በተጠቃሚ ሊዋቀሩ የሚችሉትን ክፍሎች እንከፋፍላቸው።
ፒኖችን እና ትዕዛዞችን ማዋቀር
በኮዱ አናት ላይ፣ ለፒኖቹ እና ለሰርቮ መቆጣጠሪያ እሴቶቹ ትርጓሜዎችን ያገኛሉ። የፕሮጀክትዎን ባህሪ ማበጀት የሚችሉት እዚህ ነው።
const int servoPin = 9; // ለሰርቮ ሲግናል PWM ፒን
const int stopPin = 3; // ለአቁም አዝራር ፒን
const int cwPin = 4; // ለበሰዓት አቅጣጫ አዝራር ፒን
const int ccwPin = 2; // ለበተቃራኒ ሰዓት አቅጣጫ አዝራር ፒን
እነዚህ ቋሚዎች የትኞቹ የአርዱኖ ፒኖች ከአዝራሮቹ እና ከሰርቮው ጋር እንደተገናኙ ይገልጻሉ። ለአዝራሮችዎ የተለያዩ ፒኖች ከተጠቀሙ፣ እዚህ ያሉትን ቁጥሮች ይቀይራሉ። servoPin PWM አቅም ያለው ፒን መሆን አለበት።
const int csServoCommand[3] = {106, 52, 0}; // {በተቃራኒ ሰዓት፣ አቁም፣ በሰዓት}
const String csServoCommandText[3] = {"በተቃራኒ ሰዓት አቅጣጫ", "ቆሟል", "በሰዓት አቅጣጫ"};
ይህ ለመረዳት እና ለማስተካከል በጣም አስፈላጊው ክፍል ነው። የcsServoCommand ድርድር ወደ ሰርቮው የሚላኩ እሴቶችን ይይዛል። ለቀጣይ ሰርቮ፣ እነዚህ እሴቶች አንግልን አይወክሉም ነገር ግን ፍጥነትን እና አቅጣጫን ይወክላሉ።
- 106 ለሙሉ-ፍጥነት በተቃራኒ ሰዓት አቅጣጫ መሽከርከር እሴቱ ነው።
- 52 ለሙሉ ማቆም እሴቱ ነው።
- 0 ለሙሉ-ፍጥነት በሰዓት አቅጣጫ መሽከርከር እሴቱ ነው።
እነዚህ እሴቶች ሁለንተናዊ አይደሉም። በማምረቻ ልዩነቶች ምክንያት፣ የ"ማቆም" እሴቱ (52) ማስተካከል ሊያስፈልገው ይችላል። የአቁም አዝራሩን ሲጫኑ ሰርቮዎ በቀስታ የሚንሸራተት ከሆነ፣ ይህንን እሴት በጥሩ ሁኔታ ማስተካከል ያስፈልግዎታል። ቪዲዮው ይህንን ሂደት ያሳያል፣ እሴቱን ወደ 54 ወይም 51 መቀየር የሞተሩን ባህሪ እንዴት እንደሚጎዳ ያሳያል (በቪዲዮው 13:45 ላይ)።
የሞተሩን ፍጥነት ለመቀየር የመሽከርከር እሴቶቹንም ማስተካከል ይችላሉ። ለምሳሌ፣ የበተቃራኒ ሰዓት አቅጣጫውን እሴት ወደ 70 ማዘጋጀት ከ106 ይልቅ በዝግታ እንዲሽከረከር ያደርገዋል (በቪዲዮው 12:23 ላይ)።
የcsServoCommandText ድርድር የአሁኑን የትዕዛዝ ሁኔታ ለማሳየት ወደ ሴሪያል ሞኒተር የሚታተሙ የጽሑፍ ሕብረቁምፊዎችን ይይዛል።
ብጁ ተግባር፦ servoCommand()
ኮዱ የትዕዛዝ አመክንዮውን ለማስተናገድ ብጁ ተግባር ይጠቀማል። ይህ ተግባር ቁጥር (0፣ 1፣ ወይም 2) እንደ ክርክር ይወስዳል፣ የሁኔታ ጽሑፉን ያዘምናል፣ እና ተጓዳኝ ትዕዛዙን ወደ ሰርቮው ይልካል።
void servoCommand(int n) {
statusText = csServoCommandText[n];
myservo.write(csServoCommand[n]);
Serial.println(csServoCommandText[n]);
Serial.println(csServoCommand[n]);
}
ይህ ተግባር አንድ አዝራር ሲጫን ከዋናው loop ይጠራል። ማሳያውን የማዘመን እና ሰርቮውን የመቆጣጠር አመክንዮን ያማክላል፣ ይህም ኮዱን የበለጠ ንጹህ እና ለማሻሻል ቀላል ያደርገዋል።
የቀጥታ ፕሮጀክት እና ማሳያ
በቪዲዮው ውስጥ፣ ፈጣሪው ፕሮጀክቱን በተግባር ያሳያል። የ"በሰዓት አቅጣጫ" አዝራሩን መጫን እሴቱን 0 ወደ ሰርቮው ይልካል፣ ይህም በአንድ አቅጣጫ እንዲሽከረከር ያደርገዋል። የ"በተቃራኒ ሰዓት አቅጣጫ" አዝራሩን መጫን እሴቱን 106 ይልካል፣ ወደ ሌላኛው አቅጣጫ እንዲሽከረከር ያደርገዋል። የ"አቁም" አዝራሩ 52 ይልካል፣ ይህም ሞተሩን ማቆም አለበት።
የሴሪያል ሞኒተር የአሁኑን ሁኔታ እና ወደ ሰርቮው የሚላከውን ትክክለኛ እሴት ለማሳየት ይጠቅማል። ይህ ለማረም እና ለተወሰነው ሞተርዎ ፍጹም የሆነውን "ማቆሚያ" እሴት ለማግኘት በጣም ጠቃሚ ነው። በቪዲዮው ላይ እንደተገለጸው፣ በሰርቮው ውስጣዊ ዑደት ምክንያት የማቆሚያው ትዕዛዝ ፍጹም ላይሆን ይችላል፣ እና ቀስ ብሎ መንሸራተት ወይም መንቀጥቀጥ ሊታዩ ይችላሉ። ይህ የርካሽ ተከታታይ ሰርቮዎች የተለመደ ባህሪ ነው እና በኮዱ ውስጥ ያለውን የማቆሚያ እሴት በማስተካከል መቀነስ ይቻላል (በቪዲዮው 01:15 ላይ)።
ምዕራፎች
- [00:05] የ360-ዲግሪ ሰርቮ ሞተር መግቢያ
- [02:02] ክፍሎች እና የሃርድዌር አጠቃላይ እይታ
- [02:40] ዝርዝር የሽቦ አያያዥ ሥዕላዊ መግለጫ እና ግንኙነቶች
- [05:07] የኮድ ማብራሪያ፡ ቋሚዎች፣ ድርድሮች እና ማዋቀር
- [09:56] የኮድ ማብራሪያ፡ የservoCommand ተግባር
- [10:54] የቀጥታ ማሳያ እና የሴሪያል ሞኒተር ውጤት
- [12:23] የሰርቮ ፍጥነት እና የማቆሚያ እሴቶችን ማስተካከል
/*
* የቀጣይ ሴርቮ (360 ሴርቮ) መቆጣጠር ማስታወቂያ
* ይህ ኮድ ከሴሪያል ሞኒተር በተነሳ 360-ዲግሪ ሴርቮን ማቆጣጠር ይፈቅዳል።
* ይህ 350 ሴርቮ ሞተር ለመዝናናት ብቻ ነው። ትክክለኛ እንቅስቃሴ የሚያስፈልግ የእውነተኛ አፕሊኬሽን ላይ አይተገበርም። የስተፐር ሞተር ወይም ውድ ሴርቮ ሞተር ይውሰዱ።
*
* በአሐመድ ሻምሺሪ በRobojax.com የተሻሻለ
* በእሑድ፣ ጁላይ 1፣ 2018 በ11:09 ኤ.ኤም በአጃክስ፣ ኦንታሪዮ፣ ካናዳ
* የዚህ ፕሮጀክት ቪዲዮ መመሪያ ይመልከቱ፡ https://youtu.be/b_xvu6wWafA
* ይህ ኮድ ከRobojax.com ይውሰዱ
*
* የመጀመሪያ ኮድ በBARRAGAN <http://barraganstudio.com>
* ይህ ምሳሌ ኮድ በህዝብ እንደ ነበር ነው።
* በ8 ኖቬምበር 2013 የተሻሻለ
* በስኮት ፊትዝግራልድ
* http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // ሴርቮ ኦቤክት ለሴርቮ መቆጣጠር ይፍጠሩ
// በብዙ ቦርድ ላይ 12 ሴርቮ ኦቤክቶች ይፈጥሩ ይችላሉ።
int pos = 0; // ምንጭ የሚያከብር የሰርቦ ቦታ ይዘው ተለዋዋጭ
int incomingByte = 0; // የሚገኝ ሴሪያል ውሂብ ለመግባት
void setup() {
Serial.begin(9600);
myservo.attach(9); // servo እንደ አንቀጽ 9 ያያይዞ ወደ ሴርቮ ኦቤክት ይገናኛል
}
void loop() {
// ውሂብ በተቀባ ጊዜ ብቻ ይላኩ።
if (Serial.available() > 0) {
// እባክህ ወደ ወደ መጣ ባይት እንደ እንደ ይዘው ይወዳድሩ።
incomingByte = Serial.read();
// እባክህ ያለህን ንገር።
Serial.print("received: ");
Serial.print (incomingByte);
if(incomingByte == 108){
Serial.println(" sent 0 Rotating CW ");
myservo.write(0);
}else if(incomingByte == 114){
Serial.println(" sent 180 Rotating CCW ");
myservo.write(180);
}else if(incomingByte == 60){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Randomly");
myservo.write(incomingByte);
}
}
}
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int servoPin = 9;// this pin must be of those with PWM ~
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
int CWBS, CCWBS, SBS;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);// set pin for push button STOP
pinMode(3,INPUT_PULLUP);// set pin for push button CCW
pinMode(4,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
}
void loop() {
CCWBS = digitalRead(2);// read status of button CCW
SBS = digitalRead(3);// read status of button STOP
CWBS = digitalRead(4);// read status of button CW
if(CCWBS == LOW){
Serial.println(" sent 0 Rotaing CW ");
myservo.write(0);
}else if(CWBS == LOW){
Serial.println(" sent 180 Rotaing CCW ");
myservo.write(180);
}else if(SBS == LOW){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Random");
myservo.write(48);
}
}// loop
እንደሚያስፈልግዎት ይችላል
-
አማዞን360 Degree Servo motor on Amazonlink.amazon
-
አማዞን
-
ኢቤይ360 Degree Servo motor on eBayebay.us
-
አሊኤክስፕሬስ360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
አሊኤክስፕሬስ360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
ምንጮች እና ምንጮች
ፋይሎች📁
ሌላ ፋይሎች
-
SG90 Seroo ሞተር ዳታሺት
robojax-servo-SG90_datasheet.pdf0.12 MB