પાઠ 89: કન્ટિન્યુઅસ અથવા 360 સર્વો મોટરનો ઉપયોગ | આર્ડુઇનો સ્ટેપ બાય સ્ટેપ કોર્સ
શું તમે ક્યારેય ઇચ્છ્યું છે કે મોટરને કોઈપણ દિશામાં જ્યાં સુધી ઇચ્છો ત્યાં સુધી ફેરવો, માત્ર પ્રમાણભૂત સર્વોની જેમ આગળ-પાછળ સ્વીપ કરવાને બદલે? આ બરાબર છે જે સતત અથવા 360-ડિગ્રી સર્વો મોટર પ્રદાન કરે છે. પ્રમાણભૂત સર્વોથી વિપરીત જે ચોક્કસ ખૂણા પર ખસે છે (સામાન્ય રીતે 0 થી 180 ડિગ્રી), સતત સર્વો ઘડિયાળની દિશામાં અથવા ઘડિયાળની વિરુદ્ધ દિશામાં અનંતપણે ફરે છે. આ તેને નાના રોબોટ્સ, કેમેરા પ્લેટફોર્મ અથવા કોઈપણ પ્રોજેક્ટ બનાવવા માટે યોગ્ય બનાવે છે જેને સતત પરિભ્રમણ નિયંત્રણની જરૂર હોય.
આ પ્રોજેક્ટમાં, અમે માત્ર ત્રણ પુશ બટનોનો ઉપયોગ કરીને 360-ડિગ્રી સર્વો માટે નિયંત્રણ સિસ્ટમ બનાવીશું. તમે સર્વોને ઘડિયાળની દિશામાં, ઘડિયાળની વિરુદ્ધ દિશામાં ફેરવવા અથવા કોઈપણ ક્ષણે રોકવાનો આદેશ આપી શકશો. આ માર્ગદર્શિકા તમને વાયરિંગ દ્વારા લઈ જશે, કોડના વપરાશકર્તા-રૂપરેખાંકિત ભાગો સમજાવશે અને સિસ્ટમનું લાઇવ પ્રદર્શન બતાવશે.
તમારા પોતાના પ્રોજેક્ટ્સમાં સતત સર્વોનો ઉપયોગ કરવા માટે અહીં કેટલાક વ્યવહારુ વિચારો છે:
- નાનો બે-પૈડિયો રોબોટ બનાવો: પૈડાં ચલાવવા માટે બે સતત સર્વોનો ઉપયોગ કરો, જે આગળ, પાછળ અને વળવાની હિલચાલને મંજૂરી આપે છે.
- પાન-અને-ટિલ્ટ કેમેરા માઉન્ટ બનાવો: સુરક્ષા અથવા વન્યજીવ કેમેરાના ધીમા, અનંત પેનિંગ માટે એક સતત સર્વોનો ઉપયોગ કરો.
- કન્વેયર બેલ્ટ સ્વચાલિત કરો: વસ્તુઓને છટણી કરવા અથવા વિતરિત કરવા માટે નાની કન્વેયર સિસ્ટમને નિયંત્રિત કરો.
- ફરતું પ્રદર્શન સ્ટેન્ડ ડિઝાઇન કરો: એવા પ્લેટફોર્મ પર 3D મોડેલ અથવા ઉત્પાદન દર્શાવો જે સતત ફરે છે.
જરૂરી હાર્ડવેર
- આર્ડુઇનો બોર્ડ (યુનો, નેનો, વગેરે)
- સતત (360-ડિગ્રી) સર્વો મોટર (દા.ત., FS90R, DS04-NFC)
- 3x પુશ બટનો
- જમ્પર વાયર
- બ્રેડબોર્ડ
વાયરિંગ માર્ગદર્શિકા
આ પ્રોજેક્ટ માટે વાયરિંગ સરળ છે. સર્વો મોટરમાં ત્રણ વાયર હોય છે: સામાન્ય રીતે ગ્રાઉન્ડ (GND) માટે ઘેરો, પાવર (5V) માટે મધ્યમ (ઘણીવાર લાલ), અને સિગ્નલ માટે હળવો (નારંગી, પીળો અથવા સફેદ). વિડિઓમાં બતાવ્યા પ્રમાણે, સર્વો આર્ડુઇનો સાથે નીચે મુજબ વાયર કરેલ છે:
- સર્વો ગ્રાઉન્ડ (ઘેરો વાયર): આર્ડુઇનો GND સાથે જોડો.
- સર્વો પાવર (મધ્યમ/લાલ વાયર): આર્ડુઇનો 5V સાથે જોડો.
- સર્વો સિગ્નલ (હળવો વાયર): આર્ડુઇનો પિન 9 સાથે જોડો.
ત્રણ પુશ બટનો માટે, દરેક બટનની બે બાજુઓ હોય છે. બધા બટનોની એક બાજુ એકસાથે જોડાયેલી હોય છે અને પછી આર્ડુઇનો GND સાથે. દરેક બટનની બીજી બાજુ અલગ ડિજિટલ પિન સાથે જોડાયેલી હોય છે, જેમ નીચે વર્ણવેલ છે (વિડિઓમાં 03:40 પર):
- ઘડિયાળની દિશામાં (CW) બટન: આર્ડુઇનો પિન 2 સાથે જોડો.
- સ્ટોપ બટન: આર્ડુઇનો પિન 3 સાથે જોડો.
- ઘડિયાળની વિરુદ્ધ દિશામાં (CCW) બટન: આર્ડુઇનો પિન 4 સાથે જોડો.

કોડ સમજૂતી
કોડ સરળતાથી રૂપરેખાંકિત કરી શકાય તેવું ડિઝાઇન કરેલ છે. સૌથી મહત્વપૂર્ણ ભાગ જે તમારે સમાયોજિત કરવાની જરૂર પડશે તે છે sc[] એરે, જે સર્વોને તેની ક્રિયાઓ નિયંત્રિત કરવા માટે મોકલવામાં આવતા ચોક્કસ PWM મૂલ્યો ધરાવે છે. આ મૂલ્યો સાર્વત્રિક નથી અને તમારી ચોક્કસ સર્વો મોટર માટે માપાંકિત થવા જોઈએ (વિડિઓમાં 12:23 પર).
int sc[]={106, 58, 0};// સર્વો આદેશો ક્રમમાં છે
//CCW, STOP,CW
આ એરે માપાંકનનું હૃદય છે. મૂલ્યો આ ક્રમમાં ઉપયોગમાં લેવાય છે:
- sc[0] = 106: આ મૂલ્ય સર્વોને ઘડિયાળની વિરુદ્ધ દિશામાં ફેરવવા માટે મોકલવામાં આવે છે.
- sc[1] = 58: આ "સ્ટોપ" મૂલ્ય છે. આંતરિક સર્કિટરીને કારણે, મોટરને રોકતું ચોક્કસ મૂલ્ય બદલાય છે. તમે શોધી શકો છો કે આ આદેશ મોકલવામાં આવે ત્યારે પણ તમારી સર્વો ધીમે ધીમે ફરે છે, અને તમારે તમારી મોટર માટે સાચું "ડેડ સ્ટોપ" મૂલ્ય શોધવા માટે આ સંખ્યાને થોડું સમાયોજિત કરવાની જરૂર પડશે.
- sc[2] = 0: આ મૂલ્ય સર્વોને મહત્તમ ઝડપે ઘડિયાળની દિશામાં ફેરવે છે.
તમે પરિભ્રમણની ઝડપ બદલવા માટે sc[] એરેમાં મૂલ્યો સમાયોજિત કરી શકો છો. ઉદાહરણ તરીકે, sc[0] ને 70 પર સેટ કરવાથી ઘડિયાળની વિરુદ્ધ દિશામાં પરિભ્રમણ ધીમું થશે. મૂલ્ય "સ્ટોપ" મૂલ્ય (58) ની જેટલું નજીક હશે, મોટર તે દિશામાં તેટલી ધીમી ફરશે. 58 થી દૂરના મૂલ્યો મહત્તમ મર્યાદા સુધી ઝડપ વધારશે.
અન્ય કેટલાક મુખ્ય ચલો પણ છે જે તમારે સંશોધિત કરવાની જરૂર પડી શકે છે. servoPin 9 પર સેટ છે, જે તમારા આર્ડુઇનો પર PWM-સક્ષમ પિન હોવી આવશ્યક છે. બટન પિન કોડની ટોચ પર વ્યાખ્યાયિત છે અને જરૂર પડ્યે બદલી શકાય છે.
int servoPin = 9;// આ પિન PWM ~ ધરાવતી પિનમાંથી એક હોવી જોઈએ
#define STOPpin 3 // સ્ટોપ માટે પુશ બટન પિન
#define CWpin 2 // CW માટે પુશ બટન
#define CCWpin 4 // CCW માટે પુશ બટન
છેલ્લે, scText[] એરે તે સ્ટ્રિંગ્સ ધરાવે છે જે ડીબગિંગ માટે સીરિયલ મોનિટર પર છાપવામાં આવે છે. જો તમે અલગ સંદેશાઓ પ્રદર્શિત કરવા માંગતા હો તો તમે તેને બદલી શકો છો.
કોડનો ઉપયોગ કેવી રીતે કરવો
પ્રદાન કરેલ કોડ તમારા આર્ડુઇનો બોર્ડ પર અપલોડ કરો. સ્થિતિ સંદેશાઓ જોવા માટે સીરિયલ મોનિટર ખોલો (9600 બૉડ પર સેટ કરો). તમે હવે ત્રણ બટનોનો ઉપયોગ કરીને સર્વોને નિયંત્રિત કરી શકો છો:
- CW બટન દબાવીને પકડી રાખો: સર્વો ઘડિયાળની દિશામાં ફરવાનું શરૂ કરશે. સીરિયલ મોનિટર "CW" અને મોકલવામાં આવતું મૂલ્ય પ્રદર્શિત કરશે.
- CCW બટન દબાવીને પકડી રાખો: સર્વો ઘડિયાળની વિરુદ્ધ દિશામાં ફરવાનું શરૂ કરશે. સીરિયલ મોનિટર "CCW" અને મોકલવામાં આવતું મૂલ્ય પ્રદર્શિત કરશે.
- સ્ટોપ બટન દબાવો: સર્વો રોકવાનો પ્રયાસ કરશે. સીરિયલ મોનિટર "Stop" પ્રદર્શિત કરશે.
જો સ્ટોપ બટન દબાવવામાં આવે ત્યારે તમારો સર્વો સંપૂર્ણપણે બંધ ન થાય, તો તમારે sc[] એરેમાં sc[1] મૂલ્યને કેલિબ્રેટ કરવાની જરૂર પડશે. મૂલ્યને થોડું બદલવાનો પ્રયાસ કરો (દા.ત., 58 થી 54 અથવા 52) અને મોટર સંપૂર્ણપણે સ્થિર ન થાય ત્યાં સુધી કોડ ફરીથી અપલોડ કરો.
લાઇવ ડેમોન્સ્ટ્રેશન
વિડિયોમાં, પ્રસ્તુતકર્તા સંપૂર્ણ સિસ્ટમ દર્શાવે છે. તમે બટન દબાવવાના આધારે સર્વો બંને દિશામાં ફરતો જોઈ શકો છો. સીરિયલ મોનિટર આઉટપુટ પણ દર્શાવવામાં આવ્યું છે, જે વર્તમાન સ્થિતિ ("CW", "Stop", અથવા "CCW") અને સર્વોને મોકલવામાં આવતું ચોક્કસ મૂલ્ય દર્શાવે છે. આ તમારા ચોક્કસ મોટર માટે સંપૂર્ણ કેલિબ્રેશન મૂલ્યો શોધવા અને ડીબગિંગ માટે એક ઉત્તમ સાધન છે. ડેમોન્સ્ટ્રેશન એ પણ બતાવે છે કે sc[] એરેમાં મૂલ્યોને સમાયોજિત કરવાથી મોટરની ગતિ પર સીધી અસર થાય છે, ધીમી ગતિથી તેની મહત્તમ રોટેશન ગતિ સુધી.
નિષ્કર્ષ
આ પ્રોજેક્ટ સતત ફરતા સર્વો મોટરને નિયંત્રિત કરવાની એક સરળ અને અસરકારક રીત પ્રદાન કરે છે. "સ્ટોપ" મૂલ્ય માટે કેલિબ્રેશન પ્રક્રિયાને સમજીને, તમે તમારા પોતાના રોબોટિક્સ અને ઓટોમેશન પ્રોજેક્ટ્સમાં ચોક્કસ નિયંત્રણની ખાતરી કરી શકો છો.
વિડિયો પ્રકરણો
- [00:05] સતત ફરતા સર્વો મોટરનો પરિચય
- [02:02] સર્વોની હાર્ડવેર ઝાંખી
- [02:40] વાયરિંગ ડાયાગ્રામ અને જોડાણો
- [05:07] કોડ સમજૂતી: ચલો અને સેટઅપ
- [08:03] કોડ સમજૂતી: મુખ્ય લૂપ લોજિક
- [09:56] servoCommand() ફંક્શન
- [10:54] લાઇવ ડેમોન્સ્ટ્રેશન અને સીરિયલ મોનિટર આઉટપુટ
- [12:23] સર્વો સ્પીડ અને સ્ટોપ મૂલ્યોનું કેલિબ્રેશન
++
/*
* S05-13 Servo with 3 push buttons
* Demonstration of Controlling a Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo using push buttons
*
* Modified by Ahmad Shamshiri for Robojax Robojax.com
* on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww
Watch Introduction to 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
Original code by BARRAGAN <http://barraganstudio.com>
*
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#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 one of those with PWM ~
#define STOPpin 3 // push button pin for STOP
#define CWpin 2 // push button for CW
#define CCWpin 4 // push button for CCW
int sc[]={106, 58, 0};// servo commands are in order
//CCW, STOP,CW
String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
//CW button status (CWBS)
//CCW button status (CCWBS)
//stop button status (SBS)
void setup() {
Serial.begin(9600);
pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
myservo.write(sc[1]);// send STOP command
statusText=1;// initial value is STOP
}
void loop() {
CCWBS = digitalRead(CCWpin);// read status of button CCW
SBS = digitalRead(STOPpin);// read status of button STOP
CWBS = digitalRead(CWpin);// read status of button CW
if(CCWBS ==LOW)
{
servoCommand(0);
}else if(SBS ==LOW)
{
servoCommand(1);
}else if(CWBS ==LOW)
{
servoCommand(2);
}
Serial.println(scText[statusText]);
delay(50);
}// loop
void servoCommand(int n)
{
statusText = n;
myservo.write(sc[n]);
Serial.print("Going to ");
Serial.print(scText[n]);
Serial.print( "(");
Serial.print(sc[n]);
Serial.println(")");
}
Things you might need
-
Amazon360 Degree Servo motor on Amazonlink.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
-
Internal
Files📁
Other files
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB