මොකක්ද මේ Processing කියන්නේ ?



ආර්ඩියුනෝ කියන්නේ මොකක්ද කියලා නොදන්න කෙනෙක් නැති තරම් දැන් ආර්ඩියුනෝ ජනප්‍රියයි. මේ ආර්ඩියුනෝ වල ලගම ඥාතියෙක් කියලා හදුන්වන්න පුළුවන් මෘදුකාංගයක් තමයි Processing කියන්නේ. ලොකු අයියා කිව්වොත් ගොඩක්ම නිවැරදියි. මොකද Processing පලමු සංස්කරණය නිකුත් කරලා තියෙන්නේ 2001 දී.

IDE එක, එහෙමත් නැත්නම් අතුරුමුහුණත ආර්ඩියුනෝ වලට ගොඩක්ම සමානයි. 




මේකත් Arduino වගේම Open Source මෘදුකාංගයක්. Processing වල නිල වෙබ් අඩවිය තමයි processing.org  මෙතනින් ඔයාලටත් නොමිලේම Processing මෘදුකාංගය Download කරගන්න පුලුවන්.




Processing කියන වචනයේ තේරුම "සකස් කිරීම" යි. මේ Processing වලින් කෙරෙන්නේත් ඒ වගේම දෙයක් තමයි. මේක වැඩිපුරම පාවිච්චි කරන්නේ ආර්ඩියුනෝ වගේ දෘඩාංග වලින් ලැබෙන දත්ත විශ්ලේෂණය කරන්නයි. ගොඩක් අය දැනටමත් C# වලින් Arduino සදහා පොඩි පොඩි වැඩසටහන් ලියනවා ඇති. එ් වගේ වැඩවලට මේ Processing පහසුවෙන්ම පාවිච්චි කරන්න පුලුවන්.


Communicate with Arduino

Arduino Examples අතර Communication කාණ්ඩයට අයිති Example කිහිපයකදිම මේ Processing භාවිතා වෙනවා.

මේ තියෙන්නේ ඒ වගේ උදාහරණයක්.

File > Examples > Communication > Physical Pixel

