Monday, December 31, 2012

සිංහලෙන් අන්තර්ජාලයට පිවිසෙන්න අදියගෙ බ්ලොග් එක

සිංහලෙන් අන්තර්ජාලයට පිවිසෙන්න අදියගෙ බ්ලොග් එක


Arduino Tutorials #5 - Knight Rider & For Loop

Posted: 30 Dec 2012 10:46 PM PST

මීට කලින් පළවුනු ලිපි...

#1 - Introduction
#2 - Config & IDE
#3 - Blink!
#4 - Basic Electronics

දැන් මේ වෙනකොට ඔයගොල්ලෝ හැමෝම සාර්ථකව තමන්ගේ ප්‍රථම ප්‍රෝග්‍රෑම් එක එහෙම ලියලා ඉන්නවා කියලා මම හිතනවා. අද මේ Tutorial එකෙන් මම බලාපොරොත්තු වෙන්නේ for loop එක හඳුන්වා දීම හා ඒ හරහා නයිට් රයිඩර් පරිපථයක් නිර්මාණය කිරීමයි. වැඩිය කතා නැතුව අපි කෙළින්ම වැඩට බහිමු.

Project #2 - Knight Rider Circuit!

   #Hardware

මේක project එක කළින් එකෙන් වෙනස් වෙන ප්‍රධානම හේතුව තමයි මේකට එළියෙන් පරිපථයක් නිර්මාණය කිරීමට අවශ්‍ය වීම. මෙතනදී නම් අපට LED 7ක් සහ ඒ LED වලට 220ohm ප්‍රතිරෝධක 7ක් අවශ්‍ය වෙනවා. මේ LED ටික අපි Arduino Board එකේ Digital I/O 2 සිට 8 දක්වා pins වලට සවි කරන්න ඕන. මෙතනදී අපි හදන පරිපථය පේන්නේ මෙහෙමයි.


Breadboard View

මේ තියෙන්නේ ඒකට අදාල Schematic එක.

Schematic View


මේ ටික සවිකරාම ඇත්ත ලෝකයේදී පේන්නේ මෙන්න මේ විදියට...




   #Software

දැන් අපි ප්‍රෝග්‍රෑම් එක ලියන්න පටන්ගමු. ඉස්සෙල්ලාම අපි මේ පරිපථයේ නිවෙන පත්තුවෙන වේගය define කරන්න ඕන. ඒ නිසා ඉස්සෙල්ලාම ඒ වේගය Int එකක් විදියට Define කරන්න.

int Speed = 100;

ඊළඟට අපි අපේ LED තියෙන පින්ස් හතම Outputs විදියට නම් කරන්න ඕන. ඒ සඳහා ක්‍රම දෙකක් තියෙනවා. පළවෙනි ක්‍රමය නම් නිකම්ම ඔක්කොම පින්ස් ටික මේ වගේ වෙන වෙනම Outputs විදියට නම් කරන එකයි.

pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
.      .        . ;
.      .        . ;
pinMode(8, OUTPUT);

ඒවුනාට මේ වගේ දෙයක් කරන්න අපිට for loop එක භාවිතා කරන්න පුලුවන්. for loop එක කියන්නේ Arduino language වල තියෙන තවත් Control Structure එකක්. මේ loop එක භාවිතා කරන්නේ එකම ප්‍රකාශනයක් ( Statement එකක් ) නැවත නැවතත් Repeat කරන්න. for loop එකේ සැකැස්ම මෙහෙමයි.


------------------------------------------------------------------


Image Courtesy arduino.cc

දැන් මේ loop එක වැඩකරන්නේ මෙහෙමයි.

ඔය initialize කියල තියෙන කොටස (int x = 0; කියන කොටස) ක්‍රියාත්මක වෙන්නේ හරියටම එක පාරයි. ඒ loop එක ආරම්භයේදී විතරයි.

ඊටපස්සේ ඕකේ test කියල තියෙන කොටස මඟින් අපි දෙන condition එක පරීක්ෂා කෙරෙනවා (මෙතනදී නම් condition එක වෙන්නේ x < 100)

