ක්ෂුද්ර පාලක පරිගණක වැඩසටහන්කරණය - Microcontroller Programming 4 කොටස
ක්ෂුද්ර පාලක පරිගණක වැඩසටහන්කරණය යටතේ අපි අද බලමු පරිසර ආලෝක තත්ත්වය මත LED එකක් on / off කිරීම කරන්නේ කොහොමද කියලා. අවසන්වතාවට අපි ඉගෙනගත්තා, දෙන ලබන කාලයට අනුව LED එකක් on / off කිරීම කරන්නේ කොහොමද කියලා.
දැන් ඒ පරිපථයම අපිට වෙනස් කරලා ගන්න පුළුවන්. අළුතින් Hardware මාරු කරන්න අවශ්ය නැහැ. ඉලෙක්ට්රෝනික උපාංග එකතු කිරීම හෝ ඉවත් කිරීම පමණයි කරන්නට තියෙන්නේ. ඊට පස්සේ, අළුතින් Sketch එකක් ලියලා Upload කරනවා. ක්ෂුද්ර පාලක පරිගණක වැඩසටහන්කරණයේ වාසිය ඔන්න ඕකයි. හරිම ලේසියි.
දැන් පරිසර ආලෝක තත්ත්වය යටතේ පරිපථය ක්රියාකරවන්න ඕන නිසා අපිට අවශ්ය වෙනවා අළුත් උපාංගයක්. Light Dependent Resistor (LDR) හෙවත් ආලෝක සංවේදී ප්රතිරෝධකයක් අවශ්යයයි. මේකේ විශේෂත්වය ඒ මතට වැටෙන ආලෝකයේ තීව්රතාව අනුව ප්රතිරෝධය වෙනස් වීමයි.
අපි මේකේ ක්රියාකාරීත්වය ගැන මෙන්න මේ ප්රස්තාරයෙන් අවබෝධ කරගමු.
ආලෝකය නිසා ප්රතිරෝධය වෙනස්වේ. එමගින් වොල්ටීයතාව වෙනස් කරන්න පුළුවන්.
ආලෝකය වැඩිවෙන කොට, R1 ---> 0 කරා ගමන් කරනවා.
ආලෝකය අඩුවෙන කොට, R1 ---> අනන්තය කරා ගමන් කරනවා.
සරලව කියනවා නම්, ආලෝකය වැඩිවෙන කොට ප්රතිරෝධය අඩුවෙනවා. ආලෝකය අඩුවෙන කොට ප්රතිරෝධය වැඩිවෙනවා.
දැන් අපිට පොඩි ගැටලුවක් එනවා. පරිපථවල දී අපි පාවිච්චි කරන්නේ, Digital සංඥා. හැබැයි ආලෝකය කියන්නේ Analog සංඥාවක්. එතකොට Analog --> Digital වලට පරිවර්තනය කරන්න වෙනවා. එතකොට පරිපථයට පොඩි දෙයක් එකතු කරන්න වෙනවා.
මේ රූපයේ හැටියට, R(l) කියන්නේ LDR එක. ඒකේ ප්රතිරෝධය විචල්ය අගයක් ගන්නවා. ඒ කියන්නේ නිතර වෙනස් වෙනවා. එතකොට R(s) කියන්නේ, ස්ථිර අගයක් ඇති ප්රතිරෝධකයක්. ගොඩක් වෙලාවට අපි LDR එක භාවිතා කරනවා Voltage Divider එකක් හැටියට, ඒ කියන්නේ, විභව විභේදකයක් ලෙස.
එතකොට 0 කියන්නේ, අඳුරුයි. 1023 කියන්නේ හොඳටම එළියයි.
අපේ පරිපථය තියෙන්නේ, මෙන්න මේ විදියටයි. මෙහි දී LDR එක Analog සංඥාවක් නිකුත් කරන නිසා A0 නම් Pin එකට සම්බන්ධ කරලා තියෙනවා. බලමු ගැලීම් සටහන.
මෙහි දී දකුණු පැත්තේම තියෙන ගැලීම් සටහනේ, If sensor value < n යනුවෙන් සලකා බලන්නේ, පෙර අර්ථ දක්වපු අගයට වඩා අඩු ද? වැඩි ද ? යන්නයි.
Sketch එක බලමු.
//lightSensor.ino
//Switches a LED and off depending on the ambient light intensity
const int ldrPin = A0; //declare analog input pin A0 as ldrPin
const int ledPin = 8; //declare digital I/O pin 8 as ledPin
void setup() {
pinMode(ledPin,OUTPUT); // configure ledPin as output
}
void loop() {
int sensorValue = analogRead(ldrPin); // read sensor value at ldrPin
if (sensorValue < 150) // if sensor value is less than 150
digitalWrite(ledPin, HIGH); // set letPin High
else
digitalWrite(ledPin, LOW); // otherwise set letPin Low
}
const int ldrPin = A0; ගැන අවධානය යොමු කරන්න.
මෙහි දී const ලෙස අදහස් කෙරෙන්නේ, constant එනම් නිත්ය යන්නයි. එය Pin එකක් declare කිරීමේ දී අර්ථ දක්වන්නේ Sketch එක run වෙනකොට Pin එක වෙනස් වෙන්න පුළුවන් නිසායි.
එසේම මෙහි int යනුවෙන් integer value එකක් ලෙස අර්ථ දක්වා ඇත. නමුත් A අකුර ldrPin එකට assign නොවේ. 0 පමණක් assign වේ.
analogRead(ldrPin); කොටස මගින්, (0 - 1023) අතර සංඛ්යාවක් එන්නට පුළුවන්. ඉතින් මේ අනුව LDR එකට අඳුර වැටුණොත් LED එක දැල්වෙනවා බලන්න පුළුවන්.
පහලින් දකින්නට ලැබෙන්නේ අපි මේ කතා කරපු ක්රියාකාරකමේ Simulation එකක්. ඔයාලට Start Simulation බොත්තම ඔබලා LDR එක මවුස් එකෙන් ක්ලික් කරලා බලන්න. එවිට ආලෝකය සීරු මාරු කරලා බලන්න පුළුවන්. එතකොට LDR එකට අඳුර වැටුණොත් LED එක දැල්වෙන වෙන හැටි ඔබට ම දකින්න පුළුවන්.
Code කියන බොත්තම එබූ විට ඉහලින් සඳහන් කරපු Arduino Code එක දකින්න පුළුවන්.
දැන් ඒ පරිපථයම අපිට වෙනස් කරලා ගන්න පුළුවන්. අළුතින් Hardware මාරු කරන්න අවශ්ය නැහැ. ඉලෙක්ට්රෝනික උපාංග එකතු කිරීම හෝ ඉවත් කිරීම පමණයි කරන්නට තියෙන්නේ. ඊට පස්සේ, අළුතින් Sketch එකක් ලියලා Upload කරනවා. ක්ෂුද්ර පාලක පරිගණක වැඩසටහන්කරණයේ වාසිය ඔන්න ඕකයි. හරිම ලේසියි.
දැන් පරිසර ආලෝක තත්ත්වය යටතේ පරිපථය ක්රියාකරවන්න ඕන නිසා අපිට අවශ්ය වෙනවා අළුත් උපාංගයක්. Light Dependent Resistor (LDR) හෙවත් ආලෝක සංවේදී ප්රතිරෝධකයක් අවශ්යයයි. මේකේ විශේෂත්වය ඒ මතට වැටෙන ආලෝකයේ තීව්රතාව අනුව ප්රතිරෝධය වෙනස් වීමයි.
අපි මේකේ ක්රියාකාරීත්වය ගැන මෙන්න මේ ප්රස්තාරයෙන් අවබෝධ කරගමු.
ආලෝකය වැඩිවෙන කොට, R1 ---> 0 කරා ගමන් කරනවා.
ආලෝකය අඩුවෙන කොට, R1 ---> අනන්තය කරා ගමන් කරනවා.
සරලව කියනවා නම්, ආලෝකය වැඩිවෙන කොට ප්රතිරෝධය අඩුවෙනවා. ආලෝකය අඩුවෙන කොට ප්රතිරෝධය වැඩිවෙනවා.
දැන් අපිට පොඩි ගැටලුවක් එනවා. පරිපථවල දී අපි පාවිච්චි කරන්නේ, Digital සංඥා. හැබැයි ආලෝකය කියන්නේ Analog සංඥාවක්. එතකොට Analog --> Digital වලට පරිවර්තනය කරන්න වෙනවා. එතකොට පරිපථයට පොඩි දෙයක් එකතු කරන්න වෙනවා.
මේ රූපයේ හැටියට, R(l) කියන්නේ LDR එක. ඒකේ ප්රතිරෝධය විචල්ය අගයක් ගන්නවා. ඒ කියන්නේ නිතර වෙනස් වෙනවා. එතකොට R(s) කියන්නේ, ස්ථිර අගයක් ඇති ප්රතිරෝධකයක්. ගොඩක් වෙලාවට අපි LDR එක භාවිතා කරනවා Voltage Divider එකක් හැටියට, ඒ කියන්නේ, විභව විභේදකයක් ලෙස.
V (out) = ( V (in) x R(s) ) / ( R(l) + R(s) )
ඉහත දක්වලා තිබෙන සූත්රයේ හැටියට R(l) හි අගය වෙනස් වෙනකොට V (out) හි අගය වෙනස් වෙනවා. එතකොට මෙන්න මේ V (out) කියලා කියන්නේ, පරිපථයට යවන අගය. සරල ව කිව්වොත් LDR එකට ස්ථිර අගයක් ඇති ප්රතිරෝධකයක් එකතු කිරීම මගින් ස්ථිර ප්රතිරෝධයක් පරිපථයට දෙන්න පුළුවන්.
දැන් මේ ඇවිල්ලා අපි පරිපථයෙන් දෙන අගය නේ. එතකොට මේ අගය Analog. මේක Digital වෙන්නේ කොහොමද? ඒකට Arduino Uno කියන පුවරුවේ තියෙනවා Analog to Digital - ADC කියලා කොටසක්. මේකෙන් තමා ඒ කාර්යය කෙරෙන්නේ. V (out) මගින් ලබා දෙන 0V - 5V අතර අගය, (0 - 1023) අතර අගයක් දක්වා 10 bit අගයක් ලෙස පරිවර්තනය කරනවා.
දැන් මේ ඇවිල්ලා අපි පරිපථයෙන් දෙන අගය නේ. එතකොට මේ අගය Analog. මේක Digital වෙන්නේ කොහොමද? ඒකට Arduino Uno කියන පුවරුවේ තියෙනවා Analog to Digital - ADC කියලා කොටසක්. මේකෙන් තමා ඒ කාර්යය කෙරෙන්නේ. V (out) මගින් ලබා දෙන 0V - 5V අතර අගය, (0 - 1023) අතර අගයක් දක්වා 10 bit අගයක් ලෙස පරිවර්තනය කරනවා.
එතකොට 0 කියන්නේ, අඳුරුයි. 1023 කියන්නේ හොඳටම එළියයි.
අපේ පරිපථය තියෙන්නේ, මෙන්න මේ විදියටයි. මෙහි දී LDR එක Analog සංඥාවක් නිකුත් කරන නිසා A0 නම් Pin එකට සම්බන්ධ කරලා තියෙනවා. බලමු ගැලීම් සටහන.
මෙහි දී දකුණු පැත්තේම තියෙන ගැලීම් සටහනේ, If sensor value < n යනුවෙන් සලකා බලන්නේ, පෙර අර්ථ දක්වපු අගයට වඩා අඩු ද? වැඩි ද ? යන්නයි.
Sketch එක බලමු.
//lightSensor.ino
//Switches a LED and off depending on the ambient light intensity
const int ldrPin = A0; //declare analog input pin A0 as ldrPin
const int ledPin = 8; //declare digital I/O pin 8 as ledPin
void setup() {
pinMode(ledPin,OUTPUT); // configure ledPin as output
}
void loop() {
int sensorValue = analogRead(ldrPin); // read sensor value at ldrPin
if (sensorValue < 150) // if sensor value is less than 150
digitalWrite(ledPin, HIGH); // set letPin High
else
digitalWrite(ledPin, LOW); // otherwise set letPin Low
}
const int ldrPin = A0; ගැන අවධානය යොමු කරන්න.
මෙහි දී const ලෙස අදහස් කෙරෙන්නේ, constant එනම් නිත්ය යන්නයි. එය Pin එකක් declare කිරීමේ දී අර්ථ දක්වන්නේ Sketch එක run වෙනකොට Pin එක වෙනස් වෙන්න පුළුවන් නිසායි.
එසේම මෙහි int යනුවෙන් integer value එකක් ලෙස අර්ථ දක්වා ඇත. නමුත් A අකුර ldrPin එකට assign නොවේ. 0 පමණක් assign වේ.
analogRead(ldrPin); කොටස මගින්, (0 - 1023) අතර සංඛ්යාවක් එන්නට පුළුවන්. ඉතින් මේ අනුව LDR එකට අඳුර වැටුණොත් LED එක දැල්වෙනවා බලන්න පුළුවන්.
පහලින් දකින්නට ලැබෙන්නේ අපි මේ කතා කරපු ක්රියාකාරකමේ Simulation එකක්. ඔයාලට Start Simulation බොත්තම ඔබලා LDR එක මවුස් එකෙන් ක්ලික් කරලා බලන්න. එවිට ආලෝකය සීරු මාරු කරලා බලන්න පුළුවන්. එතකොට LDR එකට අඳුර වැටුණොත් LED එක දැල්වෙන වෙන හැටි ඔබට ම දකින්න පුළුවන්.
Code කියන බොත්තම එබූ විට ඉහලින් සඳහන් කරපු Arduino Code එක දකින්න පුළුවන්.
Comments
Post a Comment