යමෙකු බෝම්බයක් අක්රීය කිරීමේ සිදුවීම් මාලාවන් චිත්රපට වල ඔබ කී වතාවක් දුටුවාද? එහිදී ඔබට දැකගන්න පුලුවන්, වීරයා එහි දර්ශනය නරඹන්නේ කාලය ගතවන විටය, සෑම තත්පරයක්ම පෙර තත්පරයට වඩා වටින බව හා එය සිදු කර යුතු කාලය එහි දැක්වේ. චිත්රපටවල ඇති සියලුම බෝම්බ වලට seven-segment දර්ශක භාවිතා කර ඇත. එය එසේ විය යුතුයි. එසේ නොමැති නම්, චිත්රපටියේ වීරයාට තමාට තව කොපමණ කාලයක් ඉතිරි වී ඇත්දැයි ගන්නට ක්රමයක් නොමැත.
seven-segment දර්ශක යොදාගෙන සංඛ්යා පෙන්වීම වඩාත්ම ප්රායෝගික ක්රමයයි. සීමිත ආලෝක තත්ත්වයන් සහ ශක්තිමත් හිරු එළිය යන දෙකෙහිම ඒවා භාවිතා කිරීමට පහසුය, පිරිවැය ඉතා ලාබදායී වේ. ඒ වගේම හොද ඉහළ කියවීමක් ලබාගත හැකි ය.
Seven-segment සංදර්ශකයක් භාවිතා කරන සිදුවීමකට හොදම උදාහරණයක් වන්නේ ෆ්ලොරිඩාවේ කේප් කැනවරල් හි ප්රසිද්ධ ගණන් කිරීමේ ඔරලෝසුවයි. එය නාසා ඇපලෝ මෙහෙයුමෙදී රොකට් එක ගොඩබෑම සඳහා භාවිතා කළේය.
7-Segment දර්ශකයක් Arduino සමග සම්බන්ධ කිරීම.
Photo credit: NASA/Jim Grossmann
අවශ්යය උපාංග
7-segment දර්ශක යනු ඇත්ත වශයෙන්ම විශේෂිත රටාවකින් පෙළ ගැසී ඇති LED හතක් පමණි. එනම් මෙම LED 8 භාවිතා කර අප සැවොම දන්නා ‘8’ හැඩය ආකාරයට මෙය පෙළ ගස්වා ඇත. සෑම LED හතක්ම ඛණ්ඩයක්(digit) ලෙස හැඳින්වේ. මන්දයත් එම කොටස ආලෝකමත් වන විට සංඛ්යාත්මක ඉලක්කම්වල කොටසක් (දශම හා හෙක්ස්) දර්ශනය වන බැවිනි. තිතක් ලෙස පවතින 8 වන LED එක සමහර විට දශම ලක්ෂයක් දැක්වීම සඳහා භාවිතා කරයි.
දර්ශකයේ ඇති LED හතෙන් සෑම එකක්ම නියමිත ලෙස ස්ථානගත කොට ඇති අතර එහි එක් සම්බන්ධක සෘජුකෝණාස්රාකාර ප්ලාස්ටික් ආවරණයෙන් පිටතට යොමු කර ඇත. එහි පින් එක් එක් LED නියෝජනය කරමින් a සිට g දක්වා ලේබල් කර ඇත. අනෙක් පින් එකට පොදු වයරයක්(Common) සම්බන්ධ කිරීමට හැකි පරිදි සකසා ඇත.
දර්ශකයේ යම් කොටසක් සක්රීයව හා අක්රීයව කිරීම සඳහා, ඔබ සාමාන්ය LED එකකට මෙන් සුදුසු ලෙස HIGH හෝ LOW අගයක් භාවිතා කළ හැකිය. එවිට එම කොටස් වලට අදාල LED දැල්වෙන අතර අනෙක් ඒවා නිවී පවතිනු ඇත. එමගින් දර්ශකයේ අපේක්ෂිත අක්ෂර රටාව ජනනය කිරීමට ඉඩ සලසයි. මෙමඟින් 0 සිට 9 දක්වා දශම ඉලක්කම් දහය එකම 7-segment display එකෙහි ප්රදර්ශනය කිරීමට අපට ඉඩ සලසයි.
7 Segment දර්ශක වල පින් තිබෙන ආකාරය
දැන් අපි පින් පවතින ආකාරය විමසා බලමු. එවිට කුමන කොටස් ආලෝකමත් කරන්නේ කුමන කොටස් නිවා තබන්නේද යන්න අපට දැන ගැනීමට හැකියි. 7-segment දර්ශක සඳහා වන පින්තුරය වම් පස දැක්වේ.
a-g & DP පින්, එනම් a, b, c, d, e, f, g සහ DP ඛණ්ඩය (දශම ලක්ෂ්යය) ආර්ඩුයිනෝ හි ඩිජිටල් පින් සමඟ සම්බන්ධ වේ. සම්බන්ධිත කොටසේ එක් එක් LED පාලනය කිරීමෙන් අංක පෙන්විය හැකිය.
COM පින් 3 සහ 8 පොදු සම්බන්ධකයක් සෑදීම සඳහා අභ්යන්තරව සම්බන්ධ වේ. දර්ශකයේ වර්ගය අනුව මෙම පින් එක GND (පොදු කැතෝඩය) හෝ 5V (පොදු ඇනෝඩය) සමඟ සම්බන්ධ කළ යුතුය.
පොදු කැතෝඩ(CC) සහ පොදු Anode(CA) ආකාරය
පොදු කැතෝඩයක් සහිත (CC) සහ පොදු ඇනෝඩයක් සහිත (CA) ලෙස Seven segment දර්ශක වර්ග දෙකකි. මෙම වර්ග දෙකේම අභ්යන්තර ව්යුහය සමාන වේ. වෙනස වන්නේ LED වල ධ්රැවීයතාව සහ පොදු පින් එක ලෙස පවතින පින් එකයි. ඒ අනුව පොදු කැතෝඩයේ LED කොටස් 7 හි සියලුම කැතෝඩ සමග එකට සම්බන්ධ වී ඇති අතර පොදු ඇනෝඩයේ LED වල සියලුම ඇනෝඩ කොටස් 7 සමග එකට සම්බන්ධ වේ..
පොදු කැතෝඩ සංදර්ශකය තුළ, LED කොටස් වල සියලුම කැතෝඩ සම්බන්ධතා ‘තාර්කික 0’ / GND සමඟ සම්බන්ධ වේ. තනි ඇනෝඩ පර්යන්ත (a-g) වෙත HIGH / ’logic 1’ ලෙස සිග්නල් ලබාදීමෙන් අදාල LED තනි කොටස් ආලෝකමත් වේ.
Common Cathode 7 Segment Working |
පොදු ඇනෝඩ සංදර්ශකය තුළ, LED කොටස් වල සියලුම ඇනෝඩ සම්බන්ධතා “1” හෝ 5V තර්කනයට සම්බන්ධ වේ. එක් එක් කොටසේ (a-g) කැතෝඩයට GND හෝ තර්කනය “0” හෝ “LOW”” සිග්නල් ලබාදීමෙන් එයට අදාල LED තනි කොටස් ආලෝකමත් වේ.
Common Anode 7 Segment Working |
7 Segment දර්ශක ක්රියා කරන ආකාරය
මෙහි සිදුවන්නේ පෙන්විය යුතු දශම සංඛ්යා අනුව, විශේෂිත LED බල්බ කට්ටලය ආලෝකමත් විමයි. උදාහරණයක් ලෙස, අංක 4 පෙන්වීම සඳහා, අපට b, c, f සහ g වලට අනුරූප වන LED බල්බ හතරක් ආලෝකමත් කිරීමට අවශ්ය වේ. මේ අනුව ‘0 සිට 9’ දක්වා විවිධ ඉලක්කම් සහ ‘A සිට F’ දක්වා අක්ෂර 7 Segment දර්ශකයක් භාවිතා කර පෙන්විය හැක.
පහත සත්යතා වගුවට පහළින් ඉලක්කම් සහ අක්ෂර නිපදවීම සඳහා ආලෝකමත් කළ යුතු තනි LED කොටස් මොනවද යන්න පෙන්වයි. පොදු ඇනෝඩ 7-segment දර්ශකය සඳහා සත්යතා වගුව පොදු කැතෝඩ 7-segment දර්ශනයට හරියටම ප්රතිවිරුද්ධ බව කරුණාවෙන් සලකන්න.
7-segment දර්ශකයක් ක්රියා කරන ආකාරය පිළිබඳ දැන් ඔබට හොද අවබෝධයක් ඇති බැවින්, දැන් ඔබට එය ආර්ඩුයිනෝ බෝර්ඩ් එකක් හා සමග සම්බන්ධ ආරම්භ කළ හැකිය.
කොටස් 7 කින් යුත් දර්ශකය ඔබේ breadboard පුවරුවට සම්බන්ධ කරන්න, දර්ශකයේ සෑම පැත්තක්ම breadboard පුවරුවේ වෙනම පැත්තක ඇති බව සහතික කරන්න. වම්පස රූපයේ දැක්වෙන පරිදි දශම ලක්ෂ්යය පහළට මුහුණලා ඇති විට, පහළ පැත්තේ 1-5 දක්වා පින් වමේ සිට දකුණට ද, ඉහළ පැත්තේ 10-6 දක්වා පින් වමේ සිට දකුණට වේ.
මුලින්ම අපි 3 හෝ 8 පොදු පින් Arduino බෝර්ඩ් එකෙහි 5V පින් එකට සම්බන්ධ කරමු (ඔබ පොදු ඇනෝඩ 7-segment දර්ශකයක් භාවිතා කරන්නේ නම්). එසේ නොමැතිනම් ඔබ යොදා ගන්නේ පොදු කැතෝඩයක් සහිත 7-segment දර්ශකයක් නම් Arduino බෝර්ඩ් එකෙහි GND pin සමග සම්බන්ධ වේ.. ඉහළ ස්ථානයේ ඉතිරි පින් 4 Arduino බෝර්ඩ් එකෙහි ඩිජිටල් පින් 2 සිට ඩිජිටල් පින් 5 දක්වා සම්බන්ධ කර ඇත. දශම ලක්ෂයක් සහිත පහළ ස්ථානයේ ඇති අනෙක් පින් 4 ඩිජිටල් පින් 6 සිට 9 දක්වා සම්බන්ධ වේ.
ඔබ පරිපථය නිවැරදිව සම්බන්ධ කර අවසන් වූ පසු පහත රූපසටහනට සමාන විය යුතුය.
පරිපථ සැකැස්ම
Hardware connection |
පොදු ඇනෝඩ Seven Segment දර්ශකය ආර්ඩුයිනෝ UNO බෝර්ඩ් එකක් සමග සම්බන්ධ කිරීම. |
පොදු කැතෝඩ Seven Segment දර්ශකය Arduino UNO බෝර්ඩ් එකක් සමග සම්බන්ධ කිරීම. |
දැන්, අපි යම් කේතනය කර දර්ශකය ආලෝකමත් කරන ආකරය බලමු.
Sketch 14.1
7-segment දර්ශක පාලනය කිරීම සඳහා ඔබ ප්රෝග්රෑම් ලිවීම ආරම්භ කිරීමට පෙර, මුලින්ම SevSeg ආර්ඩුයිනෝ Library එක ඩවුන්ලෝඩ් කර ගත යුතුය. Gihub.com එකේ තිබෙන GitHub repo වෙත ගොස් Library එක කෙලින්ම ඩවුන්ලෝඩ් කරගත හැකිය. නැතහොත් zip ෆයිල් එකක් ලෙස බාගත කිරීම කර ගත හැකිය.
GitHub repo : https://github.com/DeanIsMe/SevSeg |
|
Download Zip file : https://github.com/DeanIsMe/SevSeg/archive/master.zip |
එය ඉන්ස්ට්රොල් කිරීම සඳහා, Arduino IDE එක විවෘත කර, Sketch> Includ Library> Add .ZIP Library වෙත ගොස්, ඔබ ඩවුන්ලෝඩ් කළ SevSeg ZIP ගොනුව තෝරන්න. ඔබට Arduino IDE එකට Library ක් ඉන්ස්ටෝල් කිරීම. පිලිබදව වැඩි විස්තර දැනගැනීමට අවශ්යය නම් මෙම වෙබ් පිටුව වෙත පිවිසෙන්න https://www.arduino.cc/en/Guide/Libraries
ඔබ library එක ඉන්ස්ටෝල් කළ පසු, ඔබට මෙම ප්රෝග්රෑම් එක Arduino IDE වෙත පිටපත් කළ හැකිය. පහත දැක්වෙන ප්රෝග්රෑම් එකෙන් සිදුවන්නේ 0 සිට 9 දක්වා අංක එකිනෙක දිස්වීමයි. ඉන්පසු අපි එය සිදුවන ආකරය විස්තරාත්මකව සලකා බලමු.
#include "SevSeg.h" // import SevSeg Library SevSeg sevseg; // Create Object for SevSeg Library void setup() { //Set to 1 for single digit display byte numDigits = 1; //defines common pins while using multi-digit display. Left empty as we have a single digit display byte digitPins[] = {}; //Defines arduino pin connections in order: A, B, C, D, E, F, G, DP byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9}; bool resistorsOnSegments = true; //Initialize sevseg object. Uncomment second line if you use common cathode 7 segment sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments); //sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments); sevseg.setBrightness(90); } void loop() { //Display numbers one by one with 2 seconds delay for(int i = 0; i < 10; i++) { sevseg.setNumber(i); sevseg.refreshDisplay(); delay(2000); } }
Code එක පැහැදිලි කිරීම
7-segment දර්ශකයක් පාලනය කිරීම පහසුවෙන් සිදු කර ගැනීම සදහා SevSeg library සක්රීය කිරීමෙන් මෙම ප්රෝග්රෑම් එක ආරම්භ වේ. ඊළඟට අපට ප්රෝග්රෑම් එක පුරාම භාවිතා කළ හැකි SevSeg වස්තුවක් (object) නිර්මාණය කළ යුතුය.
#include "SevSeg.h" // import SevSeg Library SevSeg myDisplay; // Create Object for SevSeg Library
ඊළඟට, දර්ශකය සතුව ඉලක්කම් කීයක් තිබේද යන්න සඳහන් කළ යුතුය. අපි තනි ඉලක්කම් දර්ශකයක් භාවිතා කරන බැවින්, අපි එය 1 ලෙස සකසමු. ඔබ ඉලක්කම් 4 ක සංදර්ශකයක් භාවිතා කරන්නේ නම්, මෙය 4 ලෙස සකසන්න.
//Set to 1 for single digit display byte numDigits = 1;
digitPins array එක සරලවම බහු-සංඛ්යා සහිත දර්ශකයක් භාවිතා කරන විට ‘common pins’ අර්ථ දක්වයි. ඔබට තනි ඉලක්කම් සංදර්ශකයක් භවිතා කරනවා නම් එය හිස්ව තබන්න. එසේ නොමැතිනම්, තනි ඉලක්කම්වල ‘‘common pins’ සම්බන්ධ කර ඇති ආර්ඩුයිනෝ බෝර්ඩ් එකේ සම්බන්ධ කර ඇති පින් එකෙහි අංකය ලබා දෙන්න. එහිදි අංක වමේ සිට දකුණට ලබා දෙන්න.
//defines common pins while using multi-digit display //Left empty as we have a single digit display byte digitPins[] = {};
ඊලගට අප දකින දෙවන array එක වන්නේ segmentPins array එකයි. මෙය LED දර්ශකයේ කොටස් පාලනය කිරීමට සම්බන්ධ කර ඇති ආර්ඩුයිනෝ බෝර්ඩ් එකේ පින් අංක පෙළ ඇතුලත් කර ඇත. ඉතින් මේ අවස්ථාවේ දී අපි අදාල පින් breadboard පුවරුවේ සිට Arduino බෝර්ඩ් එක වෙත කෙලින්ම සම්බන්ධ කළෙමු. A, B, C, D, E, F, G, DP. ලෙස අනුපිළිවෙලට පින් ඇති බවට library එක මගින් උපකල්පනය කරන බැවින් මේවා ද නිවැරදි පිළිවෙලට තැබිය යුතුය.
//Defines arduino pin connections in order: A, B, C, D, E, F, G, DP byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
මෙම විචල්යයන් නිර්මාණය කිරීමෙන් පසුව, අපි ඒවා begin() ෆන්ෂන් එක භාවිතයෙන් SevSeg හි පැරාමීටර්ස් 5 ක් තිබෙන අතර එය constructor එක වෙත යවමු.
//Initialize sevseg object sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
loop කොටසේ: ‘for’ ලූප් සහ විචල්ය ‘i’ භාවිතා කරමින් වැඩසටහන 0 සිට 9 දක්වා ගණන් කිරීමට පටන් ගනී. සෑම අවස්ථාවකදීම, එය දර්ශකය වෙත අංකය සැකසීමට SevSeg library එකේ setNumber() ෆන්ෂන් එක සහ refreshDisplay() ෆන්ෂන් එක භාවිතා කරයි.
loop කොටසේ ඇති delay එකෙහි අගය වැඩි කර විට ඊළඟ අංකය පෙන්වීමට පෙර යම් ප්රමාදයක් ඇති කිරීමට පුලුවන්.
for(int i = 0; i < 10; i++) { sevseg.setNumber(i); sevseg.refreshDisplay(); delay(1000); }
Rolling Dice
7-segment දර්ශකය පිළිබදව තවත් හොදින් අවබෝධ කර ගැනීම සදහා තවත් ව්යාපෘතියක් වෙත අවධානය යොමු කරමු. මෙහිදී සිදුවන්නේ බොත්තම එබු විට යම් අංකයක් තිරයේ දිස් වීමයි. Yahtzee, ludo වැනි ක්රීඩා කිරීමට ඔබට මෙය භාවිතා කළ හැකිය. අපි ඉක්මන් රැන්ඩම් නම්බර් එකක් ලබා ගැනීම සඳහා ස්විචයක් භාවිතා කරන කරයි. එය පහත පරිදි ආර්ඩුයිනෝ බෝර්ඩ් එක හා සම්බන්ධ කරනු ලැබේ.
අවශ්යය උපාංග
පරිපථ සැකැස්ම
Hardware connection Rolling Dice Arduino Project – Wiring Common Anode Seven Segment Display to Arduino UNO |
1 සිට 6 දක්වා සංඛ්යාවක් අහඹු ලෙස පැමිණීමට ක්රමයක් සැදීම මෙම ප්රෝග්රෑම් එකේ සමස්ත අරමුණයි. තවද අහඹු අංකයක් ලබා ගත හැකි හොඳම ක්රමය වන්නේ ගොඩනඟන ලද random(min,max) ෆන්ෂන් එක භාවිතා කිරීමයි. මෙයට පරාමිති(parameters) දෙකක් ලබා දිය යුතුය, පළමුවැන්න සසම්භාවී අගයේ පහළ සීමාව (මෙම අංකය ද ඇතුළුව) සහ දෙවන පරාමිතිය සසම්භාවී අගයේ ඉහළ සීමාව නියම කරයි. (මෙම අංකය හැර). එය ලබා දුන් පසු ලබා දුන් උපරිම අගය -1 (max-1) හා අවම අගය (min) අතර අහඹු අංකය ජනනය වේ.
#include "SevSeg.h" // import SevSeg Library SevSeg sevseg; // Create Object for SevSeg Library const int buttonPin = 10; // the number of the pushbutton pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup(){ byte numDigits = 1; byte digitPins[] = {}; byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9}; bool resistorsOnSegments = true; sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments); sevseg.setBrightness(90); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { sevseg.setNumber(random(1,7)); sevseg.refreshDisplay(); } }