ඒ Condition එක True නම් (මෙතනදී නම් x, 100ට වඩා අඩු නම්) loop එකේ Statement block එක ක්‍රියාත්මක වෙනවා (මෙතනදී නම් println(x); කියන කොටස, එකෙන් x = 0 කියලා print වෙනවා).

ඒක ක්‍රියාත්මක වෙලා අවසාන වුනාට පස්සේ increment or decrement වෙලා අපි define කරපු variable එකේ අගය වෙනස් වෙනවා (මෙතනදී නම් x වල අගය 0වේ සිට 1ට වැඩි වෙනවා).

ඊට පස්සේ නැවතත් test එක වෙලා Statement Block එකට යනවා (දැන් ආපහු පාරක් initialize වෙන්නේ නෑ ) නමුත් දැන් තියෙන වෙනස නම් x වල අගය 1ක් වීමයි. (ඒ නිසා print වෙන්නේ x = 1 කියලයි).

මේක මේ විදියට දිගින් දිගටම condition එක false වෙනකන් (මෙතනදී නම් x වල අගය 99ට වැඩි වෙනකම්) ක්‍රියාත්මක වෙනවා. ඊට පස්සේ loop එක අවසාන වෙලා ඊළඟ function එකට යනවා.


-------------------------------------------------------------

දැන් අපි ඕක ගැන වැඩිය හිතන්නේ නැතුව අපි දැන් for loop එක භාවිතා කරලා 2 සිට 8 දක්වා Digital Pins outputs බවට පත් කර ගමු. ඒක කරන්නේ මෙහෙමයි.


void setup() {
  for(int ledPins = 2; ledPins < 9; ledPins++) {
    pinMode(ledPins, OUTPUT);
  }
}

දැන් Programme එකේ ප්‍රධාන කොටස වෙන LED නිවීම හා දැල්වීම කරන්න ඕනේ. අපිට මේ ටික කරගන්න for loop දෙකක් අවශ්‍ය වෙනවා. මේ loops දෙක ක්‍රියාත්මක වෙන්නේ මෙහෙමයි.




පළවෙනි loop එකෙන් LED 1 සිට 6 දක්වා දැල්වෙනවා. දෙවැනි loop එකෙන් LED 7 සිට 2 දක්වා අනිත් පැත්තට දැල්වෙනවා. මේ ටික නැවත නැවතත් Repeat වෙනකොට අපිට ඕන කරන effect එක ලබාගන්න පුලුවන්. මේ සඳහා අවශ්‍ය කරන loops දෙකේ කේත සටහන් මෙහෙමයි.


void loop() {
  
  for(int ledPins = 2; ledPins < 8; ledPins++) {
    digitalWrite(ledPins, HIGH);
    delay(Speed);
    digitalWrite(ledPins, LOW);
  }
  
  for(int ledPins = 8; ledPins > 2; ledPins--) {
    digitalWrite(ledPins, HIGH);
    delay(Speed);
    digitalWrite(ledPins, LOW);
  }
}

ඔය කේත ටික හැමෝටම දැන් තේරුම්ගන්න පුලුවන් ඇති කියලා මම හිතනවා. කලින් ප්‍රෝග්‍රෑම් එකට වඩා මේකේ තියෙන එකම වෙනස අපි digitalWrite function එක ඇතුලට කෙලින්ම pin number එක දාන්නේ නැතුව ඒ සඳහා for loop එක ඇතුලේ define කරපු variable එක යොදාගෙන තිබීම විතරයි.මේ දැක්වෙන්නේ අපේ සම්පූර්ණ ප්‍රෝග්‍රෑම් එක..


int Speed = 100;

void setup() {
  for(int ledPins = 2; ledPins < 9; ledPins++) {
    pinMode(ledPins, OUTPUT);
  }
}

void loop() {
  
  for(int ledPins = 2; ledPins < 8; ledPins++) {
    digitalWrite(ledPins, HIGH);
    delay(Speed);
    digitalWrite(ledPins, LOW);
  }
  
  for(int ledPins = 8; ledPins > 2; ledPins--) {
    digitalWrite(ledPins, HIGH);
    delay(Speed);
    digitalWrite(ledPins, LOW);
  }
}

