કોડ શોધો

પાઠ ૯૭-૧: રોટરી એન્કોડરનું પરિભ્રમણ શોધવું અને સ્વિચ દબાવવું

પાઠ ૯૭-૧: રોટરી એન્કોડરનું પરિભ્રમણ શોધવું અને સ્વિચ દબાવવું

આ માર્ગદર્શિકા દર્શાવે છે કે રોટરી એન્કોડરનો ઉપયોગ કરીને તમારા આર્ડુઇનો પ્રોજેક્ટ્સ માટે ચોક્કસ અને ટકાઉ નિયંત્રણ ઇન્ટરફેસ કેવી રીતે બનાવવું. પોટેન્શિયોમીટરથી વિપરીત, જેમાં ગતિની નિશ્ચિત શ્રેણી હોય છે, રોટરી એન્કોડર કોઈપણ દિશામાં સતત ફરી શકે છે, જે તેને વધારાના ગોઠવણો અથવા અનંત પરિભ્રમણની જરૂર હોય તેવા કાર્યક્રમો માટે ઉત્તમ પસંદગી બનાવે છે. આ પ્રોજેક્ટ એન્કોડરની પરિભ્રમણ દિશા અને સ્થિતિ શોધવાના મૂળભૂત કાર્ય પર ધ્યાન કેન્દ્રિત કરે છે, તેમજ જ્યારે તેનો સંકલિત પુશ-બટન સ્વિચ દબાવવામાં આવે ત્યારે તેને રજીસ્ટર કરે છે. આ ઘણા અદ્યતન પ્રોજેક્ટ્સ માટે મુખ્ય તર્ક બનાવે છે, જેમ કે મેનૂ નેવિગેશન સિસ્ટમ બનાવવી, ડિજિટલ વોલ્યુમ નિયંત્રણ ગોઠવવું, અથવા આવર્તનને ચોક્કસ રીતે ટ્યુન કરવી. રોટરી એન્કોડરના યાંત્રિક સંપર્કો પોટેન્શિયોમીટરના કાર્બન ટ્રેક કરતાં નોંધપાત્ર રીતે વધુ ટકાઉ પણ છે, જે તમારા પ્રોજેક્ટ્સ માટે લાંબી આયુષ્યની ખાતરી આપે છે.

આ મૂળભૂત સેટઅપ સાથે તમે શું બનાવી શકો તે માટે અહીં કેટલાક વ્યવહારુ વિચારો છે:

  • મેનૂ નેવિગેશન સિસ્ટમ: LCD પર વિકલ્પો દ્વારા સ્ક્રોલ કરવા માટે એન્કોડરને ફેરવો અને આઇટમ પસંદ કરવા માટે સ્વિચ દબાવો.
  • ચોકસાઇ ગોઠવણ સાધન: તેનો ઉપયોગ પરિમાણને ફાઇન-ટ્યુન કરવા માટે કરો, જેમ કે ટાઇમર સેટ કરવું અથવા મોટરની ગતિને નાના, નિર્ધારિત વધારામાં ગોઠવવી.
  • રોબોટિક આર્મ કંટ્રોલર: સર્વો મોટરની સ્થિતિના ચોક્કસ, પગલું-દર-પગલા નિયંત્રણ માટે જોયસ્ટિકને એન્કોડરથી બદલો.

જરૂરી હાર્ડવેર

આ પાઠ સાથે આગળ વધવા માટે, તમારે નીચેના ઘટકોની જરૂર પડશે:

  • આર્ડુઇનો યુનો (અથવા સમાન સુસંગત બોર્ડ)
  • રોટરી એન્કોડર મોડ્યુલ (PCB સાથે) અથવા ત્રણ 10kΩ રેઝિસ્ટર સાથેનો સાદો રોટરી એન્કોડર
  • બ્રેડબોર્ડ અને જમ્પર વાયર
  • આર્ડુઇનો પ્રોગ્રામિંગ માટે USB કેબલ

વાયરિંગ માર્ગદર્શિકા

rotary_encoder_schematic_bb
rotary_encoder_breadboard_bb

રોટરી એન્કોડર પરિભ્રમણને ટ્રેક કરવાની પ્રક્રિયાને સરળ બનાવે છે. તેમાં બે આઉટપુટ પિન (ઘણીવાર A અને B લેબલવાળા) છે જે નોબ ફેરવવામાં આવે ત્યારે સિગ્નલોનો ચોક્કસ ક્રમ ઉત્પન્ન કરે છે. આ સિગ્નલો વાંચીને, આર્ડુઇનો પરિભ્રમણની દિશા અને માત્રા નક્કી કરી શકે છે. એન્કોડરમાં બિલ્ટ-ઇન પુશ-બટન સ્વિચ પણ શામેલ છે, જે નોબ પર દબાવીને સક્રિય થાય છે, જે વપરાશકર્તા ક્રિયાપ્રતિક્રિયા માટે વધારાનું ઇનપુટ પ્રદાન કરે છે.

આ પ્રોજેક્ટ માટે વાયરિંગ સીધું છે. આપેલ આકૃતિ દર્શાવે છે કે એન્કોડર મોડ્યુલને આર્ડુઇનો સાથે કેવી રીતે કનેક્ટ કરવું. CLK (અથવા A) પિન ડિજિટલ પિન 2 સાથે જોડાયેલ છે, DT (અથવા B) પિન ડિજિટલ પિન 3 સાથે જોડાયેલ છે, અને SW (સ્વિચ) પિન ડિજિટલ પિન 4 સાથે જોડાયેલ છે. એન્કોડરનો + (VCC) પિન 3.3V સપ્લાય સાથે જોડાયેલ છે, અને તેનો GND પિન સામાન્ય ગ્રાઉન્ડ સાથે જોડાયેલ છે.

જો તમે PCB વિના સાદા રોટરી એન્કોડરનો ઉપયોગ કરી રહ્યા છો, તો તમારે આર્ડુઇનો માટે સ્વચ્છ સિગ્નલ સુનિશ્ચિત કરવા માટે તેના આઉટપુટ પિન પર ત્રણ પુલ-અપ રેઝિસ્ટર (1kΩ અને 100kΩ વચ્ચે) ઉમેરવાની જરૂર પડશે.

કોડ સમજૂતી

આ પ્રોજેક્ટનો કોડ સરળ અને શૈક્ષણિક હોય તે માટે ડિઝાઇન કરવામાં આવ્યો છે. તે સ્કેચની ટોચ પર વપરાશકર્તા-રૂપરેખાંકિત ભાગો પર ધ્યાન કેન્દ્રિત કરે છે, જે તમને વિવિધ પિન અથવા પ્રોજેક્ટ્સ માટે સરળતાથી અનુકૂલન કરવાની મંજૂરી આપે છે.

પ્રથમ વિભાગ તે પિનને વ્યાખ્યાયિત કરે છે જેની સાથે એન્કોડર જોડાયેલ છે. જો તમારું હાર્ડવેર અલગ રીતે વાયર કરેલું હોય તો આ પ્રાથમિક મૂલ્યો છે જે તમારે બદલવાની જરૂર પડશે.

const int SW_PIN = 4;
const int PIN_A =2;
const int PIN_B =3;
  • SW_PIN: આ સ્થિરાંક એન્કોડરના પુશ-બટન સ્વિચ સાથે જોડાયેલ આર્ડુઇનો પિનને વ્યાખ્યાયિત કરે છે.
  • PIN_A અને PIN_B: આ સ્થિરાંકો એન્કોડરના બે આઉટપુટ ચેનલો, A અને B સાથે જોડાયેલ આર્ડુઇનો પિનને વ્યાખ્યાયિત કરે છે. આ પિનનો ઉપયોગ Encoder લાઇબ્રેરી દ્વારા નોબના પરિભ્રમણને ટ્રેક કરવા માટે થાય છે.

આગળ, કોડમાં જરૂરી લાઇબ્રેરી શામેલ છે અને એન્કોડર ઑબ્જેક્ટનું ઉદાહરણ બનાવે છે, તેને અમે હમણાં વ્યાખ્યાયિત કરેલા પિન સાથે સાંકળે છે.

#include <Encoder.h>
Encoder myEnc(PIN_A, PIN_B);

setup() ફંક્શનમાં, સીરિયલ મોનિટર સંચાર માટે પ્રારંભિક થાય છે, અને સ્વિચ પિન ઇનપુટ તરીકે રૂપરેખાંકિત થાય છે.

void setup() {
  Serial.begin(9600);
  pinMode(SW_PIN, INPUT);
  Serial.println("Basic Encoder Test:");
}

loop() ફંક્શનમાં મુખ્ય તર્ક બે મુખ્ય કાર્યો કરે છે. પ્રથમ, તે એન્કોડરની વર્તમાન સ્થિતિ સતત વાંચે છે. જો આ સ્થિતિ છેલ્લા રેકોર્ડ કરેલા મૂલ્યથી બદલાઈ ગઈ હોય, તો તેનો અર્થ એ કે નોબ ફેરવવામાં આવ્યો છે, અને નવી સ્થિતિ સીરિયલ મોનિટર પર છાપવામાં આવે છે. બીજું, તે સ્વિચની સ્થિતિ તપાસે છે. જ્યારે સ્વિચ દબાવવામાં આવે છે, ત્યારે તેની પિન લો થાય છે, અને કોડ દબાવવાનું સૂચવવા માટે સંદેશ છાપે છે.

long oldPosition  = -999;