( වැඩි විස්තර :  http://www.arduino.cc/en/Tutorial/PhysicalPixel)

Arduino Code


const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // see if there's incoming serial data:
  if (Serial.available() > 0) {
    // read the oldest byte in the serial buffer:
    incomingByte = Serial.read();
    // if it's a capital H (ASCII 72), turn on the LED:
    if (incomingByte == 'H') {
      digitalWrite(ledPin, HIGH);
    }
    // if it's an L (ASCII 76) turn off the LED:
    if (incomingByte == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }
}




Processing Code


 import processing.serial.*;

 float boxX;
 float boxY;
 int boxSize = 20;
 boolean mouseOverBox = false;

 Serial port;

 void setup() {
 size(200, 200);
 boxX = width/2.0;
 boxY = height/2.0;
 rectMode(RADIUS);

 // List all the available serial ports in the output pane.
 // You will need to choose the port that the Arduino board is
 // connected to from this list. The first port in the list is
 // port #0 and the third port in the list is port #2.
 // if using Processing 2.1 or later, use Serial.printArray()
 println(Serial.list());

 // Open the port that the Arduino board is connected to (in this case #0)
 // Make sure to open the port at the same speed Arduino is using (9600bps)
 port = new Serial(this, Serial.list()[0], 9600);

 }

 void draw()
 {
 background(0);

 // Test if the cursor is over the box
 if (mouseX > boxX-boxSize && mouseX < boxX+boxSize &&
 mouseY > boxY-boxSize && mouseY < boxY+boxSize) {
 mouseOverBox = true;
 // draw a line around the box and change its color:
 stroke(255);
 fill(153);
 // send an 'H' to indicate mouse is over square:
 port.write('H');
 }
 else {
 // return the box to it's inactive state:
 stroke(153);
 fill(153);
 // send an 'L' to turn the LED off:
 port.write('L');
 mouseOverBox = false;
 }

 // Draw the box
 rect(boxX, boxY, boxSize, boxSize);
 }



Control Arduino from PC

Arduino Board එක USB Cable එක හරහා පරිගණකයට සම්බන්ධ කරලා පරිගණකයේ ඉදලා Processing වලින් Arduino Board එක කෙලින්ම මෙහෙයවන්නත් පුලුවන්.



Android App Developing

Processing අළුත්ම සංස්කරණයේ (Processing 3.2.1) Android app නිර්මාණය කිරීමේ පහසුකමත් ලබාදීලා තියෙනවා. Android SDK එක තියෙන ඕනම පරිගණකයකින් මේ Processing භාවිතා කරලා Android Apps හදන්න පුළුවන්. හැබැයි තාම මේ පහසුකම Beta අවස්ථාවෙයි තියෙන්නේ.




මේ ලිපියේ අරමුණ වුණේ Processing කියන්නේ මොකක්ද කියන එක ගැන කෙටි අදහසක් ලබාදීමයි. මෙතන සදහන් නොවුණ තව ගොඩක් දේවල් වලට Processing භාවිතයෙන් කරන්න පුළුවන්. Arduino වල වගේම Processing මෘදුකාංගයේත් File > Examples කොටසේ ගොඩක් උදාහරණ තියෙනවා. ඔයාලත් ඒවා කීපයක් උත්සාහ කරලා බලන්න.

 එහෙනම් මීළග ලිපියෙන් හමුවෙමු.










L298 Motor Drive IC




කලින් ලිපි 2 න් කථා කලේ මෝටරයක භ්‍රමණ දිශාව හා වේගය පාලනය කරන්න පාවිච්චි කරන උපක්‍රම ගැන. ඒ අනුව දැන් ඔයාලා H Bridge ගැනයි, PWM ගැනයි දන්නවා.

කියවලා නැත්නම් මෙතනින් ඒ ලිපි දෙක කියවලා බලන්න.

මේ ලිපියෙන් කථා කරන්නේ මෝටර පාලනයට බහුලවම පාවිච්චි කරන L298 කියන IC එක ගැනයි. මේක තමයි දැනට පහසුවෙන්ම හොයාගන්න පුළුවන් සහ වඩාත්ම සුදුසු IC එක. මේ IC එකේ බාහිර පෙනුම මේ වගෙයි. 

මේ සදහා L293 IC එකත් පාවිච්චි කරන්න පුළුවන්. ඒත් ඊට වඩා L298 IC එක හොදයි. වැඩි ධාරාවක් පාලනය කරන්න පුළුවන්. ඒ වගේම Heat Sink එකක් හයි කරන්න පුළුවන් නිසා රත්වීම පිලිබද බය වෙන්න ඕනත් නෑ.


Motor Drivers Modules ඕනතරම් වෙලදපොලේ ගන්න තියෙනවා. හැබැයි රොබෝටික්ස් හරියට ඉගෙනගන්න කැමති නම් තමන්ගේම Motor Drive එකක් හදාගන්න ඕන. ඒකෙන් ලැබෙන අත්දැකීම, කඩෙන් ඇරන් වයර් ටිකක් අමුණලා හදන රොබෝ කෙනෙක්ගෙන් ගන්න බෑ.


L298 IC



මේ තියෙන්නේ Pin Diagram එක. (වඩාත් විස්තරාත්මක datasheet එක මෙතනින් Download කරගන්න.)





මේ IC එකෙන් A හා B විදිහට මෝටර් 2 ක් පාලනය කරන්න පුළුවන්. හැම මෝටරයකටම වෙන් කරපු Pin 5 බැගින් තියෙනවා. මේවායින් 3 ක් පාවිච්චි වෙන්නේ විධාන ලබාදෙන්නයි. (Inputs විදිහට) ඉතිරි Pin 2 මෝටරය සවි කරන්නයි පාවිච්චි කරන්නේ. (Output විදිහට)




In1, In2, En, Out1, Out2  කියලා හදුන්වලා තියෙන්නේ මෝටර් 2ට වෙන වෙනම අයිති pins පොදුවේ හදුන්වන නම්. විස්තරකිරීම් වලදී මාත් පාවිච්චි කරන්නේ ඒ කෙටියෙදුම් කීපය තමයි.

Out 1, Out 2 කෙලින්ම මෝටරයට සම්බන්ධ වෙන්නේ. (හැබැයි කලින් ලිපියක කිව්වා වගේම ඩයෝඩ් දාන්න ඕන. නැත්නම් Circuit එකට හානි වෙන්න ඉඩ තියෙනවා.)

In 1, In 2 කියන අග්‍ර වලින් මෝටරය කැරකෙන්න ඕන දිශාව ගැන උපදෙස් දෙන්න පුළුවන්.



En අග්‍රය තමයි මෝටරය කැරකෙනවද නැද්ද කියලා තීරණය කරන්නේ. 
(In1, In2 පින් වලට පිලි‍වෙලින් 1,0 හෝ 0,1 සංඥා ලබාදුන්නත්, මේ En අග්‍රයට 1 සංඥාව ලැබෙනකම් මෝටරය වැඩ කරන්නේ නෑ)

  • En = 0 (0 v / logic Low) නම්, මෝටරය OFF
  • En = 1 (+5 v / logic High) නම් ‍මෝටරය ON

මෝටරය දිගටම කරකවන්න ඕන නම් මේක +5V ට සම්බන්ධ කරන්න. වේගය වෙනස් කරන්න බලාපොරොත්තු වෙනවා නම්, Arduino වල PWM pin එකකට සම්බන්ධ කරලා analogWrite() කරන්න පුලුවන්.

මෝටර් දෙකටම Current Sensing කියලා Pin එක බැගින් තියෙනවා. ‍මේක පාවිච්චි කරලා මෝටරයට යන ධාරාව ගණනය කරගන්න පුලුවන්. දැනට ඒ පහසුකම අවශ්‍ය වෙන්නේ නැති නිසා ඒ අග්‍රය Ground (0V) වලට සම්බන්ධ කරනවා. (කඩෙන් ගන්න තියෙන ගොඩක් Module වලත් මේ අග්‍රය පාවිච්චි වෙන්නේ නෑ.)



මේ L298 IC එක පාවිච්චි කරලා Motor Drive එකක් හදාගන්න විදිහ මම ඊළග ලිපියෙන් කියාදෙන්නම්.





PIC ගැන කෙටියෙන්



මේ දවස්වල හැමෝම වගේ Arduino Programming වලට කැමතියි. ඒකට හේතුව තමයි Arduino සරළ හා පහසු වීම. Arduino ජනප්‍රිය වෙන්න කලින් වැඩිපුරම පාවිච්චි වුණේ PIC කාණ්ඩයට අයිති Micro controllers. මේවා නිශ්පාදනය කරන්නේ Microchips කියන ආයතනයෙන්.

බාහිර පෙනුමෙන් නම් PIC IC ත් Atmel AT කාණ්ඩයේ IC වලට සමානයි. ප්‍රෝග්‍රෑමින් කරන විදිහ නම් ටිකක් වෙනස්. මේවා ප්‍රෝග්‍රෑම් කරන්න වෙනම උපකරණයක් ඕන. PIC KIT කියන උපකරණය තමයි ම‍ේ සදහා වැඩිපුරම පාවිච්චි වෙන්නේ. ක්‍රමලේඛන භාෂාව විදිහට C තමයි වැඩිපුරම පාවිච්චි වෙන්නේ. ඊට අමතරව Assemble Language පාවිච්චි කරන්න පුළුවන්. (Micro-controllers වැඩ කරන හැටි ඉගෙනගන්න ඕන නම් මේක තමයි ඒකට හොදම භාෂාව. ටිකක් අමාරුයි. හැබැයි මේක පුලුවන් කෙනාට C වගේ High Level language ඉගෙනගන්න එක කජු කනවා වගේ.)

මේ තියෙන්නේ PIC Kit 2 programmer එකක්.



මේ තියෙන්නේ PIC16F877A කියන PIC  IC එක.



මේ තියෙන්නේ මම හදපු PIC Development board එකක්.



(Arduino ආපු මුල්ම කාලේ වෙනකොට ලංකාවේ Arduino boards ගන්න තිබුනේ නෑ. තිබුණත් බොර්ඩ් එක රු.4000-5000 වගේ ගනන් වලටයි තිබුනේ. ඒ නිසා මම Arduino Board කොපි කරලා PIC වලටත් Board එකක් හැදුවා. අවාසනාවකට වගේ දැන් නම් මගේ ලග මේකේ PCB layout design එක නම් නෑ.)


PIC Programming ගැන ඉගෙනගන්න කැමති අයට, විදුසර පුවත්ප‍තේ මීට අවුරුදු 10 කට විතර කලින් පළවුණු   ලිපි මාලාව පරිශීලනය කරන්න පුළුවන්.




ම‍ෝටරයක වේගය පාලනය කරමු (PWM)




රොබෝ කෙනෙක් නිර්මාණය කරද්දී රොබෝගේ මෝටර්වල වේගය අඩු වැඩි කරන්න අවශ්‍ය වෙනවා. මේ ලිපියෙන් විස්තර කරන්නේ ඒ සදහා පාවිච්චි කරන්න පුළුවන් මූලධර්මයක් ගැනයි.

‍මෝටරයක් කැරකෙන වේගය, ඊට බාහිරව ලැබෙන වෝල්ටීයතාව අනුව තමයි මූලිකව රදාපවතින්නේ. මේ ප්‍රස්ථාරයෙන් ඒක පැහැදිලි වෙනවා. 




Vmax කියන්නේ මෝටරයක් පිච්චෙන්නේ නැතිව සපයන්න පුළුවන් උපරිම වොල්ටීයතාවයි. Vmin කියන්නේ මෝටරයක් කැරකෙන්න අවශ්‍ය කරන අවම වෝල්ටීයතාවයි.

සාමාන්‍ය ඇනලොග් පරිපථයක නම් අපිට අවශ්‍ය විචල්‍ය වෝල්ටීයතාවක් පහසුවෙන් හදාගන්න පුළුවන්. හැබැයි ඩිජිටල් පරිපථයක පාවිච්චි වෙන්නේ වෝල්ටීය අවස්ථා 2 ක් (High, Low) පමණක් නිසා අපිට ඕන වොල්ටීයතාවක් කෙලින්ම ලබාගන්න බෑ. ඉතින් මේකට පොඩි උපක්‍රමයක් පාවිච්චි කරන්න වෙනවා.

12 V බැටරියකින් මෝටරයක් කරකවන අවස්ථාවක් සලකමු.



12 V දිගටම ලබාදුන්නොත් මෝටරය එහි උපරිම වේගයෙන් කැරකෙනවා. දෙවන සටහනේ විදිහට කඩින් කඩ විදුලිය ලබාදෙන අවස්ථාවක් සලකමු. මෝටරයට 12 V, ලබාදුන්නාම මෝටරය කැරකෙන්න පටන්ගන්නවා. හැබැයි මෝටරය එහි උපරිම වේගයට එන්න කලින් ආයෙත් විදුලි බලය කපා හැරෙනවා. ඒ නිසා ආයෙත් වේගය අඩු වෙනවා. හැබැයි සම්පූර්ණයෙන්ම අඩුවෙන්න කලින් ආයෙත් විදුලිය ලැබෙන නිසා ආයෙත් වේගය වැඩි වෙනවා. මේ ක්‍රියාවලිය ඉතා වේගයෙන් සිදුකලොත් මෝටරයේ වේගය අඩු වැඩිවීම අපිට නොදැනෙන තරම් ඉක්මණින් සිදුවෙනවා. ඒ නිසා මෝටරය නියත වේගයකින් කැරකෙනවා වගේ පේනවා.

මෝටරය කැරකෙන වේගය තීරණය වෙන්නේ ඊට වෝල්ටීයතාව ලැබෙන හා නොලැබෙන කාල අතර අනුපාතය අනුවයි. උදාහරණයක් විදිහට මේ කාල අනුපාතය 1:1 නම් මෝටරය කැරකෙන්නේ එහි උපරිම වේගයෙන් 50% ක වේගයකින්. අනුපාතය 2:3 නම්  වේගය 40% වෙනවා. ( 2/(2+3) * 100% = 40%, 3 සටහන

මේ කාල පරාස අතර අනුපාතය, Mark Space Ratio නමින් හදුන්වනවා. කැමති නම් මෝටරයට ලැබෙන වෝල්ටීයතාවයේ සාමාන්‍යය අගය (Average Voltage) ගණනය කරලා මෝටරයට ලැබෙන වෝල්ටීයතාව හොයන්න පුළුවන්. 


මේ මූලධර්මයේදී සංඥා පළල අනුව ප්‍රතිදානය සැකසෙන නිසා මේ ක්‍රමයට හදුන්වන්නේ Pulse width modulation කියනවා. කෙටියෙන්; PWM


ආර්ඩියුනෝ වලදී අපිට හමුවෙන analogWrite() කියන function එකෙන් සිද්ධවෙන්නේ මේ ක්‍රියාවලියම තමයි. ඒ නිසා අපි හදන රොබෝගේ මෝටර්වල වේග පාලනයට මේ PWM ක්‍රමය කෙලින්ම හා පහසුවෙන්ම භාවිතා කරන්න පුලුවන්.


මේ වෙනකොට මෝටර් සම්බන්ධයෙන් න්‍යායාත්මක කරුණු ගොඩක් සාකච්ඡා කරලයි තියෙන්නේ. මීළග ලිපියෙන් මෝටර් පාලන පරිපථ (Motor Drive Circuit) ගැන තමයි කථා කරන්නේ.


Motor Drive එකක් හදන්න බලාපොරොත්තු වෙන අය මේ දේවල් ටික දැන්ම ලෑස්ති කරගෙන තියාගන්න.

  • Vero board / Breadboard 
  • L298 IC
  • Terminal Headers
  • 4 x Diodes 
  • Circuit wires




මීළග ලිපියෙන් හමුවෙමු. සුබ සතියක්....