දැන් ඉතින් දෙයියනේ කියලා Arduino බෝඩ් එක කොම්පීතරේට හයි කරලා හරියට කෝඩ් එක ටයිප් කරලා Upload button එක ඔබන්න. මේ තියෙන්නේ මම හදපු Circuit එකේ වීඩීයෝ එකක්. මගේ කැමරාවේ පොඩි අව්ලක් නිසා Audio රෙකෝඩ් වෙන්නේ නෑ :'(  :'( ඒ වුනාට ඉතින් බලන්න පුලුවන්... 



එහෙනම් කස්ටියටම ගුඩ්බායි... අදට පෝස්ට් එක ඉවරයි. ඕනම ජාතියක අව්ලක් ගියොත් යටින් කොමෙන්ට් එකක් දාලා අහන්න..

Arduino Tutorials #4 - Basic Electronics

Posted: 30 Dec 2012 08:52 AM PST

ඉස්සෙල්ලාම Arduino සම්බන්ධ පරණ ලිපි කියෙව්වේ නැත්නම් ඒ ටික කියවල එන්න..

#1 - Introduction
#2 - Config and IDE
#3 - Blink!

අපි දැනට Arduino හරහා අපේ පළවෙනි Project එක සාර්ථකව නිමා කරලයි තියෙන්නේ :) මීට වඩා සංකීර්ණ පරිපථවලට යන්න කලින් අපි මූලික ඉලෙක්ට්‍රොනික උපකරණ ගැන දැනගෙන ඉන්න ඕනේ. ඒ නිසා අපි මේ ලිපියෙන් දැනට බහුලව භාවිතා වෙන ඉලෙක්ට්‍රොනික උපකරණ කීපයක් ගැන ඉගෙනගෙන ඉමු. ඉස්සෙල්ලාම බලමු කොහොමද Breadboard එකක් පාවිච්චි කරන්නේ කියලා...

Breadboards

මේ තියෙන්නේ අපිට බහුලවම හමුවෙන ජාතියේ Breadboard එකක්.


A Normal Breadboard

මේ හැම Breadboard එකකම Power Lines සහ අපේ උපකරණ සවිකරන්න වෙනමම කොටස් තියෙනවා. Breadboard එකක් ඇතුලෙ තියෙන Connectionsමේ විදියයි


Breadboard එකක සාමාන්‍ය පෙනුම

Breadboard එක ඇතුලේ connections...

Inside a Breadboard

ඔය කොළපාට ඉරිවලින් පෙන්වන්නේ Breadboard එක ඇතුල සම්බන්ධ වෙන විදියයි. මේවා වලින් දෙපැත්තේ තියෙන දිග Connections දෙක අපි සාමාන්‍යයෙන් යොදාගන්නේ Power Lines විදියටයි. මේක වැඩකරන විදිය අපි ඉදිරියට Projects කරනකොට තවදුරටත් ප්‍රායෝගිකව බලාගන්න පුලුවන් වෙයි. :)

Resistors (ප්‍රතිරෝධක)


සාමාන්‍ය Axial-Lead type ප්‍රතිරෝධකයක්

Resistor එකක් කියන්නේ පරිපථයක් තුල ධාරාව ගලා යෑමට බාධාවක් ඇති කරන උපාංගයක්. අපි හදන ( හෝ දකින ) සෑම පරිපථයකම වගේ අනිවාර්රයෙන්ම ප්‍රතිරෝධක අඩංගු වෙනවා. ප්‍රතිරෝධකවල අගය මනින්නේ Ohm (Ω)  කියන ඒකකය යොදාගෙනයි. සාමාන්‍යයෙන් අපි භාවිත කරන ප්‍රතිරෝධක වල අගය 1Ω සිට 1MΩ දක්වා පමණ වෙනවා. ( 1000Ω = 1KΩ , 1000KΩ = 1MΩ ) ප්‍රතිරෝධක වල අගය සටහන් කරලා තියෙන්නේ විශේශ වර්ණ කේත ක්‍රමයකට අනුවයි. මේ ක්‍රමයට අනුව 0-9 දක්වා අගයන්ට වර්ණ ලබා දී තියෙනවා. මේ ක්‍රමයට අනුව ප්‍රතිරෝධකයක වර්ණ වළලු 4ක් තියෙනවා ( 5ක් තියෙන ප්‍රතිරෝධකත් තියෙනවා. නමුත් ඒවා අපිට වැදගත් වෙන්නේ නෑ ) මේ වළලු වලින් ප්‍රථම හා දෙවන වළලු වල අගය කෙලින්ම ගන්න පුලුවන්. නමුත් 3න් වන වර්ණ වළල්ලේ අගය වෙනුවට අපි එම අගයට අදාල ගුණාකාරයෙන් පළමු අගය වැඩි කරන්න ඕන. හතර වෙනි වළල්ලෙන් පෙන්වන්නේ Tolerance එකයි. ඒ කියන්න රෙසිස්ටරයේ දක්වා ඇති අගය වෙනස් වීමේ ප්‍රතිශතයයි. අපි උදාහරණ කීපයක් අරගෙන බලමු. ඉස්සෙල්ලාම පහත දැක්වෙන වර්ණ වගුව බලන්න.



