Pro Starter Kit for Arduino#
ආර්ඩුයිනෝ සඳහා Diygeek Pro Kit එක සැලසුම් කර ඇත්තේ ආර්ඩුයිනෝ ඉගන ගන්න ආරම්භ කරන ඔබටයි. මුලිකවම ඔබට ආර්ඩුයිනෝ ප්රෝග්රෑම්න් සම්බන්ධව හා ඉලෙක්ට්රෝනික තාක්ෂණය පුර්ණ අධ්යයනයක් කළ හැකි අතර මෙම කට්ටලය මගින් මෝටර් කොන්ට්රොලින්, LCD දර්ශක පිලිබදව්, හා විවිධ අර්ඩුයිනෝ මොඩුල, sensor කිහිපයක් ගැන ඔබට පුර්ණ අධ්යනයක යෙදිය හැකිය.. එමගින් ඔබට ඉතා උසස් තත්ත්වයේ ප්රායෝගික නව නිර්මාණ කිරිඅම්ට අවස්ථාව හිමි වේ. මෙම කට්ටලය ආර්ඩුයිනෝ UNO R3 පුවරුව මත පදනම්ව පාඩම් සියල්ල ඉදිරිපත් කර ඇත. නමුත් ඔබට ආර්ඩුයිනෝ Mega හෝ Nano බෝර්ඩ් එකක් භාවිතයෙන් වුවද මෙම පාඩම් පෙළ අධ්යනය කළ හැකිය. ආර්ඩුයිනෝ සඳහා වන Diygeek Pro Kit එක ඉලෙක්ට්රෝනික කොටස් රාශියකින් සමන්විත වන අතර එමඟින් ඔබට ඔබේම ව්යාපෘති ආරම්භ කිරීමට හැකි වේ. එයට Breadboard. Jumper Cable, relay module, RGB LED, සංවේදක ගණනාවක්, මෝටර් කොන්ට්රොලර්, LCD දර්ශක. කිපැඩ්, හා ප්රතිරෝධක සහ වෙනත් ඉලෙක්ට්රොනික උපාංග ඇතුළත් වේ.
මෙය අපොස උසස් පෙළ තොරතුරු තාක්ෂණය විෂයේ නව වන ඒකකය අදාළ බොහෝ පාඩම් හා ප්රයෝගික ක්රියාකාරම් සියල්ල අඩංගු කර ඇති අතර එය ඉගනීමට අසා කරන ඕනෑම කෙනෙක්ට මුල සිට සරලව මෙම පාඩම් ටික අධ්යනය කර හැකිය. ඒ වගේම ඔබට අවශ්ය නම් මෙම කට්ටලය නිවසටම ගෙන්වා ගැනීමට හැකි අතර ඒ සදහා ඔබට අප වෙබ් අඩවියේ store එක භාවිතා කල හැකිය
මෙම පාඩම් මාලාවේ Diygeek Pro Kit එක එකෙහි අඩංගු බහුලව භාවිතා වන සංරචක සහ නිබන්ධන සහිත විස්තරාත්මක පරිච්ඡේද 20 ක් ඇතුළත් වේ. ව්යාපෘති 50 කට වඩා ඉදිරිපත් කර ඇත. සෑම ව්යාපෘතියකම සවිස්තර පරිපථ සම්බන්ධතා රූප සටහනක් සහ සංකේත අර්ථ නිරූපණයක් ඇත.
![]() |
![]() |
මෙමගින් ඔබට මොනවද ඉගන ගන්න පුළුවන්?
-
- ආර්ඩුයිනෝ මගින් මයික්රෝකොන්ට්රොලර් එකක් පාලනය කරන්නේ කෙසේද?
- ඇනලොග් සහ ඩිජිටල් සංවේදක සමඟ ආර්ඩුයිනෝ සම්බන්ධ කිරීමේ ක්රම (ආලෝකය, ශබ්දය හෝ පීඩනය වැනි දේ හඳුනා ගැනීම)
- මෝටර, LED , Buzzer සහ තවත් දේ පාලනය කිරීමට Software library භාවිතා කරන්නේ කෙසේද?
- ආර්ඩුයිනෝ ප්රෝග්රෑමින් කරන ආකාරය.
- Arduino සමඟ ඔබේම ව්යාපෘතියක් ගොඩනගන්නේ කෙසේද?
- LCD සහ 7 segment දර්ශක භාවිතය පිලිබදව ආර්ඩුයිනෝ සමග භාවිතා කරන ආකාරය
- DC, Servo, Step-up මෝටර් වල ක්රියාකාරිත්වය හා ආර්ඩුයිනෝ සමග භාවිතා කරන ආකාරය
![]() |
Arduino Uno R3 BoardArduino UNO R3 බෝර්ඩ් එක ආරඩුයිනෝ සොෆ්ට්වෙයාර් එක, සංවේදක සහ කේත සමඟ සම්පුර්ණයෙන්ම අනුකූල වේ. Arduino යනු ඉලෙක්ට්රොනික ව්යාපෘති තැනීම සඳහා භාවිතා කරන ඕපන් සෝස් වර්ගයේ සොෆ්ට්වෙයාර් සහ හාර්ඩ්වෙයාර් ර වේදිකාවකි. ආර්ඩුයිනෝ පුවරු වලින් වඩාත් ජනප්රිය එකක් වන ආර්ඩුයිනෝ UNO බොර්ඩ් එකයි. එය ඔබේ පළමු ආර්ඩුයිනෝ ඉගන ගැනිමේ වැඩ සදහා නම් හොඳ ආරම්භක ස්ථානයකි. Arduino UNO විසින් කාල සීමාව තුළ සංශෝධන කිහිපයකට භාජනය වී ඇති අතර නවතම බෝර්ඩ් එක වන්නේ ආර්ඩුයිනෝ UNO ය. |
![]() |
DC Motors සහ L293Dමෙම ව්යාපෘතියේදී ඉතා ප්රයෝජනවත් මෝටර් කොන්ට්රෝල් IC එකක් වන L293D හා ට්රාන්සිස්ටරයක් UNO R3 බෝර්ඩ් එකක් භාවිතා කර කුඩා DC මෝටරයක් පාලනය කරන්නේ කෙසේදැයි ඔබ ඉගෙන ගත හැකිය. එයට ඇත්ත වශයෙන්ම මෝටර දෙකක් වෙන වෙනම ස්වාධීනව පාලනය කළ හැකිය. මෙම පාඩමේදී අපි භාවිතා කරන්නේ මෝටර් කොන්ට්රෝල් IC එකෙන් භාගයක් පමණි, එකේ දකුණු පැත්තේ ඇති පින් බොහොමයක් දෙවන මෝටරයක් පාලනය කිරීම සඳහා ය. L293D යනු හතර ගුණයකින් යුත් අධි ධාරා half-H drivers එකක් වන අතර එය සැලසුම් කර ඇත්තේ 4.5 V සිට 36V දක්වා වෝල්ටීයතාවයකදී 1 A දක්වා වූ ද්විපාර්ශ්වික( bidirectional) ධාවක ධාරා සැපයීම සඳහා ය. L293D සැලසුම් කර ඇත්තේ 4.5 V සිට 36V දක්වා වෝල්ටීයතාවයේදී 600-mA දක්වා වූ ද්වි-දිශානුගත(bidirectional) ධාවක ධාරාවන් සැපයීම සහ රිලේ, සොලෙනොයිඩ් වැනි ප්රේරක ක්රියාකරවීම සඳහා ය. |
|
1602 LCD දර්ශකඔබගේ ආර්ඩුයිනෝ ව්යාපෘති වල පණිවිඩ හෝ සංවේදක කියවීම් ප්රදර්ශනය කිරීමට අවශ්යද? ඒ සදහා මෙම LCD දර්ශන මනාව ගැලපේ. මේවා ඕනැම ව්යාපෘතියට පොදුවේ භාවිතා කළ හැකිය. යම් දෙයක් දර්ශනය කිරීමට මෙය පහසුවෙන් ඉක්මනින් සම්බන්ධ කර භාවිතා කළ හැකිය. මෙම LCDs වචන පේළි සහ අක්ෂර පමණක් ප්රදර්ශනය කිරීම සඳහා වඩාත් සුදුසු වේ, එබැවින් එහි නම ‘Character LCD’ ලෙස බොහෝවිට භාවිතා කරයි. LCD දර්ශකයේ පිටුපස LED මගින් ඇති කරන පසුතල ආලෝකයක් ඇති අතර එහි පේළි දෙකකින් ASCII අක්ෂර 32 ක් පෙන්විය හැකිය. හිටාචි සමගමෙන් නිපදවා ඇති HD44780 ලෙස හැඳින්වෙන LCD පාලක චිපය මගින් මෙහිදී 16 × 2 (1602) LCDs පමණක් නොව ඕනෑම වෙනස් ප්රමණයේ LCDs (උදාහරණයක් ලෙස 16×4, 16×1, 20×4 ආදිය) සදහා ද භාවිතා කළ හැකිය. ආර්ඩුයිනෝ සදහා දැනටමත් HD44780 LCD හැසිරවීමට library එකක් නිර්මාණය කර ඇත. |
|
74HC59 සහ LEDs74HC595 යනු අනුක්රමික(Serial) සිට සමාන්තර(Parallel) පරිවර්තකයක් වන අතර එහි ප්රතිදාන(outputs) අටක් (පරිපූර්ණ) සහ වරකට දත්ත ලබා දිම සඳහා ඔබ භාවිතා කල හැකි ඉන්පුට් තුනක් ඇත. මෙම චිපය මඟින් LED ධාවනය කිරීම තරමක් මන්දගාමී කරයි (තත්පරයට 8,000,000 වෙනුවට ඔබට තත්පරයට 500,000 වාරයක් පමණක් LED වෙනස් කළ හැකිය) නමුත් එය මිනිස් ඇසට හඳුනාගත හැකි වේගයට වඩා ඉතා වේගවත් බැවින් අපට නොසලකා හැර භාවිතා කල හැකිය . 74HC595 shift registe යනු මතක ස්ථාන(memory locations) අටක් ලෙස සිතිය හැකි චිප් වර්ගයක් වන අතර ඒ සෑම එකක්ම 1 හෝ 0 වේ, මෙම එක් එක් අගයන් සක්රිය හෝ අක්රිය කිරීමට අපි දත්ත . චිපයේ දත්ත(‘Data’) සහ ‘ඔරලෝසු'(‘Clock’) පින් භාවිතා කරන්නෙමු |
|
1 digit and 4 Digit 7 Segment Displayයමෙකු බෝම්බයක් අක්රීය කිරීමේ සිදුවීම් මාලාවන් චිත්රපට වල ඔබ කී වතාවක් දුටුවාද? එහිදී ඔබට දැකගන්න පුලුවන්, වීරයා එහි දර්ශනය නරඹන්නේ කාලය ගතවන විටය, සෑම තත්පරයක්ම පෙර තත්පරයට වඩා වටින බව හා එය සිදු කර යුතු කාලය එහි දැක්වේ. චිත්රපටවල ඇති සියලුම බෝම්බ වලට seven-segment දර්ශක භාවිතා කර ඇත. එය එසේ විය යුතුයි. එසේ නොමැති නම්, චිත්රපටියේ වීරයාට තමාට තව කොපමණ කාලයක් ඉතිරි වී ඇත්දැයි ගන්නට ක්රමයක් නොමැත. seven-segment දර්ශක යොදාගෙන සංඛ්යා පෙන්වීම වඩාත්ම ප්රායෝගික ක්රමයයි. සීමිත ආලෝක තත්ත්වයන් සහ ශක්තිමත් හිරු එළිය යන දෙකෙහිම ඒවා භාවිතා කිරීමට පහසුය, පිරිවැය ඉතා ලාබදායී වේ. ඒ වගේම හොද ඉහළ කියවීමක් ලබාගත හැකි ය. Seven-segment සංදර්ශකයක් භාවිතා කරන සිදුවීමකට හොදම උදාහරණයක් වන්නේ ෆ්ලොරිඩාවේ කේප් කැනවරල් හි ප්රසිද්ධ ගණන් කිරීමේ ඔරලෝසුවයි. එය නාසා ඇපලෝ මෙහෙයුමෙදී රොකට් එක ගොඩබෑම සඳහා භාවිතා කළේය. |
|
Stepper Motorස්ටෙපර් මෝටර යනු වඩාත් නිවැරදිව ස්ථාන පාලනය සඳහා විශිෂ්ට මෝටර වර්ගයක් වේ. ඒවා විශේෂ බුරුසු රහිත මෝටරයක් වන අතර එය සම්පූර්ණ භ්රමණය සමාන “පියවර” ගණනකට බෙදා ඇත. ඒවා සාමාන්යයෙන් ඩෙස්ක්ටොප් මුද්රණ යන්ත්ර, ත්රිමාණ මුද්රණ යන්ත්ර, සීඑන්සී යන්ත්ර සහ නිශ්චිත ස්ථානගත පාලනයක් අවශ්ය ඕනෑම දෙයක් තුළ දක්නට ලැබේ. ස්ටෙපර් මෝටර ගැන ඉගෙන ගැනීමට මිල අඩු ක්රමයක් වන්නේ 28BYJ-48 ස්ටෙපර් මෝටර භාවිතා කිරීමයි. මේවා සාමාන්යයෙන් පැමිණෙන්නේ ULN2003 මත පදනම් වූ ධාවක පුවරුවක් සමග වන අතර එමඟින් ඒවා පහසුවෙන් භාවිතා කිරමට පුළුවන. ස්ටෙපර් මෝටර්ස් වරකට එහි රෝදය එක් ‘පියවරක්’ කරකැවීම සඳහා කොග්ජෙට් රෝදයක්(cogged wheel) සහ විද්යුත් චුම්භක හතරක් භාවිතා කරයි. |
මෙම කට්ටලයේ විශේෂතා
-
- අංග සම්පූර්ණ උපාංග : ඔබට සොයා ගත හැකි වඩාත්ම ගැලපෙන ආර්ඩුයිනෝ කට්ටලයකි මෙහි විවධ ඉලෙක්රෝනික් හා අර්දුයිනෝ සම්බන්ධ සංරචක 100 කට වඩා අඩංගු වේ. එම ලිස්ට් එක මෙහි දක්වා ඇත.
- වයර් කිරීමට පහසුය : සියලුම මොඩියුල පස්සා ඇති බැවින් ඒවා පහසුවෙන් එකිනෙක සම්බන්ධ කළ හැකිය
- පහසුවෙන් භාවිත කල හැකිය : උසස් පෙළ තොරතුරු තාක්ෂණය විෂයේ නව වන ඒකකය අදාළ බොහෝ පාඩම් හා ප්රයෝගික ක්රියාකාරම් සියල්ල අඩංගු කර ඇති අතර එය ඉගනීමට අසා කරන ඕනෑම කෙනෙක්ට මුල සිට සරලව මෙම පාඩම් ටික අධ්යනය කර හැකිය
- ඕනෑම කෙනෙකුට ගැලපේ : වෘත්තීය විද්යාගාර ඉංජිනේරුවන්, ඉලෙක්ට්රොනික සම්බන්ධ ඉගන ගන්නා සිසුන් සහ පළපුරුද්දක් ලෙස විනෝදාංශයක් විදියට නිර්මාණ කරන පරිශීලකයින් සඳහා, මෙම සංවේදක සමඟ විවිධ පරීක්ෂණ සහ අත්හදා බැලීම් කිරීමට මෙම කට්ටලය භාවිතා කළ හැකිය. නවක පරිශීලකයින් සඳහා, මෙහි ඉදිරිපත් කර ඇති අපගේ නිබන්ධනය අනුගමනය කර පියවරෙන් පියවර ඉගන ගත හැකිය.
- අතේ ගෙන යා හැකි ආකාරයට පෙට්ටියක් තුළ අසුරා ඇත
පාඩම් මාලාව :
සරල LED ව්යාපෘති කිහිපයකින් ආරම්භ කර පසුව විවිධ මොඩියුල සහ සංවේදක භාවිතා කර වඩාත් සංකීර්ණ ව්යාපෘති වෙත යාම තුළින් මෙම කට්ටලය මඟින් මූලික ඉලෙක්ට්රොනික න්යාය, භෞතික පරිගණකකරණය සහ ආර්ඩුයිනෝ භාවිතා කළ යුතු ආකාරය පිළිබඳව පරිශීලකයින්ට ඉගැන්වීම අරමුණු කර ගෙන ඇති අතර ඒවායේ අඩංගු කොටස් පිළිබඳ සවිස්තරාත්මක පැහැදිලි කිරීම් පැමිණේ. ව්යාපෘති, දෘඨාංග සම්බන්ධතා වල නියැදි රූප සටහන් සහ නියැදි කේත. ව්යාපෘති පහසුම ආරම්භක මට්ටමේ නිබන්ධනයේ සිට අතරමැදි පරිශීලකයින් සඳහා වඩාත් සංකීර්ණ නිබන්ධන දක්වා ඉදිරියට යයි.
-
- Chapter 01 – ආර්ඩුයිනෝ හැදින්විම
- Chapter 02 – LED Blink කිරීම.
- Chapter 03 – LED 10 ක් පාලනය කිරීම.
- Chapter 04 – LED වල ආලෝක තත්ව පාලනය.
- Chapter 05 – Push Button මගින් LED බල්බ පාලනය.
- Chapter 06 – Serial Communication
- Chapter 07 – Analog Digital Conversion
- Chapter 08 – Buzzer
- Chapter 09 – Temperature Sensor
- Chapter 10 – Magnetic Reed Switch භාවිතා කිරීම.
- Chapter 11 – One Channel Relay Module භාවිතා කිරීම.
- Chapter 12 – 16×2 LCD දර්ශක මොඩියුලය
- Chapter 13 – 4×3 & 4×4 Membrane Keypad
- Chapter 14 – SG90 Servo Motor
- Chapter 15 – HC-SR04 Ultrasonic Sensor
- Chapter 16 – L293D motor Driver IC සහ DC මෝටර්
- Chapter 17 – 28BYJ-48 Stepper Motor with ULN2003 Driver
- Chapter 18 – H595 and 7 Segment display
- Chapter 19 – Infrared Remote / Receiver
- Chapter 20 – LM35 Temperature Sensor
කතෘ හිමිකම
මෙම පාඩම් මාලාවේ සියලුම අයිතිය කතෘ සතුයි. මෙහි ඇති සියලුම පාඩම් තොරතුරු සම්පුර්ණයෙන් හෝ කොටස් වශයෙන් වෙනත් වෙබ් අඩවි වල පළකිරීම, මුද්රණය කර බෙදාහැරීම දඩුවම් ලැබිය හැකි වරදක් බව සලකන්න. |
උදව් – Support
අපි ඔබට අපේ උපරිම සහය හැකි උපරිමයෙන් ලබාදෙන්න සුදානම්. ඔබේ ප්රශ්න අපිට යොමු කරන්න, support@arduino.lk
-
- ඉලෙක්ට්රොනික් Items සහ Component නිෂ්පාදනවල තත්ත්ව ගැටළු
- ඉලෙක්ට්රොනික් Items සහ Component නිෂ්පාදන භාවිතා කිරීමේ ගැටළු
- ඉගෙනීම සහ තාක්ෂණය පිළිබද ප්රශ්න
- අදහස් සහ යෝජන සිතුවිලි
ආර්ඩුයිනෝ හැදින්විම#
මුලින්ම අපි ආර්ඩුයිනෝ වල ආරම්භය ගැන මදක් විමසා බලමු. ආර්ඩුයිනෝ මුලින්ම නිර්මාණය කරණු ලබන්නේ 2005 දී ඉතාලියේ “Ivrea Interaction Design Institute” හිදීයි. මෙහිදී මෙය නිර්මාණය කළ මැසිමෝ බන්සි, සහ ඩේවිඩ් මෙලිස් යන මොවුන්ගේ ප්රධාන අරමුණ වුයේ ඉලෙක්ට්රොනික් හෝ ප්රෝග්රෑමින් පිළිබඳව කිසිම දැනුමක් නොමැති සිසුන් සඳහා, විවිධ වූ පර්යේෂණ කිරීමට හැකි පහසු වේදිකාවක් සකස් කර දීමයි. අපි අතරත් මේ වගේ නිර්මාණශීලි අය බොහෝ ඉන්න නිසා අපිටත් මේ තාක්ෂණය එකසේ වැදගත් වේ. ආර්ඩුයිනෝ වල හදවත වන්නේ මයික්රොකොන්ට්රොලර් එකක් සහිත බොර්ඩ් එකකි. වර්තමානයේ ආර්ඩුයිනෝ බෝර්ඩ් වර්ග 15 කට වඩා තිබෙන අතර මේවා විවිධ අවස්ථා වලදී භාවිතයට ගන්නා පර්යේෂණයේ හෝ නිර්මාණයේ අවස්ථාවට ගැලපෙන බෝර්ඩ් එක තෝරා ගැනීමට ඔබට හැකියාව තිබේ.
ආර්ඩුයිනෝ වල සුවිශේෂීත්වය තමයි අපිට ඔවුන්ගේ හැම බෝර්ඩ් එකකම පරිපථ සටහන් ලබා ගැනීමට හැකි වීම. එම නිසා මෙම තාක්ෂණය අපිට රිසි සේ භාවිතා කළ හැකියි. මේ නිසාම විවිධ ආයතන විසින් ආර්ඩුයිනෝ බෝර්ඩ් වල ක්ලෝන (Clones) නොහොත් ආර්ඩුයිනෝ බෝර්ඩ් හා සමාන ආකාරයේ බෝර්ඩ් සාදා විකුණනු ලබයි. ඔරිජිනල් ආර්ඩුයිනෝ බෝර්ඩ් එකක් හා සංසන්ඳනය කිරීමේදී මේ ක්ලෝන ඉතා පහසු මිලකට ලබා ගැනීමේ හැකියාව තිබේ. අපේ රටේ මෙම තාක්ෂණය ඉක්මනින් ප්රචලිත වීමට එයත් එක් හේතුවක් වී තිබේ.
ආර්ඩුයිනෝ වලින් ප්රයෝජනයක් ගන්න මේ බෝර්ඩ් එක විතරක් ප්රමාණවත් නොවේ. මේ බෝර්ඩ් වලට විවිධ සංවේදක(Sensors) වලින් දත්ත ලබා ගැනීමේ හැකියාව තිබෙන අතර එම ලබාගත් දත්ත අනුව තවත් යම් යම් උපකරණ සඳහා දත්ත ලබා දීම හෝ යම් කිසි කාර්යයක් කිරීමේ හැකියාව මේවා සතුයි.දැන් ඔබ කල්පනා කරනවා ඇති ආර්ඩුයිනෝ හා ප්රෝග්රෑම් සම්බන්ධ වන්නේ කොහොමද කියන දේ පිලිබදව, ඒක තමයි Arduino හි සුවිශේෂීත්වය, ඒ අපිට මේ බෝර්ඩ් සඳහා ප්රෝග්රෑම් එකක් ඇතුලත් කර ගැනීමේ හැකියාවයි. මේ සඳහා අපි යොදා ගන්නේ “The Arduino Software” නැමැති IDE (Integrated Development Environment) එකයි.
ඒවගේම මේ බෝර්ඩ් වල හැකියාවන් තව දුරටත් වර්ධනය කර ගැනීමට අපිට ආර්ඩුයිනෝ සහ ඒ හා නිශ්පාදන බිහිකරන සමාගම් විසින්ම විවිධ වූ එක්ස්පෙන්ශන් බෝර්ඩ් හඳුන්වා දී තිබේ. ඔවුන් ඒවා හඳුන්වන්නේ ශිල්ඩ්(Shields) කියායි. මේ ශිල්ඩ් වල සුවිශේෂීත්වය තමයි ප්රධාන බෝර්ඩ් එක මත මේ ශිල්ඩ් ඉතා පහසුවෙන් සවිකර භාවිතයට ගැනීමේ හැකියාවයි. (වම් පස රූපය බලන්න, මෙහිදී ආර්ඩුයිනෝ උනෝ බෝර්ඩ් එකට ශිල්ඩ් දෙකක් සවි කර තිබේ) ඉහත රූපයේ දැක්වෙන්නේ එවැනි ශිල්ඩ් බෝර්ඩ් වර්ග කිහිපයක්.
LED Blink කිරීම.#
ඔබට ඔබගේ අදහසකට නව නිර්මාණයක් කිරීමට අවශ්ය නම් මෙම පාඩම් මාලාව සහ ඒ සමග ඔබට ලැබෙන උපාංග කට්ටලය ඔබට ගොඩක් වැදගත් වේවි. ඔබ මීට කලින් ආර්ඩුයිනෝ ගැන ආසා ඇතැයි සිතමි. අසා නැතිනම් ඒ ගැන කරදර වෙන්න අවශ්ය නැති අතර මෙය භාවිතයෙන් ඔයාට නිර්මාණාත්මක ආර්ඩුයිනෝ ව්යාපෘති 30 කට අසන්න ප්රමාණයක් ලේසියෙන් ඉගනගන්න අවස්ථාව හිමි වන අතර එමගින් ඔබට ආර්ඩුයිනෝ පිලිබදව හොද අවබෝධයක් ලබා ගත හැකිය.
ආර්ඩුයිනෝ යනු පහසුවෙන් භාවිතා කළ හැකි hardware(දෘඩාංග) සහ software(මෘදුකාංග) මත පදනම් වූ විවෘත මෘදුකාංග (Open Source) ඉලෙක්ට්රොනික් ෆ්ලැට්ෆෝම් එකක්. මෙය භාවිතා කර ඕනෑම කෙනෙකුට නව ව්යාපෘති, උපාංග නිර්මාණය කළ හැකියි. ආර්ඩුයිනෝ වලට කැමති බොහෝ පිරිසක් ලෝකයේ සිටි. ඒ වගේම අපේ රටෙත් ගොඩක් දෙනෙක් දැන් ආර්ඩුයිනෝ භාවිතා කරනු ලබන අතර ඔවුන් හැමදාම නව ගුණාත්මක විවෘත කේත (codes) හා පරිපථ(circuit) සකස් කිරීමට දායක වේ. එබැවින් අපගේ නිර්මාණශීලීත්වය සාක්ෂාත් කර ගැනීම සඳහා එම නිදහස් කේත සහ පරිපථ වඩාත් කාර්යක්ෂම විදියට භාවිතා කිරීමට අවස්ථාව හිමිවේ..
සාමාන්යයෙන් ආර්ඩුයිනෝ ව්යාපෘති කේත(programming code) සහ පරිපථ වලින් සමන්විත වේ. ඔබ කවදාවත් යම් කේත හා පරිපථය සමඟ කටයුතු නොකළේ නම්, ඒ ගැන වද වීමට අවශ්යය නැත. මෙම පාඩම් මාලාවෙන් ක්රමානුකූලව C ක්රමලේකන භාෂාව (programming language) සහ ඉලෙක්ට්රොනික් පිළිබඳ මූලික දැනුම හඳුන්වා දෙනු ඇත. එමගින් ඔබට පරිපථ නිර්මාණය කිරීම පහසු කරවන අතර මෙම උපාංග කට්ටලයට අවශ්ය සියලු ඉලෙක්ට්රොනික් components සහ මොඩියුල(Module) අඩංගු වේ. එමගින් ඔබට ව්යාපෘති සම්පූර්ණ කිරීමේ අවස්ථාව හිමි වේ. ඔබට ඕනෑම මොහොතක ක්ෂණික සහ නොමිලේ තාක්ෂණික සහාය ලබා ගත හැකිය. මෙම පාඩම් මාලාව අලුතෙන් ආර්ඩුයිනෝ ඉගෙන ගන්න ඔබට එය ගොඩක් වැදගත් වේවි.
Project 1.1 – Push Button එකකින් LED බල්බ් එකක් පාලනය කිරීම.
මෙම ව්යාපෘතියේදි අපි Push Button එකක් භාවිතා කර LED බල්බ් එකක් ON/OFF කරන ආකාරය විමසා බලමු. මෙහි දී අපි කිසිදු කේතයක් භාවිතා නොකරයි.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() |
![]() |
Resistor 220Ω x1 |
Push button x1
|
Jumper M/M x2 |
🔎 පරිපථ සම්බන්ධ දැනුම
සාමාන්යයෙන් ඉලෙක්ට්රොනික් පරිපථ සදහා සෘජු ධාරා(DC) විදුලි බලයක් භාවිතා කරයි. එම නිසා අපගේ නිවසට ලැබෙන විදුලි සැපයුම වන ප්රත්යාවර්ථ ධාරා(AC) විදුලිය සෘජු ධාරා(DC) විදුලි බලයක් ලෙස පරිවර්තනය කර භාවිතයට ගනී.(rectifiers to convert) ඒ වගේම බැටරි හෝ බැටරි බල සැපයුමක් පරිපථ සටහන් වල දැක්වීමේදී පහත සංකේත යොදා ගනී.ජව සැපයුම්(Power supply)ක් මගින් අපගේ මෙම පරිපථ සදහා ශක්තිය ලබා දේ. එය සෘජු ධාරාව(DC) සහ ප්රත්යාවර්ථ ධාරාව(AC) ලෙස ආකාර දෙකක් ලෙස පවතින අතර අපට අවශ්යය ආකරයක් ගැලපෙන අවස්ථාවේදී යොදාගන්න පුළුවන්. වෝල්ටීයතාව(V) සහ ධාරාව(A) සැම වෙලාවකදීම එකම විදියට පවතී නම් එය සෘජු ධාරා(DC) විදුලි බලයකි. සාමාන්යයෙන් බැටරි, ජව සැපයුම්(power adapter) වලින් සෘජු ධාරා(DC) විදුලි බලයක් ලබා ගන්න පුළුවන්. වෝල්ටීයතාව(V) සහ ධාරාව(A) කාලයත් සමග පහත දැක්වෙන ආකාරයට සයින් වක්රයක් මෙන් වෙනස්වේ නම් එය ප්රත්යාවර්ථ ධාරා(AC) ගණයට අයත් වේ. ගොඩක් දුර විදුලි බලය සැපයීමේදී එනම් දුර ගෙනයාමේදී (Transmit) විදුලිය ප්රත්යාවර්ථ ධාරා(AC) විදුලි බලයක් ලෙස පරිවර්තනය කර සිදු කරයි. අපේ නිවසට ලැබෙන්නේද 230v කින් යුත් ප්රත්යාවර්ථ ධාරා(AC) විදුලි බලය විදුලි සැපයුමකි.
සාමාන්යයෙන් ඉලෙක්ට්රොනික් පරිපථ සදහා සෘජු ධාරා(DC) විදුලි බලයක් භාවිතා කරයි. එම නිසා අපගේ නිවසට ලැබෙන විදුලි සැපයුම වන ප්රත්යාවර්ථ ධාරා(AC) විදුලිය සෘජු ධාරා(DC) විදුලි බලයක් ලෙස පරිවර්තනය කර භාවිතයට ගනී.(rectifiers to convert) ඒ වගේම බැටරි හෝ බැටරි බල සැපයුමක් පරිපථ සටහන් වල දැක්වීමේදී පහත සංකේත යොදා ගනී.
|
![]() |
බැටරියක ධන(+) සහ ඍණ(-) අග්ර දෙකක් පවතී. ඒවා කෙලින්ම එකට සම්බන්ධ නොකළ යුතුයි. එසේ කිරීමෙන් බැටරිය භාවිතයට ගත නොහැකි සේ විනාශ වේ.
Voltage(වෝල්ටීයතාව)
වෝල්ටීයතාව මනින ඒකකය හදුන්වන්නේ Volt(වෝල්ට්) ලෙසයි. එය V අකුරෙන් සංකේතවත් කරයි.
- 1KV = 1000V
- 1V = 1000mV
- 1mV = 1000μv
වෝල්ටීයතාව සාපේක්ෂයි. වියලි කෝෂ බැටරියක “1.5V” ලෙස දක්වා තිබේ. එනම් ඍණ(-) වෝල්ටීයතාව සාපේක්ෂව එහි ධන(+) වෝල්ටීයතාව 1.5V ලෙස ගනු ලබන අතර. සාමාන්යයෙන් ඍණ(-) වෝල්ටීයතාව 0V ලෙස දැක්වේ.
බැටරි දෙකක් ශ්රේණිගතව සම්බන්ධ කිරීමෙන් ලබා ගන්න වෝල්ටීයතාව වැඩි කරගන්න පුළුවන්. එය පහත රූප සටහනේ දක්වා තිබේ.
සාමාන්යය භාවිතයේදී ඍණ(-) වෝල්ටීයතාව එනම් 0V අපි GROUND ලෙස දක්වයි. එය GND ලෙස ආර්ඩුයිනෝ බෝර්ඩ් වල සදහන් කර තිබේ. ධන(+) වෝල්ටීයතාව VCC ලෙස දක්වා තිබේ. පරිපථ සටහන් වලදී එය දැක්වීමට පහත දැක්වෙන සංකේත භාවිතා කරයි.
Positive(VCC) |
![]() Negative(Ground) |
Current (I) ධාරාව
ධාරාව(I) ගණනය කිරීම ප්රධාන එකකය ලෙස ඇම්පියර් යන ඒකකය භාවිතා කරනු ලැබේ. එය A සංකේතවත් කරයි.
- 1A = 1000mA
- 1mA = 1000μA.
ධාරාවක් පරිපථයක් තුලින් ගමන් කිරීමට සංවෘත වී එනම් එකිනෙකට සම්බන්ධ වී තිබිය යුතුයි.
පහත වම් පස පින්තුරයේ දැක්වෙන්නේ එක දිගට ධාරාවක් ගලා යන සංවෘත පරිපථ සටහනක් වන අතර දකුණු පස දැක්වෙන්නේ ධාරාවක් ගලා නොයන විවෘත පරිපථ සටහනකි.
Resistor (ප්රතිරෝධය)
ප්රතිරෝධය(R) මැනීමේ ඒකකය ඔම්(Ω). ලෙස හැදින්වේ. එය Ω ලෙස සංකේතවත් කරයි.
- 1mΩ = 1000kΩ
- 1kΩ = 1000Ω.
පරිපථයක් හරහා ධාරාව ගලා යෑම සිමා කිරීම((regulates) සදහා ප්රතිරෝධක(Resistor) භාවිතා කරයි. ප්රතිරෝධක යනු ඉලෙක්ට්රොනික් පරිපථ වල බහුලව භාවිතා වන උපාංගය වලින් එකකි. පහත රූපයේ වම් පස දැක්වෙන්නේ ප්රතිරෝධකයක් වන අතර දකුණු පස දැක්වෙන්නේ එය සංකේතවත් කිරීමට යොදා ගන්නා සංකේතයයි.
විවිධ පාටවලින් දැක්වෙන වළලු වලින් ප්රතිරෝධක වල ප්රතිරෝධය දැක්වේ. එය ගණනය කිරීමට අදාල වගුව මෙම පොතෙහි උපග්රන්ථය සමග අමුණා ඇත. එය භාවිතා කර .ප්රතිරෝධක වල ප්රතිරෝධය සොයා ගත හැක.
වෝල්ටීයතාව නියතව පවත්වා ගනිමින් ධාරාව අඩු කිරීමෙන් වැඩි ප්රතිරෝධයක් ලබා ගත හැකියි. ඒ සදහා වෝල්ටීයතාව, ධාරාව, හා ප්රතිරෝධය අතර සම්බන්ධතා පහත සමීකරණ වලින් දැක්වේ.
පහත සටහනේ අනුව R1 හරහා ගලන ධාරාව : I=V/R=5V/10kΩ=0.0005A=0.5mA.
අවවාදයයි - කිසිවිටෙකවත් අඩු ප්රතිරෝධයක් හරහා බැටරියක හෝ බල සැපයුමක ධන හා ඍණ අග්ර සම්බන්ධ කිරීමෙන් වලකින්න. ඒ විට ඔබ භාවිත කරන ඉලෙක්ට්රොනික් උපාංග හෝ පරිපථයම පිලිස්සී යාමට හැකියි.
🔎 උපාංග පිලිබද දැනුම
ජම්පර් වයර් ලෙස හදුන්වන්නේ අපි සම්බන්ධක ලෙස භාවිතා කරන වයර් වලටයි. මේවා සකස් කර තිබෙන්නේ ඉලෙක්ට්රොනික උපාංග දෙකක් එකිනෙක සම්බන්ධ කිරීමටයි. උදාහණයක් ලෙස ආර්ඩුයිනෝ බෝර්ඩ් එක සහ බ්රෙඩ්බෝර්ඩ් එක එකිනෙක සම්බන්ධ කිරීමට මේවා භාවිතා කර හැකියි.Jumper වයර්
ජම්පර් වයර් වල male පින් (pin) සහ female ස්ලොට් (slot) පවති. ඒවා පදනම් කරගෙන ජම්පර් වයර් වර්ග 3ක් පවතී. එවා පහත දැක්වේ.
Jumper M/M | ![]() |
Jumper F/F | ![]() |
Jumper F/M | ![]() |
Breadboard
විවිධ වර්ගයේ බ්රෙඩ්බොර්ඩ් ඔබට වෙළදපොළෙන් ලබා ගන්න පුළුවන්. මෙහි දැක්වෙන්නේ බහුල වශයෙන් භාවිතා වන 400 පින්(සිදුරු) සහිත කුඩා බ්රෙඩ්බොර්ඩ් එකකි. ජම්පර් වයර් මගින් සම්බන්ධ කිරීමට මෙහි කුඩා සිදුරු විශාල ප්රමාණයක් පවතී.
එම සිදුරු ඇතුළතින් එකිනෙක සම්බන්ධ වී පවතී. එම සම්බන්ධ වන ආකාරය පහත රූපයේ දැක්වේ.
- breadboard සම්බන්ධ තව ඉගන ගන්න මෙම ලිපිය වෙත පිවිසෙන්න : Breadboard ගැන දැනගනිමු
Push button
Push button එකක පින් 4 ක් තිබේ. වම්පස රූපයේ පරිදි පින් දෙකක් එකිනෙකට සම්බන්ධ වී පවති. Push button අපිට වෙළදපොළෙන් විවිධ ප්රමාණයෙන් මිලදී ගන්න පුළුවන්. පරිපථයක් සංවෘත(ON) හෝ විවෘත(OFF) කර ගැනිම සදහා push button භවිතා කරයි.
- pushbutton සම්බන්ධ තව ඉගන ගන්න මෙම ලිපිය වෙත පිවිසෙන්න : Push Button එකක් ආර්ඩුයිනෝ සමග භාවිතා කරන ආකාරය
LED
LED එකක් යනු ඩයොඩ් එකකි. LED එකේ දිග පින් එක ධන(+) අග්රය වන අතර කොට පින් එක ඍණ(-) අග්රය වේ. මෙම සාමාන්යය ඩයෝඩයක් පරිදි ක්රියා කරයි. එනම් LED බල්බ් එකක් හරහා ධාරාව ගලා යන්නේ එක පැත්තකට පමණි. එනම් ඩයෝඩයක ධාරාව ගල යාමට සැමවිටම ඍණ පැත්තේ වෝල්ටීයතාවට වඩා ධන පැත්තේ වෝල්ටීයතාව වැඩි විය යුතුයි.
LED එකක් අපි කෙලින්ම බැටරියකට හෝ විදුලි සැපයුමකට සම්බන්ධ නොකළ යුතුයි. එමගින් එය හානි විය හැකියි. සැමවිටම ශ්රේණිගතව ගැලපෙන ප්රතිරෝධකයක් යොදා සම්බන්ධ කළ යුතුයි.
පරිපථ සැකැස්ම
මෙම අත්හදා බැලීමේදී අපි කරනුයේ Push Button එකක් භාවිතා කර LED බල්බ් එකක් කොන්ට්රෝල් කිරීමයි. මෙහිදී පරිපථය සදහා විදිලි බලය ආර්ඩුයිනෝ බෝර්ඩ් එකෙන් ලබා දේ.
පළමුව පහත රූපයේ පරිදි අදාළ උපාංග සමග ජම්පර් වයර් භාවිතා කර පරිපථය සකස් කරගන්න. පසුව රූපයේ පරිදි නිවැරදිව පරිපථය සම්බන්ධ කර තිබේදැයි හොදින් පරීක්ෂා කර බලන්න. ඉන් පසු ඔබගේ ආර්ඩුයිනෝ බොර්ඩ් එක USB කේබල් එක හරහා පරිගණකයට සම්බන්ධ කරන්න.
Schematic Diagram
|
Hardware Connection
|
දැන් Push button එක ඔබන්න. අතාරින්න එවිට LED බල්බ් එක දැල්වී නිවෙන ආකාරය දැක ගන්න පුළුවන්. Push button එක ඔබා ගෙන සිටින විට පමණක් බල්බය දැල්වේ.
මෙහිදි සාමන්යය පරිදි LED බල්බ් එකට විදුලිය ලබා දීමයි. මෙහිදී කිසිම කේතයක් යොදා නොගත් අතර ආර්ඩුයිනෝ බොර්ඩ් එක යොදා ගත්තේ එයට විදුලිය සැපයිමටයි. මෙහි 220Ω ප්රතිරෝධයක් හරහා සම්බන්ධ කරනු ලබන්නේ ආර්ඩුයිනෝ බොර්ඩ් එක මගින් එන 5V වෝල්ටීයතාව බල්බයට ගැලපෙන පරිදි අඩු කර ගැනිමටයි. .සාමාන්යයෙන් LED බල්බ් එකක් 1.5V සහ 3.5V අතර පරාසයක් වැඩ කරයි. එය ප්රමාණය හා පාට අනුව වෙනස් වේ.
Project 1.2 – Arduino මගින් LED පාලනය කිරීම.
අවශ්යය උපාංගදැන් අපි ආර්ඩුයිනෝ මගින් LED blink කරන්න ප්රෝග්රෑම් නිර්මාණය කරමු.
කලින් පාඩමේදී භාවිතා කරන ලද උපාංග මෙයට භාවිතා කල හැකියි. Push Button එක මෙහිදී අවශ්ය නොවේ.
🔎 පරිපථ සම්බන්ධ දැනුම
ඇනලොග් සිග්නල් සහ ඩිජිටල් සිග්නල්
ඇනලොග් සිග්නල් එකකදී කාලයත් සමග එහි වොල්ටියතා අගය(value) වෙනස් වේ. එය අඛණ්ඩ සංඥාවක් ලෙස යම් අගයන් පරාසයක විචලනය වන අතර. මීට ප්රතිවිරුද්ධව, ඩිජිටල් සිග්නල් වලදී කාලයත් සමග එහි වෝල්ටීයතා අගය(value) නියත අගයක් ගනී.
අපට ජීවිතයේ නිතරම හමුවන ඇනලොග් සිග්නල් වලට උදාහරණයක් ලෙස දිනකදී උෂ්ණත්වය එක දිගට වෙන්වීම ගත හැකියි.(continuously changing) එහි අගය නියත අගයක් නොවේ. ඒ අගය කිසි විටකත් එහි අගය 0 ℃ සිට 10 ℃ සිට ඍජු වෙනස්වීමක් නොවනු ඇත. ඩිජිටල් සිග්නල් වලදී අගය ඍජුවම 1 සිට 0 දක්වා කෙලින්ම වෙනස් වේ. එහි ඇත්තේ ද 1 සහ 0 අවස්ථා දෙක පමණි. පහත පින්තූරයේ දැක්වෙන ප්රස්ථාරයේ දක්වා තියෙන්නේ ඇනලොග් සිග්නල් සහ ඩිජිටල් සිග්නල් අතර වෙනසයි .
කලින් පෙන්වා දුන් ආකාරයට ප්රයෝගිකව යොදා ගන්න විට, ඩිජිටල් සිග්නල් වලදී නිතරම භාවිතයට ගන්නේ 0 සහ 1 යන අගයන් පමණි. මෙහිදි දෙකේ පාදයෙන් ගණනය කිරීම් සිදු කරයි. ඩිජිටල් සිග්නල් වලට හොද ස්ථාවරත්වයක් ඇත. ඒ වගේම ඩිජිටල් සිග්නල් එකක් ඇනලොග් සිග්නල් එකටත් ඇනලොග් සිග්නල් එකක් ඩිජිටල් සිග්නල් බවටත් පරිවර්තනය කල හැකිය.
Low level සහ High level
මෙම 0 සහ 1 අගයන් low level සහ high level ලෙස හදුන්වනු ලැබේ.
සාමාන්යයෙන් අපි පරිපථයකදී Low level එනම් අඩුම අගය Ground voltage(0V) ලෙස ගනු ලැබේ. High level උපරිම අගය ලෙස පරිපථයේ ධන(+) වෝල්ටීයතාවහි උපරිම අගය භාවිතා කරයි.
ආර්ඩුයිනෝ බෝර්ඩ් එකේදී Low level ලෙස 0V සහ High level ලෙස 5V භාවිතා කරයි., එය පහත පින්තුරයේ පරිදි දැක්විය හැකිය. එනම් ආර්ඩුයිනෝ බෝර්ඩ් එකේ IO පින් වලදී High level ලෙස ප්රතිදානයක් ලබා දීමේදී 5V නිකුත් වන අතර එමගින් අපගේ පරිපථයේ LED බල්බය දැල්වේ.
🔎 කේතකරණය පිලිබද දැනුම
දැන් අපි අපේ පරිපථයට අදාළ ප්රෝග්රෑම් එක නිර්මාණය කිරීම ආරම්භ කරමු. එමගින් ඔබට ආර්ඩුයිනෝ කේතකරණය සම්බන්ධව මනා අවබෝධයක් ලබා ගත හැකියි.
Comments (කමෙන්ට්)
අපේ sketches එකේ ප්රෝග්රෑම් එකේ අදාළ කේත පේළි හෝ කොටස් ගැන පසුව මතක් කරගැනීමට හෝ හැදින්වීමක් යෙදීමට කමෙන්ට් භාවිතා කරයි. කමෙන්ට් ලෙස යොදන විස්තරය අපගේ ප්රෝග්රෑම් එක රන් වීමට අදාල නොවේ. එය කම්පයිලර් එකෙන් මගහරී.
ආර්ඩුයිනෝ Sketches එකකදී අපිට ක්රම දෙකකට කමෙන්ට් යෙදිය හැකියි.
- Symbol “//”
“//” තනි පේළියක කමෙන්ට් එකක් යෙදීමේදී මෙය භාවිතා කරයි.
// this is a comment area in this line.
code පේළියක ඉදිරියෙන් “//” යොදා කමෙන්ට් යෙදිය හැකියි.
delay(1000); // wait for a second
Symbol “/*”and “*/”
“/*” සහ “*/” – මෙම සංකේත දෙක අතර කමෙන්ට් එක යෙදිය යුතුයි. පේළි කිහිපයක කමෙන්ට් එකක් යෙදීමේදී මෙය භාවිතා කරයි.
/* This is a comment area. */ /* this is a comment line. this is a comment line. */
Data type (දත්ත වර්ග)
ආර්ඩුයිනෝ ප්රෝග්රෑම් එකක් නිර්මාණය කිරීමේදී විවිධ ආකාරයේ දත්ත වර්ග භාවිතා කිරීමට සිදුවේ. උදාහරණ ලෙස වචන, වාක්යය, අකුරු, ඉලක්කම්, සංකේත සහ තවත් බොහෝ දේවල් හැදින්වීමට හැකි අතර C කේතකරණ භාෂාවේ මුලික දත්ත වර්ග කිහිපයක් පවතී. ආර්ඩුයිනෝ කේතකරණයට ආදාල කේතකරණ භාෂාව නිර්මාණය කර ඇත්තේ C කේතකරණ භාෂාව යොදා ගෙනය. එම නිසා එවා අතර බොහෝ සමානකම් තිබේ.
මුලික දත්ත වර්ග 3 පහත ආකාරයට දැක්විය හැකියි.
- int: ගණිතමය ක්රියාකාරකම් සහිතව පුර්ණ අගයන් යෙදීමේදී මෙය භාවිතා කරයි. උදා 0, 12, -1;
- float: ගණිතමය ක්රියාකාරකම් සහිතව දශම, භාග සහිත අගයන් නිරුපණය කිරීමට භාවිතා කරයි. උදා 0.1, -1.2;
- char: අකුරු සංකේත යොදා ගැනීමේදී මෙය භාවිතා කරයි, උදා: ‘a’, ‘@’, ‘0’;
දත්ත වර්ග ගැන තවත් දේවල් දැනගන්න මෙම වෙබ් පිටුවට යන්න https://www.arduino.cc/Learning-Reference-Data Types.
Constant (නියත)
Constant ලෙස යොදාගන්නේ එම අගය නියතයක් ලෙස නිරුපණය කිරීමටයි. එහි අගය වෙනස් නොවේ, මේ සදහා const කියන පදය භාවිතා කරයි. එය භවිතා කරන ආකාරය පහත දැක්වේ.
const float pi = 3.14; const int pi = 3; const char chr = 'A';
විචල්යයක් යනු අපි යොදාගන්නා අගයක් වෙනස් කළ හැකි ආකාරයේ දත්තයකි. එයට නමක්(name) වර්ගයක්(type) සහ අදාල අගයක්(value) පවතී. විචල්යය භාවිතයට පෙර එයට නමක් හා වර්ගයක් ලබා දී නිර්මාණය කර ගත යුතුයි, එය පහත පහත පරිදි අර්ථ දැක්විය හැකියි:Variable (විචල්යය)
int i;
විචල්යයක් අර්ථ දැක්වීමෙන් පස්සේ එයට අගයක් යෙදිය හැකියි. එය පහත පරිදි සිදු කල හැකියි. මෙහිදි සිදුවන්නේ විචල්යයයේ නමට ආදාල අගය සාමාන කිරිමයි.”int” ලෙස දක්වා තිබෙන්නේ විචල්යයයේ වර්ගයයි. එනම් අපි කලින් ඉගනගත් දත්ත වර්ග වලින් එකකි. විචල්යයක් අර්ථ දක්වා අවසානයේ “;” එකක් යොදා අවසන් කළ යුතුයි. විචල්යයක් සාමාන්යයයෙන් තනි පේලියකින් දක්වනු ලබයි. ඒ වගේම අවසානයේ ; එකක් යොදනු ලබයි.
i = 0; // after the execution, the value of i is 0
අපිට අවශ්ය නම් තනි පේළියක විචල්යය කිහිපයක් වුනත් අර්ථ දැක්විය හැකියි. එමගින් අපේ ප්රෝග්රෑම් එකේ කේත පේළි ප්රමාණය අඩු කරගත හැකිය. විචල්යයක් ඒ විදියට අර්ථ දක්වා පස්සේ එයට අගයක් යෙදිය හැකියි. ඒ සදහා අපි ‘=’ ලකුණ යොදා ගනි. එහිදී වම් පස විචල්යයයේහි නමත් දකුණු පස එයට යොදන අගයක් යොදා කේත කිරිම කල යුතුයි. එහි අගය අපට අවශ්ය තැන් වලදී යොදන අගය වෙනස් කල හැකියි. එය යොදා ගන්නා ආකාරය පහත දක්වා තිබේ.
int i, j; i = 0; // after the execution,the value of i is 0 i = 1; // after the execution,the value of i is 1 j = i; // after the execution,the value of j is 1
ප්රෝග්රෑම් එකක් කේත කිරීමේදී එය පහසුවෙන් සිදු කිරීමට අපි ෆන්ෂන් භාවිතා කරනු ලැබේ. ෆන්ෂන් එකක් යනු අපි කර ගන්න ඕන වැඩේට(task) එකට අදාලව ක්රමානුකුලව ලියන ලද කේත පේලි ගොඩක එකතුවක් කියලා හදුන්වන්න පුළුවන්. දැන් අපි උදාහරණය විදියට පහත දැක්වෙන void blink() ෆන්ෂන් එක සලකා බලමු.
Function
ප්රෝග්රෑම් එකක් කේත කිරීමේදී එය පහසුවෙන් සිදු කිරීමට අපි ෆන්ෂන් භාවිතා කරනු ලැබේ. ෆන්ෂන් එකක් යනු අපි කර ගන්න ඕන වැඩේට(task) එකට අදාලව ක්රමානුකුලව ලියන ලද කේත පේලි ගොඩක එකතුවක් කියලා හදුන්වන්න පුළුවන්. දැන් අපි උදාහරණය විදියට පහත දැක්වෙන void blink() ෆන්ෂන් එක සලකා බලමු.
void blink() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
“void” මගින් දැක්වෙන්නේ අදාල ෆන්ෂන් එකෙන් යම් අගයක් ආපසු ෆන්ෂන් එකෙන් පිටතට ලබා නොදෙන බවයි. එනම් අදාල ෆන්ෂන් එකෙන් ආපසු(return) ලබා දෙන අගයක් නොමැති බවයි. (3 වන පාඩමේදී ෆන්ෂන් එකක return value භාවිතය ගැන වැඩිදුර ඉගෙන ගනිමු.) blink යනු මෙම ෆන්ෂන් එකේ නමයි. ෆන්ෂන් එකකට අනිවාර්යයෙන් නමක් යෙදිය යුතුය. එම නම් ආර්ඩුයිනෝ වල ඇති විශේෂ පද වලට අදාළ නැති අපට කැමති නමක් භාවිතා කළ හැකියි.
“()” මෙම වරහන් යොදාගන්නේ අදාල ෆන්ෂන් එකට අවශ්යය යම් අගයක් හෝ අගයන් කිහිපයක් පිටතින් ලබා ගන්නේ නම් එය අර්ථ දැක්වීමටයි. එම අගයන් විචල්යයක් ආකාරයට මෙම වරහන් තුළ යොදනු ලබයි. එවැනි අගයක් නොමැති නම් අපි වරහන් හිස්ව () යොදනු ලබයි. එම යොදන විචල්යයක අපි ෆන්ෂන් එකට අදාල පැරාමීටර්ස්(parameters) ලෙස හදුන්වයි. (ඉදිරියේදි අපි ෆන්ෂන් වලට අදාල පැරාමීටර්ස් ගැන වැඩිදුර ඉගනගනිමු ).
“{}” තුළ ෆන්ෂන් එකට අදාල සියලු කේත පේළි මේ තුළ ලියනු ලබයි.
ෆන්ෂන් එකක් නිර්මාණය කළ පමණින් එයින් වැඩක් නොවේ. එම කේත රන් නොවේ. නිර්මාණය කළ අවසන් කර පසු අපි ෆන්ෂන් එක අදාල අවස්ථා වලදී කතා(call) කල යුතුයි. void blink() ෆන්ෂන් එක රන් කිරිමට කතා කරන ආකාරය පහත දක්වා තිබේ,
blink();
ෆන්ෂන් එකකට කතා(call) කළ විට පමණක් එයට අදාල කේත ක්රියාත්මක වේ, එනම් එයට කතා කරන අවස්ථාවේදී පමණක් ෆන්ෂන් එකට අදාල කේත කොටස රන් වේ, ෆන්ෂන් එකට අදාල කේත ක්රියාත්මක වීමෙන් පසු ප්රධන ලූප් එකේ ඊලග කේත පේලිය ක්රියාත්මක වීම පටන්ගනී. එය පහත රූපයෙන් ඔබට හොදින් අවබෝධ කරගන්න පුළුවන්.
සමහර ෆන්ෂන් වල පැරාමීටර්ස් එකක් හෝ කිහිපයක් තිබෙන්න පුළුවන්. එම අවස්ථා වලදී එය අපි ෆන්ෂන් එකට කතා කරන විට () තුළ යෙදිය යුතු වේ.
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second
ෆන්ෂන් ගැන තේරුම් ගැනීමට තව උදාහරණයක් අරගෙන බලමු. මේ සදහා අපි බ්ලූටූත් වලින් පාලනය කළ හැකි කාර් එකක් මූලික ක්රියාවලිය සලකා බලමු.
මෙහිදි අපිට මෙය ක්රියත්මක කිරිමට ප්රධාන වශයෙන් ෆන්ෂන් 5 නිර්මාණය කර ගත යුතු වේ. එනම් ඉඩිරියට යාමට, පසුපසට යාමට, වමට හැරවිමට, දකුණට හැරවිමට සහ නැවත්විමටයි. එය අපිට forward, backward, turnleft, turnright, stop ලෙස යොදා ගත හැකිය. මෙහිදී එක එක ෆන්ෂන් එක සදහා එය තුළ මෝටර් ක්රියාත්මක විය යුතු ආකාරය සකස් කර ගත හැකිය. ඊට පසු බ්ලූටූත් මගින් සිග්නල් එකක් යවා අදාල අවස්ථාවේ එම එක් එක් ෆන්ෂන් කෝල් කිරිම මගින් කාර් එක පාලනය කළ හැකිය.
මෙම ආකාරය අපිට ඕනැම නිර්මාණයක් කිරිමේදී ඊට අදාල මූලික ක්රියාකාරකම් ෆන්ෂන් සකස් කර ගැනීමෙන් අපිට එක පහසුවෙන් සිදු කර ගත හැකිය.
පරිපථ සැකැස්ම
දැන් අපි අදාන ප්රතිදාන පින් භාවිතා කරලා LED එකක් Blink කරන්නේ කොහොමද කියලා බලමු. D13 ලෙස නම් කරලා තියෙන්නේ ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඩිජිටල් පින් එකක් වන් අතර එය අපිට high level සහ low level බවට පත් කළ හැකිය. එනම් ON සහ OFF කිරිමයි. එමගින් අපිට LED බල්බ් එක කොන්ට්රෝල් කළ හැකි වේ.
Schematic diagram
|
Hardware connection
|
Sketch 1.2.1
පහත දැක්වෙන්නේ LED බල්බ් එකක් blink කිරීමට අදාල sketch එකයි. මෙහිදී අපිට ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඩිජිටල් 13 පින් (D13) එක ප්රතිදානයක් විදියට සකස් කර එය HIGH සහ LOW කළ යුතුයි. ඔබගේ කේතකරණය පිලිබද නිපුණත්වය වැඩි කරගැනීමට නම් ඔබ මෙහි දැක්වෙන කේත කේතනය කරන්න. copying and pasting කිරීම කේතකරණය ඉගෙන ගැනීමට හොද ක්රමයක් නොවන බව මතක තබා ගන්න. ඔබම කේත නිර්මාණකරණය මගින් ඔබගේ කුසලතා වැඩිදියුණු කර වැඩි දැනුමක් ලබා ගත හැකිය.
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output pinMode(13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }
LED_BUILTIN |
බොහෝ ආර්ඩුයිනෝ පුවරුවල ප්රතිරෝධකයක් සහිත ශ්රේණියේ LED එකක් පුවරුවකට සම්බන්ධ කර ඇත. නියත LED_BUILTIN යනු පුවරුවේ ඇති LED සම්බන්ධ කර ඇති පින් එකයි. බොහෝ පුවරු වල මෙම LED ඩිජිටල් පින් 13 සමඟ සම්බන්ධ කර ඇත. එනම් D13 භාවිතා කරන තැන් වලට මෙය භාවිතා කළ හැකියි. |
ආර්ඩුයිනෝ කේත වලදී: void setup() සහ void loop() ප්රධාන ෆන්ෂන් දෙකක් භාවිතා කරයි. ආර්ඩුයිනෝ බොර්ඩ් එක රිසෙට්(reset) කළ පසු setup() ෆන්ෂන් එක මුලින් ක්රියත්මක වේ. ඊට පස්සේ loop() ෆන්ෂන් එක ක්රියත්මක වේ. සාමාන්යයෙන් setup() ෆන්ෂන් එක භාවිතා කරන්නේ බොර්ඩ් එක හා සම්බන්ධ කර ඇති දෘඩාංග හදුනාගෙන එවායේ සෙටින්ග්ස් සකස් කිරීමටයි. එනම් අපි ප්රෝග්රෑම් එක හරහා මොන මොන උපාංග එක්ක සම්බන්ධ වනවාද යන්නයි. loop() ෆන්ෂන් එක භාවිතා කරන්නේ අපගේ ප්රෝග්රෑම් එකට අදාළ අනෙකුත් කේත සහ ෆන්ෂන් ලිවීමටයි. එය එක දිගට චක්රයක් සේ සේ ක්රියත්මක වේ. එනම් ප්රෝග්රෑම් එක මුල සිට අවසානයේ දක්වාත් නැවතත් මුල ඉදන් අවසානයේ තෙක් දිගටම රන් වෙන්න පටන් ගනී. | රීසෙට්(Reset) කිරීමේදී ප්රෝග්රෑම් එක නැවත මුල සිට ක්රියාත්මක වෙන්න පටන් ගනී. ආර්ඩුයිනෝ බොර්ඩ් එක විදුලිය විසන්ධි කළ අවස්ථාවේත්, අප්ලෝඩ් කරන අවස්ථාවේත්. රීසෙට්(Reset) බටන් එක එබු විටත් මෙය ක්රියාත්මක වේ. |
setup () ෆන්ෂන් එකේදී මුලින්ම අපි බොර්ඩ් එකේ ඩිජිටල් 13 පින් එක ප්රතිදානයක් බවට පත් කර ගත යුතුයි. ඉන් පසු එය high level සහ low level බවට පත් කර ගත යුතුයි.
// initialize digital pin 13 as an output. pinMode(13, OUTPUT);
ඉන්පසු loop () ෆන්ෂන් එකේදී අපි බොර්ඩ් එකේ ඩිජිටල් 13 පින් එක high level (5V) ලෙස ප්රතිදාන කිරීම මගින් LED බල්බ් එක දැල්වේ.
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
ඉන් පසු පහත දැකෙවෙන ආකාරය අපි තත්පර එකක් බල්බ් එක දැල්වී පවතින ලෙස සකස් කළ යුතුය. එයට අපි delay() ෆන්ෂන් එක භවිතා කරනු ලැබේ. මෙහිදි කාලය මිලි තත්පර වලින් පැරාමිටර් එකක් ලෙස ලබා දිය යුතුය. අපි එය දක්වන්නේ 1000 ලෙසයි. මිලි තත්පර 1000 ක් තත්පර 1 ට සමාන වේ. delay() ෆන්ෂන් එක භාවිතයෙන් ඊලග පේළිය ධාවනය වීමට යම් කාලයක් ලබා දී පමා කිරිම සිදුකරයි.
delay(1000); // wait for a second
දැන් අපි නැවතත් ඩිජිටල් 13 පින් එක low level ලෙස එනම් OFF ලෙස ප්රතිදාන කරනු ලබන අතර එහිදී LED බල්බ් එක නිවී යයි. නැවතත් ඉහත පරිදි තත්පර 1 ක් පමා වෙන ආකාරයට delay() ෆන්ෂන් එක භාවිතා කරයි. ඒවා ධාවනය වීමෙන් පස්සේ loop () ෆන්ෂන් එක අවසාන වන අතර නැවතත් මුල සිට ක්රියාත්මක වේ.
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second
දැන් loop() ෆන්ෂන් එක එක දිගට වැඩ කරන නිසා අපිට LED බල්බ් එක නිවී නිවී දැල්වෙන ආකාරයට දිස් වේ.
ඉහත අපි භාවිතා කරේ ආර්ඩුයිනෝ වල මුලික ෆන්ෂන් කිහිපයක්, ඒවා ආර්ඩුයිනෝ සොෆ්ට්වෙයා එක තුළ අන්තර්ගත වේ. එම නිසා අපිට ඒවා කෙලින්ම භාවිතා කළ හැකියි. ඉදිරි පාඩම් වලිදී ඔබට තවත් මුලික ආර්ඩුයිනෝ ෆන්ෂන් ගැන වැඩි දුර ඉගෙන ගැනීමට අවස්ථාව හිමිවේ. ඔබට ඒ ගැන වැඩිදුර දැනගැනීමට අවශ්ය නම් මෙම වෙබ් පිටුවට වෙත පිවිසෙන්න https://www.arduino.cc/LearningReference-Functions.
ඔබගේ ප්රෝග්රෑම් එක Verify ක්ල්ක් කර නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසු අප්ලෝඩ් කර ගන්න. එවිට LED blink වෙන ආකාරය ඔබට දැක ගත හැකිය.
ඔබට කලින් ප්රොජෙට් එකේදි LED එකක් නිවී දැවෙන ආකාරයේ පරිපථයක් ප්රෝග්රෑම් කරන්නේ කෙසේද යන්න ඉගෙන ගන්න අවස්ථාව හිමි විය. දැන් අපි ආර්ඩුයිනෝ බෝර්ඩ් එකක් භාවිතයෙන් LED දෙකක් blink කිරීම සදහා ප්රෝග්රෑම් එකක් නිර්මාණය කරන ආකාරය පිලිබදව සොයා බලමු.
ක්රියාකාරකම 1.2 |
|
Project 1.3 – LED බල්බ් දෙකක් පාලනය කිරීම.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() |
![]() LED x1 |
Resistor 220Ω x1 |
|
Jumper M/M x3 |
🔎 කේතකරණය පිළිබද දැනුම
අවසාන පාඩමේදී අපි පහත ආකාරයට පරාමිතීන්(parameter) යොදා delay ෆන්ෂන් එකක් භාවිතා කර ආකාරය මතක ඇතැයි සිතමි.
delay(1000); // wait for a second
දැන් අපි එවැනි ෆන්ෂන් එකක් තුළ පරාමිතීන්(parameter) භාවිතා වන ආකාරය බලමු. එය පහත පරිදි අර්ථ දක්වන්න පුළුවන්.
void functionA (int i) { i = i + 1; }
functionA ලෙස දක්වා ඇත්තේ එම ෆන්ෂන් එකේ නමයි. “i” ලෙස හදුන්වා තිබෙන්නේ ඉහත ෆන්ෂන් එකේ පරාමිති(parameter)යයි. “Int” ලෙස දක්වා තිබෙන්නේ i පරාමිතියේ භාවිතා වන දත්ත(Data type) වර්ගයයි. ෆන්ෂන් එකට කතාl කිරීමේදී අදාළ පරාමිතිය යෙදිය යුත්තේ එම වර්ගයට ගැලපෙන විදියටයි.
functionA (1);
පරාමිතීයක් විදියට ආදාන වන අගය ඊට පසු i ට ඇතුළත් වේ. ඉන් පසු එම අගය functionA(int i) තුළ භාවිතා කළ හැකියි. එය වැඩ කරන ආකාරය පහත දක්වා දැක්වේ.
ෆන්ෂන් එකක් තුළ පරාමිතීන් එකක් හෝ ඊට වඩා භාවිතා කල හැකියි. ඒ වගේම එම පරාමිතීන් වලට එකිනෙක වෙනස් දත්ත වර්ගයන්(data types) භාවිතා කරන්න පුළුවන්.
void functionB (int i, char j) { char k = 'a'; i = i + 1; k = j; }
බූලියන් දත්ත වර්ගය (Boolean data type)
බූලියන් ලෙස නම් කර ඇති දත්ත වර්ගය භාවිතා කරන්නේ “true” සහ “false” භාවිතා කරන්න අවශ්ය විටයි. එනම් සරලව කිව්වොත් මෙයින් කියවෙන්නේ ඇත හා නැත යන අවස්ථා 2 පමණි. දෙකේ පදයෙන් ගත්තොත් true යන්න 1 ලෙසද false යන්න 0 ද දැක්විය හැකියි. එය පහත පරිදි භාවිතා කරන්න පුළුවන්.
boolean isTrue; isTrue = true; // after the execution, "isTrue" is assigned to true. isTrue = false; // after the execution, "isTrue" is assigned to false.
තාර්කික ක්රියාකරු (Logical operator)
මූලිකව තාර්කික ක්රියාවන් සිදුකිරීමට ක්රියාකරුවන් 3ක් අපට හමුවේ. ඒවා නම් “&&” (and), “||” (or), “!” (non), බූලියන් දත්ත වර්ගය භාවිතා කර ප්රතිදාන ගන්නා විට මේවා ගොඩක් වැදගත් වේ. සාමන්යයයෙන් තාර්කික ක්රියාවන් සිදුකිරිමට ක්රියාකරුවන් භාවිතා කර ප්රතිදාන ගන්න ආකාරය පහත දක්වා තිබේ.
උදාහරණයක් සදහා පහත කේත සටහන බලන්න:
boolean isTrue; isTrue = true && false; //execution, "isTrue"is assigned to false. isTrue = true || false; //execution, "isTrue"is assigned to true. isTrue = !true; // execution, "isTrue"is assigned to false.
සම්බන්ධතා ක්රියාකරු (Relation operator)
සම්බන්ධතා ක්රියාකරුවන් භාවිතා කරන්නේ යම් අගයන් දෙකක් හෝ අවස්ථා දෙකක් සංසන්දනය කිරීමටයි. තවද එම අවස්ථා දෙකේ සම්බන්ධතාවය නිවැරදිදැයි විනිශ්චය කිරීමට භාවිතා වේ. විනිශ්චය කිරිමෙන් පසු එය වැරදි හෝ නිවැරදි දැයි පරීක්ෂා කරේ. එනම් true හෝ false දැයි විමසා බැලීමටයි. උදාහරණයක් ලෙස , “1>2” මෙම සම්බන්ධතාවය අසත්ය වන අතර “1<2” මෙය සත්ය වේ.
boolean isTrue; isTrue = 1 < 2; // after the execution, "isTrue"is true. isTrue = 1 > 2; // after the execution, "isTrue"is false.
අපි ආර්ඩුයිනෝ සමග භාවිතා කරන තවත් සම්බන්ධතා ක්රියාකරුවන් කිහිපයක් තිබේ. ඒවා නම්,
- “==” (equal to), සමානයි
- “>=” (greater than or equal to), විශාලයි හෝ සමානයි.
- “<=” (less than or equal to) කුඩායි හෝ සමානයි.
- “=!” (not equal to). අසමානයි.
කොන්දේසි සහිත ප්රකාශන (Conditional statement )
කොන්දේසි සහිත ප්රකාශන භාවිතා කරන්නේ යම් කිසි ප්රතිඵලයක් ලබාදීමේදී එය ලබා දෙනවද නැද්ද යන්න නිගමනය කිරීමටයි. එනම් යම් කිසි ක්රියාවලියක්(Tasks) ක්රියාත්මක කළ යුතු අවස්ථාව කුමක්ද යන්න තීරණය කිරීමට මෙය යොදා ගනී. පහත දක්වා ඇති පළමු උදාහරණයේ i = 0 සම්බන්ධතාවය සත්ය බැවින් i = 1 කියන කේතය ක්රියාත්මක වේ. දෙවන උදාහරණයේ i != 0 සත්ය නොවන බැවින් i = 1 කියන කේතය ක්රියාත්මක නොවේ. මෙහිදී අපි භාවිතා කර තිබෙන්නේ if කියන කොන්දේසි සහිත ප්රකාශන ආකාරයයි.
If වලට අදාලව ක්රියාත්මක විය යුතු කේත පේලි ගොඩක් තිබේ නම් ඒවා “{}“: තුළ ඇතුලත් කල යුතුයි.
යම් සම්බන්ධතාව සත්ය හා අසත්ය යන අවස්ථා දෙකේදී වෙන වෙනම කේත කොටස් දෙකක් ක්රියාත්මක කිරීමට අවශ්ය විට අපි if සමග else භාවිතා කරයි. එය සිදුකරන ආකාරය පහත දැක්වේ.
සම්බන්දතා කිහිපයක් අතර තීරණ ගැනීමේදී අපිට පහත පරිදි if else-if භාවිතා කල හැකියි. එහිදි අදාළ සම්බන්ධතාවය සත්ය (true) වෙන අවස්ථාවට අදාල කේත කොටස පමණක් ක්රියාත්මක වේ. ඒ වගේම කිසිම අවස්ථාවක සම්බන්ධතාවයක් සත්ය වන්නේ නැත්නම් else තුළ ඇතුලත් කළ කේත කොටස ක්රියාත්මක වේ.
පරිපථ සැකැස්ම
පහත පරිපථයේ දැක්වෙන LED දෙක පිළිවෙලින් blink කිරීම සඳහා ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි D4 සහ D5 සමග සම්බන්ධ කර ඇත.
Schematic diagram
|
Hardware connection
|
Sketch 1.3.1
මෙහිදී අපි ෆන්ෂන් භාවිතා කර හා භාවිතා නොකර LED දෙක blink කරන ආකාරය සදහා sketches දෙකක් නිර්මාණය කරමු. එමගින් අපිට ඒ අවස්ථා දෙක අතර වෙනස හොදින් අවබෝධ කරගත හැකියි.
පළමුව, ෆන්ෂන් භාවිතා නොකර Sketch එක නිර්මාණය කරමු.
// set pin numbers: int led1Pin = 4; // the number of the LED1 pin int led2Pin = 5; // the number of the LED2 pin void setup() { // initialize the LED pin as an output: pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); } void loop() { digitalWrite(led1Pin, HIGH); // turn the LED1 on digitalWrite(led2Pin, LOW); // turn the LED2 off delay(1000); // wait for a second digitalWrite(led1Pin, LOW); // turn the LED1 off digitalWrite(led2Pin, HIGH); // turn the LED2 on delay(1000); // wait for a second }
ඉහත නිර්මාණය කල ඇති Sketch එක අපි කලින් ඉගෙන ගත් පාඩමේ Sketch එකට ගොඩක් දුරට සමාන වේ. වෙනසකට ඇත්තේ LED දෙකක් භාවිතා කර ඒවා එකින් එක නිවී දැල්වෙන ආකාරයට නිර්මාණය කිරීමයි.
විචල්යයන් භාවිතය ගැන දැනගනිමු.
2,3 පේලි වල දැක්වෙන්නේ විචල්යය දෙකක් නිර්මාණය කර එම විචල්යය දෙකට අදාල පින් අනුයුක්ත කිරීමයි. මෙම විචල්යයන් ෆන්ෂන් වලින් පිට නිර්මාණය ඇති නිසා ඒවා පොදු විචල්යයන් (“Global variable”) ලෙස හදුන්වයි. එවිට අදාල විචල්යය ඕනෑම ෆන්ෂන් එකක් තුළදී භාවිතා කරන්න පුළුවන්. ෆන්ෂන් එකක් තුළ නිර්මාණය කරන විචල්යය දේශීය විචල්යයන් (“local variable”) ලෙස හදුන්වයි. ඒවා භාවිතා කළ හැක්කේ එම ෆන්ෂන් එක තුළ පමණි. දේශීය විචල්යයන් සහ පොදු විචල්යයන් සදහා එකම නම භාවිතා කරන්න පුළුවන් |
Sketch එක නිවැරදිදැයි පරීක්ෂා කර අප්ලෝඩ් කරන්න, එවිට ඔබට LED දෙක එකින් එක නිවී නිවී දැල්වෙන ආකාරයට දැකගත හැකිය.
Sketch 1.3.2
ඉහත Sketch 1.3.1 ලෙස ඇති අන්තිම sketch එකේ දැක්වෙන පරිදි පහත දැක්වෙන sketch හි ලොකු වෙනසක් නැති වුනත් ෆන්ෂන් යොදා ප්රෝග්රෑම් කිරීම මගින් කේත පේලි ප්රමාණය අඩු කරගැනීමට අවස්ථාව ලැබේ. ඒ වගේම ප්රෝග්රෑම් එක සරලව නිර්මාණය කරගන්න පුළුවන්.
digitalWrite(led1Pin, HIGH); // turn the LED1 on digitalWrite(led2Pin, LOW); // turn the LED2 off delay(1000); // wait for a second digitalWrite(led1Pin, LOW); // turn the LED1 off digitalWrite(led2Pin, HIGH); // turn the LED2 on delay(1000);
දැන් අපි ෆන්ෂන් භාවිතා කරලා ඉහත කේතනය වැඩි දියුණු කරමු.
// set pin numbers: int led1Pin = 4; // the number of the LED1 pin int led2Pin = 5; // the number of the LED2 pin void setup() { // initialize the LED pin as an output: pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); } void loop() { setLed(HIGH, LOW); // set LED1 on, and LED2 off. setLed(LOW, HIGH); // set LED1 off, and LED2 on. } void setLed(int led1, int led2) { digitalWrite(led1Pin, led1); // the state of LED1 digitalWrite(led2Pin, led2); // the state of LED2 delay(1000); // wait for a second }
ඉහත දක්වා ඇති sketch එකේ, LED දෙකටම අදාලව එක ෆන්ෂන් එකක් නිර්මාණය කර ඇති අතර එය void setLed(int led1, int led2) ලෙස දැක්වේ. එහි led1 සහ led2 පරාමින් දෙකක් භාවිතයෙන් LED දෙක හසුරවනු ලැබේ.
void setLed(int led1, int led2) { digitalWrite(led1Pin, led1); // the state of LED1 - variable led1. digitalWrite(led2Pin, led2); // the state of LED2 - variable led2. delay(1000); // wait for a second }
ඉහත ෆන්ෂන් එකට කතා කළ විට එකිනෙකට වෙනස් පරාමිතීන් වල අගයන් ලබා දීමෙන් LED දෙක පාලනය කළ හැකිය. මෙහිදී අපි පරාමිතීන් සදහා ආර්ඩුයිනෝ වල ඇති HIGH සහ LOW විචල්යයයන් භාවිතා කරයි.
setLed(HIGH, LOW); // set LED1 on, and LED2 off. setLed(LOW, HIGH); // set LED1 off, and LED2 on.
ප්රෝග්රෑම් එක නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසු එය ආර්ඩුයිනෝ බෝර්ඩ් එක වෙත අප්ලෝඩ් කරන්න, එවිට කලින් ආකාරයටම LED දෙක එකිනෙක නිවී දැල්වෙන ආකාරය දැකගන්න පුළුවන්.
HIGH සහ LOW
යම් කිසි නම්බර් එකක්, වචනයක්, වාක්යක් හෝ කේත කොටසක් හදුනා ගැනීමට හෝ ඉදිරිපත් කිරීමට macro භාවිතා කරයි. HIGH සහ LOW යනු macro දෙකකි. එය පහත ආකාරයට ආර්ඩුයිනෝ සොෆ්ට්වෙයාර් එක තුළම ඇතුළත් කර තිබේ.
මෙම කේතනය තුළ එය ඉබේම අන්තර් ගත වේ. උදාහරණයක් ලෙස ගත විට , setLed (HIGH, LOW) කියන එක setLed (1, 0) සමාන වේ. macro භාවිතා කිරීමෙන් ප්රෝග්රෑම් එකෙහි කේතනය සරල කරගන්න පුළුවන් වගේම එහි දී INPUT, OUTPUT වන ආකාරය හොදින් තේරුම් ගත හැකි වේ. |
Sketch 1.3.3
අවසන් කොටසේ සදහන් වුයේ ෆන්ෂන් භාවිතා කර කේතනය කරන ආකාරයයි. එහිදී අපි පරාමිතීන් දෙකක් යොදාගනිමින් LED දෙක පාලනය කරන ලදි. දැන් අපි එක පරාමිති එකක් භාවිතයෙන් LED දෙක පාලනය කරන ආකාරය බලමු. මෙහිදී අපි කලින් ඉගෙනගත් කොන්දේසි සහිත ප්රකාශන ක්රමයම භාවිතා කරයි.
දැන් අපි කොන්දේසි සහිත ප්රකාශන යොදාගනිමින් ඉහත ප්රෝග්රෑම් එක නැවත නිර්මාණය කරමු.
// set pin numbers: int led1Pin = 4; // the number of the LED1 pin int led2Pin = 5; // the number of the LED2 pin void setup() { // initialize the LED pin as an output: pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); } void loop() { setLed1(HIGH); // set LED1 on, and LED2 off. setLed1(LOW); // set LED1 off, and LED2 on. } void setLed1(int led1) { digitalWrite(led1Pin, led1); // the state of LED1 if (led1 == HIGH) // the state of LED2 digitalWrite(led2Pin, LOW); // if LED1 is turned on else digitalWrite(led2Pin, HIGH); // if LED1 is turned off delay(1000); // wait for a second }
ප්රෝග්රෑම් එක නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසු එය ආර්ඩුයිනෝ බෝර්ඩ් එක වෙත අප්ලෝඩ් කරන්න, එවිට කලින් ආකාරයටම LED දෙක එකිනෙක නිවී දැල්වෙන ආකාරය දැකගන්න පුළුවන්.
ක්රියාකාරකම 1.3 | පහත දැක්වෙන ආකාරයට ට්රැෆික් ලයිට් කණුවක් සදහා පරිපථයක් සකස් කරන්න
● පළමු අවස්ථාවේ රතු බල්බය තත්පර 30 ක්ද දෙවන අවස්ථාවේ රතු සහ කහ බල්බය තත්පර 2 ක්ද තුන්වන අවස්ථාවේ කොළ බල්බය තත්පර 30 ක්ද හතරවන අවස්ථාවේ කහ බල්බය තත්පර 2 ක්ද දැල්වෙන සේ ප්රෝග්රෑම් එකක් නිර්මාණය කරන්න. |
LED 10 ක් පාලනය කිරීම.#
අපි කලින් පාඩමේදී Arduino UNO board එකක් භාවිතයෙන් LED 1 හා 2 පාලනය කරන්නේ කොහොමද යන්න විමසා බැලුවෙමු. ඒ වගේම programming වල මූලික දේවල් බොහොමයක් ගැන සරලව පැහැදිලි කිරීමක් විමසා බැලුවෙමු. දැන් අපි LED 10 පාලනය කරන්න Circuit එකක් සහ Sketch එකක් නිර්මාණය කරන්නේ කොහොමද කියලා බලමු.
Project 1 – LED bar graph දර්ශකයක් පාලනය කිරීම.
දැන් අපි ආර්ඩුයිනෝ බෝර්ඩ් එකක් භාවිතා කර LED 10ක් හෝ LED bar graph නොහොත් LED තිරු දර්ශකයක් පාලනය කරන්නේ කොහොමද කියලා බලමු.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() USB Cable x 1 |
![]() LED x1 |
Resistor 220Ω x1 |
|
Jumper M/M x11 |
🔎 උපාංග පිලිබද දැනුම
අපගේ ව්යාපෘති සදහා හොදින් සිදුකර ගැනීමට නම් අපි භාවිතා කරන ඉලෙක්ට්රොනික් උපාංග ගැන මනා අවබෝධයක් තිබිය යුතුයි. අපි දැන් මෙහිදී භාවිතා කරන උපාංග පිලිබද විශේෂතා ගැන සලකා බලමු.
LED bar graph
LED තීරු දර්ශකයක LED 10 ක් අන්තර්ගත වේ. එහි පිටුපස පේළි දෙකකට එහි පින් පවතී. ඒ දෙපස පවතින්නේ එහි පවතින LED වල ධන හා ඍණ අග්රයි. එහි අග්ර පවතින ආකාරය පහත රුප සටහනේ දක්වා තිබේ. මෙහිදි අපි භාවිතා කරන්නේ රතු පාට තීරු දර්ශකයක වන අතර වෙළදපොළන් ඔබට විවිධ වර්ණ වලින් ලබා ගත හැකිය. මෙහිදි ඔබගේ පරිපථයේදී LED තිරු දර්ශකයක වැඩ නොකරන්නේ නම් එහි පින් අග්ර මාරු කර සවි කර උත්සාහ කරන්න.
![]() |
![]() |
🔎 කේතකරණය පිළිබද දැනුම
දැන් අපි මෙම පාඩමේදී භාවිතා කරන කේතකරණ වලට අදාල නව සංකල්ප කිහිපයක් ගැන ඉගෙනගනිමු.
අරාව (Array)
Array එකක් යනු දත්ත ගොඩක් රදවා ගතා හැකි විචල්යයකි. එනම් ඔබ පාසලේදි ගණිත පාඩමක් ලෙස කුලක පිළිබදව ඉගෙනගෙන ඇතැයි සිතමි. එම සංකල්පයම මෙහිදී අපි කේතකරණ වලදි භාවිතා කරයි. එය පහත දැක්වෙන ආකාරයට භාවිතයට ගනී.
int a[10];
“int” යනු array එකේ භාවිතා කරන දත්ත වර්ගයයි(Data type). “10” ලෙස නම් කර ඇත්තේ array එකේ ගබඩා කරන දත්ත උපරිම අයිතම ප්රමාණයයි. එනම් ඉහත දක්වා ඇති array එකේ අයිතම 10 ගබඩා කරන්න හැකියි. එය පහත පරිදි සිදු කරන්න පුළුවන්.
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Array එකක ඇති අගයක් හෝ අයිතමයක් සාමන්යයයෙන් කෙලින්ම ලබා ගත නොහැකියි. ඒ සදහා විශේෂ ක්රමයක් භාවිතා කළ යුතුය. අවශ්ය විට එය අවශ්ය තැනට ලබා ගන්න ආකාරය පහත දක්වා තිබේ.
int i, j; i = a[0]; j = a[1]; a[0] = 0;
මෙහිදී Array එකේ අයිතමය ගබඩා වී ඇති ස්ථානයට අදාල අංකයක් ඇත. එය array index එක ලෙස හදුන්වයි. එය පටන් ගන්නේ 0 වෙනි. එය මෙම “[]” තුළ ඇතුලත් කළ යුතුය. මුල්ම අයිතමය(first elements) හදුනාගන්නේ මේ ආකාරයටයි. a[0].
උදාහරණයක් ලෙස පහත දැකෙවෙන array b[] එක අරගෙන බලමු.
b[0] | b[1] | b[2] | b[3] |
5 | 6 | 7 | 8 |
මෙහි b[0] ලෙස දැක්වෙන්නේ array එකෙහි පළමු ස්ථානයයි. එහි ගබඩා වී ඇති අගය 5 වේ. ඒ ආකාරයටම අපිට b[1],b[2]….. ලෙස අදාළ ස්ථාන වල ගබඩා වී ඇති අගයන් ලබා ගන්න පුලුවන්.
අපි මෙහි භාවිතා කරේ ඒක දිශානතික(one-dimensional) array එකකි. එනම් එක දිශා පවතින array එකකි. තව අපිට two-dimensional arrays(දිශා දෙකකට පවත්නා), three-dimensional arrays(දිශා 3 කට පවත්නා), සහ multi-dimensional arrays(දිශා ගොඩකට පවතින) ආකාරයට නිර්මාණය කරගන්න පුළුවන්. ඒ ගැන වැඩිදුර අපි ඉදිරියේදී ඉගෙන ගනිමු.
Loop
එකම දේ නැවත නැවත සිදු වෙන ආකාරයේ ක්රියාදාමයක් සකස් කරගැනීමට අපි Loop භාවිතට ගනි. Array එකකට අයිතම ගබඩා කර ගැනීමට ලූප් අවශ්ය වේ. කේතකරණයේදි ලූප් වර්ග කිහිපයක් තිබේ. අපි ඒවා එකින් එක ගෙන බලමු.
While loop
මුලින්ම පහත දැක්වෙන උදාහරණය බලන්න. පහත දක්වා තිබෙන්නේ while ලූප් එකයි. එහි දී සිදු වන්නේ සත්යයතා ප්රකාශනය ලෙස “()”. තුළ ඇතුළත් කල තිබෙන ප්රකාශය සත්යය වන තෙක් එක දිගට ඊළග පේළියේ හෝ “{}” තුළ තිබෙන කේත පේලි ක්රියාත්මක වීමයි.
while(සත්යයතා ප්රකාශනය) functionX();
ක්රියාදාම කිහිපයක් හෝ කේත පේළි ගොඩක් පවතී නම් එය පහත ආකාරයට {} යොදා අදාල කේත පේළි ඒවා තුළ ඇතුළත් කරනු ලැබේ.
while(සත්යයතා ප්රකාශනය){ functionX(); functionY(); }
සත්යයතා ප්රකාශනය ලෙස “()”. තුළ ඇතුලත් කල තිබෙන ප්රකාශය අසත්ය වූ විට ලූප් එක නවතීන අතර ඊට පසු “{}” තුළ තිබෙන කේත පේලි ක්රියාත්මක වීම නැවතී.
පහත උදාහරණය බලන්න.
int i = 0; while (i < 2) i = i + 1; // while ලුප් එකට අදාළව ක්රියත්මක වන කේත පේළිය i = 5;
- මුල් අවස්ථාවේ: i < 2, i = 0 නිසා ප්රකාශය සත්ය වේ, i = i + 1 පේලිය ක්රියාත්මක වේ, ඉන් පසු i = 1 වේ;
- දෙවන අවස්ථාවේ: i < 2, i = 1 නිසා ප්රකාශය සත්ය වේ, i = i + 1 පේලිය ක්රියාත්මක වේ, ඉන්පසු i = 2 වේ;
- තුන්වන අවස්ථාවේ: i < 2, i = 2 නිසා ප්රකාශය අසත්ය වේ, එම නිසා i = i + 1 පේලිය ක්රියාත්මක නොවේ. මෙම අවස්ථාවෙන් ලූප් එක නවතින අතර ඊළගට i = 5 කේත පේලිය ක්රියාත්මක වේ.
do while loop
ඊළගට අපි “do while” ලූප් එක ගැන විමසා බලමු. “do while” සහ “while” ලූප් දෙකම එක වගෙයි. වෙනසකට ඇත්තේ “do while” loop එකේදී අපි {} තුළ යොදන කේත කොටස කලින් ක්රියාත්මක වී අවසානයේ ප්රකාශයක සත්ය අසත්යතාව විමසා බලා ලූප් එක නැවත්විමයි. While ලූප් එකේදී සිදු වන්නේ ප්රකාශයේ සත්ය අසත්යතාව මුලින් විමසා පසුව {} තුළ ඇති කේත කොටස ක්රියාත්මක වීමයි.
එය කේතනය කරන්නේ පහත ආකාරයටයි. එහිදි සත්යයතා ප්රකාශනය යොදන්නේ අවසානයටයි.
do { functionX(); } while (සත්යයතා ප්රකාශනය);
for loop
දැන් අපි “for”එක ගැන බලමු, මෙය බහුලව භාවිතා වන වැදගත් ලූප් එකකි. මෙය යොදාගෙන ගොඩක් දේවල් පහසුවෙන් සිදු කර ගත හැකිය. එය අර්ථ දක්වන්නේ පහත ආකාරයටයි:
for (ප්රකාශනය-1; ප්රකාශනය-2; ප්රකාශනය-3) functionX();
For ලූප් එකේදී : ප්රකාශනය 2 ක් ගැන සලකා බලා අදාළ කේත කොටස ක්රියාත්මක කෙරේ. පසුව නැවතත් 3 වන ප්රකාශනය සලකා බලයි. මෙහිදී ද කේත පේළි කිහිපයක් පවතී නම් {} තුළ අදාළ කේතයන් ඇතුළත් කළ යුතුය.
for (ප්රකාශනය-1; ප්රකාශනය-2; ප්රකාශනය-3) { functionX(); functionY(); }
- පළමු ප්රකාශනය-1 තුළීන් විචල්යයක් සමග ආරම්භය අර්ථ දැක්වේ.
- දෙවැනි ප්රකාශනය-2 තුළීන් ලූප් එක නවතින ස්ථානය හෙවත් අවසානය අර්ථ දක්වයි.
- තුන්වන ප්රකාශනය-3 තුළීන් පළමු හා දෙවන ප්රකාශන වලදි යොදාගත් විචල්යයයෙහි අගය වෙනස් වන ආකාරය අර්ථ දක්වයි.
පහත උදාහරණය බලන්න:
int i = 0, j = 0; for (i = 0; i < 2; i++) j++; i = 5;
- පළමු අවස්ථාවේ: i = 0, i < 2 ප්රකාශ සත්ය වන බැවින් j++ පේළිය හා i++ ක්රියාත්මක වන අතර ඉන්පසු i = 1, j = 1 වේ.
- දෙවන අවස්ථාවේ: i = 1, i < 2 ප්රකාශ සත්ය වන බැවින්, j++, පේළිය හා i++ ක්රියාත්මක වන අතර ඉන්පසු i = 2, j = 2 වේ.
- තුන්වන අවස්ථාවේ: i = 2, i < 2 ප්රකාශ සත්ය නොවේ. එම නිසා ලූප් එක මෙතනින් නවතී. එම නිසා j++, පේලිය හා i++ ක්රියාත්මක නොවේ අතර ඊළගට 4 වන පේළිය වන i = 5 ක්රියාත්මක වේ.
Increment and Decrement Operators
මෙය භාවිතා කරන්නේ යම් අගයක් එකකින් අඩු කිරීමට හෝ එකකින් වැඩි කිරීමටයි. අගය එකකින් වැඩි කිරීම Increment ලෙස හදුන්වයි. අදාල විචල්යය i ලෙස ගත්නේ නම් එහිදී “i++” ලෙස භාවිතා කරයි. එය “i = i + 1” සමාන වේ. අගය එකින් අඩු කිරීම Decrement ලෙස හදුන්වයි. එය “i–” ලෙස භාවිතා කරයි. එය “i = i – 1” සමාන වේ.. |
පරිපථ සැකැස්ම
දැන් අපි ආර්ඩුයිනෝ බෝර්ඩ් එකේ D3, D4, D5, D6, D7, D8, D9, D10, D11, D12 යන pin භාවිතා කර LED තීරු දර්ශකයක LED පාලනය කරමු. එයට අදාල පරිපථ සටහන පහත දැක්වේ.
Schematic diagram |
Hardware connection |
Sketch 1.1
දැන් අපි ඉහත පරිපථ සටහනට අදාලව තීරු දර්ශකයේ LED පාලනය කිරිමට sketch නිර්මාණය කරමු. පළමුව එක් දිශාවකට LED එකින් එක දැල්වීගෙන යන ආකාරයට සකස් කරමු.
const int ledCount = 10; // the number of LEDs in the bar graph // an array of pin numbers to which LEDs are attached int ledPins[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; void setup() { // loop over the pin array and set them all to output: for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); } } void loop() { // the ith LED of LED bar graph will light up in turn for (int i = 0; i < ledCount; i++) { barGraphDisplay(i); } } void barGraphDisplay(int ledOn) { // make the "ledOn"th LED of bar graph LED on and the others off for (int i = 0; i < ledCount; i++) { if (i == ledOn) digitalWrite(ledPins[i], HIGH); else digitalWrite(ledPins[i], LOW); } delay(100); }
මුලින්ම අපි නියත විචල්යයක් (read-only variable) අර්ථ දක්වා ගනිමු. එය තුළ අපි භාවිතා කරන LED ප්රමාණය කොපමණද ගබඩා කර තබාගත හැකියි..
const int ledCount = 10; // the number of LEDs in the bar graph
නියත විචල්යය (Read-only variable)
“Const” යන පදය භාවිතා කර නියත විචල්යයක් අර්ථ දක්වයි, මෙහිදී අපි මෙම විචල්යයට යොදන අගය නියතයක් වන අතර පසුව අපිට එය වෙනස් කිරීමේ හැකියාවක් නොමැත. එවැනි විචල්යයන් නියත විචල්යයක් නොහොත් Read-only variable ලෙස හදුන්වනු ලබයි. |
දැන් අපි LED තීරු දර්ශකය හා සම්බන්ධ කරන පින් ටික ගබඩා කර ගන්න තබා ගැනීමට array එක භාවිතා කරනු ලැබේ. ඒ විට array එකට යොදන අගයන් වෙනස් කිරීමෙන් ඕනෑම වෙලාවක අපි භාවිතා කරන පින් වෙනස කරගන්න පුළුවන්. මෙම ආකාරයේ දී ඔබ පින් පිලිවෙළකට යොදා නොතිබුනත් කිසිම ගැටළුවක් නොවේ.
// an array of pin numbers to which LEDs are attached int ledPins[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
ඊළගට අපි for ලූප් එකක් භාවිතා කරලා array එකේ තියෙන පින් ටික පහසුවෙන් ප්රතිදාන(output) බවට පත්කර ගනිමු. එය setup() ෆන්ශන් එක තුළ ඇතුළත් කල යුතුයි. එය කරන ආකාරය පහත දැක්වේ.
void setup() { // loop over the pin array and set them all to output: for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); } }
දැන් අපි පරාමිතියක් ලෙස එන පින් එකට අදාල අගය සහිත LED එක පමණක් දල්වෙන්නත් අනිත් LED නිවෙන්නත් ෆන්ශන් නිර්මාණය කරමු. මෙහිදී අපි කලින් පරිදිම for ලූප් එකක් සහ if-else කොන්දේසි සහිත ප්රකාශන ආකාරය භාවිතා කරයි.
void barGraphDisplay(int ledOn) { // make the "ledOn"th LED of LED bar graph on and the others off for (int i = 0; i < ledCount; i++) { if (i == ledOn) digitalWrite(ledPins[i], HIGH); else digitalWrite(ledPins[i], LOW); } delay(100); }
අන්තිමට, ඉහත ෆන්ශන් එකට කතා කළ විට එය එක දිගට loop එකක් විදියට වැඩ කරයි. එයට කතා කරන ආකාරය පහත දැක්වේ.
void loop() { // make the "i"th LED of LED bar graph on and the others off in turn for (int i = 0; i < ledCount; i++) { barGraphDisplay(i); } }
ඔබගේ ප්රෝග්රෑම් එක නිවැරදිදැයි බලා බෝර්ඩ් එක වෙත අප්ලෝඩ් කරන්න, එවිට LED තීරු දර්ශකයේ LED එක් දිශාවට LED එකින් එක දැල්වීගෙන යයි. මෙහිදී හැමවිටම එක LED එකක් පමණක් දැල්වී තිබෙන අතර අනිත් LED නිවී පවතී.
Sketch 1.2
දැන් අපි LED දෙපැත්තටම යන ආකාරයට ඉහත ප්රෝග්රෑම් එක වෙනස් කරමු.
const int ledCount = 10; // the number of LEDs in the bar graph // an array of pin numbers to which LEDs are attached int ledPins[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; void setup() { // loop over the pin array and set them all to output: for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); } } void loop() { // makes the "i"th LED of LED bar graph bright in turn for (int i = 0; i < ledCount; i++) { barGraphDisplay(i); } // makes the "i"th LED of LED bar graph bright in reverse order for (int i = ledCount; i > 0; i--) { barGraphDisplay(i - 1); } } void barGraphDisplay(int ledOn) { // make the "ledOn"th LED of LED bar graph on and the others off for (int i = 0; i < ledCount; i++) { if (i == ledOn) digitalWrite(ledPins[i], HIGH); else digitalWrite(ledPins[i], LOW); } delay(100); }
දැන් අපි loop() එක තුළ තියෙන කේත අලුත් කර LED ටික දෙපැත්තටම යන විදියට නැවත සකස් කර ඇත්තෙමු. loop() ෆන්ෂන් එක තුළ ඇති කේත වෙනස් කර ගැනීමෙන් මෙය සිදු කරගන්න පුළුවන්. මෙහිදි තවත් for ලුප් එකක් එකතු කර එය මගින් array එකේ index එක වැඩි අගයේ සිට අඩු අගය දක්වා පැමිනෙන ආකාරයට සකස් කර ගනී.
ඉහත කේතනය අප්ලෝඩ් කරගත්තට පස්සේ ඔබට පහත ආකාරයට LED දෙපැත්තට ගමන් කරන ආකාරය දැකගත හැකිය.
LED වල ආලෝක තත්ව පාලනය.#
කලින් පාඩමෙන් අපි තීරු දර්ශකයක LED 10ක් blink කරන ආකාරය ගැන ඉගෙන ගත් අතර. දැන් අපි තවත් අලුත් කේතකරණ සංකල්ප කිහිපයක් යොදාගනිමින් LED ආලෝක මට්ටම අඩු වැඩි කරන ආකාරයට පරිපථක් නිර්මාණය කරන ආකාරය හා එයට ප්රෝග්රෑම් එකක් නිර්මාණය ආකාරය ගැන විමසා බලමු. එමගින් ඔබට ඇනලොග් සිග්නල් ප්රතිදාන භාවිතා කරන ආකාරය පිලිබද මනා අවබෝධයක් ලබා ගත හැකිය.
Project 3.1 – LED වල විවිධ දීප්තින් විමෝචනය කිරිම.
මුලින්ම ආර්ඩුයිනෝ බෝර්ඩ් එක භාවිතා කර LED 4 ක වෙනස් ආකාරයේ ආලෝක මට්ටම අඩු වැඩි කරන ආකාරයට පරිපථක් සකස් කරමු.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() USB Cable x 1 |
![]() LED x4 |
Resistor 220Ω x4 |
|
Jumper M/M x6 |
🔎 පරිපථ සම්බන්ධ දැනුම
දැන් අපි LED එකක ආලෝක තත්වය අඩු වැඩි කිරීමට අදාල පරිපථය සකස් ආකාරය ගැන ඉගෙන ගනිමු.
PWM (Pulse Width Modulation)
PWM ලෙස හදුවන්නේ Pulse Width Modulation යන දීර්ඝ නමයි. ඩිජිටල් සිග්නල් භාවිතයෙන් ඇනලොග් පරිපථයක් හැසිරවීමට මෙය ඉතාමත් හොද ක්රමයකි. මෙහිදී සාමාන්ය ආකාරයට ප්රතිදාන සිග්නල් සෘජුවම ලබා ගත නොහැකිය. PWM ක්රමවේදය මෙම කාර්යය ඉටු කිරීම ඉතා පහසු කරවයි.
PWM වලදී ඩිජිටල් පින් භාවිතා කර විවිධ සංඛ්යාත වල චතුරස්රාකාර තරංග(square waves) යැවීම සිදුකරයි. එහිදී සිදුවන්නේ විවිධ කාල පරාස වලදී high level සහ low level මට්ටම් පවත්වා ගැනීමයි. පහත සටහන දෙස හොදින් බලන්න.
සාමාන්යයයෙන් මෙම high level සහ low level මට්ටම් වල කාල පරාසයන් එක හා සමාන වේ. මෙම කාල පරාසයට period එකක් යයි කියනු ලැබේ. ප්රතිදානය high වන කාලය සාමාන්යයෙන් pulse width ලෙස හැඳින්වෙන අතර pulse width එකේ ප්රතිශතය duty cycle ලෙස හඳුන්වයි.
අප ලබා දෙන ඩිජිටල් සිග්නල් එකේ high level මට්ටමේ දිග අනුව අදාළ ඇනලොග් සිග්නල් එකේ අගය වෙනස් වේ. ඉහත රූපසටහනේ පරිදි ඇනලොග් සිග්නල් එකට අදාල වෝල්ටීයතාව 0V සිට 5V අතර වෙනස් වේ,(high level එක 5V ලෙස සලකයි.) එමගින් වෝල්ටීයතාවට අදාල pulse width එක පෙන්වයි.
- පලමු අවස්ථාවේ duty cycle එක 0% වේ. එනම් එමගින් ලැබෙන වෝල්ටීයතාව 0V වේ. මෙහි දී ලැබෙන්නෙ අවම අගයයි. මෙය ඩිජිටල් LOW අවස්ථාවට සමාන වේ.
- දෙවන අවස්ථාවේ duty cycle එක 25% වේ. එනම් එමගින් ලැබෙන වෝල්ටීයතාව 1.25V වේ.
- තුන්වන අවස්ථාවේ duty cycle එක 50% වේ. එනම් එමගින් ලැබෙන වෝල්ටීයතාව 2.5V වේ.
- හතරවන අවස්ථාවේ duty cycle එක 75% වේ. එනම් එමගින් ලැබෙන වෝල්ටීයතාව 3.75V වේ.
- පස්වන අවස්ථාවේ duty cycle එක 100% වේ. එනම් එමගින් ලැබෙන වෝල්ටීයතාව 5V වේ. එනම් උපරිම අගය වේ. මෙය ඩිජිටල් HIGH අවස්ථාවට සමාන වේ.
PWM එකේ duty ratio එක් වැඩිවත්ම output power එක වැඩි බව ඉහත සටහනෙන් ඔබට මනාව අවබෝධ කර ගත හැකිය. එම නිසා LED එකක දීප්තිය පාලනය කිරීමට , DC මෝටරයක වේග පාලනයට වැනි දෑ සඳහා මෙය යොදා ගත හැක.
ආර්ඩුයිනෝ උනෝ බෝර්ඩ් එකක PWM පින් 6ක් ඇත. එවා ඩිජිටල් පින් තුළම පවති. ඒවා හදුනාගැනිමට ඒවයේ අංකය ඉදිරියේ “~” ලෙස යොදා ඇත.
🔎 කේතකරණය පිළිබද දැනුම
ෆන්ෂන් එකක ආපසු ලබා දෙන අගය (Return value of function)
අපි කලින් පාඩමේදී ආපසු ලබා දෙන අගය නොතොත් return value එකක් නැතුව ෆන්ශන් එකක් භාවිතා කරන ආකාරය විමසා බැලුවෙමු. දැන් ආපසු ලබා දෙන අගය සහිත ෆන්ශන් එකක් භාවිතා කරන ආකාරය පිලිබඳ ඉගෙන ගනිමු.
int sum(int i, int j) { int k = i + j; return k; }
“int” යන්නෙන් අදහස් වන්නේ ආපසු ලබා දෙන අගය හි දත්ත වර්ගය පිළිබඳවයි. ආපසු ලබා දෙන අගයෙහි දත්ත වර්ගය මුලින් void ලෙස යොදා ඇත්නම් ෆන්ෂන් එක අගයක් ආපසු ලබා දෙන්නේ නැත.
එක් ෆන්ෂන් එකකට නැවත යැවිය හැක්කේ එක් අගයක් පමණි. ෆන්ෂන් එකේ අගය ආපසු ලබා දීමට නම් return යන පදය සමග යොදා කේතනය කර ගැනීම අනිවාර්යය වේ. එම පේළිය return satatment ලෙස හදුන්වයි.
return පදය සමග යොදා කේතනය කර ඇති පේළිය ක්රියාත්මක වන විට ෆන්ෂන් එක එම පේළියට පසු ඇති කේතනය නොසලකා වහාම එම පේළිය එක ක්රියාත්මක වේ.
ආපසු ලබා දෙන අගය සහිත ෆන්ෂන් එකක් සකස් කරන ආකාරය පහත දැක්වේ.
int a = 1, b = 2, c = 0; c = sum(1, 2); // after the execution the value of c is 3 sum (int x, int y){ in k = x +y; return k; }
ආපසු ලබා දෙන අගය සහිත ෆන්ෂන් එකක්, වෙනත් ෆන්ෂන් එකක අගයක් ලෙස ගත හැකිය. උදාහරණයක් ලෙස, පහත කේත පේළිය බලන්න.
delay(sum(100, 200));
මෙය පහත කේත පේළිය හා සර්වසම වේ.
delay(300);
return
අපි ආපසු ලබා දෙන අගය සහිත ෆන්ෂන් එකක් තුල return satatment එකක කාර්යය පිලිබඳ සොයා බැලුවෙමු. එසේම මෙම ෆන්ෂන් එක ආපසු ලබා දෙන අගයක් නොමැතිවද භාවිතා කල හැකිය. නමුත් එහිදී return පදයට පසු කිසිම දත්තක් නොතිබිය යුතුය. එය පහත ආකාරයට දැක්විය හැකියි.
return;
මෙහිදී return statment එක ක්රියාත්මක වන විට, එම ෆන්ෂන් එක අවසානයේ ක්රියාත්මක වීම වෙනුවට එහි ක්රියාකාරිත්වය ක්ෂණිකව අවසන් වේ. උදාහරණයක් ලෙස පහත කේත සටහන බලන්න.
මෙහි 35 36 කේත පේළි ක්රියාත්මක නොවන අතර 33 පේළියෙන් එම ෆන්ෂන් එක නවති.
පරිපථ සැකැස්ම
මෙහිදී LED 4ක් සඳහා ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඇති ඩිජිටල් D5,D6, D9 සහ D10 පින් භාවිතා කරයි.
Schematic diagram
|
Hardware connection
|
Sketch 3.1.1
දැන් අපි LED 4 ක් වෙනස් දීප්තීන් වලින් දල්වන ආකාරය බලමු. මේ සඳහා භාවිතා කරනු ලබන ප්රතිදාන පින් 4 මගින් PWM සිග්නල් 4ක් යොදාගමු. මේවායේ duty cycle 2%, 10%, 50% සහ 100% අගයන් භාවිතා කළ විට වෙනස් දිප්තීන්ගෙන් ඉහත සඳහන් කරන ලද LED 4 දැල්වෙන ආකාරය දැක ගත හැකිය.
// set pin numbers: int ledPin1 = 5, // the number of the LED1 pin ledPin2 = 6, // the number of the LED2 pin ledPin3 = 9, // the number of the LED3 pin ledPin4 = 10; // the number of the LED4 pin void setup() { // initialize the LED pin as an output: pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); } void loop() { // set the ports output PWM waves with different duty cycle analogWrite(ledPin1, map(2, 0, 100, 0, 255)); analogWrite(ledPin2, map(10, 0, 100, 0, 255)); analogWrite(ledPin3, map(50, 0, 100, 0, 255)); analogWrite(ledPin4, map(100, 0, 100, 0, 255)); }
පින් 4 හඳුන්වා දීමෙන් පසුව, ඒ සඳහා වෙනස් duty cycle සමඟ PWM සිග්නල් ලබා දීම සකස් කල යුතුය. මෙහිදි 0-225 පරාසයේ තිබෙන PWM අගයන් 0-100 ත් අතරට ගෙන ඒම සදහා map ෆන්ෂන් එක භාවිතා කරයි.
උදාහරණයක් ලෙස ledpin1 එක සැලකු විට, map ෆන්ෂන් එක භාවිතයෙන් 0-225 පරාසයෙන් 2% ලෙස සකස් කල විට ප්රතිදානය වන PWM සිග්නල් එකේ duty cycle එක 2% වේ.
analogWrite(ledPin1, map(2, 0, 100, 0, 255));
analogWrite(pin, value) |
ආර්ඩුයිනෝ සොෆ්ට්වෙයාර් එක මගින් ලබා දෙන analogWrite (pin,value) කියන ෆන්ශන් එක මඟින් සෘජුවම PWM සිග්නල් නිපදවිය හැකිය. PWM නිශ්පාදනය සඳහා භාවිත කල හැක්කේ “~” සංකේතය සහිත ඩිජිටල් පින් මඟින් පමණි.
analogWrite(pin,value) යන ෆන්ශන් එකේ, “pin” යන්නෙන් අදහස් වන්නේ භාවිතා කරන ලද PWM පින් එක වන අතර “value” සදහා 0 සිට 225 දක්වා අගය පරාසය ලබා දිය යුතුය, duty ratio එකේ 0% – 100% නිරූපණය කරයි. මෙම ෆන්ශන් එක භාවිතා කිරීම සඳහා අදාල ඩිජිටල් පින් එක ප්රතිදාන(OUTPUT) ආකාරයට සකසා තිබිය යුතුය. |
map(value, fromLow, fromHigh, toLow, toHigh) |
මෙම ෆන්ශන් එකෙන් යම් අගයක් එක් පරාසයකින් වෙනත් පාරාසයකට අදාලව සකස් කර ගැනීමට භාවිතා කරයි. එය Low සිට High දක්වා පරාසයේ ප්රතිශතයක් වන අතර එයට සමාන වන ලෙස fromLow හා fromHigh පරාසය ගනු ලැබේ.
උදාහරණයක් ලෙස 100 යන අගය 0-100 පරාසයේ විශාලම අගය වේ. මෙය 1-100 පරාසයේ සිට 0-1000 පරාසයට සමාන කරන විට විශාලම අගය 1000 වේ. මෙය ෆන්ශන් එකෙන් map(100,0,100,0,1000) ලෙස දැක්විය හැකිය. |
කේතය නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසුව අප්ලෝඩ් කරන්න. එවිට විවිධ දීප්තින් වලින් LED දැල්වෙන ආකාරය ඔබට දැක ගත හැකිය.
Project 3.2 – LED Blink Smoothly.
අවශ්යය උපාංග
පෙර පාඩමට අවශ්ය උපකරණ මේ සඳහා යොදා ගන්නා අතර LED හා resistor කිහිපයක් ඉවත් කල යුතුය.
පරිපථ සැකැස්ම
මෙහිදී පෙර පරිපථයේ පරිදිම වන අතර D6, D9 සහ D10 යන පින් වලට සම්භන්ධ කර ඇති LED හා ප්රතිරෝධක ඉවත් කරන්න.
Schematic diagram
|
Hardware connection
|
Sketch 3.2.1
දැන් අපි LED එකක් නිවී තිබෙන අවස්ථාවේ සිට ආලෝක මට්ටම ටික ටික වැඩි වී දීප්තිමත් ලෙස දැල්වී පසුව නැවත ආලෝක මට්ටම අඩු වී ගොස් නිවී යන ආකාරයට ප්රෝග්රෑම් එකක් සකස් කරමු. මේ සඳහා PWM සිග්නල් එකේ duty cycle එක 0% සිට 100% දක්වා සහ 100% සිට 0% දක්වා වෙනස් කිරීම චක්රයක් ලෙස සිදු කරමු. මෙහිදි ඔබට ලූප් භාවිතා කර පහසුවෙන් මෙය සිදු කර ගත හැකිය.
// set pin numbers: int ledPin = 5; // the number of the LED pin void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); } void loop() { // call breath() cyclically breath(ledPin, 6); delay(500); } void breath(int ledPin, int delayMs) { for (int i = 0; i <= 255; i++) { // "i" change from 0 to 255 analogWrite(ledPin, i); // corresponding duty cycle - from 0%-100% delay(delayMs); // adjust the rate of change of brightness } for (int i = 255; i >= 0; i--) { // "i" change from 255 to 0 analogWrite(ledPin, i); // corresponding duty cycle - from 0%-100% delay(delayMs); // adjust the rate of change in brightness } }
delay ෆන්ශන් (ms) එක cycle එකේ කාලය වෙනස් කිරීමට යොදා ගනී. තවද එහි අගය වෙනස් කරමින් දීප්තින් වෙනස් වන වේගය ඔබට පාලනය හැකිය. මෙහි දී කලින් ප්රෝග්රෑම් වල වගේම for ලූප් දෙකක් භාවිතා කර ඇත.
කේතනය නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසුව අප්ලෝඩ් කරන්න. එවිට LED වල දීප්තිය අඳුරේ සිට දීප්තියට සහ දීප්තියේ සිට අඳුරට චක්රයක ලෙස වෙනස් වීම ඔබට දැක ගත හැකිය.
Push Button මගින් LED බල්බ පාලනය.#
මෙම පාඩමේදී අපි Push Button එකක් භාවිතයෙන් සිග්නල් එකක් ලබා දී LED එකක් හා කිහිපයක් අපට අවශ්යය ආකාරයට හසුරවන ආකාරය ඉගන ගනිමු. එමගින් ඔබට ඩිජිටල් සිග්නල් අදාන කරන ආකාරය පිලිබද මනා අවබෝධයක් ලබා ගත හැකිය.
Project 4.1 – Push Button එකක් මගින් LED එකක් පාලනය කිරීම.
Push button එකෙන් ලැබෙන දත්ත කියවීමට හා ඒවා යොදාගෙන LED එකක් පාලනය කර පෙන්වීමට මෙහිදී ආර්ඩුයිනෝ බෝර්ඩ් එකක් භාවිතා කරයි.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() USB Cable x 1 |
![]() LED x1 |
Resistor 220Ω x1 |
![]() Resistor 10KΩ x 2 |
Jumper M/M x11 |
![]() Push button x1 |
🔎 පරිපථ සම්බන්ධ දැනුම
Push Button සම්බන්ධ කරන ආකාරය
අපි පළමු පාඩමේදී push button එක කෙලින්ම සම්භන්ධ කොට LED එකක් දල්වන හා නිවන ආකාරයට පරිපථයක් සකස් කර භාවිතා කරන ලදී. නමුත් ඩිජිටල් පරිපථයක push button එක අදාන සිග්නල්(Input Signal) එකක් විදිහට භාවිත කෙරේ. එයට පහත පරිදි පරිපථයක් සකස් කර භාවිතා කළ හැකිය.
ඉහත පරිපථයේ push button එක තද කර නොමැති විට ආර්ඩුයිනෝ බෝර්ඩ් එකට 5V(high level) ලැබේ, එසේම button එක තද කල විට එයට 0V(low level) ලැබේ. මෙහිදී R2 ප්රතිරෝධය යොදා ගැනීමට හේතුව වන්නේ බෝර්ඩ් එකේ පින් එකේ වෝල්ටීයතාව අහම්බෙන් ඉහල යාමට ඉඩ නොදීමයි. එසේම පහත පරිපථ සටහනද මේ සඳහා යොදා ගත හැකිය. නමුත් මෙහිදී push button එක තද කර හා නැති අවස්ථාවන්ගේ, බෝර්ඩ් එකේ පින් එකේ වෝල්ටීයතාවයන් ප්රතිවිරුද්ධ අගයන් වේ.
පරිපථ සැකැස්ම
එසේම පහත පරිපථ සටහනද මේ සඳහා යොදා ගත හැකිය. නමුත් මෙහිදී push button එක තද කර හා නැති අවස්ථාවන්ගේ, බෝර්ඩ් එකේ පින් එකේ වෝල්ටීයතාවයන් ප්රතිවිරුද්ධ අගයන් වේ. මෙම පරිපථයේ කොටස් දෙකක් ඇත. එනම් සිගනල් ආදාන කිරීමේ කොටස සහ සිග්නල් ප්රතිදාන කිරීමේ කොටසයි.
Schematic diagram
|
Hardware Connection
|
Sketch 4.1.1
අපි දැන් push button එකේන් සිග්නල් ලබා ගැනීමට හා එය LED එක මගින් පෙන්වීමට ප්රෝග්රෑම් එකක් ලියමු.
int buttonPin = 12; // the number of the push button pin int ledPin = 9; // the number of the LED pin void setup() { pinMode(buttonPin, INPUT); // set push button pin into input mode pinMode(ledPin, OUTPUT); // set LED pin into output mode } void loop() { if (digitalRead(buttonPin) == HIGH) // if the button is not pressed digitalWrite(ledPin, LOW); // switch off LED else // if the button is pressed digitalWrite(ledPin, HIGH); // switch on LED }
පින් හඳුනා දීමෙන් පසු , push button එකෙන් ලැබෙන දත්ත අනුව LED එක දැල්වීම හා නිවීම සිදු කළ හැකිය.
digitalRead(pin) |
ආර්ඩුයිනෝ සොෆ්ට්වෙයාර් එක මගින් digitalRead(pin) ලෙස ෆන්ෂන් එකක් ලබා දී තිබේ. පින් ලෙස දක්වා තිබෙන්නෙ දත්ත ලබා ගන්නා පින් එකයි. ඒ අනුව එම ෆන්ෂන් return value එක HIGH නම් high level හා LOW නම් low level අර්ථ දැක්වේ. එනම් පින් එකේ HIGH හෝ LOW අවස්ථාවයි. |
ප්රෝග්රෑම් එක නිවැරදිදැයි පරීක්ෂ කිරීමෙන් අප්ලෝඩ් කරන්න. ඉන් පසු push button එක තද කරන විට LED එක දැල්වීම හා අත්හැරිය විට LED එක නිවී යයි.
Project 4.2 – Change LED State by Push Button
අවශ්යය උපාංග
පෙර Project එකෙහිම භාවිතා කළ පරිදිම වේ.
🔎 පරිපථ සම්බන්ධ දැනුම
Debounce for push button
push buton එක තද කරන විට එහි විභවය එක් වරම එක් වෝල්ටීයතාවයක සිට වෙනස් වෝල්ටීයතාවයකට වෙනස් වන්නේ නැත. එනම් එක වරම එහි අවස්ථාව වෙනස් නොවේ. ඇත්තටම ගතහොත් එය ස්ථායි වීමට පෙර සුළු වෙනස් වීමක් සිදුවනු දැක ගත හැකිය.
එනම් එය පොඩි කාලයක් තුළ වෝල්ටීයතා විචලනයක් සිදු වේ. එක් තදකිරීම් ක්රියාවලියකදී, හෝ තදකිරීම සහ අතහැරීම නොකඩවා සිදු වන විට, මෙම අස්ථායි වෙනස් වීම් ඉවත් කිරීම අනිවාර්ය වේ.
මේ සඳහා ආර්ඩුයිනෝ බෝර්ඩ් එක මඟින් සිග්නල් එක මුලින් ලැබුණු විට වැඩසටහන ක්රියාත්මක නොකර යම් පොඩි වෙලාවක් රැඳී සිට සිග්නල් එක තහවුරු වූ පසුව වැඩසටහන ක්රියාත්මක වන ආකාරයට භාවිතා කළ යුතුයි.
පරිපථ සැකැස්ම
පෙර පාඩමේ පරිදිම වේ.
Sketch 4.2.1
දැන් අපි push button එකේ අදාල වෙනස්විම හඳුනා ගැනීමට ප්රෝග්රෑම් එකක් නිර්මාණය කරන ආකාරය විමසා බලමු.
මෙහිදී push button එක තද කරන සෑම විටම LED එක දැල්වීම හෝ නිවීම සිදු වේ.
int buttonPin = 12; // the number of the push button pin int ledPin = 9; // the number of the LED pin boolean isLighting = false; // define a variable to save state of LED void setup() { pinMode(buttonPin, INPUT); // set push button pin into input mode pinMode(ledPin, OUTPUT); // set LED pin into output mode } void loop() { if (digitalRead(buttonPin) == LOW) { // if the button is pressed delay(10); // delay for a certain time to skip the bounce if (digitalRead(buttonPin) == LOW) { // confirm again if the button is pressed reverseLED(); // reverse LED while (digitalRead(buttonPin) == LOW); // wait for releasing delay(10); // delay for a certain time to skip bounce when the button is released } } } void reverseLED() { if (isLighting) { // if LED is lighting, digitalWrite(ledPin, LOW); // switch off LED isLighting = false; // store the state of LED } else { // if LED is off, digitalWrite(ledPin, HIGH); // switch LED isLighting = true; // store the state of LED } }
මෙහිදී අපි බටන් එකේ පවතින තත්ත්වය වෙනස් කර ගැනීමට reverseLED() කියන ෆන්ෂන් එක භාවිතා කරනු ලැබේ. මෙහි තත්ත්වය ලෙස අදහස් කරේ ON සහ OFF අවස්ථා දෙකයි.
push බටන් එකක පවතින තත්ත්වය හඳුනා ගැනීමේදී, එය තද කරන විට යම් කිසි කාලයක් බලා සිට තහවුරු කර ගන්නා අතර එය අතහැරිමේදි ද නැවත කාලයක් බලා සිට තහවුරු කර ගනී.
කේතනය නිවැරදිදැයි පරික්ෂා කර අප්ලෝඩ් කිරීමෙන් පසු, button එක තද කරන සෑම විටම LED එකේ පවතින තත්ත්වය එයට අනුව වෙනස් වීම ඔබට දැක ගත හැකිය. එනම් ON සහ OFF වේ.
Serial Communication#
අපි කලින් පාඩමේදී push button එකක් හරහා LED එකකට අදාන සිග්නල් එකක් ලබා දෙන ලදි. අපි දැන් ඊට වඩා ටිකක් සංකීර්ණ ක්රමයක් වන serial communication කියන්නේ මොකක්ද කියලා බලමු.
Project 5.1 – Serial මගින් දත්ත ලබා ගන්නා ආකාරය
අපි මෙහිදී පරිගණකයට දත්ත යැවීමට හා ලබාගැනීමට ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඇති සීරියල් පෝර්ට් එක නොහොත් USB පෝර්ට් එක පාවිච්චි කරනු ලබේ.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
USB Cable x 1 |
🔎 කේතකරණය පිළිබද දැනුම
Bit and Byte
කලින් සඳහන් කළ ආකාරය වගේම පරිගණකය පාවිච්චි කරන්නේ binary සිග්නල් නොහොත් දෙකේ පාදයේ සංඛ්යයා වේ. Binary සිග්නල් වල බීට් 1 ක් කියන්නේ “1” හෝ “0” යන ද්වීමය සංඛ්යා දෙකෙන් එකකි. එනම් එය ගබඩා කිරීමටද එම ඉඩ ප්රමාණය අවශ්යය වේ. එවැනි 8ක් එකතු උනාම අපිට බයිට් 1ක් ලැබේ. දත්ත ගබඩා කිරීමේදී හා හුවමාරුවේදී මූලික ඒකකය වෙන්නේ බයිට් එකයි. එක බයිට් එකකට අංක 256ක් (28) නිරූපණය කිරීමේ හැකියාව තිබේ. එනම් එහි දී 0 – 255 පරාසය මේ සදහා භාවිතා කරයි.
උදාහරණයක් ලෙස:
10010110 යන බයිනරි අගය දක්වන ආකාරය පහත දැක්වේ.
Sequence | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Number | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
අපිට බයිනරි අගයක් ඒ කියන්නේ ද්වීමය සංඛ්යාවක් ඩෙසිමල් වලට නොහොත් දශමය සංඛ්යාවක් විදිහට පරිවර්තනය කර ගන්න අවශ්යය යැයි සිතමු. එවිට මුලින්ම කළ යුතු වන්නේ ද්වීමය සංඛ්යාවේ අග සිට මුලට 0 පටන් ගෙන අදාල ඉලක්කම් ඉහත ආකාරයට සදා ගැනීමයි. ඊට පසු එම බයිනරි අගයෙහි ඉලක්කම දෙකෙහි බලයක් ලෙස ගුණ කිරීමයි. ඊට පසු ලැබෙන එම අගයන් සියල්ල එකතු කළ විට ඇදාළ ද්වීමය සංඛ්යාව ලැබේ. උදාහරණයක් විදිහට 10010110 කියන ද්වීමය සංඛ්යාව අරගෙන බලමු.
- 10010110 2 = 1*27+0*26+0*25+1*24+0*2^3+1*22+1*21+0*20
- 10010110 2 = 128+0+0+16+0+4+2+0
- 10010110 2 = 150
පහත දක්වා ඇති ක්රමයට ඔබට පහසුවෙන් දශමය සංඛයා ද්වීමය සංඛ්යා වලට පරිවර්තනය කළ හැකි වේ. ඔබ කළ යුත්තේ ශේෂය ඒ කියන්නේ ඉතිරිය බිංදුවක් වෙනකන් දශමය සංඛ්යාව 2න් බෙදාගෙන යැමයි. එහෙම කළ විට සමහර පියවරවල් වල 1ක් ඉතුරු වේ. සමහර පියවරවල් වල එසේ ඉතුරු නොවේ. ඒ ටික පිළිවෙලට ලියා ගත් විට යට ඉඳන් උඩට 1 සහ 0 විතරක් තියෙන අංකයක් ඔබට ලැබේ. එසේ ලැබෙන්නේ පරිවර්තනය කරපු binary අංකයයි. කලින් උදාහරණේම මෙහිදී අරගෙන බලමු.
උදාහරණය:
පිළිතුර = 10010110.
🔎 පරිපථ සම්බන්ධ දැනුම’
Serial සහ Parallel Communication
සීරියල් දත්ත හුවමරු ක්රමය මගින් දත්ත හුවමාරු කරන විට පාවිච්චි කරන්නේ එක කේබල් සම්බන්ධතාවයක් පමණි. මෙහිදී එම දත්ත හුවමාරු වෙන්නේ එක බීට් එකකට පසු තවත් බීට් එකක් විදිහයි. නමුත් පැරලල් දත්ත හුවමරු ක්රමයේදී වෙන්නේ එක වර සම්පුර්ණ ද්වීමය සංඛ්යාව ටික මර්ග 8 ඔස්සේ හුවමාරු කිරීමයි. සීරියල් දත්ත හුවමරු ක්රමය වලදී පාවිච්චි කරන්නේ අඩු කේබල් ප්රමාණයක් නිසා විශේෂයෙන්ම පරිගණක අතර දත්ත හුවමාරුවට වගේම දිගු දුර පරිගණක හා පර්යන්ත හුවමාරු වලදී මෙය භාවිතා කරයි. පැරලල් දත්ත හුවමරු ක්රමය වේගවත් උනත් වැඩි කේබල් ප්රමාණයක් භාවිත වන නිසා වියදම වැඩි බැවින් එය කෙටි දුර දත්ත හුවමාරු වලදී භාවිතා කරයි.
Serial communication
සීරියල් දත්ත හුවමරු ක්රමය සාමාන්යයෙන් භාවිතා කරන්නේ Universal Asynchronous Receiver/Transmitter (UART) කියන ක්රමවේදයයි.. ඒ වගේම මේවා බොහෝවිට භාවිතා කරන්නේ ඉලෙක්ට්රොනික පරිපථ තුළ දත්ත හුවමාරුව සඳහායි. මෙහිදී සන්නිවේදන මාධ්යය දෙකක් භාවිත වේ. ඒවායේ කාර්ය වෙන්නේ දත්ත යැවීම (TX line) සහ දත්ත ලබා ගැනීමයි (RX line). උපකරණ හෝ අදාළ පරිපථ දෙකක් අතර සීරියල් දත්ත හුවමාරු ක්රමය මගින් දත්ත හුවමාරුවට ආදාළ රූප සටහනක් පහත දැක්වේ.
සීරියල් දත්ත හුවමාරු ක්රමය මඟින් දත්ත හුවමාරුවට පෙර එහි දෙපසම බවුන්ඩ් රෙට්(BAUD rates) සමාන විය යුතුය. උපකරණ දෙක අතර දත්ත හුවමාරුව සඳහා මෙම බවුන්ඩ් රෙට් සමාන වීම අනිවාර්ය වේ. සාමාන්ය භාවිතයේදී මේ සඳහා බවුන්ඩ් රෙට් එක ලෙස 9600 සිට 115200 අතර භාවිතා කරයි.
Arduino හි ඇති Serial Port
පරිගණකය සමඟ සීරියල් ක්රමයට දත්ත හුවමාරු කිරීම සදහා ආර්ඩුයිනෝ බෝර්ඩ් එකේ USB පෝර්ට් එකක් තිබේ. ආර්ඩුයිනෝ සොෆ්ට්වෙයාර් එක හරහා කේතයක් අප්ලෝඩ් කරන්නෙත් මේ serial(USB) port එක හරහායි. පරිගණකයට සම්භන්ධ කර ඇති සීරියල් සහිත උපකරණ COMx ලෙස පරිගණකය විසින් හඳුනා ගනි. ඒ වගේම එමගින් හුවමාරු වන දත්ත වල විස්තර බලාගැනිම සදහා serial monitor window භාවිතා කරයි. ඒ සඳහා ආර්ඩුයිනෝ බෝර්ඩ් එක පරිගණකයට සම්භන්ධ කිරීමෙන් පසුව ආර්ඩුයිනෝ සොෆ්ට්වෙයාර් එක හරහා අදාළ උපකරණය තෝරා, ඉහල දකුණු කෙලවරේ ඇති කාචයක සලකුණ(serial monitor icon) ක්ලික් කිරීමෙන් එය විවෘත කර ගත හැකිය.
Serial Monitor එකේ අතුරුමුහුණත පහත දැක්වේ. ඔබ නිවැරදිව ආර්ඩුයිනෝ බෝර්ඩ් එක පරිගණකයට සම්බන්ධ කර නොමැති නම් හෝ අදාළ උපකරණය තෝරා නොමැති නම් මෙම window එක විවෘත නොවේ. නිවැරදිව Serial Port එක තෝරා ගැනීමට Tools කියන menu bar එක භාවිත කරන්න. එය පළමු පාඩමේදී ඔබට පැහැදිළි කරන ලදි.
පරිපථ සැකැස්ම
මෙහිදී කිසිම පරිපථ සැකැස්මක් නැත. ඔබේ ආර්ඩුයිනෝ බෝර්ඩ් එක USB කේබලය හරහා පරිගණකයට සම්බන්ධ කිරීම ප්රමාණවත් වේ.
Sketch 5.1.1
දැන් අපි කිසියම් වචන ටිකක් බෝර්ඩ් එකෙන් පරිගණකය වෙත ලබා ගෙන එය serial monitor window එක බලාගන්නා ආකාරය ගැන විමසා බලමු.
int counter = 0; // define a variable as a data sending to serial port void setup() { Serial.begin(9600); // initialize the serial port, set the baud rate to 9600 Serial.println("UNO is ready!"); // print the string "UNO is ready!" } void loop() { // print variable counter value to serial Serial.print("counter:"); // print the string "counter:" Serial.println(counter); // print the variable counter value delay(500); // wait 500ms to avoid cycling too fast counter++; // variable counter increases 1 }
මෙහි setup() ෆන්ෂන් එකේ Serial.begin(9600); මගින් අදහස් වන්නේ සීරියල් පෝර්ට් එක මගින් දත්ත හුවමාරු කිරීමට බෝර්ඩ් එක සූදානම් බවයි. පසුව අදාළ විචල්යයන් loop() ෆන්ෂන් එක තුළ ඇතුලත් කර අදාළ වචන හෝ වාක්යය ප්රින්ට් කර ගත හැකියි.
Serial class |
class එකක් කියන්නේ C++ පරිගණක භාෂාවේ එන සංකල්පයකි. ආර්ඩුයිනෝ සොෆ්ට්වේයාර් එක භාවිතා කරන්නෙත් C සහ C++ භාෂාව නිසා මෙයත් C++ භාෂාවේම දිගුවකි. මෙතැනදී අපි මෙම සංකල්පයන් ගැන වැඩිදුර ඉගෙනීමට නොයන අතර මෙහි භාවිත පිලිබඳ පමණක් අධ්යයනය කරයි. ඔබට මේ ගැන වැඩිදුර මේ පිළිබදව ඉගෙනීමට අවශ්යයනම් තනිව මේ ගැන සොයා බලන්න පුළුවන්. සීරියල් කියන්නේ class එකක නමකි. ඒකට විවිධ විචල්යයන් සහ ෆන්ෂන් අතුළත් වී තිබේ. මෙහිදී විචල්යයන් සහ ෆන්ෂන් වලට ඇතුල් වීමට “” කියන operational character එක භාවිතා කරයි. ඒ මේ ආකාරයටයි, Serial.begin(speed); සීරියල් පෝර්ට් සක්රීය කිරීම අර්ථ දැක්වීමට භාවිතා කරයි. මෙහි පරාමිතිය සීරියල් පෝර්ට් එකේ baud rate එකම ෆන්ෂන් එක වෙත යැවීමට භාවිතා කරයි. Serial.println(val); මෙහි පරාමිතිය වන්නේ ඔබට යැවීමට අවශ්ය දෙයයි. එය නව පෙළියක් වෙත යැවීමට භාවිතා කරයි. |
කේතයන් නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසු අප්ලෝඩ් කරන්න. එවිට බෝර්ඩ් එකට මගින් අදාළ දත්ත පරිගණකය යැවීම ඔබට දැක ගත හැකිය. එය ඔබට එම ලැබෙන දත්ත serial monitor දැක ගත හැකිය.
මෙය නිවැරදිව display නොවේ නම්, serial monitor එකේ baud rate එක නිවැරදිදැයි පරීක්ෂා කරන්න. එක වින්ඩෝවේ දකුණු පස පහල දැක්වේ.
Project 5.2 – Serial මගින් දත්ත යවන ආකාරය.
අවශ්යය උපාංග
අපි මෙහිදී පරිගණකයට දත්ත යවන්න ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඇති සීරියල් පෝර්ට් එක නොහොත් USB පෝර්ට් එක පාවිච්චි කරනු ලැබේ. අන්තිමට අපි සාකච්චා කල පාඩමේ පරිදිම වේ.
🔎 කේතකරණය පිළිබද දැනුම
Interruption (බාධා කිරීම්)
කුමක් හෝ ක්රියාවලියකට අදාළව ලැබෙන විධාන ලැබීම interruption මගින් පාලනය කිරීම වේ. අපි උදාහරණයක් බලමු. ඔබ tv එක බල බල ඉන්නකොට වතුර එකක් රත් කිරීම සදහා heater එක ගහන්න යැයි ඔබේ මව පවසයි. එතකොට ඔබ සැරින් සැරේ එම වතුර එක රත් වී ඇත්දැයි බැලීමට අවශ්යය වේ. එවිට ඔබට tv එක හරියට නැරඹීමට හැකි නොවේ. නමුත් ඔබට වතුර රත් වී අවසන් වීම දැනගැනීමට කේතලයට එලාම් එකක් සවි කළ හැකියි. එවිට පහසුවෙන් එය ඔබට දැනගන්න පුලුවන්, එය interruption එකක් විදියට හදුන්වන්න පුලුවන්. එතකොට ඔබට කිසිම බය නැතුව tv එක නැරඹීය හැකියි.
මෙම inturruption වල වාසි ලෙස සෑම විටම ක්රියාවලිය සිදුවී ඇති දැයි හැම විටම පරීක්ෂා කිරීම අවශ්ය නොවීමයි. නමුත් ක්රියාවලිය සිදු වන විට එය වහාම පාලකය වෙත දැනුම් දෙයි. එවිට ප්රොසෙසර්ය interruption ෆනෂන් එක වෙත ගොස් එය පාලනය කිරීම සිදු කරයි. පසුව බාධා සිදු වූ ස්ථානයට ගොස් එතැන් පටන් ප්රෝග්රෑම් එක නොකඩවා ක්රියා කරයි.
පරිපථ සැකැස්ම
පෙර පාඩමේ පරිදිම වේ.
Sketch 5.2.1
දැන් අපි serial monitor එකෙන් දත්ත ලබාගෙන නැවත යවන්න පුළුවන් ආකාරයේ සරල ප්රෝග්රෑම් එකක් ගැන සලකා බලමු.
char inChar // define a variable to store characters received from serial port void setup() { Serial.begin(9600); //initialize serial port, set baud rate to 9600 Serial.println("UNO is ready!"); // print the string "UNO is ready!" } void loop() { if (Serial.available()) { // judge whether data has been received inChar = Serial.read(); // read one character Serial.print("UNO received:"); // print the string "UNO received:" Serial.println(inChar); // print the received character } }
setup() ෆන්ෂන් එකෙන් අදහස් වෙන්නේ බෝර්ඩ් එක සුදානම් බව සීරියල් පෝර්ට් එකෙන් දැන්වීමයි. පසුව loop() ෆන්ෂන් එක මගින් දිගින් දිගටම කියවීම සඳහා දත්ත තිබේදැයි සොයා බලයි. එය දිගටම සිදු කරමින් දත්ත ලැබෙන අවස්ථාවේ ඒවා ලබා ගනි.
Serial Class |
● Serial.available(); ෆන්ෂන් එකෙන් සිදුවන්නේ සීරියල් පෝර්ට් එක මගින් කියවිය යුතු දත්ත සියලු byte වලින් ලබා දෙන්න යන්නයි.
● Serial.read(): ෆන්ෂන් එකෙන් සිදුවන්නේ සීරියල් පෝර්ට් එක මගින් මඟින් කියවිය යුතු දත්ත byte වලින් ලබා දෙන්න. යන්නයි. |
ප්රෝග්රෑම් එක නිවැරදිදැයි බැලීමෙන් පසුව code එක අප්ලෝඩ් කරන්න. කුමක් හෝ අකුරක් sending area එකේ type කර send බොත්තම ඔබන්න. එවිට බෝර්ඩ් එකට යවන දත්ත නැවත ලැබෙන ආකාරය ඔබට දැක ගත හැකිය.
char type |
Char වර්ගයේ විචල්යයක් මගින් අක්ෂරයක් නියෝජනය කරයි. නමුත් කෙලින්ම අක්ෂරයක් char වර්ගයේ ගබඩා කිරීම කල නොහැක. එහි ගබඩා වන ඉලක්කම් මඟින් අකුරු නැවත ප්රතිස්ථාපනය කරයි.
Char වර්ගයේ එක් ඉලක්කමක් සඳහා බයිට් එකක ඉඩක් වෙන් වේ. මෙහිදී 0-127 තෙක් අගයක් භාවිතා වන බැවින් අකුරු 128ක් සඳහා මෙය ප්රතිස්ථාපනය කල හැකිය. මෙම අගයන් හා අක්ෂර අතර සම්බන්ධය පවත්වාගන්නේ ASCII වගුවට අනුවයි. ASCII වගුව පිලිබඳ වැඩි විස්තර සඳහා උප ග්රන්ථ බලන්න. උදාහරණයක් විදිහට අපි විචල්යයට a හා 0 ආදේශ කරොත් මේ විදියට aChar=’a’ සහ bChar=’0′, මේ සඳහා ලැබෙන අගයන් වන්නේ aChar සඳහා 97 සහ bChar සඳහා 48 යි. |
Sketch 5.2.2
සීරියල් පෝර්ට් එකට දත්ත ලැබෙන විට, එයට interrupt ක්රියාවලියක් ආරම්භ කළ හැකිය. ඒ වගේම එය හැසිරවීමේ ක්රියාවලියට පිවිසීමටත් මෙයට පුළුවන් වේ. දැන් අපි serial monitor window එකෙන් දත්ත ලබා ගැනීමට හා නැවත යැවීමට interrupt එකක් භාවිතා කරමු. මෙහිදී අපි Interrupt එක වැඩසටහනට බාධා නොවන බව පෙන්වීමට නිරන්තරයෙන් loop() ෆන්ෂන් එකේ අංකය වෙනස් කරමින් යවනු ලැබේ.
char inChar; // define a variable to store character received from serial port int counter = 0; // define a variable as the data sent to Serial port void setup() { Serial.begin(9600);// initialize serial port & set baud rate to 9600 Serial.println("UNO is ready!"); // print the string "UNO is ready!" } void loop() { // Print value of variable counter to serial Serial.print("counter:"); // print the string "counter:" Serial.println(counter); // print the value of variable "counter" delay(1000); // wait 1000ms to avoid cycling too fast counter++; // variable "counter" increases 1 } void serialEvent() { if (Serial.available()) { // judge whether the data has been received inChar = Serial.read(); // read one character Serial.print("UNO received:"); // print the string "UNO received:" Serial.println(inChar); // print the received character } }
interrup ෆන්ෂන් එක විදිහට වැඩ කරන්නේ void serialEvent() කියන ෆන්ෂන් එකයි. සීරියල් විදියට දත්ත ලැබෙන විට, ප්රොසෙසර් එක මේ ෆන්ෂන් එක ක්රියාත්මක කර පසුව වැඩසටහන ඉදිරියට පවත්වාගෙන යාමට මුල් interrupt අවස්ථාවට පැමිණ වැඩසටහන නොකඩවා ක්රියාත්මක කරයි. එම නිසා loop() ෆන්ෂන් එක ක්රියාත්මක වන්නේ නැත.
ප්රෝග්රෑම් එක නිවැරදිදැයි පරික්ෂා කර අප්ලෝඩ් කරන්න. Serial monitor විවෘත කළ පසු සංඛයා නොකඩවා බෝර්ඩ් එකට යැවීම ඔබට දැක ගත හැකිය. Sending area එකෙහි යම් දත්තයක් පුරවා send බොත්තම එබූ විට එම දත්ත නැවත ලැබීම දැක ගත හැකිය.
Project 5.3 – Serial දත්ත හුවමාරු භාවිතයන්.
අපි මෙහිදී LED එකක් පාලනය කිරීමට ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඇති සීරියල් පෝර්ට් එක භාවිතා කරයි.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() USB Cable x 1 |
![]() LED x1 |
Resistor 220Ω x 1 |
|
Jumper M/M x2 |
මෙහිදී අප ප්රතිදානය ලෙස PWM සිග්නල් එකක් LED එකට යැවීමට බෝර්ඩ් එකෙහි එකේ ඇති D11 පින් එක භාවිතා කරයි.
පරිපථ සැකැස්ම
Schematic diagram
|
Hardware connection
|
Sketch 5.3.1
code එක මූලිකව sketch 5.2.1 වලට සමානයි. නමුත් දත්ත ලැබීමෙන් පසුව arduino UNO බෝර්ඩ් එකේ output port එක PWM duty cycle form එකට පරිවර්තනය වේ.
int inInt; // define a variable to store the data received from serial int counter = 0; // define a variable as the data sending to serial int ledPin = 11; // the number of the LED pin void setup() { pinMode(ledPin, OUTPUT); // initialize the LED pin as an output Serial.begin(9600); // initialize serial port, set baud rate to 9600 Serial.println("UNO is ready!"); // print the string "UNO is ready!" } void loop() { if (Serial.available()) {// judge whether the data has been received inInt = Serial.parseInt(); // read an integer Serial.print("UNO received:"); // print the string "UNO received:" Serial.println(inInt); // print the received character // convert the received integer into PWM duty cycle of ledPin port analogWrite(ledPin, constrain(inInt, 0, 255)); } }
Serial එක දත්ත ලබා ගන්නා විට output port එක PWM duty cycle form එකට පරිවර්තනය වේ. ඉන් පසු LED එක ආලෝකය විමෝචනය කරයි.
Serial Class |
Serial.parseInt(): නැවත ඇතුල් කිරීමේ අගය ලෙස int වර්ගයේ සංඛ්යාවක් ලෙස ලැබෙනු ඇත. |
constrain(x, a, b) |
a හා b අතර x හි සීමාව, x>a නම් නැවත ඇතුල් කිරීම a ලෙසද x< b නම් නැවත ඇතුල් කිරීම b ලෙස ගනී. |
Verify කිරීමෙන් පසුව code එක අප්ලෝඩ් කරන්න. serial monitor විවෘත කර 0-255 අතර සංඛ්යාවක් sending area එකේ type කර send කරන්න. එවිට UNO බෝර්ඩ් එකෙන් තොරතුරු නැවත එවන අතර, LED එකේ brightness එක අපි යවනු ලබන සංඛ්යාව අනුව වෙනස් වේ.
Analog Digital Conversion#
Project 6.1 – ADC
ADC (Analog to Digital Convertors) භාවිතා කරන්නේ Analog Singal එකක් Digital Signal එකකට පරිවර්තනය කර ගැනීමටයි. ආර්ඩුයිනෝ වල තියෙන conrol chip එකක මෙම ෆන්ෂන් එක අන්තර්ගත කර තිබේ.දැන් අපි එය භාවිතා කරන්නේ කොහොමද කියලා විමසා බලමු.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() USB Cable x 1 |
Rotary potentiometer x1 |
||
Jumper M/M x8 |
🔎 පරිපථ සම්බන්ධ දැනුම
ADC
ADC කියන්නේ Analog Signal, Digital Signal වලට පරිවර්තනයට යොදා ගන්න කුඩා උපකරණයක්. ආර්ඩුයිනෝ UNO එකෙහි 10 bits ADC එකක් ඇතුළත් කර තිබේ. ඒ කියන්නේ අපි භාවිතා කරන Analog Signal එක කොටස් 1024 කට බෙදා එය මඟින් Digital Signal එකක් නිරූපනය කිරීමේ හැකියාව තිබේ. එනම් මේ කොටස් 1024න් සෑම කොටසකට අදාල වූ අගයක් ADC තුල තිබේ. ADC එකේ bits ගණන වැඩි වේ නම් එකිනෙකට වෙනස් කොටස් වැඩි ගණනක් අපට නිර්මාණය කර ගත හැකියි.
🔎 උපාංග පිලිබද දැනුම
Potentiometer
potentiometer කියන්නේ ප්රතිරෝධක උපාංගයකි. එයට අග්ර 3ක් ඇති අතර එය භාවිතා කර ප්රතිරෝධය අවශ්ය ආකාරයට වෙනස් කර ගත හැකියි. potentiometer එක නිර්මාණය කර ඇත්තේ ප්රතිරෝධයක් හා සීරු මාරු කල හැකි බුරුසුවක් මඟිනි. බුරුසුව ප්රතිරෝධ බඳ දිගේ යවන විට ප්රතිරෝධය වෙනස් වන අතර එයට අනුරූපව outpot side එකේ voltage එක වෙනස් වේ. රූපයේ රේඛීය potentiometer එකක් සහ එහි පරිපථ සටහන දක්වා ඇත.
potentiometer එකේ ඇති pin1 සහ pin2 සම්භන්ධව ඇත්තේ ප්රතිරෝධයට වන අතර pin3 එක බුරුසුවට සම්බන්ධව ඇත. මෙහිදී තුන් වන pin එක 1 සිට 2 තෙක් ගමන් කරන විට pin1 සහ pin3 අතර ප්රතිරෝධය 0 සිට උපරිම අගය තෙක් වැඩිවන අතර pin2 සහ pin3 අතර ප්රතිරෝධය උපරිමයේ සිට 0 තෙක් අඩු වේ. පරිපථයේදී, ප්රතිරෝධයේ අග්ර දෙක බල සැපයුමේ ධන හා ඍණ අග්ර වලට සම්භන්ධ කරන අතර එවිට තුන්වන pin එක මගින් අදාල වෝල්ටීයතාව ලබා ගත හැකිය. බොහෝ විට සිදු කරනුයේ ඍණ අග්රය භූගත කිරීමයි. එවිට තුන්වන pin එකේ අගය ධන අගයක් ලෙස කෙලින්ම ගත හැකිය.
Rotary potentiometer
මෙයත් රේඛීය potentiometer එක හා සමානව ක්රියා කරයි. එකම වෙනස වන්නේ මෙහි ප්රතිරෝධය වක්රාකාරව පැවතීම හා එහි ප්රතිරෝධය වෙනස් කිරීම භ්රමණය කල හැකි දණ්ඩකින් සිදු කිරීමයි.
Rotary potentiometer එකෙන් ලැබෙන වෝල්ටීයතාව ලබා ගැනීම සඳහා arduino UNO බෝර්ඩ් එකෙහි A0 port එක භාවිත කරයි.
පරිපථ සැකැස්ම
Schematic diagram
|
Hardware connection
|
Sketch 6.1.1
අපි rotary potentiometer එකෙන් ලැබෙන වොල්ටියතාව හඳුනා ගෙන දත්ත serial monitor එකට යවන විදිහ පිලිබඳ ප්රෝග්රෑම් එකක් නිර්මාණය කරමු.
int adcValue; // Define a variable to save ADC value float voltage; // Define a variable to save the calculated voltage value void setup() { Serial.begin(9600); // Initialize the serial port and set the baud rate to 9600 Serial.println("UNO is ready!"); // Print the string "UNO is ready!" } void loop() { adcValue = analogRead(A0); // Convert analog of A0 port to digital voltage = adcValue * (5.0 / 1023.0);// Calculate voltage according to digital // Send the result to computer through serial Serial.print("convertValue:"); Serial.println(adcValue); Serial.print("Voltage:"); Serial.println(voltage); delay(500); }
ඉහත ප්රෝග්රෑම් එකේ විදිහට A0 pin එකෙන් ADC අගය ලබාගෙන එය voltage එකකට පරිවර්තනය කොට Serial Port එකට යැවීම සිදු කරයි. Verify කර අප්ලෝඩ් කර serial monitor window එක විවෘත කරන්න. එවිට ADC අගයන් හා UNO බෝර්ඩ් එක මඟින් පරිවර්ථනය කරන ලද වෝල්ටීයතා අගයන් දැක ගත හැකිය.
දැන් ඔබට rotary potentiometer එක කරකවන විට එම අගයන්ගේ වෙනස් වන ආකාරය දැක ගත හැකියි.
Project 6.2 – විචල්යය ප්රතිරෝධකයක් මගින් LED පාලනය කිරීම.
පෙර පාඩමේ අපි ADC අගයක් ලබාගෙන එය වෝල්ටීයතා අගයකට පරිවර්තනය කරන විදිහ ගැන විමසා බැලුවෙමු. දැන් එම වෝල්ටීයතා අගයන් යොදාගෙන LED එකක දීප්තිය පාලනය කිරීම පිලිබඳ විමසා බලමු.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() |
![]() LED x1 |
Resistor 220Ω x1 |
Rotary potentiometer x1 |
Jumper M/M x2 |
පරිපථ සැකැස්ම
මෙහිදී Arduino UNO බෝර්ඩ් එකේ A0 port එක වෝල්ටීයතාව ලබා ගැනීමට හා D9 port එක LED එක පාලනයට යොදා ගනී.
Schematic diagram
|
Hardware connection
|
Sketch 6.2.1
දැන් potentiometer එකේ වෝල්ටීයතා අගයන් යොදාගෙන LED එකක දීප්තිය පාලනය කිරීමට අදාළ ප්රෝග්රෑම් එකක් බලමු.
int adcValue; // Define a variable to save the ADC int ledPin = 9; value // Use D9 on Arduino UNO to control void setup() { pinMode(ledPin, OUTPUT); // Initialize the LED pin as an output } void loop() { adcValue = analogRead(A0); // Convert the analog of A0 port to digital // Map analog to the 0-255 range, and works as PWM duty cycle of ledPin port analogWrite(ledPin, map(adcValue, 0, 1023, 0, 255)); }
ඉහත ප්රෝග්රෑම් එකේ, ADC අගයන් A0 pin එකෙන් ලබා ගන්නා අතර එය LED එකෙහි pin එකේ PWM duty cycle එකට map කරයි. එවිට වෝල්ටීයතාව වෙනස් වන විට පහසුවෙන් LED එකේ දීප්තිය වෙනස් වේ.
verify කර code එක අප්ලෝඩ් කිරීමෙන් පසුව rotary potentiometer එකේ shaft එක කරකවන විට LED එකේ දීප්තිය වෙනස් වීම ඔබට දැක ගත හැකිය.
Project 6.3 – ආලෝක සන්වේදී ප්රතිරෝධක මගින් LED පාලනය කිරීම.
පෙර පාඩම් වලදී අපි ADC අගයන් කියවීම සහ එමගින් LED බල්බවල දීප්තිය වෙනස් කිරීම විමසා බැලුවෙමු. තවද potentiometer එක වගේම Analog Output ලබාදෙන components ගොඩක් අපට හමුවේ. විශේෂයෙන් බොහෝ sensors වලින් අපට ලැබෙන්නේද Analog Output වේ. අපි දැන් ආලෝක සන්වේදී ප්රතිරෝධයකින් LED light එකක දීප්තිය මැනගන්නේ කොහොමද කියල බලමු.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
|||
USB Cable x 1 |
![]() LED x 1 |
![]() Resistor 220Ω x 1 |
![]() Resistor 10kΩ x1 |
![]() Photoresistor x1 |
🔎 උපාංග පිලිබද දැනුම
Photoresistor
Photoresistor එකක් කියන්නේ ආලෝකයට සංවේදී ප්රතිරෝධකයකි. එනම් වෙනස් ආලෝක තීව්රතාවන් වලින් ආලෝකය ආලෝක සංවේදී ප්රතිරෝධකය මතට වැටෙන විට එයට අනුව එහි ප්රතිරෝධය වෙනස් වේ. එම අගයන් ආලෝක තීව්රතාව හඳුනා ගැනීමට භාවිත කල හැකිය. ආලෝක සංවේදී ප්රතිරෝධකයක් හා එහි පරිපථ සටහන පහත දැක්වේ. පහත පරිදි පරිපථයක් සාමාන්යයෙන් ආලෝක සංවේදී ප්රතිරෝධක භාවිතයේදී යොදා ගැනේ.
පහත පරිපථයේ ආලෝක තීව්රතාව වෙනස් වන විට ආලෝක සංවේදී ප්රතිරෝධකයෙහි ප්රතිරෝධය R1 වෙනස් වේ. එයට අනුරූපව එහි දෙපස වෝල්ටීයතාව වෙනස් වේ. එම වෝල්ටීයතාව මැනීමෙන් අපට ආලෝකයේ තීව්රතාව ලබා ගත හැකිය.
පරිපථ සැකැස්ම
මෙහිදී A0 පින් එක ආලෝක සංවේදී ප්රතිරෝධකයෙහි වෝල්ටීයතාව හඳුනා ගැනීමට භාවිත කරන අතර D9 පින් එක එක LED එක පාලනයට භාවිතා කරයි.
Schematic diagram
|
Hardware connection
|
Sketch 6.3.1
අපි දැන් ආලෝක සන්වේදී ප්රතිරෝධයකයේ (potoresistor) වෝල්ටීයතාව හඳුනාගෙන එයට අනුව LED එකක් දැල්වෙන දීප්තිය වෙනස් වන ලෙස ප්රෝග්රෑම් එකක් ලියමු.
int convertValue; // Define a variable to save the ADC value int ledPin = 9; // The number of the LED pin void setup() { pinMode(ledPin, OUTPUT); // Set ledPin into output mode } void loop() { convertValue = analogRead(A0); // Read analog voltage value of A0 port, and save // Map analog to the 0-255 range, and works as ledPin duty cycle setting analogWrite(ledPin, map(convertValue, 0, 1023, 0, 255)); }
මෙහිදී ADC අගය ලබා ගැනීමට A0 පින් එක භාවිතා කරන අතර, එම අගයන් LED පින් එකේ PWM duty cycle එකට map කර ඇත. එවිට ඔබට LED එකේ දීප්තිය අනුව වෝල්ටීයතාව වෙනස් වීම දැක ගත හැකිය.
Verify කර අප්ලෝඩ් කළ පසු ආලෝක සංවේදී ප්රතිරෝධය අතින් ආවරණය කල විට LED එකේ දීප්තිය වෙනස් වීම ඔබට නිරීක්ෂණය කල හැකිය.
අපි ADC හා analog ports භාවිතා කරන හැටි ඉගෙන ගත්තා. දැන් බලමු RGB LED එකක් පාලනයට ADC භාවිතා කරන විදිය පිලිබඳ.
Project 6.4 – විචල්යය ප්රතිරෝධකයක් මගින් RGB LED පාලනය කිරීම.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() |
![]() RGB LED x 1 |
Resistor 220Ω x4 |
Rotary potentiometer x3
|
Jumper M/M x5 |
🔎 උපාංග පිලිබද දැනුම
RGB LED
RGB LED එකේ රතු, කොළ සහ නිල් යන පාට LEDs 3ක් අන්තර්ගත අතර එම LED 3 වෙන වෙනම දැල්විය හැකියි. මේ LED එකට පින් 4ක් තිබේ. එම 4න් එකක් LED 3ටම පොදුයි. මේ පොදු pin එක අනුව පොදු ඇනෝඩ හා පොදු කැතෝඩ යනුවෙන් වර්ග දෙකක් පවතී. මෙම LED 3 වෙනස් දීප්ති වලින් දැල්වීම මඟින් අපට එකිනෙකට වෙනස් පාට විශාල ගණනක් නිර්මාණය කළ හැකියි.
මෙම රතු, කොළ සහ කොළ යන පාට tricolor light ලෙස හඳුන්වන අතර මේවාගේ සුසංයෝගයෙන් අපට ඇසට පෙනෙන වර්ණයන්ගෙන් ගොඩක් වර්ණයන් ලබා ගත හැකිය. Computer screens, single pixel of cell phone screen, neon, ක්රියාත්මක වන්නේ මෙම සිද්ධාන්තයට අනුකූලව වේ.
PWM සිග්නල් එකක් භාවිතා කර LED එකක් ආකාර 256කට (0-225) පාලනය කළ හැකිය. ඒ අනුව අපිට එම LED 3 භාවිතා කර වෙනස් පාට 3කින් පාට 16777216 (256^3) ක් නිර්මාණය කළ හැකිය. ආසන්න වශයෙන් පාට මිලියන 16 කි.
පරිපථ සැකැස්ම
අපි මෙහිදී A0, A1, A2 පින්, විචල්යය ප්රතිරෝධකයක් (potentiometer) මගින් ලැබෙන වෝල්ටීයතාව හඳුනා ගැනීමට හා D9, D10, D11 පින් , RGB LED එක පාලනයටද යොදා ගනී.
Schematic diagram
|
Hardware connection
|
Sketch 6.4.1
විචල්යය ප්රතිරෝධකයක් (potentiometer) වලින් voltages හඳුනාගෙන ඒවා PWM signal වලට පරිවර්තනය කරලා LED පාලනය කරන්න ප්රෝග්රෑම් එකක් නිර්මාණය කරන ආකාරය විමසා බලමු.
// set pin numbers: int ledPinR = 11; // the number of the LED R pin int ledPinG = 10; // the number of the LED G pin int ledPinB = 9; // the number of the LED B pin void setup() { // initialize the LED pin as an output: pinMode(ledPinR, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinB, OUTPUT); } void loop() { int adcValue; // Define a variable to save the ADC value // Convert analog of A0 port into digital, and work as PWM duty cycle of ledPinR port adcValue = analogRead(A0); analogWrite(ledPinR, map(adcValue, 0, 1023, 0, 255)); // Convert analog of A1 port into digital, and work as PWM duty cycle of ledPinG port adcValue = analogRead(A1); analogWrite(ledPinG, map(adcValue, 0, 1023, 0, 255)); // Convert analog of A2 port into digital, and work as PWM duty cycle of ledPinB port adcValue = analogRead(A2); analogWrite(ledPinB, map(adcValue, 0, 1023, 0, 255)); }
මෙහිදී අපි මේ විචල්යය ප්රතිරෝධකය (potentiometer) මගින් ලබා ගන්නා වෝල්ටීයතාව මඟින් LED වල දීප්තිය පාලනය කරයි. code එක verify කර අප්ලෝඩ් කළ පසු විචල්යය ප්රතිරෝධකය කරකවන විට LED එකේ දීප්තිය හා ආලෝකය වෙනස් වීම ඔබට දැක ගත හැකිය.
Project 6.5 – RGB LED මගින් විවිධ වර්ණ ලබාගැනීම කිරීම.
පෙර කොටසේ අපි විචල්යය ප්රතිරෝධකය (potentiometer) භාවිතා කර LED එකේ දීප්තිය හා වර්ණය වෙනස් කරන ලදී. දැන් RGB LED එක ස්වයංක්රීයව වර්ණවත් කරන අකාරය විමසා බලමු.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
||
![]() |
![]() RGB LED x 1 |
Resistor 220Ω x4 |
|
Jumper M/M x5 |
පරිපථ සැකැස්ම
LED එක පාලනයට arduino එකේ D9, D10 සහ D11 පින් මෙහිදී භාවිතා කරයි.
Schematic diagram
|
Hardware connection
|
Sketch 6.5.1
මෙහිදී අපි අහඹු අංක 3ක් නිපදවා එම අගයන් මඟින් PWM duty cycle එක හරහා LED එක පාලනය කිරීමට ප්රෝග්රෑම් එකක් නිර්මාණය කරමු.
// set pin numbers: int ledPinR = 11; // the number of the LED R pin int ledPinG = 10; // the number of the LED G pin int ledPinB = 9; // the number of the LED B pin void setup() { // initialize the LED pin as an output: pinMode(ledPinR, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinB, OUTPUT); } void loop() { // Generate three random numbers between 0-255 as the output PWM duty cycle of ledPin rgbLedDisplay(random(256), random(256), random(256)); delay(500); } void rgbLedDisplay(int red, int green, int blue) { // Set three ledPin to output the PWM duty cycle analogWrite(ledPinR, constrain(red, 0, 255)); analogWrite(ledPinG, constrain(green, 0, 255)); analogWrite(ledPinB, constrain(blue, 0, 255)); }
ඉහත code එකේදී PWM duty cycle මඟින් RGB LED එකේ ඇති LED වල දීප්තින් වෙනස් වන නිසා අපිට වෙනස් වර්ණ ලබා ගත හැකිය.
random (min, max) |
random (min, max) function එක අහඹු අංක නිෂ්පාදනයට යොදා ගනී.
ඒ වගේම random (max) function එකේ minimum value එක 0 ලෙස සාමාන්යයෙන් ගන්නා අතර (0, Max-1) අතර අහඹු අංකයක් නැවත යනු ලැබේ. |
verify කර අප්ලෝඩ් කිරීමෙන් පසු RGB LED එක වෙනස් වර්ණ හා දීප්තින්ගෙන් දැල්වීම ආරම්භ වනු ඇත.
int adcValue; // Define a variable to save the ADC int ledPin = 9; value // Use D9 on Arduino UNO to control void setup() { pinMode(ledPin, OUTPUT); // Initialize the LED pin as an output } void loop() { adcValue = analogRead(A0); //Convert the analog of A0 port to digital // Map analog to the 0-255 range, and works as PWM duty cycle of ledPin port analogWrite(ledPin, map(adcValue, 0, 1023, 0, 255)); }
මේ ප්රෝග්රෑම් එකේ, ADC අගය A0 පින් එකෙන් ලබා ගන්න අතර එය LED පින් එකේ PWM duty cycle එකට map කරයි. එවිට වෝල්ටීයතාව වෙනස් වන විට පහසුවෙන් LED එකේ දීප්තිය වෙනස් වේ.
Buzzer#
මීට පෙර arduino UNO බෝර්ඩ් එක භාවිතා කොට ව්යාපෘති ගණනාවක් නිම කළ අතර දැන් අපි ඉලෙක්ට්රොනික සංරචක හා මොඩියුල භාවිතා කරන විදිහ පිළිබඳව විමසා බලමු. මේවායේ විශේෂතා හා භාවිතයන් රැසක් අපට හමුවේ.
Project 1.1 – Active Buzzer
මුලින්ම Active Buzzer එකක් කියන්නේ මොකද්ද කියලා බලමු.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
|||
USB Cable x 1 |
Jumper M/M x 5 |
|||
NPN transistorx1 |
![]() Active buzzer x1 |
![]() Push button x1 |
Resistor 220Ω x 4 |
![]() Resistor 10kΩ x2 |
Transistor
Transistor එකක් කියන්නේ ධාරාව පාලනය කරන අර්ධ සන්නායක උපාංගයකි. Transistor එකක් ධාරා වර්ධකයක් ලෙසත් switch එකක් ලෙසත් භාවිතා කළ හැකි අතර මෙහි base(b), collector(c) සහ emittor(e) ලෙස අග්ර තුනක් පවතී. ‘be’ සන්ධිය හරහා ධාරාවක් ගලන විට ‘ce’ සන්ධිය හරහාද යම් ධාරාවක් ගලයි. මෙම අවස්ථාවේදී transistor එක වර්ධක අවස්ථාවේ පවතී. නමුත් මෙම ‘be’ ධාරාව යම් අගයක් ඉක්මවන විට ‘ce’ සන්ධිය තව දුරටත් ධාරාව වැඩි වීමට ඉඩ නොදේ. මෙවිට transistor එක සංතෘප්ත අවස්ථාවේ පවතී. transistors ආකාර දෙකක් පවතී. එනම් PNP සහ NPN ලෙසයි. ඒවා පහත දැක්වේ.
transistor එකේ ලාක්ෂනිකය අනුව, digital circuit වලදී මෙය switch යක් ලෙස භාවිතයට ගනී. මෙහි ඇති transisitor වල PNP නම් s8550 ලෙසද, NPN නම් s8050 ලෙසද සඳහන් කොට ඇත.
Buzzer
Buzzer එකක් යනු ශබ්ධය නිකුත් කරන උපකරණයකි. මෙය calculators, electronic warning clocks. alarm වගේ ගොඩක් තැන් වලදී භාවිතා වේ. තවද Buzzer වල Active සහ Passive කියල වර්ග දෙකක් තිබේ.
Active buzzer එකට oscillator එකක් ඇතුලත් කර තිබෙන අතර එම නිසා power එකක් ලබා දී තිබෙන තාක් buzzer එක නාද වේ. Passive buzzer එකට බාහිරින් oscillator signal එකක් සැපයිය යුතුයි. මේ සඳහා සාමාන්යයෙන් වෙනස් සංඛ්යාත සහිත PWM signals භාවිතා කරයි.
Active buzzer එක සාමාන්යයෙන් භාවිතය පහසුයි. නමුත් එහි ඇත්තේ එක් විශේෂ වූ සංඛ්යාත පමණයි. නමුත් passive buzzer වලදී බාහිර පරිපථයක් භාවිතා කර වෙනස් සංඛ්යාතයන් භාවිතයෙන් අපට වෙනස් නාදයන් ලබා ගත හැකිය. Active buzzer වල සුදු පැහැති ලේබලයක් අලවා ඇති අතර passive buzzer වල එසේ නොමැත.
Buzzer එකක් නාදයට විශාල ධාරාවක් අවශ්ය අතර UNO බෝර්ඩ් මඟින් සපයන ධාරාව එයට ප්රමාණවත් නැත. එම නිසා transistor එක මඟින් එහි ක්රියාකාරිත්වයට අවශ්ය ශක්තිය සපයන අතර UNO බෝර්ඩ් එකේ පින් එක මඟින් එය පාලනය කිරීම සිදු කරයි.
අපි මෙහිදී NPN transistor එකක් යොදා ගන්නේ නම් පහත ක්රමය භාවිතා කළ යුතුයි. මෙහිදී UNO බෝර්ඩ් එකේ පින් එක high වූ විට R1 ප්රතිරෝධය හරහා ධාරාවක් ගමන් කරනා අතර එවිට Buzzer එක නාද වේ. එය low වූ විට ප්රතිරෝධය හරහා ධාරාවක් නොගලන නිසා එහිදී ධාරාවක් හටනොගනී. එවිට Buzzer එක නිහඬව පවතී.
NPN transistor එකක් වෙනුවට PNP transistor එකක් භාවිතා කරන විට පහත ක්රමය භාවිතා කරයි. මෙහිදී UNO pin එක low වූ විට R1 ප්රතිරෝධය හරහා ධාරාවක් ගමන් කරනා අතර එවිට බසරය නාද වේ. එය high වූ විට ප්රතිරෝධය හරහා ධාරාවක් නොගලන නිසා මෙහිදී ධාරාවක් හටනොගනී. එවිට බසරය නිහඬව පවතී.
පරිපථ සැකැස්ම
මෙහිදී push button එකේ state එක ලබා ගැනීමට D12 පින් එක භාවිත කරන අතර D9 පින් එක බසරය ක්රියාකරවීමට භාවිතා කරයි.
Schematic diagram
|
Hardware connections
|
Sketch 1.1
දැන් අපි ඉහත පරිපථයට අදාළව push button එකේ දත්ත ලබා ගැනීමට හා ඒ අනුව බසරය නාද කිරීම සඳහා ප්රෝග්රෑම් එකක් ලිවිය යුතුය. එය පහත පරිදි අපිට නිර්මාණය කර ගත හැකිය.
int buttonPin = 12; // the number of the push button pin int buzzerPin = 9; // the number of the buzzer pin void setup() { pinMode(buttonPin, INPUT); // Set push button pin into input mode pinMode(buzzerPin, OUTPUT); // Set Buzzer pin into output mode } void loop() { if (digitalRead(buttonPin) == HIGH)// If the pin is high level, the button is not pressed. digitalWrite(buzzerPin, LOW); // Turn off Buzzer else // The button is pressed, if the pin is low level digitalWrite(buzzerPin, HIGH); // Turn on Buzzer }
මේ code එකේදී push button එක press කල විට output එක high වී transistor එක හරහා ධාරාවක් ගමන් කොට බසරය ක්රියාත්මක වී නාදයක් ලබා දේ.
verify කර upload කල පසුව push button එක තද කරන වාරයක් පාසා බසරය නාද වීම ඔබට ඇසිය හැකිය.
Project 1.2 – Passive Buzzer
මෙම පාඩමේදී අපි passive buzzer එකක් විවිධ වෙනස් නාදයන්ගෙන් නාද කරන ආකාරය ඉගෙන ගනිමු.
අවශ්යය උපාංග
![]() |
Breadboard x 1 |
||
USB Cable x 1 |
![]() Jumper M/M x 5 |
||
![]() NPN transistorx1 |
![]() Passive buzzer x |
![]() Resistor 10kΩ x2 |
පරිපථ සැකැස්ම
මෙහිදී arduino UNO බෝර්ඩ් එකේ D9 පින් එක passive buzzer එක නාද කිරීමට යොදා ගනී.
Schematic diagram
|
Hardware connection
|
Sketch 2.1
අපි pssive buzzer එක මඟින් අනතුරු ඇඟවීම් නාදයක් ලබා ගැනීමට ප්රෝග්රෑම් එකක් නිර්මාණය කරගමු. මෙහිදී පහත sin wave එකේ පරිදි සංඛ්යාත අගයක් යොදා ගනිමු.
Output PWM wave එක වෙනස් සංඛ්යාත වලින් පින් එකට ලබා දීමෙන් transistor එක හරා බසරය මගින් විවිධ නාද ලබා ගත හැකිය.
int buzzerPin = 9; // the number of the buzzer pin float sinVal; // Define a variable to save sine value int toneVal; // Define a variable to save sound frequency void setup() { pinMode(buzzerPin, OUTPUT); // Set Buzzer pin to output mode } void loop() { for (int x = 0; x < 360; x++) { // X from 0 degree->360 degree sinVal = sin(x * (PI / 180)); // Calculate the sine of x toneVal = 2000 + sinVal * 500; // Calculate sound frequency according to the sine of x tone(buzzerPin, toneVal); // Output sound frequency to buzzerPin delay(1); } }
ඉහත ප්රෝග්රෑම් එකට අනුව output සංඛ්යාතය 2000±500 පරාසයක පවතී.
for (int x = 0; x < 360; x++) { // X from 0 degree->360 degree sinVal = sin(x * (PI / 180)); // Calculate the sine of x toneVal = 2000 + sinVal * 500; // Calculate sound frequency according to the sine of x tone(buzzerPin, toneVal); // Output sound frequency to buzzerPin delay(1); }
sin() function වල අගයන් ඇත්තේ රේඩියන් අගයන් වලින් වේ. එම නිසා අපිට කෝණයන් රේඩියන් අගයන් වලට පරිවර්තය කර භාවිතා කිරීම කල යුතුය.
tone(pin, frequency) |
නියමිත සංඛයතයක square wave එකක් නිශ්පාදනය කරයි (50% duty cycle). |
verify කර අප්ලෝඩ් කිරීමෙන් පසුව passive බසරය නාද කිරීම මගින් අනතුරු ඇඟවීම පටන් ගන්නා අතර ඔබට PNP transistor එකක් භාවිතා කර මෙම සියලු project නැවත අත්හදා බැලිය හැක.
Temperature Sensor#
පෙරදී අපි ආලෝකය මඟින් පාලනය කළ හැකි පරිපථ පිළිබඳ ඉගෙන ගත් අතර මෙම පාඩමේදී උෂ්ණත්ව සංවේදක භාවිතා කර දත්ත ලබා ගන්නා විදිහ පිලිබඳ ඉගෙන ගනිමු.
Project 1.1 – Termistor මගින් උෂ්ණත්වය මැනීම
අපි මෙහිදී පරිසර උෂ්ණත්වය මැනීම සඳහා termistor එකක් භාවිතා කරයි.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
|
![]() USB Cable x 1 |
![]() Thermistor x 1 |
Resistor 220Ω x 4 |
Jumper M/M x 5 |
🔎 උපාංග පිලිබද දැනුම
Thermistor
thermistor එකක් යනු උෂ්ණත්ව සංවේදී ප්රතිරෝධකයකි. එහි උෂ්ණත්වය වෙනස් වන විට එයට අදාලව ප්රතිරෝධය වෙනස් වීම සිදු වේ.
පරිසර උෂ්ණත්වය මැනීමට මෙම ක්රියාවලිය යොදා ගැනේ. thermistor එකක් හා එහි පරිපථ සටහන පහත දැක්වේ.
Thermistor එකේ උෂ්ණත්වයේ හා ප්රතිරෝධ අගය අතර සම්බන්ධය පහත සමීකරණයෙන් ලැබේ.
Rt=R*EXP[B*(1/T2-1/T1)]
මෙහි,
- Rt- T2 උෂ්ණත්වයේදී Thermistor ප්රතිරෝධය.
- R- T1 උෂ්ණත්වයේදී Thermistor ප්රතිරෝධය.
- B- ප්රතිරෝධයේ උෂ්ණත්ව සංගුණකය.
- (EXP[n] යනු “e” වල n වන බලයයි)
- T1 , T2 උෂ්ණත්ව අගයන් කෙල්වින් අගයන්ගෙන් මනිනු ලබයි. (කෙල්වින් අගය =273.15+සෙල්සියස් අගය)
මෙහි අප භාවිතා කරන thermistor එකේ B=3950, R=10k සහ T1=25 ලෙස ගනු ලැබේ.
Thermistor එකේ පරිපථ සටහන පහත පරිදි වේ. එය potoresisitor පරිපථයට සමාන වේ.
පරිපථ සැකැස්ම
UNO බෝඩ් එකේ A0 පින් එක thermistor එකෙන් ලැබෙන වෝල්ටීයතාව ලබා ගැනීමට භාවිතා කරයි.
Schematic diagram
|
Hardware connection
|
Sketch 1.1
අපි thermistor එකෙන් වෝල්ටීයතාව ලබා ගෙන එයට අනුව උෂ්ණත්වය ගණනය කර එක serial monitor එක හරහා පෙන්වීම සඳහා ප්රෝග්රෑම් එකක් නිර්මාණය කරමු
void setup() { Serial.begin(9600); // Initialize the serial port, set the baud rate into 9600 Serial.println("UNO is ready!"); // Print the string "UNO is ready!" } void loop() { // Convert analog value of A0 port into digital value int adcVal = analogRead(A0); // Calculate voltage float v = adcVal * 5.0 / 1024; // Calculate resistance value of thermistor float Rt = 10 * v / (5 - v); // Calculate temperature (Kelvin) float tempK = 1 / (log(Rt / 10) / 3950 + 1 / (273.15 + 25)); // Calculate temperature (Celsius) float tempC = tempK - 273.15; // Send the result to computer through serial port Serial.print("Current temperature is: "); Serial.print(tempK); Serial.print(" K, "); Serial.print(tempC); Serial.println(" C"); delay(500); }
මෙහිදී සිදුවන්නේ A0 පින් එකෙන් ADC අගය ලබාගෙන එය උෂ්ණත්ව අගයට පරිවර්තය කර serial port එකට යැවීම සිදු කිරීමයි.
verify කර අප්ලෝඩ් කිරීමෙන් පසුව serial monitor එක open කිරීමෙන් ඔබට එම උෂ්ණත්ව අගයන් දැක ගත හැකිය.
Magnetic Reed Switch භාවිතා කිරීම.#
ලැප්ටොප්, ස්මාර්ට්ෆෝන් වැනි බොහෝ උපකරණ වල චුම්බක ස්විචයක් ලෙස රීඩ් ස්විචය භාවිතා වේ. මෙම පාඩමේදී ආර්ඩුයිනෝ සමඟ රීඩ් ස්විච භාවිතය පිළිපදව ඉගෙන ගැනීමට ඔබට මඟ පෙන්වනු ඇත.
Project 9.1 – Magnetic Reed Switch ආර්ඩුයිනෝ සමග භාවිතය.
අපි මෙහිදී යම් උපකරණයක් ON OFF කිරීම සදහා Magnetic Reed Switch එකක් භාවිතා කරයි.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
Breadboard x 1 |
|||
![]() USB Cable x 1 |
![]() Reed switch x 1 |
![]() RED LED x 1 |
![]() GREEN LED x 1 |
Resistor 220Ω x 4 |
Jumper M/M x 5 |
🔎 උපාංග පිලිබද දැනුම
Reed Switch
රීඩ් ස්විචය යනු චුම්බක ක්ෂේත්රයකින් පාලනය කළ හැකි විද්යුත් ස්විචයකි, එනම් එය චුම්බකව ක්රියාත්මක වන ස්විචයකි. අභ්යන්තරව, රීඩ් ස්විචයක් ෆෙරෝ චුම්බක ලෝහ තහඩු දෙකකින් සම්බන්ධ කර බටයක් තුළ පවතී
චුම්බක ක්ෂේත්රයක් තිබීම හෝ නොපැවතීම මත පදනම්ව, රීඩ් ස්විච් තහඩු දෙක සම්බන්ධතා සංවෘත හෝ විවෘත වනු ඇත. පහත රූපයේ දැක්වෙන්නේ එහි අභ්යන්තර සම්බන්ධතා සහිත සරල බට බට ස්විචයකි.
සාමාන්යයෙන් විවෘත වර්ගයේ රීඩ් ස්විචයක් නම්, සාමාන්යයෙන් සම්බන්ධතා විවෘත තත්වයේ පවතී. ස්විචය අසල චුම්බක ක්ෂේත්රයක් පැමිණෙන සෑම විටම ලෝහ තහඩු දෙක සම්බන්ධ වේ. මේ මත පදනම්ව, සාමාන්යයෙන් සංවෘත වර්ගයේ රීඩ් ස්විචයක් ක්රියා කරන ආකාරය ඔබට පහසුවෙන් තේරුම් ගත හැකිය.
රීඩ් ස්විචයක් ක්රියා කරන ආකාරය
රීඩ් ස්විචයේ වැඩ කිරීම ඉතා සරල ය. මෙහිදී භාවිතා කරන්නේ සාමාන්යයෙන් විවෘත ආකාරයේ රීඩ් ස්විචයක් බැවින්, වැඩ කිරීම සහ තවදුරටත් ක්රියාත්මක කිරීම පහසු වේ .
රීඩ් ස්විචය අසල චුම්බක ක්ෂේත්රයක් ඇති විට, ෆෙරෝ චුම්බක ද්රව්ය වලින් සෑදී ඇති සම්බන්ධතා එකට ඇද ගන්නා අතර එමඟින් ස්විචය වසා දමයි. කිසිදු චුම්බක ක්ෂේත්රයක් නොමැති විට, ස්විචය විවෘතව පවතී.
පරිපථ සැකැස්ම
UNO බෝඩ් එකේ D0 පින් එක මගින් රීඩ් ස්විචයේ සිග්නල් එක ලබා ගන්නා අතර D8 සහ D10 LED බල්බ දැල්වීම හා නිවීම සදහා භාවිතා කරයි. කොළ පැහැති LED එකෙන් දොර විවෘත අවස්ථාව පෙන්වන අතර රතු පැහැති LED එකෙන් දොර සංවෘත අවස්ථාව පෙන්වයි.
Schematic diagram | Hardware connection
|
Sketch 9.1.1
මෙම උදාහරණය සඳහා, පහත කේතය අප්ලෝඩ් කරන්න:
int ledOpen = 8; int ledClose = 10; int switchReed = 6; void setup(){ pinMode(ledOpen, OUTPUT); pinMode(ledClose, OUTPUT); pinMode(switchReed, INPUT); Serial.begin(9600); } void loop(){ if (digitalRead(switchReed)==HIGH){ digitalWrite(ledOpen, LOW); digitalWrite(ledClose, HIGH); Serial.println("Your Door is Closed"); } else { digitalWrite(ledOpen, HIGH); digitalWrite(ledClose, LOW); Serial.println("Your Door is Open"); } delay(1); }
මෙහිදී සිදුවන්නේ D6 පින් එකෙන් රීඩ් ස්විච් එකෙන් ලැබෙන සිග්නල් එක ආර්ඩුයිනෝ බෝර්ඩ් එකෙන් ලබා ගෙන ඒ අනුව LED දෙකෙන් එකක් දැල්වීමයි . LED දෙක රීඩ් ස්විච් ON අවස්ථාව D8 වෙත සම්බන්ධ කර ඇති අතර OFF අවස්ථාව D10 වෙත සම්බන්ධ කර තිබේ.
තවද verify කර අප්ලෝඩ් කිරීමෙන් පසුව serial monitor එක open කිරීමෙන් පසු රීඩ් ස්විච් වෙත මැග්නට් එකක් ලංකරන විට එය ON අවස්ථාවට පත් වන අතර Your Door is Closed දිස් වන අතර රීඩ් ස්විච් එකෙන් මැග්නට් එකක් ඉවත් කරන විට එය OFF අවස්ථාවට පත් වන අතර Your Door is Open දිස් වනු දැක ගත හැකිය.
මේ ආකාරයට ඔබට සරලව දොරවල් හෝ ජනේලයක් මොන අවස්ථාවේ පවතිනවද යන්න හදුනා ගත හැකිය.
One Channel Relay Module භාවිතා කිරීම.#
🔎 උපාංග පිලිබද දැනුම
සමහර විට ඔබට ආර්ඩුයිනෝ භාවිතයෙන් නිවසේ විදුලි ලාම්පු, විදුලි පංකා හෝ වෙනත් ගෘහ උපකරණ වැනි AC බලයෙන් ක්රියාත්මක වන උපාංග පාලනය කිරීමට අවශ්යය වේ. නමුත් ආර්ඩුයිනෝ සම්බන්ධ පරිපථ වෝල්ට් 5 කින් ක්රියාත්මක වන නිසා එයට මෙම ඉහළ වෝල්ටීයතා උපාංග සෘජුවම පාලනය කළ නොහැක.
ඔබට රිලේ මොඩියුල භාවිතා කර AC බලයෙන් ක්රියාත්මක වන උපාංග පාලනය කිරීමට හැකි අතර රිලේ මොඩියුල පාලනය කිරීමට ආර්ඩුයිනෝ බෝර්ඩ් භාවිතා කළ හැකිය.
එක් නාලිකා රිලේ මොඩියුලයක් භාවිතා කර AC බලයෙන් ක්රියාත්මක වන ලාම්පුවක් ON OFF කරන්නේ කෙසේද යන්න පිළිබඳව මෙම පාඩමේදී ඉගෙන ගත හැකි අතර එම දැනුම භාවිතා කර ඔබට AC බලයෙන් ක්රියාත්මක වන වෙනත් උපාංග පාලනය කිරීමට එම දැනුම භාවිතා කළ හැකියි. මුලින්ම අපි රිලේ සඳහා කෙටි හැඳින්වීමකින් පටන් ගනිමු.
රිලේ වැඩ කරන්නේ කෙසේද?
රිලේ යනු වඩා විශාල ධාරාවක් පාලනය කළ හැකි සාපේක්ෂව කුඩා ධාරාවක් මගින් ක්රියාත්මක වන විද්යුත් චුම්භක ස්විචයකි. රිලේ එක සහිත පරිපථයක් මගින් තවත් පරිපථයක් වෙත මාරු වන ආකාරය නිරූපණය කරන සරල රුපසටහනක් පහත දැක්වේ .
මුලදී පළමු පරිපථය ක්රියා විරහිත කර ඇති අතර (සංවේදකයක් හෝ ස්විචයක් වැසීම මගින් සිදු කර ගත හැකිය.) එය ක්රියාත්මක වන තෙක් ධාරාවක් ඒ හරහා ගලා නොයයි. එමනිසා දෙවන පරිපථය ද ක්රියා විරහිත වී ඇත.
පළමු පරිපථය හරහා කුඩා ධාරාවක් ගලා යන විට, එය වටා ඇති චුම්භක ක්ෂේත්රයක් ජනනය කරන විද්යුත් චුම්භකය සක්රීය කරයි. ශක්තිජනක විද්යුත් චුම්භකය දෙවන පරිපථයේ ස්පර්ශයක් ඒ දෙසට ආකර්ෂණය කරයි, ස්විචය වසා දමා දෙවන පරිපථය හරහා වඩා විශාල ධාරාවක් ගලා යාමට ඉඩ දෙයි.
ධාරාව ගලායාම නැවැත්වූ විට, සම්බන්ධතාවය නැවත එහි මුල් ස්ථානයට ගොස් දෙවන පරිපථය නැවත ක්රියා විරහිත කරයි.
රිලේ සම්බන්ධ මුලික දැනුම
සාමාන්යයෙන් රිලේ එකක පින් 5 ක් ඇත, ඒවායින් තුනක් ඔබට පාලනය කිරීමට අවශ්ය උපාංගයට සම්බන්ධ වන අධි වෝල්ටීයතා පර්යන්ත (NC, COM, සහ NO) වේ.
ප්රධාන විදුලිය පොදු (COM) පර්යන්තයෙන් රිලේ එක තුළට ඇතුල් වේ. NC & NO පර්යන්ත භාවිතා කිරීම රඳා පවතින්නේ ඔබට උපාංගය සක්රීය(ON) හෝ අක්රීය(OFF) කිරීමට අවශ්යතාවය මතයි. ඉතිරි පින් දෙක අතර (coil1 සහ coil2) විද්යුත් චුම්භකයක් මෙන් ක්රියා කරන දඟරයක් ඇත.
දඟර හරහා ධාරාව ගලා යන විට, විද්යුත් චුම්භකය ආරෝපණය වී ස්විචයේ අභ්යන්තර සම්බන්ධතා චලනය කරයි. එම අවස්ථාවේදී සාමාන්යයෙන් විවෘත (NO) පර්යන්තය පොදු (COM) පර්යන්තය හා සම්බන්ධ වන අතර සාමාන්යයෙන් වසා ඇති (NC) පර්යන්තය විසන්ධි වේ.
දඟර හරහා ගලා යන ධාරාව නතර වූ විට, අභ්යන්තර ස්පර්ශය එහි ආරම්භක තත්වයට පැමිණේ, එනම් සාමාන්යයෙන් වසා ඇති (NC) පර්යන්තය පොදු (COM) පර්යන්තය හා සම්බන්ධ වන අතර සාමාන්යයෙන් විවෘත (NO) පර්යන්තය නැවත විවෘත වේ.
මෙය තනි ධ්රැවයක්, ද්විත්ව විසි ස්විචයක් (single pole, double throw -SPDT). ලෙස හැඳින්වේ.
චැනල් එකක් සහිත රිලේ මොඩියුලය
මෙම පාඩමේදී අපි එක් නාලිකා රිලේ මොඩියුලයක් භාවිතා කිරීමට යන්නෙමු. කෙසේ වෙතත් නාලිකා දෙකක්, හතරක් සහ අටක් සහිත වෙනත් මොඩියුල තිබේ. ඔබේ අවශ්යතාවන්ට වඩාත් ගැලපෙන එකක් තෝරා ගත හැකිය.
මෙම මොඩියුලය නිර්මාණය කර ඇත්තේ ඔබේ ආර්ඩුයිනෝ වෙතින් අධි බලැති උපාංගයක් පමණක් මාරු කිරීම සඳහා ය. 250VAC හෝ 30VDC හි නාලිකාවකට 10A දක්වා ශ්රේණිගත කර ඇති රිලේ එකක් ඇත.
LEDs
රිලේ මොඩියුලයේ LED දෙකක් තිබේ
මොඩියුලය ක්රියාත්මක වන විට රතු පාට Power LED එක ආලෝකමත් වේ. රිලේ සක්රීය කර ඇති විට Status LED එක ආලෝකමත් වේ.
Output Terminal Block
චැනල් එකක් සහිත රිලේ මොඩියුලය පින් පවතින ආකාරය
රිලේ එක තුළ නිල් ඉස්කුරුප්පු ඇණ සම්බන්ධ කරන පර්යන්ත තුනකට වෙන් කර ඇත. ඒවායේ ක්රියාකාරීත්වය පොදු (COM), සාමාන්යයෙන් වසා ඇති (NC) සහ සාමාන්යයෙන් විවෘත (NO) ලෙස ලේබල් කර ඇත.
සාමාන්යය තත්ත්වයේ ඇති විට ස්විචයට සාපේක්ෂව එම නාලිකාවේ තත්වය නම් වලින් පැහැදිලි වේ.
- COM (Common): රිලේ එකට ප්රධාන විදුලිය(AC) ඇතුළු කිරීමට මෙය භාවිතා කරයි.
- NC (සාමාන්යයෙන් වසා ඇත): මෙයට සම්බන්ධ කර ඇති උපකරණය සාමාන්ය අවස්ථාවේ සක්රීයව(ON) පවතී. ඔබ උපකරණය අක්රීය (OFF) කිරීම සඳහා ආර්ඩුයිනෝ බෝර්ඩ් වෙතින් රිලේ මොඩියුලයට සිග්නල් එකක් යැවිය යුතුය.
- NO (සාමාන්යයෙන් විවෘතයි): මෙයට සම්බන්ධ කර ඇති උපකරණය සාමාන්ය අවස්ථාවේ (OFF) ව පවතී. ඔබ උපකරණය සක්රීය (ON) කිරීම සඳහා ආර්ඩුයිනෝ බෝර්ඩ් වෙතින් රිලේ මොඩියුලයට සිග්නල් එකක් යැවිය යුතුය.
Control Pins
මොඩියුලයේ අනෙක් පැත්තේ, පින් තුනක් ඇත – මොඩියුලය බල ගැන්වීම සඳහා Ground පින් සහ VCC පින් සහ රිලේ පාලනය සඳහා ආදාන IN පින් එකයි .
ආදාන(input) පින් LOW ලෙස සක්රීයව පවතී, එයින් අදහස් වන්නේ ඔබ පින් එක LOW ලෙස පවත්වා ගන්න විට විට රිලේ අක්රීය වන අතර ඔබ පින් එක HIGH ලෙස පවත්වා ගන්න විට විට විට එය සක්රීය වනු ඇති බවයි.
Project 1.1 – One Channel Relay Module එක ආර්ඩුයිනෝ සමග භාවිතය.
දැන් අපි රිලේ මොඩියුල ගැන සියල්ල දන්නා බැවින් දැන් එය භාවිතා කරන අකාරය බලමු!
Warning: මෙම පුවරුව AC අධි වෝල්ටීයතාව සමඟ අන්තර් ක්රියා කරයි. මෙය වැරදි හෝ නුසුදුසු ලෙස භාවිතා කිරීම බරපතල තුවාල හෝ මරණයට හේතු විය හැක. මෙය භාවිතා කිරීමට පෙර එය පිලිබදව නිසි දැනුමක් සහිත පුද්ගලයක්ගෙන් සහාය ලබාගන්න |
AC විදුලි බලයෙන් ක්රියා කරන ලාම්පුවක් ක්රියාත්මක කිරීම සඳහා අපගේ රිලේ මොඩියුලය සකස් කරමු.
මොඩියුලයේ VCC පින් එක ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි 5V හා GND බෝර්ඩ් එකෙහි GND පින් එක සම්බන්ධ කරන්න. රිලේ පාලනය සඳහා ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි ඩිජිටල් පින් D6 මොඩියුලයේ IN පින් සමඟ සම්බන්ධ කරන්න.
ඔබ පාලනය කිරීමට උත්සාහ කරන AC බලයෙන් ක්රියාත්මක වන උපාංගයට (ලාම්පුව) අනුකූලව රිලේ මොඩියුලය නිසි තැන නියමානුකූලව තැබිය යුතුය . AC විදුලි සැපයුමෙහි live වයරය කපා, කපන ලද කම්බියේ එක් කෙළවරක් (බිත්තියේ සිට) COM පර්යන්ත පින් එකට හා අනෙක් කොටස NC හෝ NO සමඟ සම්බන්ධ කළ යුතුය.
ඔබගේ AC බලයෙන් ක්රියාත්මක වන උපාංගය බොහෝ විට අක්රීය තත්ත්වයේ තිබේ නම් හා ඉඳහිට එය සක්රීය කිරීමට අවශ්ය නම්, එය NO සමඟ සම්බන්ධ කළ යුතුය. උපාංගය බොහෝ වේලාවක් ක්රියාත්මක තත්ත්වයේ තිබේ නම් නම් NC වෙත සම්බන්ධ වන්න.
මෙම ව්යාපෘතිය සඳහා අපගේ ලාම්පුව සාමාන්යය තත්වයේදී නිවී පවතින අතර රිලේ සක්රීය කරන විට ආලෝකමත් වේ. එබැවින් අපි එක් කෙළවරක් COM හි ද අනෙක් අන්තය NO හි සමග සම්බන්ධ කරන්නෙමු.
පරිපථ සැකැස්ම
පහත රූපයේ දැක්වෙන්නේ AC විදුලි බලයෙන් ක්රියා කරන ලාම්පුවක් ක්රියාත්මක කිරීම. සදහා වූ පරිපථ සටහනයි.
Hardware connection
|
Sketch 1.1
දැන් අපගේ දෘඩාංග සියල්ල සකසා ඇති බැවින්, ලාම්පුව ක්රියාත්මක කරන කේතනය දෙස බලමු. පහත ප්රෝග්රෑම් එකෙන් තත්පර 3 ක් ලාම්පුව සක්රීය කර ඊළඟ තිබෙන අතර තත්පර 3 සඳහා එය ක්රියා විරහිත කරයි.
මෙය අපි පළමු පාඩමේදී ඉගෙන ගත් LED එකක් සදහා කර ප්රෝග්රෑම් එකට සමානයි. රිලේ මොඩුයුලය සදහා විශේෂ කේතනයක් නැති අතර LED සදහා භාවිතා කල ප්රෝග්රෑම් සියල්ල ඔබට යොදා ගත හැකිය. කල යුත්තේ සියලුම බල්බ රිලේ හරහා සම්බන්ධ කිරීමයි.
int RelayPin = 6; void setup() { // Set RelayPin as an output pin pinMode(RelayPin, OUTPUT); } void loop() { // Let's turn on the relay... digitalWrite(RelayPin, LOW); delay(3000); // Let's turn off the relay... digitalWrite(RelayPin, HIGH); delay(3000); }
Code එක පැහැදිලි කිරීම :
ආර්ඩුයිනෝ සමඟ රිලේ මොඩියුලයක් පාලනය කිරීම LED එකක් පාලනය කිරීම තරම් සරලය. ප්රෝග්රෑම් එක ආරම්භ වන්නේ රිලේ මොඩියුලයේ ආදාන(INPUT) පින් සම්බන්ධ කර ඇති පින් එක ප්රකාශ කිරීමෙනි.
int RelayPin = 6;
Setup ෆන්ෂන් එකේදී අපි එම පින් එක ප්රතිදානය(OUTPUT) ලෙස අර්ථ දක්වමු.
pinMode(RelayPin, OUTPUT);
දැන් ලූප් ෆන්ෂන් එකේදී, අපි පිළිවෙලින් රිලේ පින් LOW / HIGH ලෙස එක දිගටම වෙනස්වන ආකාරයට උපාංගය සක්රීය / අක්රීය කරමු. DigitalWrite (RelayPin, LOW) පින් එක සිග්නල් එකක් නැති අතර ඩිජිටල් DigitalWrite (RelayPin, HIGH) පින් එක රිලේ එකට සිග්නල් එකක් ලබා දේ
digitalWrite(RelayPin, LOW); delay(3000); digitalWrite(RelayPin, HIGH); delay(3000);
One Digit Segment දර්ශක භාවිතා කිරිම.#
16×2 LCD දර්ශක මොඩියුලය#
ඔබගේ ආර්ඩුයිනෝ ව්යාපෘති වල පණිවිඩ හෝ සංවේදක කියවීම් ප්රදර්ශනය කිරීමට අවශ්යද? ඒ සදහා මෙම LCD දර්ශන මනාව ගැලපේ. මේවා ඕනැම ව්යාපෘතියට පොදුවේ භාවිතා කළ හැකිය. යම් දෙයක් දර්ශනය කිරීමට මෙය පහසුවෙන් ඉක්මනින් සම්බන්ධ කර භාවිතා කළ හැකිය.
වෙළඳපොලේ ඇති බොහෝ එල්සීඩී සංදර්ශක 16X2 වේ. මම භාවිතා කරන ඩිස්ප්ලේ එක රුපියල් 300-500 අතර මිලකට මිලදී ගත හැකි 16 × 2 එල්සීඩී ඩිස්ප්ලේ එකකි. එහි පින් 16 ක් ඇත. එය 16 × 2 එල්සීඩී ලෙස හැඳින්වෙන්නේ ඇයි කියා ඔබ සිතනවා විය හැකිය. 16 × 2 කොටසෙහි තේරුම නම් එල්සීඩී හි පේළි 2 ක් ඇති අතර එක් පේළියකට අක්ෂර 16 ක් පෙන්විය හැකි බවයි. එම නිසා 16 × 2 එල්සීඩී තිරයකට එකවර අක්ෂර 32 ක් දක්වා ප්රදර්ශනය කළ හැකිය. අනුචලනය(scrolling) කිරීමත් සමඟ අක්ෂර 32 කට වඩා පෙන්වීමට හැකිය. තවද ඔබට 20X4 එල්සීඩී ඩිස්ප්ලේ (පේළි 4 ක්, අක්ෂර 20 ක්) එකක් වුවද භාවිතා කළ හැකිය. එහි පින් 14 ක් ඇත.
මෙම පාඩම මඟින් LCD තිරය මත ඔබට අවශ්යය අක්ෂර පෙන්විමට හා එවා තිරය තුළ ධාවනය කිරීමට සකස් කිරීමට දැනගත යුතු සියල්ල සිද්ධාන්ත හා ක්රමවේද ආවරණය කරයි. හිටාචි සමගමෙන් නිපදවා ඇති HD44780 ලෙස හැඳින්වෙන LCD පාලක චිපය මගින් මෙහිදී 16 × 2 (1602) LCDs පමණක් නොව ඕනෑම වෙනස් ප්රමණයේ LCDs (උදාහරණයක් ලෙස 16×4, 16×1, 20×4 ආදිය) සදහා ද භාවිතා කළ හැකිය. ආර්ඩුයිනෝ සදහා දැනටමත් HD44780 LCD හැසිරවීමට library එකක් නිර්මාණය කර ඇත.
මෙම පාඩමේ සියලු ප්රෝග්රෑම් කේත ලියා ඇත්තේ සම්මත හිටාචි HD44780 ධාවකය භාවිතා කරන එල්සීඩී සඳහා ය. ඔබේ එල්සීඩී එකේ පින් 16 ක් තිබේ නම්, එහි බොහෝ විට හිටාචි HD44780 කොන්ට්රොලර් එක භාවිතා වේ. මෙම දර්ශක 4 බිට් ආකාරය හෝ 8 බිට් ආකාරය වයර්ගත කළ හැකිය. 8 බිට් මාදිලියට වඩා අඩු වයර් හතරක් භාවිතා කරන හෙයින් LCD 4 බිට් මාදිලියේ වයර් කිරීම සාමාන්යයෙන් පහසු වේ. ප්රායෝගිකව, ක්රම දෙක අතර ක්රියාකාරිත්වයේ කැපී පෙනෙන වෙනසක් නොමැත. මෙම පාඩමේදී, මම LCD 4 බිට් ආකාරය ඉදිරිපත් කර ඇත.
ඔබ දන්නවද?
Liquid Crystal Display යන්නෙහි වචන වල මුල් අකුරු ගොදා ගෙන LCD ලෙස කෙටි නම භාවිතා වේ. එය මූලික වශයෙන් දර්ශන ඒකකයක්(display unit) වන අතර එය දෘශ්ය රූපයක් නිපදවීමට liquid crystals ටික භාවිතා කරයි. මෙම විශේෂ crystal ටිකට යම් විදුලි ධාරාවක් යොදන විට, එය තිරය පිටුපස පවතින පසුතල ආලෝකය අවහිර කරයි. එහි ප්රතිඵලයක් ලෙස එම ප්රදේශය අනෙක් ප්රදේශවලට සාපේක්ෂව අඳුරු වේ. තිරය මත අක්ෂර පෙන්වන්නේ එලෙසයි. |
Project 1 – 16×2 LCD දර්ශකයක් Arduino සමග සම්බන්ධ කිරීම
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
![]() Breadboard x 1 |
|
![]() USB Cable x 1 |
![]() LCD1602 x1 |
|
![]() Jumper M/M x 16 |
![]() Rotary potentiometer x1 |
![]() Resistor 220Ω x2 |
🔎 උපාංග පිලිබද දැනුම
මෙම LCDs වචන පේළි සහ අක්ෂර පමණක් ප්රදර්ශනය කිරීම සඳහා වඩාත් සුදුසු වේ, එබැවින් එහි නම ‘Character LCD’ ලෙස බොහෝවිට භාවිතා කරයි. LCD දර්ශකයේ පිටුපස LED මගින් ඇති කරන පසුතල ආලෝකයක් ඇති අතර එහි පේළි දෙකකින් ASCII අක්ෂර 32 ක් පෙන්විය හැකිය.
Each rectangle contains a grid of 5×8 pixels
ඔබ සමීපව බැලුවහොත්, දර්ශකයේ ඇති එක් එක් අක්ෂර සඳහා කුඩා සෘජුකෝණාස්රකාර පික්සල් ඔබට සැබවින්ම දැකිය හැකිය. මෙම සෑම සෘජුකෝණාස්රයක්ම පික්සල් 5 × 8 ක කොටුවක් ලෙස පවති.
ඒවා අකුරු පමණක් පෙන්වුවද, ඒවා විවිධ ප්රමාණවලින් සහ වර්ණවලින් යුක්ත වේ: නිදසුනක් ලෙස, 16 × 1, 16 × 4, 20 × 4, ප්රමාණයෙන් සහ පසුබිම් ආලෝකය නිල් පැහැති සුදු පාට, කළු හා කොළ ලෙස තවත් බොහෝ දේ අපට හමුවේ. සුභාරංචිය නම්, මෙම දර්ශක සියල්ලම අවශ්යය වෙලාවක මාරු කළ හැකි වීමයි – ඔබ ඔබේ ව්යාපෘතිය තෝරාගත් යම් LCD තිරයක් සමඟ ගොඩනඟන්නේ නම් ඔබට එය ඉවත් කර ඔබට අවශ්ය ප්රමාණයෙන් හා කැමති වර්ණයෙන් යුත් LCD භාවිතා කළ හැකිය. ඔබේ ප්රෝග්රෑම් එකේ කේතය විශාල ප්රමාණයට වෙනස් විය හැකි නමුත් අවම වශයෙන් රැහැන් කිරීම සමාන වේ.
16×2 Character LCD දර්ශකයක පින් පවතින ආකරය
උදාහරණ කේතයට වෙත යාමට පෙර, අපි මුලින්ම LCD Pinout දෙස බලමු.
GND | ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි GND සමග සම්බන්ධ කළ යුතුය. |
VCC | ආර්ඩුයිනෝ බෝර්ඩ් එක මත වෝල්ට් 5v පින් එක හා LCD තිරයේ බල සැපයුම සම්බන්ධ කල යුතුය. |
Vo (LCD Contrast) | LCD තිරයෙහි ආලෝක වෙනස සහ දීප්තිය පාලනය කරයි. පොටෙන්ටෝමීටරයක් සහිත සරල වෝල්ටීයතා බෙදීමක් භාවිතා කිරීමෙන් සියුම්ව වෙනස්කම් කළ හැකිය. |
RS (Register Select) | පින් මඟින් ආර්ඩුයිනෝ විසින් LCD වෙත විධාන යවනවාද නැතහොත් දත්ත යවනවාද යන්න පැවසීමට ඉඩ දෙයි. මූලික වශයෙන් මෙම පින් එක දත්ත වලින් විධාන වෙන්කර හඳුනා ගැනීමට භාවිතා කරයි. අපි LCD වෙත විධාන යවමු (කර්සරය නිශ්චිත ස්ථානයකට සැකසීම, දර්ශනය ඉවත් කිරීම, දර්ශනය දකුණට අනුචලනය කිරීම යනාදිය). RS පින් HIGH මත සකසා ඇති විට අපි දත්ත / අක්ෂර LCD වෙත යවමු. |
R/W (Read/Write) | ඔබ LCD වෙතින් දත්ත කියවනවාද නැද්ද යන්න පාලනය කිරීමයි. අපි මෙම LCD එක OUTPUT උපාංගයක් ලෙස භාවිතා කරන බැවින්, අපි මෙම පින් එක LOW ලෙස තබන්නෙමු. මෙය WRITE ආකාරයේදී භාවිතා කරයි. |
E (Enable) | දර්ශකය සක්රීය කිරීම සඳහා මෙම පින් භාවිතා කරයි. එහි තේරුම නම් මෙම පින් එක LOW ලෙස සකසා ඇති විට, R/W, RS සහ දත්ත බස් මාර්ග සමඟ සිදුවන්නේ කුමක්ද යන්න LCD නොසලකයි. මෙම පින් එක HIGH ලෙස සකසා ඇති විට, LCD විසින් පැමිණෙන දත්ත සැකසෙමින් පවතී. |
D0-D7 (Data Bus) | අපි දර්ශකය වෙත යවන බිට් 8 දත්ත රැගෙන යන carry සදහා මෙම පින් භාවිතා වේ. නිදසුනක් ලෙස, අපට විශාල අකුර ‘A’ අක්ෂරය දර්ශනය වීමට අවශ්ය නම් අපි මෙම පින් හි 0100 0001 (ASCII වගුවට අනුව) LCD වෙත යවයි. |
A-K (Anode & Cathode) | LCD හි පසුබිම් ආලෝකය පාලනය කිරීම සඳහා මෙම පින් භාවිතා කරයි. |
Character LCD වැඩකරන ආකාරය පරීක්ෂා කිරීම.
දැන් අපි සිත්ගන්නා සුලු දේවල් වෙතට පිවිසෙමු. අපි ඔබේ LCD තිරය වැඩකරන ආකාරය පරීක්ෂා කරමු. පළමුව, ආර්ඩුයිනෝ Uno බෝර්ඩ් වෙතින් 5V සහ GND පින් breadboard හි බලය ලබා දෙන පේළි සමඟ සම්බන්ධ කර ඔබේ LCD දර්ශකය breadboard එකට සම්බන්ධ කරන්න.
දැන් LCD දර්ශකයට විදුලි බලය ලබා දෙමු. LCD දර්ශකයට වෙනම බල සම්බන්ධතා දෙකක් ඇත; එනම් LCD සඳහා එකක් (පින් 1 සහ පින් 2) සහ LCD හි පසුබිම් ආලෝකය සඳහා තවත් එකකි. (පින් 15 සහ පින් 16). LCD හි 1 සහ 16 පින් GND වෙත සම්බන්ධ කරන්න. 15 සහ 2 පින් 5V වෙත සම්බන්ධ කරන්න.
බොහෝ LCD දර්ශක වල LED පසුබිම් ආලෝකය සඳහා සාදන ලද ශ්රේණි ප්රතිරෝධකයක් ඇත. ඔබට ප්රතිරෝධකයක් අඩංගු නොවන LCD එකක් තිබේ නම්, ඔබට 5V සහ pin 15 අතර එකක් එකතු කිරීමට අවශ්ය වේ.
ශ්රේණි ප්රතිරෝධකයේ අගය ගණනය කිරීම සඳහා, දත්ත පත්රිකාවෙන් උපරිම පසුතල ධාරාව සහ සාමාන්ය පසුතල වෝල්ටීයතා පහත වැටීම සොයා බලන්න. සරල ඕම් නියමය භාවිතා කිරීමෙන් ඔබට ප්රතිරෝධක අගය ගණනය කළ හැකිය. ඔබට දත්ත පත්රය සොයාගත නොහැකි නම්, ඕම් 220 ප්රතිරෝධකයක් භාවිතා කිරීම ආරක්ෂිත විය යුතුය, කෙසේ වෙතත් මෙම ඉහළ අගයක් පසුපස ආලෝකය තරමක් අඳුරු කරයි. |
ඊළඟට අපි LCD දර්ශකයේ හි පින් 3 සඳහා සම්බන්ධතා සකස් කරමු, එය දර්ශකයේ වෙනස සහ දීප්තිය පාලනය කරයි. මේ සඳහා අපි 5V සහ GND අතර 10K පොටෙන්ටෝමීටරයක් සම්බන්ධ කරමු. පොටෙන්ටෝමීටරයේ මැද පින් (වයිපර්) LCD මත පින් 3 ට සම්බන්ධ කරන්න.
කතෘ හිමිකම
මෙම පාඩම් මාලාවේ සියලුම අයිතිය කතෘ සතුයි. මෙහි ඇති සියලුම පාඩම් තොරතුරු සම්පුර්ණයෙන් හෝ කොටස් වශයෙන් වෙනත් වෙබ් අඩවි වල පළකිරීම, මුද්රණය කර බෙදාහැරීම දඩුවම් ලැබිය හැකි වරදක් බව සලකන්න. |
පරිපථ සැකැස්ම
LCD දර්ශක භාවිතා කිරීමට පෙර ඔබ එහි පින් ටික සොල්ඩරින් කර ගත යුතුය. මෙහිදී ඔබට Male Header එකක් හෝ Female Header එකක් සම්බන්ධ කර ගත හැකිය. එවිට පහසුවෙන් Breadboard එකක් සමග භාවිතා කළ හැකිය I2C භාවිතා කරන්නේ නම් Female Header එකක් සම්බන්ධ කිරීම වඩාත් සුදුසු වේ.
Hardware connection Adjusting LCD contrast by rotating potentiometer knob |
දැන් ආර්ඩුයිනෝ බෝර්ඩ් එක සක්රීය කරන්න, එවිට LCD තිරයේ පසුතල ආලෝකය දැල්වෙනු ඇත. ඔබ පොටෙන්ටෝමීටරයේ කරකවන විට, සෘජුකෝණාස්රවල පළමු පේළිය දිස්වන බව ඔබ දැකගත යුතුය. මෙය නිවැරදිව සිදුවුවහොත් ඔබේ LCD එකෙහි පසුතල ආලෝකය පාලනය කිරීම හොදින් ක්රියාත්මක වේ
අපි කේත අප්ලෝඩ් කිරීමට සහ දර්ශනයට දත්ත යැවීමට පෙර, අපි LCD එකෙහි ඉතිරි පින් ආර්ඩුයිනෝ බෝර්ඩ් එක සමග සම්බන්ධ කරමු.
LCD තිරය සතුව පින් රාශියක් ඇත (මුළු පින් ගණන 16 කි) මෙහිදී අපි ඔබට පෙන්වන්නේ එම පින් රැහැන්ගත කරන්නේ කෙසේද යන්නයි. නමුත්, ආර්ඩුයිනෝ බෝර්ඩ් එක සමඟ සම්බන්ධ වීමට මේ සියලු පින් අපට අවශ්ය නොවේ.
අදාල දත්ත LCD දර්ශකයට ගෙන යන දත්ත රේඛා 8 ක් ඇති බව අපි දනිමු. නමුත් HD44780 LCD දර්ශක නිර්මාණය කර ඇත්තේ බිට් 8 (8-bit මාදිලිය) ක් වෙනුවට දත්ත බිට් 4 ක් (4-බිට් මාදිලිය) භාවිතා කරමින් LCD සමඟ කතා කළ හැකි ආකාරයටය. එම නිසා අපට පින් 4 ක් ඉතිරි කරයි.
4-බිට් සහ 8-බිට් මාදිලිය අතර වෙනස 8-බිට් මාදිලිය භාවිතා කිරීම ගත වන කාලය මෙන් දෙගුණයක් 4-බිට් මාදිලිය භාවිතා කිරීමට අවශ්ය වේ. එම නිසා 8-බිට් මාදිලිය වේගවත් වේ. එනම් බිට් 8 ආකාරයේදී ඔබ දත්ත එකවරම LCD වෙත යවන බැවිනි. කෙසේ වෙතත්, 4-බිට් ආකාරයේදී ඔබට බයිට් එකක් නිබල් 2 කින් බෙදිය යුතු අතර, ඉන් එකක් බිටු 4 ක් දකුණට මාරු කර ලිවීමේ මෙහෙයුම් 2 ක් සිදු කළ යුතුය. එබැවින්, 4-බිට් මාදිලිය බොහෝ විට I / O පින් සුරැකීමට භාවිතා කරයි. නමුත්, යෙදුමක වේගය අවශ්ය වන විට අවම වශයෙන් 8-බිට් මාදිලිය භාවිතා වන අතර අවම වශයෙන් I / O පින් 10ක් අවශ්ය වේ. |
එබැවින් නැවත අපි 4-බිට් මාදිලිය භාවිතා කරමින් LCD අතුරුමුහුණත් කරනු ඇත. එබැවින් අපට අවශ්ය වන්නේ පින් 6 ක් පමණි: RS, EN, D7, D6, D5, සහ D4 යන පින් LCD සමඟ සම්බන්ධ කර යුතුය.
LCD හි දත්ත පින් හතරක් වන 4 සිට 7 දක්වා සිට ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි ඩිජිටල් පින් D4 සිට D7 දක්වා සමග සම්බන්ධ වේ. LCD දර්ශකය සක්රීය කරන්න. LCD හි EN පින් ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි ඩිජිටල් පින් D11 හා LCD හි RS පින් එක ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි ඩිජිටල් පින් D12 හා සම්බන්ධ වේ.
පහත රූප සටහන මඟින් සියළුම සම්බන්ධතා අතරම වයර් සම්බන්ධ කරන්නේ කෙසේදැයි පැහැදිලිව දැක්වේ.
Hardware connection Wiring connections of 16×2 character LCD and Arduino UNO |
Sketch 1.1
පහත දැක්වෙන ප්රෝග්රෑම් එක මඟින් LCD හි ‘Hello World! පණිවිඩය මුද්රණය කෙරේ. ප්රෝග්රෑම් එක අත්හදා බලන්න.
// include the library code:
#include <LiquidCrystal.h>
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Clears the LCD screen
lcd.clear();
}
void loop()
{
// Print a message to the LCD.
lcd.setCursor(3, 0);
lcd.print(" DIYGEEK.LK!");
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(2, 1);
// Print a message to the LCD.
lcd.print(" LCD Tutorial");
}
සෑම දෙයක්ම නිවැරදිව සිදු කළ පසු, ඔබ මේ ආකරයට දර්ශකයේ දැක ගත හැකිය.
Code එක පැහැදිලි කිරීම :
ඉහත ප්රෝග්රෑම් එක ආරම්භ වන්නේ LiquidCrystal library එක ඇතුළත් කිරීමෙනි. මෙම පාඩමේ මුලින් සඳහන් කළ පරිදි, ආර්ඩුයිනෝ සදහා LiquidCrystal නමින් library ක් ඇති අතර එය භාවිතා කිරීමෙන් LCD මොඩියුලය ක්රමලේඛනය කිරීම පහසු කරයි. ආර්ඩුයිනෝහි නිල වෙබ් අඩවියෙන් ඔබට library එක ගැන වැඩි විස්තර ගවේෂණය කළ හැකිය.
![]() |
More Info : https://www.arduino.cc/en/Reference/LiquidCrystal. |
//include the library code: #include <LiquidCrystal.h>
ඊළඟට අපි LiquidCrystal library එකේ පෙන්වා දී ඇති ආකාරයට වස්තුවක්(Object) නිර්මාණය කළ යුතුයි. මෙම වස්තුව පරාමිති(Parameters) 6 ක් භාවිතා කරන අතර LCD හි RS pin, Enable pin සහ දත්ත පින් වන d4, d5, d6, සහ d7 සම්බන්ධ කර ඇත්තේ ආර්ඩුයිනෝ බෝර්ඩ් හි කුමන Arduino පින් වලටද යන්න අර්ථ දක්වයි.
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
දැන් ඔබ LiquidCrystal හි වස්තුවක් නිර්මාණය කර ඇති බැවින්, ඔබට LCD සඳහා විශේෂිත වූ විශේෂ ක්රම හෙවත් ෆන්ෂන් (functions) භාවිතා කර හැකිය.
‘Setup’ function එකේදී: අපි LiquidCrystal library හා සම්බන්ධ ෆන්ෂන් දෙකක් භාවිතා කරමු: පළමු ෆන්ෂන් එක begin() වේ. මෙය දර්ශකයේ අකුරු පෙන්විය යුතු ප්රදේශය නියම කිරීමට භාවිතා කරයි, එනම් දර්ශනයට තීරු සහ පේළි කීයක් තිබේද යන්නයි. ඔබ 16 × 2 අක්ෂර LCD භාවිතා කරන්නේ නම්, පරාමිතීන් 16 සහ 2 ද ඔබ 20 × 4 LCD භාවිතා කරන්නේ නම්, 20 සහ 4 පරාමිතීන් ලෙස නම් කල යුතුය.
lcd.begin(16, 2);
දෙවන ෆන්ෂන් එක clear() ලෙස දැක්වේ. මෙම LCD තිරය තුල දැනට දිස්වන සියලුම දේ ඉවත් කර කර්සරය ඉහළ වම් කෙළවරට ගෙන යයි.
lcd.clear();
loop’ ෆන්ෂන් එකේදි අපි තිරයේ පළමු පේළියේ දිස්විය යුතු පණිවිඩය පෙන්වන print() ෆන්ෂන් එක භාවිතා කරමු.
// Print a message to the LCD. lcd.print(" Hello world!");
ඊට පසු අපි කර්සරයේ පිහිටීම දෙවන පේළියට සකසමු. setCursor() ෆන්ෂන් එක භාවිතයෙන් කර්සරයේ පිහිටීම සකස් කළ හැකිය. එමඟින් LCD හි නව පේළිය පෙන්වීමට ඔබට අවශ්ය ස්ථානය නියම කරයි. ඉහළ වම් කෙළවර col = 0, පේළිය = 0 ලෙස සැලකන නිසා මෙහි පරාමිති වලට (0,1) ලබා දේ.
lcd.setCursor(0, 1); lcd.print(" LCD Tutorial");
LiquidCrystal Library තුළ ඇති තවත් වැදගත් function කිහිපයක්
LiquidCrystal ෆන්ෂන් එක සමඟ ඔබට භාවිතා කළ හැකි තවත් ප්රයෝජනවත් කාර්යයන් කිහිපයක් තිබේ. ඒවායින් කිහිපයක් පහත ලැයිස්තු ගත කර ඇත:
-
- home() ෆන්ෂන් එක භාවිතයෙන් දර්ශනය ඉවත් නොකර කර්සරය LCD හි ඉහළ වම්පස ස්ථානගත කිරීමට ඔබට අවශ්ය විට භවිතා කර හැකිය.
- turbo C++ හෝ notepad++ වැනි යෙදුම් බොහොමයක් ඇත, යතුරුපුවරුවේ ‘insert’ යතුර එබීමෙන් කර්සරය වෙනස් වේ. එලෙසම ඔබට blink() හෝ cursor() ෆන්ෂන් එක භාවිතා කර LCD හි කර්සරය වෙනස් කළ හැකිය.
- blink() ෆන්ෂන් එක එක පික්සල් 5 × 8 ක බ්ලින්ක් බ්ලොක් එකක් පෙන්වන අතර cursor() විසින් ඊළඟ අක්ෂරය ලිවිය යුතු ස්ථානයට යටි ඉරි (රේඛාවක්) පෙන්වයි.
- එල්සීඩී කර්සරය සැඟවීමට ඔබට noBlink() ෆන්ෂන් එක භාවිතා කර දිස්වන LCD කර්සරය සහ noCursor() මගින් එය සැගවිය හැකිය.
- ඔබට scrollDisplayRight() හෝ lcd.scrollDisplayLeft() භාවිතා කරමින් එක් ඉඩක් දකුණට අනුචලනය කළ හැකිය. ඔබට අඛණ්ඩව පෙළ අනුචලනය කිරීමට අවශ්ය නම්, ඔබ මෙම කාර්යයන් ‘for loop’ තුළ භාවිතා කළ යුතුය.
Project 2 – LCD දර්ශකය තුළ Custom character භාවිතා කිරිම
LCD සඳහා ඔබේම අභිරුචි අක්ෂර (glyph) සහ සංකේත සෑදිය හැකිය. සම්මත ASCII අක්ෂර කට්ටලයේ කොටසක් නොවන අක්ෂරයක් ප්රදර්ශනය කිරීමට ඔබට අවශ්ය විට මෙම ක්රමය ඔබට අතිශයින් ප්රයෝජනවත් වේ.
CGROM සහ CGRAM හිටාචි HD44780 පාලකය මත පදනම් වූ සියලුම LCD දර්ශක වල CGROM සහ CGRAM (අක්ෂර උත්පාදක ROM සහ RAM) යනුවෙන් අර්ථ දක්වා ඇති අක්ෂර ගබඩා කරන මතකයන් වර්ග දෙකක් ඇත. CGROM මතකය අස්ථායී නොවන අතර එය වෙනස් කළ නොහැක. CGRAM මතකය නැති කර හැකි වන අතර ඕනෑම වේලාවක වෙනස් කළ හැකිය. CGROM ඔවුන්ගේ ASCII කේතය භාවිතා කර පෙන්විය හැකි සියලුම ස්ථිර අකුරු ගබඩා කිරීම සඳහා භාවිතා කරයි. උදාහරණයක් ලෙස, අපි 0x41 ලියන්නේ නම් දර්ශනය මත අපට ‘A’ අක්ෂරය ලැබේ. CGRAM යනු පරිශීලක අර්ථ දක්වන ලද අක්ෂර ගබඩා කිරීම සඳහා භාවිතා කළ හැකි තවත් මතකයක් වේ. මෙම RAM එක බයිට් 64 කට සීමා වේ. තේරුම, 5 × 8 පික්සල් මත පදනම් වූ LCD සඳහා; පරිශීලක අර්ථ දක්වන ලද අක්ෂර 8 ක් දක්වා CGRAM හි ගබඩා කළ හැකිය. 5 × 10 පික්සල් මත පදනම් වූ LCD සඳහා, ගබඩා කළ හැක්කේ පරිශීලක අර්ථ දක්වන ලද අක්ෂර 4 ක් පමණි. |
මෙම පාඩමෙදී අප කලින් සාකච්ඡා කළ පරිදි, දර්ශකයේ අක්ෂර 5 × 8 න්යාසයකින් පික්සෙල් වලින් සෑදී ඇති බැවින් එම අනුකෘතිය තුළ ඔබේ අභිරුචි අකුර හෝ රුපය අර්ථ දැක්විය යුතුය. එය අර්ථ දැක්වීම සඳහා ඔබ LiquidCrystal library එකෙහි createChar() ෆන්ෂන් භාවිතා කළ හැකිය.
CreateChar() භාවිතා කිරීම සඳහා ඔබ මුලින්ම බයිට් 8 ක පෙළක් සකසා ඇත. Array එකෙහි ඇති සෑම බයිටයක්ම (බිට් 5 ක් පමණක් සලකනු ලැබේ) 5 × 8 න්යාසයේ අක්ෂරයේ එක් පේළියක් අර්ථ දක්වයි. කෙසේවෙතත්, එහි ඇති 0 සහ 1 න් දැක්වෙන්නේ අදාල පේළියේ ඇති පික්සෙල් තිබිය සක්රීය හෝ අක්රීය කළ යුතුද යන්නයි.
Custom Character Generator
ඔබට මෙහි දැක්විය හැකි අක්ෂර ගණන සීමිතයි එකම සීමාව වන්නේ LiquidCrystal library සහාය දක්වන්නේ custom characters අටකට පමණි.
පහත දැක්වෙන සටහන මඟින් ඔබට මෙම custom characters දර්ශකයෙහි භාවිතා කළ හැකි ආකාරය පෙන්වයි.
// include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // make some custom characters: byte Heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte Bell[8] = { 0b00100, 0b01110, 0b01110, 0b01110, 0b11111, 0b00000, 0b00100, 0b00000 }; byte Alien[8] = { 0b11111, 0b10101, 0b11111, 0b11111, 0b01110, 0b01010, 0b11011, 0b00000 }; byte Check[8] = { 0b00000, 0b00001, 0b00011, 0b10110, 0b11100, 0b01000, 0b00000, 0b00000 }; byte Speaker[8] = { 0b00001, 0b00011, 0b01111, 0b01111, 0b01111, 0b00011, 0b00001, 0b00000 }; byte Sound[8] = { 0b00001, 0b00011, 0b00101, 0b01001, 0b01001, 0b01011, 0b11011, 0b11000 }; byte Skull[8] = { 0b00000, 0b01110, 0b10101, 0b11011, 0b01110, 0b01110, 0b00000, 0b00000 }; byte Lock[8] = { 0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 }; void setup() { // initialize LCD and set up the number of columns and rows: lcd.begin(16, 2); // create a new character lcd.createChar(0, Heart); // create a new character lcd.createChar(1, Bell); // create a new character lcd.createChar(2, Alien); // create a new character lcd.createChar(3, Check); // create a new character lcd.createChar(4, Speaker); // create a new character lcd.createChar(5, Sound); // create a new character lcd.createChar(6, Skull); // create a new character lcd.createChar(7, Lock); // Clears the LCD screen lcd.clear(); // Print a message to the lcd. lcd.print("Custom Character"); } // Print All the custom characters void loop() { lcd.setCursor(0, 1); lcd.write(byte(0)); lcd.setCursor(2, 1); lcd.write(byte(1)); lcd.setCursor(4, 1); lcd.write(byte(2)); lcd.setCursor(6, 1); lcd.write(byte(3)); lcd.setCursor(8, 1); lcd.write(byte(4)); lcd.setCursor(10, 1); lcd.write(byte(5)); lcd.setCursor(12, 1); lcd.write(byte(6)); lcd.setCursor(14, 1); lcd.write(byte(7)); }
Library එක ඇතුළත් කිරීමෙන් පසුව, අපට බයිට් අටක custom character array එකක් නිර්මාණය කළ යුතුය.
byte Heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
මෙහිදී අපි createChar() ෆන්ෂන් එක භාවිතා කර custom character නිර්මාණය කළ යුතුය. මෙම function එක පරාමිති දෙකක් ගනී. පළමුවැන්න සහාය දක්වන custom character 8 න් එකක් වෙන් කරවා ගැනීම සඳහාය. එයට අපිට 0 සහ 7 අතර සංඛ්යාවක් ලබා දිය හැකිය. දෙවන පරාමිතිය බයිට් වල array එකෙහි නමයි.
// create a new character lcd.createChar(0, Heart);
ඊළඟට loop එකෙහි, අපි write() ෆන්ෂන් එක භාවිතා කරන custom character එක ප්රදර්ශනය කිරීමට සහ පරාමිතියක් ලෙස අප වෙන් කළ අක්ෂර ගණන භාවිතා කරමු.
// byte(0) represents Heart character. lcd.write(byte(0));
4×3 & 4×4 Membrane Keypad#
ඔබේ ව්යාපෘතිය සමඟ පරිශීලකයින්ට අන්තර් ක්රියා කිරීමට ඉඩ දීම සඳහා යතුරු පුවරු(Keypad) ඉතා හොඳ ක්රමයකි. මෙනු නිර්මාණය කිරීමට, මුරපද ඇතුළත් කිරීමට සහ විවිධ ක්රීඩා සහ රොබෝ පාලනය කිරීමට ඔබට ඒවා භාවිතා කළ හැකිය. මැට්රික්ස් කිපැඩ් යනු ජංගම දුරකථන, කැල්කියුලේටර, මයික්රෝවේව් උදුන්, දොර අගුල් ආදියෙහි ඔබ දකින යතුරු පෑඩ්යන්ය. ඒවා ප්රායෝගිකව සෑම තැනකම තිබේ.
මෙම පාඩම් ඒකකයේදී,
-
- ආර්ඩුයිනෝ සමග මැට්රික්ස් කිපැඩ් එකක් භාවිතා කරන්නේ කෙස්ද යන්න ඔබට ඉගනගත හැකි වේ.
- ආර්ඩුයිනෝ මගින් කී වලට අදාල අකුරු හෙවත් සිම්බල් හඳුනා ගන්නේ කෙසේදැයි පැහැදිලි කෙරේ.
- ඕනෑම යතුරු පෑඩයක pinout සොයා ගන්නේ කෙසේදැයි ඔබට ඉගනගත හැකි වේ.
- සීරියල් මොනිටරයේ සහ LCD ඩිස්ප්ලේ වල යතුරු මුද්රණය කරන්නේ කෙසේදැයි ඉගනගත හැකි වේ.
- මුරපදයක් නිවැරදිව ඇතුළත් කළ විට 5V රිලේ සක්රිය කරන්නේ කෙසේදැයි දක්වා ඇත.
මෙම පාඩමේදී මම භාවිතා කරන්නේ 4X4 මැට්රික්ස් කිපැඩ්කි , නමුත් 3X4 කිපැඩ්කි සඳහා කේත සහ වයර් රූප සටහන් ද ඇත. ඒවා සිහින් බැවින් ඒවාට මැලියම් ආධාරකයක් ද ඇති බැවින් ඔබට ඒවා බොහෝ පැතලි මතුපිටකට ඇලවිය හැකිය. මෙම ආකාරයේ පැතලි කිපැඩ් වලට ඔබ අකමැති නම් ඝන බොත්තම් ඇති දුරකථන විලාසිතා යතුරු පෑඩ් ද ඔබට ලබා ගත හැකිය. පැරණි දුරකථන වලින් ගැලවූ යතුරු පෑඩ් පවා Arduino සමඟ ක්රියා කරයි.
Project 1 – 4×4 Keypad එකක් Arduino සමග භාවිතා කිරීම.
අවශ්යය උපාංග
![]() Arduino UNO x 1 |
![]() Breadboard x 1 |
![]() USB Cable x 1 |
![]() 4×4 keypad x1 |
Jumper M/M x 16 |
🔎 උපාංග පිලිබද දැනුම
Membrane යතුරු පෑඩ් ඉතා තුනී අතර නම්යශීලී පටල ද්රව්යයකින් සාදා ඇත. ඒවා 4 × 3, 4 × 4, 4 × 1 වැනි ප්රමාණයන්ගෙන් ලබා ගැනීමට පුලුවන. ඒවායේ ප්රමාණය කුමක් වුවත්, ඒවා සියල්ලම එකම ආකාරයකින් ක්රියාත්මක වේ.
මේ පිළිබඳ එක් වැදගත් දෙයක් නම්, ඔවුන් මැලියම් ආධාරයෙන් පැමිණීම නිසා ඔබට එය ඕනෑම දෙයකට සම්බන්ධ කළ හැකිය. ඔබ කළ යුත්තේ කඩදාසි පිටුපසට ගලවා දැමීමයි.
අපි 4 × 4 යතුරු පෑඩ් එකක් උදාහරණයක් ලෙස ගනිමු. එහි යතුරු 16 ක් ඇත. සෑම යතුරකටම යටින් විශේෂ පටල ස්විචයක් ඇත.
මෙම සියලු පටල ස්විචයන් එකිනෙකට සම්බන්ධ වී ඇත්තේ පෑඩ් යට සිහින් සන්නායක කම්බි පටලයක් මඟිනි
ඔබ තනි push buttons 16 ක් භාවිතා කර ඇත්නම්, ඒවා ක්රියාත්මක කිරීම සඳහා ඔබට ආදාන පින් 17 ක් (එක් එක් යතුර සඳහා එකක් සහ බිම් පින් එකක්) අවශ්ය වනු ඇත. කෙසේ වෙතත්, අනුකෘති සැකැස්ම සමඟ, ඔබට අවශ්ය වන්නේ පෑඩ් හරහා පරිලෝකනය කිරීමට මයික්රොකොන්ට්රෝලර් පින් 8 ක් (තීරු 4 ක් සහ පේළි 4 ක්) පමණි.
4×3 & 4×4 Membrane Keypad පින් පවතින ආකාරය
4 × 3 සහ 4 × 4 membrane keypad යේ පින් පවතින ආකරය පින්තුරය පහත පරිදි වේ.
යතුරු පෑඩ් ක්රියා කරන්නේ කෙසේද සහ ඒවා පරිලෝකනය කරන්නේ කෙසේද?
මෙය වැඩ කරන මූලධර්මය ඉතා සරලය. බොත්තමක් එබීමෙන් පේළි රේඛා වලින් එකක් හා තීරු රේඛා වලින් එකක් සම්බන්ධ වී ඒවා අතර විදුලි ධාරාවක් ගලා යාමට ඉඩ සලසයි. උදාහරණයක් ලෙස, යතුර ‘4’ එබූ විට, 1 තීරුව සහ 2 පේළිය එකිනෙකට සම්බන්ධ වේ.
බොත්තම් එබූ විට microcontroller එක මගින් එක හදුනා ගනී. මෙය සිදු කිරීම සඳහා, එය පහත ක්රියා පටිපාටිය අනුගමනය කරයි.
මයික්රොකොන්ට්රෝලර් මගින් සියලු තීරු සහ පේළි රේඛා ආදාන (INPUT) ලෙස සකසයි.
|
ඉන්පසු එය එක් පේළියක් ගෙන එය HIGH ලෙස සකසයි.
|
ඊට පසු, එය වරකට තීරු රේඛා පරීක්ෂා කරයි.
තීරු සම්බන්ධතාවය LOW ලෙස පවතී නම්, පේළියේ බොත්තම ඔබා නැත. |
එය HIGH වුනොත්, මයික්රොකොන්ට්රෝලර් දන්නවා කුමන පේළිය HIGH ලෙස සකසා ඇත්ද සහ පරීක්ෂා කරන විට කුමන තීරුවද HIGH සැකසි ඇත්ද යන්න.
අවසාන වශයෙන්, හඳුනාගත් පේළියට සහ තීරුවට අනුරූප වන බොත්තම එබූ බව එය දනී. |
දැන් ඔබ membrane keypad ගැන සියල්ල දන්නා නිසා අපට එය ආර්ඩුයිනෝ සමඟ සම්බන්ධ කිරීම ආරම්භ කළ හැකිය.
මෙය සම්බන්ධ කරන ආකාරය තරමක් සරලය. යතුරු පෑඩයේ පින් 1 සමඟ ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඩිජිටල් පින් 9 සමග සම්බන්ධ කිරීමෙන් ආරම්භ කරන්න. දැන් 2 සමඟ 8, 3 සමඟ 7 වැනි වම් පසින් සම්බන්ධ කිරීම දිගටම කරගෙන යන්න. සම්බන්ධ කර ඇති ආකාරය පහත දැක්වේ.
කුමන කි එක එබුවේද යන්න තීරණය කිරීම සඳහා, අපි අඛණ්ඩව පේළි සහ තීරු පරිලෝකනය (scan) කළ යුතුය. වාසනාවකට මෙන්, Keypad.h ලියා ඇත්තේ මෙම අනවශ්ය සංකීර්ණතාව මගහරවා ගැනීම සඳහා වන අතර එමඟින් කුමන යතුර එබුවේ දැයි දැන ගැනීමට සරල විධානයන් නිකුත් කළ හැකිය.Keypad Library එක ඉන්ස්ට්රොල් කිරිම
Library එක ඉන්ස්ටෝල් කර ගැනීම සදහා Sketch > Include Library > Manage Libraries වෙත යන්න. Library Manager එක මගින් libraries වල විස්තර ටික බාගත කරන තෙක් මද වේලාවක් බලා සිටින්න.
සර්ච් බොක්ස් එකේ ‘Keypad’ ලෙස ටයිප් කරන්න. එවිට එයට අදාලව libraries කිහිපයක් පෙන්නුම් කෙරේ. මාර්ක් ස්ටැන්ලි, ඇලෙක්සැන්ඩර් බ්රෙවිග් විසින් නිර්මණය කරන ලද Library එක එම ලැයිස්තුවේ දැක ගත හැකිය. එම ප්රවේශය මත ක්ලික් කරන්න, පසුව Install තෝරන්න.
Sketch 1.1 – Example Code 1 for 4×3 Keypad
4 × 3 සහ 4 × 4 membrane keypad ක් සහිත යතුරු එබීම් හඳුනා ගන්නේ කෙසේද යන්න පිළිබඳ සම්පූර්ණ අවබෝධය පහත දැක්වෙන ප්රෝග්රෑම් එක මඟින් ලබා දෙනු ඇති අතර වඩාත් ප්රායෝගික අත්හදා බැලීම් සහ ව්යාපෘති සඳහා භවිතා කර හැකි පරිදි එය නිර්මාණය කර ඇත.
#include <Keypad.h> const byte ROWS = 4; //four rows const byte COLS = 3; //three columns char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte colPins[COLS] = {5, 4, 3}; //connect to the column pinouts of the keypad //Create an object of keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey();// Read the key // Print if key pressed if (key){ Serial.print("Key Pressed : "); Serial.println(key); } }
Sketch 1.2 – Example Code 1 for 4×4 Keypad
#include <Keypad.h> const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad //Create an object of keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey();// Read the key // Print if key pressed if (key){ Serial.print("Key Pressed : "); Serial.println(key); } }
serial monitor තුළ ප්රතිදානය පෙන්වන ආකාරය පහත දැක්වේ.
Code එක පැහැදිලි කිරීම:
ඉහත ප්රෝග්රෑම් එක ආරම්භ වන්නේ Keypad.h library ඇතුළත් කිරීමෙන් සහ ඔබ භාවිතා කිරීමට කැමති යතුරු පෑඩයේ පේළි සහ තීරු ගණන හදුන්වා දීමෙනි.
ඊළඟට, යතුරුපෑඩයේ විශේෂිත බොත්තමක් එබූ විට මුද්රණය කළ යුතු අක්ෂර සහිත 2-dimensional array එක [ROWS] [COLS] නිවැරදි ලෙස අර්ථ දැක්විය යුතුය.
මෙම ප්රෝග්රෑම් එකේදී, යතුරු පෑඩයේ දිස්වන ආකාරයටම අක්ෂර සකසා ඇත. නමුත් ඇත්ත වශයෙන්ම ඔබට මේවා ඔබට අවශ්ය ඕනෑම ආකාරයකට සකස් කළ හැකිය. උදාහරණයක් ලෙස, ඔබ කැල්කියුලේටර එකක් නිර්මාණය කිරීමේ ව්යාපෘතියක් කිරීමට අදහස් කරන්නේ නම්, ඔබ මේ සඳහා අදාල අංක හා සංකේත භාවිතා කල හැකිය.
char keys[ROWS][COLS] = { {'1','2','3','4'}, {'5','6','7','8'}, {'9','0','+','-'}, {'.','*','/','='} };
ඊළඟට, අපි යතුරු පෑඩ් library එකට අදාලව වස්තුවක්(Object) නිර්මාණය කරමු.
Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS )
මේ සඳහා පරාමිති(Parameters) පහක් භාවිත කරයි.
- makeKeymap(keys) අභ්යන්තර යතුරු සිතියම පරිශීලක විසින් අර්ථ දක්වා ඇති යතුරු සිතියමට සමාන වන ලෙස ආරම්භ කරයි.
- rowPins සහ colPins යනු යතුරු පෑඩයේ පේළි සහ තීරු සම්බන්ධ කර ඇති ආර්ඩුයිනෝ බෝර්ඩ් එකේ පින්ය.
- ROWS සහ COLS යනු යතුරු පෑඩයේ පේළි සහ තීරු ගණනයි.
යතුරු පෑඩ් වස්තුවක් නිර්මාණය කළ පසු, getKey(). ෆන්ෂන් එක යොදා ගෙන මොන කී එකද ඔබා ඇත්තේද කියා ලබා ගැනීමට පුලුවන.
Keypad library ඇති අනෙකුත් වැදගත් functions
Keypad object සමඟ ඔබට භාවිතා කළ හැකි ප්රයෝජනවත් කාර්යයන් කිහිපයකට යොදාගත හැකි තවත් ෆන්ෂන් කිහිපයක් තිබේ. ඒවායින් කිහිපයක් පහත ලැයිස්තු ගත කර ඇත:
- char waitForKey() යමෙකු යතුරක් එබෙන තුරු රැඳී සිටින්න. අවවාදයයි – යතුරක් එබෙන තෙක් එය අනෙක් සියලුම කේත අවහිර කරයි. ඒ කියන්නේ LED දැල්වීම, LCD තිර යාවත්කාලීන කිරීම්, බාධා කිරීම් හැර වෙනත් කිසිවක් නැත.
- KeyState getState() Returns. ඕනෑම යතුරු වල වත්මන් තත්වය. IDLE, PRESSED, RELEASED සහ HOLD යන තත්ව හතර වේ.
- boolean keyStateChanged() යතුර එක් තත්වයකින් තවත් තත්වයකට වෙනස් වූ විට දැන ගැනීමට මෙය යොදා ගනී. උදාහරණයක් ලෙස, වලංගු යතුරක් පරීක්ෂා කිරීම වෙනුවට යතුරක් එබූ විට ඔබට පරීක්ෂා කළ හැකිය.
- setHoldTime(unsigned int time) යතුරක් ඔබා ගෙන් සිටින කාලය මිලි තත්පර වලින් ගණනය කිරීමට යොදා ගනී.
- setDebounceTime(unsigned int time) යතුරුපෑඩය නව යතුරු එබීම / යතුරු ඔබා ගෙන් සිටිම තෙක් බලා සිටින මිලි තත්පර ගණන සකසයි.
- addEventListener(keypadEvent) යතුරු පෑඩ් එක භාවිතා කරන විට යම් ක්රියාදාමයක් ආරම්භ කරයි.