પાઠ ૮૫: સર્વો મોટર્સનો પરિચય | આર્ડુઇનો સ્ટેપ બાય સ્ટેપ કોર્સ
આ પ્રોજેક્ટ માર્ગદર્શિકા તમને સતત પરિભ્રમણ સર્વો મોટર્સની દુનિયામાં પરિચય કરાવે છે, જેને 360-ડિગ્રી સર્વો તરીકે પણ ઓળખવામાં આવે છે. ચોક્કસ ખૂણા પર ખસતા સ્ટાન્ડર્ડ સર્વોથી વિપરીત (જેમ કે 0 થી 180 ડિગ્રી), આ મોટર્સ કોઈપણ દિશામાં સતત ફરે છે. આ તેમને નાના રોબોટ્સ, ટાંક ટ્રેડ્સ, અથવા સરળ, સસ્તા ડ્રાઇવ મોટર્સની જરૂર હોય તેવા કોઈપણ પ્રોજેક્ટ માટે આદર્શ બનાવે છે. આ માર્ગદર્શિકા તમને બતાવશે કે Arduino અને થોડા પુશ બટનોનો ઉપયોગ કરીને તેને કેવી રીતે નિયંત્રિત કરવું, જે તમને તેની દિશા અને ઝડપ પર હાથથી નિયંત્રણ આપે છે.
360-ડિગ્રી સર્વો માટે અહીં કેટલીક વ્યવહારુ એપ્લિકેશનો છે:
- નાની બે-પૈડિયા રોબોટ કાર બનાવવી.
- પાન-અને-ટિલ્ટ કેમેરા માઉન્ટ બનાવવું જે અનંત રીતે ફરે છે.
- નાની કન્વેયર બેલ્ટ અથવા વિંચ ચલાવવી.
- સરળ રડાર અથવા સેન્સર સ્કેનિંગ પ્લેટફોર્મ બનાવવું.

હાર્ડવેર અને ઘટકો
આ પ્રોજેક્ટ માટે, તમારે નીચેના ઘટકોની જરૂર પડશે:
- Arduino બોર્ડ (દા.ત., Uno)
- સતત પરિભ્રમણ સર્વો મોટર (દા.ત., FS90R અથવા સમાન)
- ત્રણ પુશ બટનો
- જમ્પર વાયર
- બ્રેડબોર્ડ (વૈકલ્પિક, સરળ વાયરિંગ માટે)
વાયરિંગ માર્ગદર્શિકા
આ પ્રોજેક્ટ માટે વાયરિંગ સીધું છે. સર્વો મોટરમાં ત્રણ વાયર હોય છે: સામાન્ય રીતે ભૂરો (ગ્રાઉન્ડ), લાલ (પાવર), અને નારંગી અથવા પીળો (સિગ્નલ). પુશ બટનો સરળ રૂપરેખાંકનમાં વાયર કરેલા છે.
અહીં જોડાણોનું વિભાજન છે:
- સર્વો મોટર:
- ભૂરો વાયર (ગ્રાઉન્ડ) Arduino ના GND પિન સાથે જોડાય છે.
- લાલ વાયર (પાવર) Arduino ના 5V પિન સાથે જોડાય છે.
- નારંગી/પીળો વાયર (સિગ્નલ) Arduino પિન 9 સાથે જોડાય છે.
- પુશ બટનો:
- દરેક બટનની એક બાજુ Arduino ના GND પિન સાથે જોડાયેલી છે.
- "કાઉન્ટર-ક્લોકવાઇઝ" બટનની બીજી બાજુ પિન 2 સાથે જોડાયેલી છે.
- "સ્ટોપ" બટનની બીજી બાજુ પિન 3 સાથે જોડાયેલી છે.
- "ક્લોકવાઇઝ" બટનની બીજી બાજુ પિન 4 સાથે જોડાયેલી છે.
વિડિયોમાં, નિર્માતા ભારપૂર્વક જણાવે છે કે સર્વોનો સિગ્નલ વાયર Arduino પર PWM-સક્ષમ પિન સાથે જોડાયેલો હોવો જોઈએ, જે ઘણીવાર ટિલ્ડ (~) ચિહ્ન સાથે ચિહ્નિત થાય છે. પિન 9 આમાંનો એક પિન છે. પુશ બટનો Arduino ના આંતરિક પુલ-અપ રેઝિસ્ટરનો ઉપયોગ કરે છે, જે બાહ્ય રેઝિસ્ટરની જરૂરિયાત દૂર કરીને વાયરિંગને સરળ બનાવે છે (વિડિયોમાં 07:02 પર).
કોડ સમજૂતી
કોડ ત્રણ પુશ બટનોની સ્થિતિ વાંચવા અને સર્વો મોટરને અનુરૂપ આદેશ મોકલવા માટે રચાયેલ છે. ચાલો વપરાશકર્તા-રૂપરેખાંકિત ભાગોને તોડીએ.
પિન અને આદેશો રૂપરેખાંકિત કરવા
કોડની ટોચ પર, તમને પિન અને સર્વો નિયંત્રણ મૂલ્યો માટે વ્યાખ્યાઓ મળશે. આ તે છે જ્યાં તમે તમારા પ્રોજેક્ટના વર્તનને કસ્ટમાઇઝ કરી શકો છો.
const int servoPin = 9; // સર્વો સિગ્નલ માટે PWM પિન
const int stopPin = 3; // સ્ટોપ બટન માટે પિન
const int cwPin = 4; // ક્લોકવાઇઝ બટન માટે પિન
const int ccwPin = 2; // કાઉન્ટર-ક્લોકવાઇઝ બટન માટે પિન
આ સ્થિરાંકો વ્યાખ્યાયિત કરે છે કે કયા Arduino પિન બટનો અને સર્વો સાથે જોડાયેલા છે. જો તમે તમારા બટનો માટે અલગ પિનનો ઉપયોગ કરો છો, તો તમે અહીં નંબરો બદલશો. servoPin PWM-સક્ષમ પિન હોવો જોઈએ.
const int csServoCommand[3] = {106, 52, 0}; // {CCW, STOP, CW}
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]);
}
આ ફંક્શન મુખ્ય લૂપમાંથી કહેવામાં આવે છે જ્યારે બટન દબાવવામાં આવે છે. તે ડિસ્પ્લે અપડેટ કરવા અને સર્વોને નિયંત્રિત કરવાના તર્કને કેન્દ્રિય બનાવે છે, જે કોડને સ્વચ્છ અને સંશોધિત કરવામાં સરળ બનાવે છે.
લાઇવ પ્રોજેક્ટ અને પ્રદર્શન
વિડિયોમાં, નિર્માતા પ્રોજેક્ટને કાર્યરત દર્શાવે છે. "ક્લોકવાઇઝ" બટન દબાવવાથી સર્વોને 0 મૂલ્ય મોકલાય છે, જે તેને એક દિશામાં ફેરવે છે. "કાઉન્ટર-ક્લોકવાઇઝ" બટન દબાવવાથી 106 મૂલ્ય મોકલાય છે, જે તેને બીજી દિશામાં ફેરવે છે. "સ્ટોપ" બટન 52 મોકલે છે, જે મોટરને રોકવું જોઈએ.
સીરિયલ મોનિટરનો ઉપયોગ વર્તમાન સ્થિતિ અને સર્વોને મોકલવામાં આવતું ચોક્કસ મૂલ્ય દર્શાવવા માટે થાય છે. ડીબગિંગ માટે અને તમારા ચોક્કસ મોટર માટે સંપૂર્ણ "સ્ટોપ" મૂલ્ય શોધવા માટે આ અમૂલ્ય છે. વિડિયોમાં નોંધ્યા મુજબ, સર્વોના આંતરિક સર્કિટરીને કારણે સ્ટોપ કમાન્ડ સંપૂર્ણ ન પણ હોય, અને તમને ધીમો વહેણ અથવા કંપન જોવા મળી શકે છે. આ સસ્તા સતત સર્વોની સામાન્ય લાક્ષણિકતા છે અને કોડમાં સ્ટોપ મૂલ્યને ટ્યુન કરીને તેને ઘટાડી શકાય છે (વિડિયોમાં 01:15 પર).
પ્રકરણો
- [00:05] 360-ડિગ્રી સર્વો મોટરનો પરિચય
- [02:02] ઘટકો અને હાર્ડવેર ઝાંખી
- [02:40] વિગતવાર વાયરિંગ ડાયાગ્રામ અને જોડાણો
- [05:07] કોડ સમજૂતી: સ્થિરાંકો, એરે અને સેટઅપ
- [09:56] કોડ સમજૂતી: servoCommand ફંક્શન
- [10:54] લાઇવ ડેમોન્સ્ટ્રેશન અને સીરિયલ મોનિટર આઉટપુટ
- [12:23] સર્વો ઝડપ અને સ્ટોપ મૂલ્યોને સમાયોજિત કરવું
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
* 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 pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
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
Things you might need
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
Amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
AliExpress360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
AliExpress360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Resources & references
Files📁
Other files
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB