Arduino Lesson 19 – SG90 Servo Motor

මෝටර් පාලකයක් තැනීමෙන් තොරව ඔබගේ ඊළඟ Arduino ව්‍යාපෘතියට චලනය එකතු කිරීමට අවශ්‍යද? servo මෝටර ඒ සඳහා සුදුසුම උපාංගය වේ.

DC මෝටර මෙන් නොව, ඔබට මෙම මෝටර වල ස්ථානගත කිරීම හරියටම පාලනය කළ හැකිය.

රොබෝ වාහනයක් වටා බැලීමට සුක්කානම සුක්කානම හෝ හැරවීම සඳහා ආර්සී ආකෘතියක් මත ඉදිරිපස රෝද හරවා යැවීම වැනි බොහෝ රොබෝ තාක්ෂණයන්හි ඒවා ප්‍රයෝජනවත් වේ.

රොබෝ වාහනයක් වටපිට බැලීමට, RC ආකෘතියක් මත ඉදිරිපස රෝද හැරවීමට වැනි බොහෝ රොබෝ තාක්ෂණයන්හි ඒවා ප්‍රයෝජනවත් වේ.

Servo යනු කුමක්ද?

Servo යනු සංවෘත ලූප පාලන පද්ධතියක් සඳහා වන යෙදුමකි.

සංවෘත ලූප පද්ධතියක් අපේක්ෂිත ප්‍රතිඵලයක් ලබා ගැනීම සඳහා මෝටරයේ වේගය සහ දිශාව සකස් කිරීම සඳහා ප්‍රතිපෝෂණ සංඥාවක් භාවිතා කරයි.

RC සර්වෝ මෝටරය එකම  නියමය මත ක්‍රියා කරයි. එහි කුඩා ඩීසී මෝටරයක් එලවුම් යටිය හා  ගියර් හරහා සම්බන්ධ වේ.

එලවුම් යටිය servo මෝටරය ධාවනය කරන අතර එය විචල්‍ය ප්‍රතිරෝධයකටද සම්බන්ධ වේ.

විචල්‍ය ප්‍රතිරෝධයකය විසින් දැන් පවතින ස්ථානයේ සිට ඉලක්කගත ස්ථානයට servo motor එක ගමන් කරන තෙක් ප්‍රතිපෝෂණය සංඥාවක් සපයයි.

Servo Motor ක්‍රියා කරන්නේ කෙසේද?

සංඥා ස්පන්දන මාලාවක් යැවීමෙන් ඔබට සර්වෝ මෝටරය පාලනය කළ හැකිය. සාම්ප්‍රදායික Analog සර්වෝ මෝටරයක් දළ වශයෙන් සෑම මිලි තත්පර 20 කටම ස්පන්දනයක් ලැබෙනු ඇතැයි අපේක්ෂා කරයි (එනම් සංඛ්‍යාතය 50Hz විය යුතුය).

ස්පන්දන සංඥාවේ දිග සර්වෝ මෝටරයේ පිහිටීම තීරණය කරයි.

  • ස්පන්දනය 1ms ට ඉහළ නම්, සර්වෝ කෝණය ශුන්‍ය වේ.
  • ස්පන්දනය 1.5ms ට ඉහළ නම්, සර්වෝ කෝණය මධ්‍ය ස්ථානයේ සිටී.
  • ස්පන්දනය 2 ms ට ඉහළ නම්,සර්වෝ කෝණය අංශක 180 ක් වනු ඇත.
  • මීටර් 1ms ත් 2 msත් අතර ස්පන්දන මගින් සර්වෝ කෝණය එහි සම්පූර්ණ අංශක 180 ක් පුරාවට ගමන් කරයි.
ස්පන්දනයේ කාලසීමාව සමහර විට විවිධ වෙළඳ නාම සමඟ වෙනස් විය හැකි අතර ඒවා අංශක 0 සඳහා 0.5ms සහ අංශක 180 සඳහා 2.5ms විය හැකිය

Servo Motor පින් සම්බන්ධ කරන් ආකාරය

සර්වෝ මෝටරයට සාමාන්‍යයෙන් සම්බන්ධක පින් තුනක් ඇති අතර ඒවා පහත පරිදි වේ.

  • GND  Arduino බොර්ඩ් එකෙහි GND සමග සම්බන්ධ වේ.
  • 5V යනු Arduino බොර්ඩ් එකේ 5V පින් එකට සම්බන්ධ කරන බල සැපයුම වේ.
  • Control servo motor එක පාලනය කිරීමට යොදාගනී.

