પાઠ ૮૮: બે પુશ બટન સ્વિચનો ઉપયોગ કરીને સર્વો મોટરને નિયંત્રિત કરવી
આ પ્રોજેક્ટ દર્શાવે છે કે કેવી રીતે Arduino સાથે બે પુશ બટનોનો ઉપયોગ કરીને સર્વો મોટરને નિયંત્રિત કરવી. પોટેન્શિયોમીટર અથવા સીરિયલ કમાન્ડ પર આધાર રાખવાને બદલે, તમે સરળ ટેક્ટાઇલ સ્વિચનો ઉપયોગ કરીને સર્વોને જમણી કે ડાબી બાજુ ખસેડી શકો છો. આ એવા કાર્યક્રમો માટે અત્યંત ઉપયોગી છે જ્યાં તમને મિકેનિઝમ પર સીધો, ભૌતિક નિયંત્રણ જોઈએ, જેમ કે રોબોટિક આર્મ બનાવવી, કેમેરા ગિમ્બલ સમાયોજિત કરવું, અથવા રિમોટ-કંટ્રોલ્ડ પાન-અને-ટિલ્ટ સિસ્ટમ બનાવવી. બટનો તમને સર્વોના ખૂણાને વધારીને સમાયોજિત કરવાની મંજૂરી આપે છે, અને બટનને દબાવી રાખવાથી તે તેની સંપૂર્ણ ગતિ શ્રેણીમાં ફરી શકે છે.
આ સેટઅપ સાથે તમે બનાવી શકો તેવા કેટલાક વ્યવહારુ પ્રોજેક્ટ્સ અહીં છે:
- રોબોટિક આર્મ અથવા ગ્રિપર માટે મેન્યુઅલ કંટ્રોલ પેનલ બનાવવી.
- રિમોટ-કંટ્રોલ્ડ કેમેરા સ્લાઇડર અથવા પાન-ટિલ્ટ હેડ બનાવવું.
- મોડેલ એરપ્લેન અથવા બોટ રડર માટે ભૌતિક નિયંત્રણ ઇન્ટરફેસ વિકસાવવું.
- CNC મશીન અથવા 3D પ્રિન્ટર માટે સ્થિતિઓ રેકોર્ડ કરવા માટે સરળ "ટીચ પેન્ડન્ટ" બનાવવું.

હાર્ડવેર અને ઘટકો
આ પ્રોજેક્ટ માટે ફક્ત થોડા મૂળભૂત ઘટકોની જરૂર છે, જે તેને Arduino સાથે ઇનપુટ અને આઉટપુટ ઉપકરણો બંને વિશે શીખવા માટે ઉત્તમ પ્રારંભિક બિંદુ બનાવે છે.
- Arduino બોર્ડ (Uno, Nano, Mega, વગેરે)
- સર્વો મોટર (દા.ત., SG90 અથવા MG995)
- બે મોમેન્ટરી પુશ બટનો
- જમ્પર વાયર
- બ્રેડબોર્ડ (વૈકલ્પિક પરંતુ ભલામણ કરેલ)
વાયરિંગ માર્ગદર્શિકા
વિડિઓમાં, વાયરિંગ સીધું છે. સર્વો મોટરનો સિગ્નલ પિન Arduino પર PWM-સક્ષમ પિન સાથે જોડાયેલ છે, જે આ ઉદાહરણમાં પિન 9 છે. સર્વો માટે પાવર અને ગ્રાઉન્ડ Arduino ના 5V અને GND પિન સાથે જોડાયેલા છે. બે પુશ બટનો એકબીજા સાથે સમાન રીતે વાયર કરેલા છે. દરેક બટનનો એક પગ ગ્રાઉન્ડ સાથે જોડાયેલ છે, અને બીજો પગ Arduino પર ડિજિટલ ઇનપુટ પિન સાથે જોડાયેલ છે (ડાબા બટન માટે પિન 2 અને જમણા બટન માટે પિન 3). કોડ આંતરિક પુલ-અપ રેઝિસ્ટરનો ઉપયોગ કરે છે, તેથી બટનો માટે કોઈ બાહ્ય રેઝિસ્ટરની જરૂર નથી. (વિડિઓમાં 00:57 પર)

