REGULACIJA PID-a POMOCU WEB KAMERE


Arduino & processing


Bašić Nedim - Bakalović Jasmin

kako je potekla ideja...

http://vectors.umwblogs.org/files/2012/02/Movies_Films_T_The_Terminator_010629_-12.jpg

KAKO JE POTEKLA IDEJA...

http://img2.wikia.nocookie.net/__cb20080308222204/terminator/images/2/25/T-800a_Threat.jpg


ARDUINO

sta je to arduino?


  • mikrokontroler
  • ATmega 328 (Atmel)
  • 14 I/O
  • 16 MHz
  • konektori


ARDUINO IDE


  • open source
  • C, C++, Java...



PROCESSING

STA JE TO PROCESSING?


  • programski jezik
  • razvojno okruženje
  • učenje, izrada prototipova, proizvodnja...

http://upload.wikimedia.org/wikipedia/commons/5/57/Processing-1.2.1.png

MACHINE VISION

PID REGULACIJA


  • Proporcionalno integracijska regulacija koja se temelji na trikomponentnim PID regulatorima.


  • PID-regualtori se dobivaju kad se paralelno spoje proporcionalni, integracijski i derivacijski regulator, te se ustvari dobiva regula cijsko djelovanje temeljeno na proporcionalnom, integracijskom i derivacijskom djelovanju.

PID REGULACIJA


  • Arduino kod za PID regulaciju:
 PID myPID(&Input, &Output, &Setpoint,4.9,1.81,0.24, REVERSE);

  • Kako bih mogli koristiti PID algoritam, koji je potreban za naš projekat radi balansiranja, odnosno pozicioniranja loptice, moramo uključiti biblioteku
 #include <PID_v1.h>

PID REGULACIJA


PID REGULACIJA

PID REGULACIJA

PID REGULACIJA


BALL AND BEAM


ARDUINO KOD


 if (Serial.available()>0)

{
int data = Serial.parseInt();

 if (newSetpoint==true&&data!=888)
 {
 Setpoint=data;
  Setpoint = map(data, 0, 640, 0, 255);//test
 Serial.print("Setpoint:");
  Serial.println(Setpoint);
  Serial.print("Pixel position");

 newSetpoint=false;
 }
if (data==888)
{
  Serial.println(data);
  newSetpoint=true;
   
}

if (data==0)
{myservoX.write(85);}
else{
// map the X pixel data (0-640) to 0 - 255 
          Input = map(data, 0, 640, 0, 255);
           myPID.Compute();//podesi izlaz PID kontrolera

int OutputX = map(Output, 0, 255, 85, 110);
//Write servo position
myservoX.write(OutputX);
}
}
else if((Serial.available()==0))
{
myservoX.write(85);
}

PROCESSING KOD

 void setup(){
MySerialport = new Serial(this,"COM11",57600);//serial port setup
size(640,480);//screnn size in pixels

MyWebCam = new JMyron();//call JM
MyWebCam.start(640,480);//
MyWebCam.findGlobs(1);  // 1 is on, 0 is off

PFont font; //create font
font = loadFont("Arial-BoldMT-16.vlw");
textFont(font);
}

//=============================================================//

void mousePressed() 
{
//Set new Setpoint
Xtarget = mouseX;

MySerialport.write(888+"\n\r");//send command int for arduino
MySerialport.write(Xtarget+"\n\r");//send new setpoint value
//MyWebCam.settings();

}


NASTAVIT CE SE...

deck

By asterix01