වයර් වල වර්ණය සර්වෝ මෝටර වර්ග අතර වෙනස් වේ, නමුත් රතු වයරය සැමවිටම 5V වන අතර GND කළු හෝ දුඹුරු වේ. Control වයරය සාමාන්‍යයෙන් තැඹිලි හෝ කහ වේ.

Servo Motor සහ Arduino බොර්ඩ් එක සම්බන්ධ කිරිම.

අපි සර්වෝ මෝටරය Arduino බොර්ඩ් එකට සම්බන්ධ කරමු

උදාහරණයක් ලෙස අපි SG90 micro Servo එක භාවිතා කරමු. එය 4.8-6VDC (5V) මත ධාවනය වන අතර දළ වශයෙන් අංශක 180 ක් (එක් එක් දිශාවට 90) භ්‍රමණය කළ හැකිය.

එය චලනය වන විට 100mA සිට 250mA දක්වා පරිභෝජනය කරයි, එබැවින් අපට Arduino හි 5V පින් එකක් මඟින් එය බල ගැන්විය හැකිය.

ඔබ සතුව 250mA ට වඩා පරිභෝජනය කරන Servo එකක් තිබේ නම්, ඔබේ Servo Motor  සඳහා වෙනම බල සැපයුමක් භාවිතා කරන්න .

රතු wire එක Arduino (හෝ DC jack) මත 5V හා කළු / දුඹුරු වයර් GND පින් එකට  සම්බන්ධ කරන්න. අවසාන වශයෙන් කහ වයරය PWM සහිත පින් අංක 9 සමඟ සම්බන්ධ කරන්න.

Arduino Code – Sweep උදාහරණය

අපගේ පළමු Arduino කේතය සඳහා, අපි Arduino IDE සමඟ එන උදාහරණ වලින් එකක් භාවිතා කරමු.

උදාහරණ මෙනු එක වෙත යන්න. Servo තෝරන්න ඉන්පසු sweep මත click කරන්න.

ඉන්පසු  කේතයි upload කරන්න. මෝටරය එක් දිශාවකට ගමන් කර නැවත වෙනත් දිශාවකට ගමන් කරන ආකාරය ඔබට පෙනෙනු ඇත.

#include <Servo.h>

int servoPin = 9;
Servo servo;
int angle = 0;  // servo position in degrees

void setup() {
    servo.attach(servoPin);
}

void loop() {

    // scan from 0 to 180 degrees
    for(angle = 0; angle < 180; angle++) {
        servo.write(angle);
        delay(15);
    }
    
    // now scan back from 180 to 0 degrees
    for(angle = 180; angle > 0; angle--) {
        servo.write(angle);
        delay(15);
    }
}

පැහැදිලි කිරීම:

Servo පාලනය කිරීම පහසු කාර්යයක් නොවේ, Arduino IDE හි දැනටමත් servo නම් හොඳ library එක ඇත. එයට සරල විධානයන් ඇතුළත් වන අතර එමඟින් ඔබට නිශ්චිත කෝණයකට හැරවීමට servo motor එකට ඉක්මනින් උපදෙස් දිය හැකිය.

ඔබ මෙම විධානයන් භාවිතා කිරීමට යන්නේ නම්, ඔබ මෙම විධානය සමඟ servo library එක  ඔබගේ කේතයට ඇතුලත් කර ගත යුතුය:

#include <Servo.h>

අපි ඊළඟට කරන්නේ servo මෝටරයේ පාලක පින් සම්බන්ධ කර ඇති Arduino පින් එක ප්‍රකාශ කිරීමයි.

int servoPin = 9;

පහත පේළිය servo object එකක් නිර්මාණය කරයි.

Servo servo;

ඔබට සැබවින්ම මේ ආකාරයෙන් servo අටක් දක්වා අර්ථ දැක්විය හැකිය, නිදසුනක් ලෙස, අපට servo දෙකක් තිබේ නම්, අපට මෙලෙස එය ලබාදිය හැකිය:

Servo servo1;
Servo servo2;

Servo එකෙහි හි වත්මන් කෝණය අංශක වලින් ගබඩා කිරීම සඳහා මෙම විචල්‍ය (variable) භාවිතා කරයි.

int angle = 0;

Setup function එකෙදී අපි මෙම විධානය භාවිතා කරමින් servo එක පාලනය කරන පින් එකට servo object එක සම්බන්ධ කරමු:

servo.attach(servoPin);

Loop function එක තුල loop දෙකක් අඩංගු වේ. පළමු loop එක කෝණය එක් දිශාවකට ද දෙවැන්න ප්‍රතිවිරුද්ධ දිශාවට ද වැඩි කරයි.