උදා :- මේ පහළ දැක්වෙන රෙසිස්ටරය බලන්න. 






පළවෙනි වළල්ලේ අගය = 5 ( Green )
දෙවැනි වළල්ලේ අගය = 6 ( Blue )
තුන්වැනි වළල්ලේ අගය = 1 (Brown )
සිවුවැනි වළල්ලේ අගය = ± 5% ( Gold )

සම්පූර්ණ අගය = 56 x 10^1= 560Ω ± 5%

( මෙහිදී පළවෙනි වළල්ලේ අගය හා දෙවැනි වළල්ලේ අගය කෙළින්ම එක ළඟ ලිවිය යුතුයි. ඉන්පසු 3න් වැනි වළල්ලට අදාල ගුණාකාරයෙන් එම අගය ගුණ කළ යුතුයි. )

උදා 2 :- මේ ප්‍රතිරෝධකයේ අගය ගණනය කරමු.




පළවෙනි වළල්ලේ අගය = 4 ( Yellow )
දෙවැනි වළල්ලේ අගය = 7 ( Violet )
තුන්වැනි වළල්ලේ අගය = 3 ( Orange )
සිවුවැනි වළල්ලේ අගය = ± 5% ( Gold )

සම්පූර්ණ අගය = 47 x 10^3= 47000Ω = 47KΩ ± 5%

රෙසිස්ටරයක සම්මත පරිපථ සංකේතය විදියට පහත දැක්වෙන සංකේත දෙකම භාවිතා කරන්න පුලුවන්.




Transistors (ට්‍රාන්සිස්ටර)


විවිධ වර්ගවල ට්‍රාන්සිස්ටර
අපිට විවිධ පරිපථ සාදද්දී තවත් නැතුවම බැරි දෙයක් තමයි ට්‍රාන්සිස්ටර කියන්නේ. ට්‍රාන්සිස්ටරයකට ස්විචයක් විදියට හෝ ධාරා වර්ධකයක් ලෙස ක්‍රියා කරන්න පුලුවන්. අපි මේවායේ ප්‍රායෝගික භාවිත ගැන ඉදිරියට කථා කරමු. ඕනම ට්‍රාන්සිස්ටර්යක අපිට Pins තුනක් දැකගන්න පුලුවන්. මේ Pins නම් කරන්නේ පාදම ( Base - B ), විමෝචකය ( Emitter - E ) හා සංග්‍රාහකය ( Collector - C ) කියලයි. මේවාරින් අපි පාදමට ලබාදෙන ධාරාවක් හරහා සංග්‍රාහකය සහ විමෝචකය අතර ගලා යන විදුලිය පාලනය කරන්න පුලුවන්. අපි පාවිච්චි කරන ට්‍රාන්සිස්ටර NPN හා PNP ලෙස ප්‍රධාන කොටස් දෙකකට වර්ග කරන්න පුලුවන්. මේ වර්ග දෙක අතර තියෙන එකම් වෙනස නම් NPN ට්‍රාන්සිස්ටර වල ධාරාව ගලා යන්නේ C සිට E වෙතටයි. නමුත් PNP ට්‍රාන්සිස්ටරයක ධාරාව ගලා යන්නේ E සිට C වෙතටයි. මම මේවා ගැන මෙතනදී වැඩිය කථා කරන්න යන්නේ නෑ..

TO-92 ප්‍රමාණයේ ට්‍රාන්සිස්ටරවල Pin සැකැස්ම හා අදාල පරිපථ සංකේත
`
Capacitors (ධාරිත්‍රක)


විවිධ වර්ගවල ධාරිත්‍රක
ධාරිත්‍රක භාවිතා වෙන්නේ පරිපථයක තාවකාලිකව විදුලිය රඳවා තබාගැනීමටයි. අපිට සරලවම ධාරිත්‍රයකයක් Rechargable Battery එකක් විදියට හඳුන්වන්න පුලුවන්. එකම වෙනස වෙන්නේ මේකේ ධාරිතාවය සාපේක්ෂව ඉතාම අඩු වීමයි. ( ඔයගොල්ලෝ අනිවාර්රයෙන්ම දැකලා ඇති ඔය Phone Chargers එහෙම ප්‍රධාන විදුලියෙන් විසන්ධි කරපු ගමන්ම ඒකේ තියෙන LED එක නිවෙන්නේ නැති බව. ඒ LED එක ටික වෙලාවක් දිගටම දැල්වෙනවා. එහෙම වෙන්නේ ඒ එක ඇතුලේ තියෙන ධාරිත්‍රක වල Charge එක නිසයි ) ධාරිත්‍රක ප්‍රායෝගික භාවිතයේදී බැටරියක් වගේම ධාරාවන් සුමටනය කීරීමටත් භාවිතා වෙනවා. මේවායේ ප්‍රායෝගික භාවිතයන් අපි ඉදිරියට විමසා බලමු. පහල දැක්වෙන්නේ Capacitors වල සම්මත පරිපථ සංකේතයි.



Diodes

Diode එකක් කියන්නේ මූලිකවම එක පැත්තකට පමණක් ධාරාව ගලා යෑමට ඉඩදෙන ඉලෙක්ට්‍රොනික උපාංගයක්.  LED කියන්නෙත් Diodes වර්ගයක්ම තමයි. Diodes භාවිතා කරලා AC --> DC බවට පත්කිරීම වගේ දේවල් කරන්න පුලුවන්. මේ තියෙන්නේ Diodes වලට අදාල පරිපථ සංකේතය.



Relays (පිළියවන)


Relays!

Relays භාවිතා කරලා අපිට කුඩා ධාරාවක් මඟින් ඉතා විශාල ධාරාවක් පාලනය කරන්න පුලුවන්. ට්‍රාන්සිස්ටර වලට වඩා මේවායේ තියෙන විශේශත්වය වෙන්නේ Relays මඟින් අපේ පරිපථය Load එකෙන් ඒකලිත (Isolate) කිරීමයි. ඒ කියන්නේ අපිට Microcontroller එක මඟින් සාමාන්‍ය 230V AC බල්බයක් දැල්වීමට අවශ්‍ය වුනොත් Relay එකක් භාවිත කරන්න පුලුවන්. එතකොට අපේ පරිපථය හා බල්බය එකිනෙකින් සම්පූර්ණයෙන්ම වෙන්වෙනවා. එතකොට බල්බයට යන විශාල ධාරාව නිසා අපේ Microcontroller එකට හානිවීම වැලැක්වෙනවා. මේවා භාවිතයත් අපි ඉදිරියේදී කරමු.


A Circuit to Drive an AC Device using a Microcontroller

අද පෝස්ට් එකෙන් මම කථාකරන්න බලාපොරොත්තු වෙන්නේ මේ උපාංග ටික ගැන විතරයි. මේවාට අමතරව අපිට ඉලෙක්ට්‍රොනික ලෝකයේදී හමුවන උපාංග ඉතා විශාල ප්‍රමාණයක් තියෙනවා. අපි ඉතින් ඒවා ගැන අදාල තැන්වලදී කථාකරමු...ඕනම ප්‍රශ්නයක් තියෙනවනම් යටින් කමෙන්ට් කරලා අහන්න පුලුවන්...

එහෙනම් අපි කැපුනා! ඊළඟ පෝස්ට් එකෙන් නයිට් රයිඩර් පරිපථය හදමු.. :D