Introduction
Programming ေတြ စသင္တဲ႔ အခ်ိန္မွာ Hello World! ဆိုတဲ႔ စာေၾကာင္းေလးကို ေမာ္နီတာမွာ ေပၚလာေအာင္ ေရးၾကရပါတယ္။ အခု Arduino ရဲ႕ ပထမဆံုး hello world သင္ခန္းစာေလးကေတာ႔ LED တစ္လံုးကို မွိတ္တုတ္ မွိတ္တုတ္ လင္းတလွည္႔ မွိန္တလွည္႔လုပ္ျပရတဲ႔ Blink program ေလးပဲ ျဖစ္ပါတယ္။
...
LED ေတြဟာ ေသးငယ္ၿပီး ပါဝါစား သက္သာေပမယ္႔ အလြန္ အသံုးဝင္ၿပီး အလင္းေရာင္ကို ေကာင္းစြာ ထုတ္ေပးႏိုင္တာေၾကာင္႔ ေနရာအမ်ိဳးမ်ိဳးမွာ အသံုးျပဳေနၾကတာ ျဖစ္ပါတယ္။ ဒီသင္ခန္းစာေလးဟာ အလြန္ရိုးရွင္းၿပီး Arduino ရဲ႕ digital pin အဖြင္႔အပိတ္နဲ႔ အခ်ိန္ delay တို႔ကို နားလည္ေအာင္ ရည္ရြယ္ထားတာ ျဖစ္ပါတယ္။ ဒီလို အေျခခံက်တဲ႔ အပိုင္းကို နားလည္သြားျခင္းျဖင္႔ ေနာက္ပိုင္း ပိုမိုရႈပ္ေထြးတဲ႔ ပေရာဂ်က္ေတြကို လုပ္ေဆာင္ဖို႔ မိမိကိုယ္ကို ယံုၾကည္မႈ ရွိလာေစမွာ ျဖစ္ပါတယ္။
...
လိုအပ္ေသာ ပစၥည္းမ်ား
ဒီပေရာဂ်က္ကို လုပ္ေဆာင္ဖို႔ ေအာက္ပါ ပစၥည္းေတြ စုေဆာင္းထားဖို႔ လိုအပ္မွာ ျဖစ္ပါတယ္။
- Breadboard (Project board) တစ္ခု
- Arduino UNO တစ္ခု
- LED တစ္လံုး
- 100 Ohm မွ 330 Ohm ၾကား Resistor တစ္လံုး
- Jumper Wires (male to male) သံုးေခ်ာင္းတို႔ ျဖစ္ပါတယ္
...
LED မိတ္ဆက္
Light-Emitting Diode (LED) သည္ diode တစ္လံုးပင္ ျဖစ္ေသာေၾကာင္႔ current direction တစ္ဖက္တည္း စီးဆင္းႏိုင္သည္။ တစ္လမ္းေမာင္း စနစ္ကဲ႔သို႔ပင္ ျဖစ္သည္။ LED ထဲသို႔ current စီးဝင္ခြင္႔ ရသည္ႏွင္႔ အလင္းထြက္လာမည္ ျဖစ္သည္။ ပံုတြင္ျပထားသည္႔ LED တြင္ ေျခေထာက္ႏွစ္ေခ်ာင္းရွိၿပီး တစ္ေခ်ာင္းသည္ အျခား တစ္ေခ်ာင္းထက္ ပိုရွည္ေနပါသည္။
ထိုသို႔ ရွည္သည္႔ ေျခေထာက္သည္ Anode (အေပါင္းဖက္) ျဖစ္ၿပီး LED ထဲသို႔ current စတင္ စီးဝင္သည္႔ ဖက္ျဖစ္သည္။ အဆိုပါ ေျခေထာက္ကို ဘက္ထရီ (သို႔) current soure ၏ အေပါင္းဖက္ႏွင္႔ အျမဲခ်ိတ္ဆက္ရမည္ ျဖစ္သည္။
တိုေသာ ေျခေထာက္သည္ Cathode (အႏုတ္ဖက္) ျဖစ္ၿပီး ၄င္းမွ တဆင္႔ current စီးထြက္လာမည္ ျဖစ္ပါသည္။ ၄င္းေျခေထာက္ကို ဘက္ထရီ၏ အႏုတ္ဖက္ႏွင္႔ အျမဲခ်ိတ္ဆက္ရမည္ ျဖစ္ပါသည္။
LED ကို Arduino pin ႏွင္႔ ဆက္ရာတြင္ LED ၏ အေပါင္းဖက္ ေျခေထာက္ရွည္ကို မိမိတို႔ ထိန္းခ်ဳပ္မည္႔ Arduino pin ႏွင္႔ ဆက္ေပးရမည္ ျဖစ္ၿပီး LED ၏ အႏုတ္ဖက္ကို Arduino ၏ Gnd pin ႏွင္႔ ခ်ိတ္ေပးရမည္ ျဖစ္သည္။
ထိုသို႔ ခ်ိတ္ဆက္ရာတြင္ LED အတြင္း စီးဆင္းေသာ current ပမာဏ မ်ားသြားလွ်င္ LED ေလာင္ကၽြမ္းသြားမည္ ျဖစ္ပါသည္။ အၾကမ္းဖ်င္းအားျဖင္႔ အဆိုပါ current ပမာဏကို ကန္႔သတ္ရန္ 100 Ohm မွ 330 Ohm ၾကား resistor တစ္လံုးကို LED ႏွင္႔ series ဆက္ေပးရမည္ ျဖစ္ပါသည္။ Resistor ကို တပ္ဆင္ရာတြင္ အေပါင္းအႏုတ္ ကန္႔သတ္ခ်က္ မရွိသျဖင္႔ LED ၏ မည္သည္႔ဖက္ႏွင္႔မဆို ခ်ိတ္ဆက္ အသံုးျပဳႏိုင္ပါသည္။
ပံုတြင္ resistor ကို LED ၏ အႏုတ္ဖက္ႏွင္႔ ခ်ိတ္ဆက္ေပးထားပါသည္။
Blink
Arduino ႏွင္႔ led circuit ခ်ိတ္ဆက္ၿပီးသည္႔အခါ ပရိုဂရမ္ ေရးသြင္းရန္ Arduino IDE ကို ဖြင္႔၍ ေအာက္ပါပံုတြင္ ျပထားသည္႔အတိုင္း Blink example sketch ကို ဖြင္႔ပါမည္။
File->Examples->01.Basics->Blink
...
...ထိုအခါ ေအာက္ပါအတိုင္း Blink program ပြင္႔လာသည္ကို ေတြ႕ရမည္ ျဖစ္ပါသည္။
...
Arduino IDE တြင္ နမူနာ ပရိုဂရမ္ေပါင္းမ်ားစြာ ထည္႔သြင္းေပးထားပါသည္။ ၄င္းတို႔ကို ေလ႔လာျခင္းျဖင္႔ Arduino program ေရးသားနည္းမ်ားကို အျမန္ဆံုး နားလည္ သေဘာေပါက္လာေစႏိုင္ပါသည္။
...
Comments
Blink ပရိုဂရမ္ စစခ်င္းတြင္ /* ႏွင္႔ */ ၾကား တြင္ ေအာက္ပါအတိုင္း ရွင္းလင္းခ်က္ comments မ်ားေရးသားထားသည္ကို ေတြ႕ရမည္ ျဖစ္ပါသည္။
/*
Blink
Turns an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino
model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/Blink
*/
...
၄င္းတို႔သည္ ကုဒ္မ်ားအေၾကာင္း၊ ပရိုဂရမ္အေၾကာင္း၊ ပရိုဂရမ္ေရးသူအေၾကာင္း၊ website link မ်ား၊ ေန႔စြဲမ်ားကို မွတ္တမ္းတင္ထားရန္ ေရးထားျခင္းသာျဖစ္ၿပီး ပရိုဂရမ္၏ အလုပ္လုပ္ရာတြင္ ပါဝင္မႈ မရွိပါ။ comments မ်ားေရးသားရာတြင္ // ကို သံုးၿပီး ေရးသားပါက ၄င္းေနာက္ရွိ စာေၾကာင္း တစ္ေၾကာင္းကို comment အျဖစ္ သတ္မွတ္ၿပီး /* ႏွင္႔ */ ကို အသံုးျပဳပါက ၄င္းတို႔ အဖြင္႔အပိတ္အၾကားရွိ စာသားအားလံုးကို comment အျဖစ္ သတ္မွတ္ပါသည္။
...
Coding ရွင္းလင္းခ်က္
Blink sketch တြင္ ပါဝင္သည္႔ ကုဒ္မ်ားကို ေအာက္တြင္ ေဖၚျပေပးထားပါသည္-
...
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
...
Arduino sketches မ်ားသည္ C/C++ ပရိုဂရမ္မ်ားပင္ ျဖစ္ပါသည္။ C/C++ ပရိုဂရမ္မ်ားတြင္ main() function ပါဝင္ေလ႔ ရွိေသာ္လည္း Arduino sketchs မ်ားတြင္မူ မပါဝင္ပါ။
Arduino sketchs မ်ားတြင္ မျဖစ္မေန ပါဝင္ရသည္႔ functions မ်ားမွာ void setup() ႏွင္႔ void loop() တို႔ ျဖစ္သည္။
..
void setup() သည္ ပရိုဂရမ္ စစျခင္း (သို႔မဟုတ္ reset လုပ္သည္႔ အခ်ိန္တြင္) စတင္အလုပ္လုပ္ေသာ function ျဖစ္ၿပီး တစ္ႀကိမ္သာ အလုပ္လုပ္ပါသည္။ ထို႔ေၾကာင္႔ မိမိတို႔ Arduino စတင္လွ်င္ ေပးခ်င္သည္႔ setting မ်ား သတ္မွတ္ေပးရန္ အသံုးျပဳေလ႔ ရွိၾကပါသည္။
..
void loop() သည္ setup() run ၿပီးသည္႔ အခ်ိန္မွ စ၍ ပါဝါ မပိတ္မခ်င္း (reset မလုပ္မခ်င္း) အဆက္မျပတ္ အစမွ အဆံုး looping ပတ္ကာ လုပ္ေဆာင္ေနမည္႔ function ျဖစ္ပါသည္။ ထို႔ေၾကာင္႔ input မ်ားဖတ္ျခင္း၊ processing ျပဳလုပ္ျခင္း ႏွင္႔ output မ်ားထုတ္ျခင္းကို အဆက္မျပတ္ အလွည္႔က် ျပဳလုပ္ေပးႏိုင္ပါသည္။
...
pinMode() function သည္ Arduino ၏ digital pins မ်ားကို input သို႔မဟုတ္ output အျဖစ္ အသံုးျပဳရန္ ျပင္ဆင္ေပးပါသည္။
pinMode() function တြင္ arguments ႏွစ္ခု ထည္႔သြင္းေပးရန္ လိုအပ္ပါသည္။
...
ပထမ argument မွာ မိမိတို႔ ျပင္ဆင္အသံုးျပဳမည္႔ digital pin ၏ နံပါတ္ ျဖစ္ပါသည္။ ဥပမာ (0 to 13 for UNO)။ ယခုနမူနာတြင္ LED_BUILTIN ကို ထည္႔ေပးထားျခင္းသည္ UNO ၏ built in LED အား digital pin 13 ႏွင္႔ ခ်ိတ္ဆက္ေပးထားသျဖင္႔ အဆိုပါ pin ကို ရည္ညႊန္းပါသည္။ ၄င္းအစား pinMode(13, OUTPUT); ဟုလည္း ရိုးရွင္းစြာ အသံုးျပဳႏိုင္ပါသည္။ သို႔ရာတြင္ မိမိအသံုးျပဳေနေသာ Arduino ၏ built in LED အား မည္သည္႔ digital pin ႏွင္႔ ခ်ိတ္ဆက္ထားမွန္း မသိသည္႔အခါတြင္ အလြယ္တကူ အသံုးျပဳႏိုင္ရန္ LED_BUILTIN constant ကို စီစဥ္ ထည္႔သြင္းေပးထားျခင္းပင္ ျဖစ္ပါသည္။
...
ဒုတိယ argument မွာ digital pin ကို အသံုးျပဳမည္႔ ပံုစံ ျဖစ္ပါသည္။ Input အေနႏွင္႔ ျဖစ္ေစ၊ output အေနျဖင္႔ ျဖစ္ေစ အသံုးျပဳႏိုင္ၿပီး စာလံုးအႀကီးျဖင္႔ INPUT သို႔မဟုတ္ OUTPUT အျဖစ္ ထည္႔သြင္းေပးရမည္ ျဖစ္ပါသည္။ INPUT_PULLUP ကို အသံုးျပဳ၍ internal pullup resistors မ်ား enable ျပဳလုပ္ပံုကို ေနာက္ပိုင္း အလ်င္းသင္႔သည္႔ ေနရာမ်ားတြင္ ရွင္းျပေပးသြားမည္ ျဖစ္ပါသည္။
လက္ေတြ႕ ပရိုဂရမ္ ေရးသားရာတြင္ pinMode() function ကို output ထုတ္ယူမည္႔ digital pin မ်ားအတြက္သာ ေၾကျငာေပးရန္ လိုပါသည္။ Input အတြက္မူ ေၾကျငာစရာ မလိုဘဲ အသံုးျပဳႏိုင္ပါသည္။
Note: digital pin output ကို pinMode() function ျဖင္႔ ျပင္ဆင္မထားဘဲ သံုးမိပါက controller အတြင္းရွိ enable ျဖစ္ေနေသာ high internal resistance ေၾကာင္႔ current အနည္းငယ္သာ ထြက္လာၿပီး မီးမွိန္မွိန္ေလးသာ လင္းလာမည္ကို သတိျပဳပါ။
...
Digital pin မ်ားအား အဖြင္႔အပိတ္ ျပဳလုပ္ျခင္း
Digital pin မ်ား (0-13) ကို အဖြင္႔အပိတ္ ျပဳလုပ္ႏိုင္ရန္ digitalWrite() function ကို အသံုးျပဳရမည္ ျဖစ္ပါသည္။ digitalWrite() function တြင္ arguments ႏွစ္ခု ထည္႔သြင္းေပးရန္ လိုအပ္ပါသည္။
ပထမ argument မွာ မိမိတို႔ အဖြင္႔အပိတ္ ျပဳလုပ္မည္႔ digital pin ၏ နံပါတ္ ျဖစ္ပါသည္။
ဒုတိယ argument မွာ ဖြင္႔မည္ သို႔ ပိတ္မည္ကို HIGH, LOW ျဖင္႔ သတ္မွတ္ေပးရသည္။ HIGH သတ္မွတ္ေပးလိုက္ပါက အဆိုပါ digital pin မွ 5V ထြက္လာမည္ျဖစ္ၿပီး LOW သတ္မွတ္ေပးပါက 0V ျဖစ္သြားေပလိမ္႔မည္။
...
အခ်ိန္ တစ္ခု ေစာင္႔ဆိုင္းျခင္း
Arduino program မ်ားအတြင္းတြင္ timer သေဘာမ်ိဳး အခ်ိန္တစ္ခုကို ေစာင္႔ဆိုင္းကာ ေဆာင္ရြက္ႏိုင္ေစရန္ delay() function ကို အသံုးျပဳ ေရးသားႏိုင္ပါသည္။
delay() function တြင္ argument တစ္ခုသာ ထည္႔သြင္းေပးရန္ လိုအပ္ၿပီး ေစာင္႔ဆိုင္းလိုသည္႔ အခ်ိန္ကို milliseconds ျဖင္႔ ထည္႔သြင္းေပးရမည္ ျဖစ္သည္။ 1000 ms သည္ 1 s ျဖစ္ေသာေၾကာင္႔ တစ္စကၠန္႔ ေစာင္႔ဆိုင္းလိုပါက delay(1000); ဟု ေရးသားရမည္ ျဖစ္သည္။
...
Note: ပရိုဂရမ္ တစ္ေၾကာင္း ေရးၿပီးတိုင္း semi column (;) ကို အပိတ္အေနျဖင္႔ ထည္႔သြင္းေရးသားေပးရမည္ ျဖစ္သည္။
...
Blink program ၏ algorithm ကို ျပန္လည္ေလ႔လာရမည္ ဆိုပါက -
ပထမဦးစြာ setup() function အတြင္း -
မိမိတို႔ ဖြင္႔လိုက္ ပိတ္လိုက္ ျပဳလုပ္မည္႔ digital pin ကို OUTPUT အျဖစ္ ျပင္ဆင္သတ္မွတ္ပါသည္။
...
ထို႔ေနာက္ အႀကိမ္ႀကိမ္ မနားတမ္း အလုပ္လုပ္မည္႔ loop() function အတြင္း -
အဆိုပါ digital pin ကို ဖြင္႔မည္။
တစ္စကၠန္႔ ေစာင္႔မည္။
ပိတ္မည္။
တစ္စကၠန္႔ေစာင္႔မည္
ဟု ေရးသားထားပါသည္။
...
ထို႔ေၾကာင္႔ အဆိုပါ pin ႏွင္႔ ခ်ိတ္ဆက္ထားေသာ LED မီးလံုး (သို႔မဟုတ္) builtin LED သည္ မွိတ္တုတ္မွိတ္တုတ္ တစ္စကၠန္႔စီ မဆံုးႏိုင္ေအာင္ ျဖစ္ေနပါလိမ္႔မည္ ခင္ဗ်ား...
...
Dr. Aung Win Htut
Founder and President
Green Hackers
ေက်းဇူးအမ်ားၾကီးတင္ပါတယ္ဆရာခင္ဗ်ာ။
ReplyDeleteေက်းဇူးပါဆရာ
ReplyDeleteေက်းဇူးပါဆရာ
ReplyDeleteေက်းဇူးအမ်ားႀကီးတင္ပါသည္ဆရာ
ReplyDeleteေက်းဇူးပါ
ReplyDelete