පහත දැක්වෙන විධානය මඟින් servo එකෙහි පිහිටීම නිශ්චිත කෝණයට සකසයි .

servo.write(angle);

දෝෂ සැකසීම

සමහර විට ඔබ එය Arduino වෙතින් කෙලින්ම ධාවනය කිරීමට තීරණය කළහොත් ඔබේ servo එක වැරදි ලෙස හැසිරෙනු ඇත. මෙයට හේතුව, විශේෂයෙන් ආරම්භක අවධියේදී servo motor එක සැලකිය යුතු බලයක් ලබා ගැනීමයි මෙය Arduino board එක නැවත සැකසීමට(reset වීමට) හේතු විය හැක.

මෙය සිදුවුවහොත්, සාමාන්‍යයෙන් GND සහ 5V අතර තරමක් විශාල විද්‍යුත් විච්ඡේදක ධාරිත්‍රකයක් (470uF – 1000uF) තැබීමෙන් ඔබට මෙය නිවැරදි කළ හැකිය.

ධාරිත්‍රකය විදුලිය සංචිතයක් ලෙස ක්‍රියා කරයි, එබැවින් මෝටරය ආරම්භ වන විට එය ධාරිත්‍රකයෙන් මෙන්ම Arduino board එකෙහි සැපයුමෙන්ද ආරෝපණය වේ.

ධාරිත්‍රකයේ දිගු අග්‍රය 5V හා කෙටි අග්‍රය GND වෙත සම්බන්ධ කළ යුතුය.

විචල්‍ය ප්‍රතිරෝධකයක් මගින් Servo motor එක පාලනය කිරීම

අපගේ මීලඟ පියවර වන්නේ විචල්‍ය ප්‍රතිරෝධකයක් එක් කිරීමයි, එවිට අපට servo එකෙහි පිහිටීම එමගින්  පාලනය කළ හැකිය.

සම්බන්ධ කරන ආකාරය

රැහැන් සටහනේ දැක්වෙන පරිදි ඔබට විචල්‍ය ප්‍රතිරෝධකයක් අවශ්‍ය වනු ඇත, 10k සිට ඉහළට ඇති ඕනෑම අගයක් හරි වනු ඇත. විචල්‍ය ප්‍රතිරෝධකයේ එක් කෙළවරක් GND හා සම්බන්ධ කරන්න, අනෙක් කෙළවර Arduino 5V හා වයිපර් එක analog input A0 සමඟ සම්බන්ධ කරන්න.

Arduino sketch

මෙමගින් servo motor එක ප්‍රතිරෝධකයේ පිහිටීම අනුගමනය කරමින් ඒ අනුව ක්‍රියාකරයි

#include <Servo.h>
int potPin = 0;
int servoPin = 9;
Servo servo;

void setup() {
    servo.attach(servoPin);
}

void loop() {
    int reading = analogRead(potPin);
    int angle = map(reading, 0, 1023, 0, 180);
    servo.write(angle);
}

පැහැදිලි කිරීම:

දැන්  මෙහි potpin නමින් නව විචල්‍යයක් ඇත . මෙය විචල්‍ය ප්‍රතිරෝධකය සම්බන්ධව ඇති පින් එක ලබාදීමට යොදා ගනී .

Loop function එකෙදී , අපි analog පින් A0 වෙතින් ලැබෙන අගය කියවා එය reading නම් විචල්‍යකට ආදේශ කර ගනු ලබයි .

int reading = analogRead(potPin);

මෙය අපට 0 ත් 1023 ත් අතර අගයක් ලබා දෙයි. නමුත් servo එකට භ්‍රමණය විය හැක්කේ අංශක 180 ක් පමණි.

මෙය කළ හැකි එක් ක්‍රමයක් නම්, එක් පරාසයක සිට තවත් පරාසයකට සංඛ්‍යාවක් නැවත map කිරීමට  Arduino map () ශ්‍රිතය භාවිතා කිරීමයි. එබැවින්, පහත කේතය අංශක 0 ත් 180 ත් අතර කෝණය නිරූපණය කිරීම සඳහා අගය නැවත සකස් කරයි..

int angle = map(reading, 0, 1023, 0, 180);

අවසාන වශයෙන්, අපි ප්‍රතිරෝධකය  විසින් තෝරාගත් කෝණයට servo motor එකෙහි පිහිටීම write () function එක භාවිතයෙන් සකස් කරයි .

servo.write(angle);

Leave a Reply

Your email address will not be published. Required fields are marked *

Index