void loop() {
  long newPosition = myEnc.read();
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    Serial.println(newPosition);
  }

  if( digitalRead(SW_PIN) == LOW)
  {
   Serial.println("Switch Pressed");
  }

  delay(200);
}

myEnc.read() ફંક્શન એ Encoder લાઇબ્રેરીનું કસ્ટમ ફંક્શન છે. તે એન્કોડરની સ્થિતિની વર્તમાન ગણતરી પરત કરે છે. વર્તમાન અને અગાઉના રીડિંગ્સની તુલના કરીને, તમે હિલચાલ શોધી શકો છો. digitalRead(SW_PIN) ફંક્શન એ પ્રમાણભૂત આર્ડુઇનો ફંક્શન છે જે સ્વિચ પિનની સ્થિતિ વાંચે છે.

લાઇવ પ્રોજેક્ટ પ્રદર્શન

એકવાર તમે તમારા Arduino પર કોડ અપલોડ કરી લો, પછી તમે પરિણામો જોવા માટે Serial Monitor (9600 baud પર સેટ) ખોલી શકો છો. જ્યારે તમે એન્કોડર નોબને ઘડિયાળની દિશામાં ફેરવો છો, ત્યારે તમે સંખ્યાઓ વધતી જોશો. તેને ઘડિયાળની વિરુદ્ધ દિશામાં ફેરવવાથી સંખ્યાઓ ઘટતી જોશો. જો તમે નોબ પર દબાવો છો, તો "Switch Pressed" સંદેશ પ્રદર્શિત થશે. આ પુષ્ટિ કરે છે કે પરિભ્રમણ અને બટન દબાવવું બંને સિસ્ટમ દ્વારા યોગ્ય રીતે શોધાઈ રહ્યા છે.

આ વિડિયો સાથે સંબંધિત પ્રોજેક્ટ્સ

પ્રકરણો

  • [00:01] રોટરી એન્કોડર સાથે સર્વોને નિયંત્રિત કરવાનો પરિચય
  • [01:41] પોટેન્શિયોમીટરને બદલે રોટરી એન્કોડર શા માટે વાપરવું
  • [04:18] રોટરી એન્કોડર મોડ્યુલ અને વાયરિંગની ઝાંખી
  • [13:28] જરૂરી લાઇબ્રેરીઓ ઇન્સ્ટોલ કરવી
  • [14:54] મૂળભૂત એન્કોડર ઉદાહરણ કોડ સમજાવવો
  • [16:43] મૂળભૂત એન્કોડર કોડનું પ્રદર્શન
  • [17:52] પુશ-બટન સ્વિચ સાથે સંશોધિત કોડ
  • [20:20] સર્વો અને LCD નિયંત્રણ માટે સંપૂર્ણ કોડ સમજૂતી
  • [23:47] LCD I2C સરનામું શોધવું
  • [30:01] સંપૂર્ણ પ્રોજેક્ટનું પ્રદર્શન

છબીઓ

Rotary encoder breadboard
Rotary encoder breadboard
Rotary encoder schematic breadboard
Rotary encoder schematic breadboard
431-Lesson 97-1: Code: Rotary Encoder with switch
ભાષા: C++
/* 
 *  Lesson 97-1: Rotary Encoder with switch 
 *  This code detects rotation of the encoder knob
 *  and also detects when it is pushed
 *  Download and resource page https://robojax.com/RJT453

 *  Watch full details video: https://youtu.be/6xVLbNlmK-g
  This video is part of the Arduino Step by Step Course, which starts here: https://youtu.be/-6qSrDUA5a8
 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. Make a donation using PayPal by credit card: https://bit.ly/donate-robojax
  
 * 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/>.
 *  Updated by Ahmad Shamshiri on Jan 23, 2022
 *  Encoder Library - Basic Example
 * http://www.pjrc.com/teensy/td_libs_Encoder.html
 *
 * This example code is in the public domain.
 */
const int SW_PIN = 4;
const int PIN_A =2;
const int PIN_B =3;

#include <Encoder.h>

// Change these two numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder myEnc(PIN_A, PIN_B);
//   avoid using pins with LEDs attached

void setup() {
  Serial.begin(9600);
  pinMode(SW_PIN, INPUT);
  Serial.println("Basic Encoder Test:");
}

long oldPosition  = -999;

void loop() {
  long newPosition = myEnc.read();
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    Serial.println(newPosition);
  }

  if( digitalRead(SW_PIN) == LOW)
  {
   Serial.println("Switch Pressed");
  }

  delay(200);
  //Watch video details: https://youtu.be/6xVLbNlmK-g
}

તમને જોઈતી વસ્તુઓ

સંસાધનો અને સંદર્ભો

ફાઇલો📁

કોઈ ફાઇલો ઉપલબ્ધ નથી.