કોડ સમજૂતી
કોડ સરળતાથી ગોઠવી શકાય તેવું છે. સ્કેચની ટોચ પર મુખ્ય વપરાશકર્તા-ગોઠવી શકાય તેવા ભાગો છે. અહીં મહત્વપૂર્ણ ચલો અને વ્યાખ્યાઓનું વિભાજન છે જે તમે તમારા પોતાના પ્રોજેક્ટ માટે સમાયોજિત કરવા માંગો છો.
#include <Servo.h>
Servo myservo; // સર્વોને નિયંત્રિત કરવા માટે સર્વો ઑબ્જેક્ટ બનાવો
int servoPin = 9;// આ પિન PWM ~ ધરાવતા પિનમાંથી હોવો જોઈએ
int angle =90; // સર્વો માટે પ્રારંભિક ખૂણો
int angleStep =5;
#define LEFT 2 // પિન 2 ડાબા બટન સાથે જોડાયેલ છે
#define RIGHT 3 // પિન 3 જમણા બટન સાથે જોડાયેલ છે
servoPin: આ ચલ Arduino પિનને વ્યાખ્યાયિત કરે છે જેની સાથે સર્વોનો સિગ્નલ વાયર જોડાયેલ છે. પલ્સ વિડ્થ મોડ્યુલેશન (PWM) ને સમર્થન આપતા પિનનો ઉપયોગ કરવો મહત્વપૂર્ણ છે, જે સામાન્ય રીતે બોર્ડ પર~પ્રતીક સાથે દર્શાવવામાં આવે છે.angle: આ Arduino શરૂ થાય ત્યારે સર્વોનો પ્રારંભિક ખૂણો સેટ કરે છે. ડિફોલ્ટ મૂલ્ય 90 ડિગ્રી છે, જે સામાન્ય રીતે સર્વોને કેન્દ્રમાં મૂકે છે.angleStep: આ તે વધારો છે જેના દ્વારા દરેક વખતે બટન દબાવવામાં આવે ત્યારે સર્વો ખૂણો બદલાય છે. 5 નું મૂલ્ય એટલે દરેક દબાવવાથી સર્વો 5 ડિગ્રી ખસેડશે. ઝડપી ગતિ માટે તમે આ વધારી શકો છો અથવા વધુ સુંદર નિયંત્રણ માટે ઘટાડી શકો છો.LEFTઅનેRIGHT: આ#defineનિર્દેશો ડિજિટલ પિન સોંપે છે જેની સાથે પુશ બટનો જોડાયેલા છે. જો તમે તમારા બટનોને અલગ પિન સાથે વાયર કરો છો, તો તમારે તમારા સેટઅપ સાથે મેળ કરવા માટે આ મૂલ્યો બદલવા આવશ્યક છે.
loop() ફંક્શનમાં મુખ્ય તર્ક તપાસે છે કે બટન દબાવવામાં આવ્યું છે કે નહીં (પુલ-અપ રૂપરેખાંકનને કારણે LOW સિગ્નલ વાંચીને). જો "જમણું" બટન દબાવવામાં આવે છે, તો તે angle ચલને angleStep દ્વારા ઘટાડે છે. જો "ડાબું" બટન દબાવવામાં આવે છે, તો તે angle વધારે છે. કોડમાં સીમા તપાસો શામેલ છે તેની ખાતરી કરવા માટે કે ખૂણો 0 થી 180 ડિગ્રીની શ્રેણીમાં રહે છે. પછી myservo.write(angle) ફંક્શનનો ઉપયોગ સર્વોને નવી સ્થિતિમાં ખસેડવાનો આદેશ આપવા માટે થાય છે.
લાઇવ પ્રોજેક્ટ પ્રદર્શન
વિડિઓ પ્રદર્શનમાં, કાર્યક્ષમતા સ્પષ્ટપણે દર્શાવવામાં આવી છે. "ડાબું" બટન દબાવીને પકડી રાખવાથી સર્વો સરળતાથી ડાબી બાજુ ફરે છે, ખૂણો દરેક વખતે 5 ડિગ્રી વધે છે, જ્યાં સુધી તે 180 ડિગ્રી સુધી પહોંચીને અટકે નહીં. તેવી જ રીતે, "જમણું" બટન દબાવીને પકડી રાખવાથી સર્વો જમણી બાજુ પાછો ફરે છે, ખૂણો ઘટાડીને 0 ડિગ્રી સુધી પહોંચે છે. વર્તમાન ખૂણો સીરિયલ મોનિટર પર છાપવામાં આવે છે, જે તમને વાસ્તવિક સમયમાં સર્વોની ચોક્કસ સ્થિતિ જોવાની મંજૂરી આપે છે. (વિડિઓમાં 05:20 પર)
વિડિઓ પ્રકરણો
- [00:00] બટનો સાથે સર્વો નિયંત્રિત કરવાનો પરિચય
- [00:57] સર્વો અને પુશ બટનો માટે વાયરિંગ માર્ગદર્શિકા
- [02:12] કોડ સમજૂતી, ભાગ 1: સેટઅપ અને રૂપરેખાંકન
- [03:25] કોડ સમજૂતી, ભાગ 2: મુખ્ય લૂપ તર્ક
- [05:20] પ્રોજેક્ટનું લાઇવ પ્રદર્શન
- [06:23] નિષ્કર્ષ અને સંભવિત કાર્યક્રમો
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* 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 download 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/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Things you might need
-
Amazon
-
Amazon
-
Amazon
-
AmazonServo motor on Amazonamzn.to
-
eBay
Resources & references
Files📁
Other files
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB