Arduino Lesson 07 – Analog Digital Conversion

ADC – Analog Digital Conversion

ADC (Analog to Digital Convertors) භාවිතා කරන්නේ Analog Singal එකක් Digital Signal එකකට පරිවර්තනය කර ගැනීමටයි. ආර්ඩුයිනෝ වල තියෙන conrol chip එකක මෙම ෆන්ෂන් එක අන්තර්ගත කර තිබේ.දැන් අපි එය භාවිතා කරන්නේ කොහොමද කියලා විමසා බලමු.

පරිපථ සම්බන්ධ දැනුම

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 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 එක කරකවන විට එම අගයන්ගේ වෙනස් වන ආකාරය දැක ගත හැකියි.

විචල්‍යය ප්‍රතිරෝධකයක් මගින් LED පාලනය කිරීම.

පෙර පාඩමේ අපි ADC අගයක් ලබාගෙන එය වෝල්ටීයතා අගයකට පරිවර්තනය කරන විදිහ ගැන විමසා බැලුවෙමු. දැන් එම වෝල්ටීයතා අගයන් යොදාගෙන LED එකක දීප්තිය පාලනය කිරීම පිලිබඳ විමසා බලමු.

අවශ්‍යය උපාංග

පරිපථ සැකැස්ම

මෙහිදී Arduino UNO බෝර්ඩ් එකේ  A0 port එක වෝල්ටීයතාව ලබා ගැනීමට හා D9 port එක LED එක පාලනයට යොදා ගනී.

Schematic diagram

Hardware connection

Sketch 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 එකේ දීප්තිය වෙනස් වීම ඔබට දැක ගත හැකිය.

ආලෝක සන්වේදී ප්‍රතිරෝධක මගින් LED පාලනය කිරීම.

පෙර පාඩම් වලදී අපි ADC අගයන් කියවීම සහ එමගින් LED බල්බවල  දීප්තිය වෙනස් කිරීම විමසා බැලුවෙමු. තවද potentiometer එක වගේම Analog Output ලබාදෙන components ගොඩක් අපට හමුවේ. විශේෂයෙන් බොහෝ sensors වලින් අපට ලැබෙන්නේද Analog Output වේ. අපි දැන් ආලෝක සන්වේදී ප්‍රතිරෝධයකින් LED light එකක දීප්තිය මැනගන්නේ කොහොමද කියල බලමු.

අවශ්‍යය උපාංග

උපාංග පිලිබද දැනුම

Photoresistor

Photoresistor එකක් කියන්නේ ආලෝකයට සංවේදී ප්‍රතිරෝධකයකි. එනම් වෙනස් ආලෝක තීව්රතාවන් වලින් ආලෝකය ආලෝක සංවේදී  ප්‍රතිරෝධකය මතට වැටෙන විට එයට අනුව එහි ප්‍රතිරෝධය වෙනස් වේ. එම අගයන් ආලෝක තීව්රතාව හඳුනා ගැනීමට භාවිත කල හැකිය. ආලෝක සංවේදී   ප්‍රතිරෝධකයක් හා එහි පරිපථ සටහන පහත දැක්වේ. පහත පරිදි පරිපථයක් සාමාන්‍යයෙන් ආලෝක සංවේදී  ප්‍රතිරෝධක භාවිතයේදී යොදා ගැනේ.

පහත පරිපථයේ ආලෝක තීව්රතාව වෙනස් වන විට ආලෝක සංවේදී  ප්‍රතිරෝධකයෙහි ප්‍රතිරෝධය R1 වෙනස් වේ. එයට අනුරූපව එහි දෙපස වෝල්ටීයතාව වෙනස් වේ. එම වෝල්ටීයතාව මැනීමෙන් අපට ආලෝකයේ තීව්රතාව ලබා ගත හැකිය.

පරිපථ සැකැස්ම

මෙහිදී A0 පින් එක ආලෝක සංවේදී  ප්‍රතිරෝධකයෙහි වෝල්ටීයතාව හඳුනා ගැනීමට භාවිත කරන අතර D9 පින් එක එක LED එක පාලනයට භාවිතා කරයි.

Schematic diagram

Hardware connection

Sketch 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 භාවිතා කරන විදිය පිලිබඳ.

විචල්‍යය ප්‍රතිරෝධකයක් මගින් RGB LED පාලනය කිරීම.

අවශ්‍යය උපාංග

උපාංග පිලිබද දැනුම

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 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 එකේ දීප්තිය හා ආලෝකය වෙනස් වීම ඔබට දැක ගත හැකිය.

RGB LED මගින් විවිධ වර්ණ ලබාගැනීම කිරීම.

පෙර කොටසේ අපි විචල්‍යය ප්‍රතිරෝධකය (potentiometer)  භාවිතා කර LED එකේ දීප්තිය හා වර්ණය වෙනස් කරන ලදී. දැන් RGB LED එක ස්වයංක්‍රීයව වර්ණවත් කරන අකාරය විමසා බලමු.

අවශ්‍යය උපාංග

පරිපථ සැකැස්ම

LED එක පාලනයට arduino එකේ D9, D10 සහ D11 පින් මෙහිදී භාවිතා කරයි.

Schematic diagram

Hardware connection

Sketch 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 එකේ දීප්තිය වෙනස් වේ.

Leave a Reply

Your email address will not be published. Required fields are marked *

Index