วันอังคารที่ 23 มิถุนายน พ.ศ. 2558

วันที่26 ที่Fibo

-น้องอิน และน้องยีนส์ เป็นน้องจากวิศวคอมฯ เข้ามาเรียนรู้และหาแนวทางทำโปรเจ็ควันนี้ได้พรีเซ็นเกี่ยวกับห้องแล็ปที่พวกเราอยู่ และอธบายการทำงานของโปรเจ็คที่พวกเราได้ช่วยพี่ที่แล็ป น้องเขาก็เป็นอันเข้าใจแต่เห็นน้องเขาสนใจในด้าน headgear และมีแนวโน้มว่าน้องเขาอยากทำโปรเจ็คเกี่ยวกับเรื่องนี้


-โค้ด PID ที่เขียนขึ้นแตังยังไม่สามารถส่งfeedback กลับมาได้โดยการคำนวนก็นำมาจากทฤษฏีและตามโครงสร้างPID
     -ปัญหาอาจติดที่โค้ดโปรแกรมที่ยังคงใช้ตัวแปลได้ไม่ถูกตามโครงสร้างโปรแกรม

int pwm = 9;      // PWM connected to digital pin 9

float time1 = 0.0;
float time2 = 0.0;
float s=0.0;
float counter = 0.0;
float j = 0.0;
float k=0.0;
float rpm=0.0;
float rpm_set = 0.0;
float err = 0;
float sum_err = 0;
float old_err = 0;
float u = 0;
float l = 0;

unsigned long Cur_time=0;
unsigned long Prev_time=0;

int latter1 = 0;


void setup() {

  Serial.begin(9600);
  attachInterrupt(0,Millis,RISING);
  //LOW to trigger the interrupt whenever the pin is low,
  //CHANGE to trigger the interrupt whenever the pin changes value
  //RISING to trigger when the pin goes from low to high,
  //FALLING for when the pin goes from high to low.
  pinMode(pwm,OUTPUT); //PWM
  digitalWrite(7,HIGH);
  digitalWrite(8,LOW);

}

void loop()
{
  String latter ="";
  if(Serial.available()>0)
  {
    while(Serial.available()>0)
    {
      latter += char(Serial.read());
    }
 
  Serial.println(latter);
  latter1=latter.toInt();
  Serial.print("latter1:"); Serial.print(latter1); Serial.println("\t");
  analogWrite(pwm,latter1);

  }

  Cur_time = millis();
  int s = Cur_time-Prev_time;
  if(s >= 100)
      {
        j = (counter*10.0)/360.0;
        k = j/(s*0.001);
        rpm = k*60.0;    //rpm
        err = latter1 - rpm;
          sum_err += err;
          u = 1*err + 0.5*sum_err + 1*(err-old_err);
          old_err = err;
          latter1 = u*1.25;
       
        counter=0;
        Prev_time = Cur_time;
        Serial.print("rpm:"); Serial.print(rpm); Serial.println("\t");                
       
       }
       
}


void Millis()
{
  counter++;
}

-โปรแกรมที่นำมาศึกษาและหนังสือที่นำมาอ่าน จากเว็ป https://www.pdx.edu/nanogroup/sites/www.pdx.edu.nanogroup/files/2013_Arduino%20PID%20Lab_0.pdf

int dir = 8;
int pwm = 9;
int count;
int r;
int t;
int set_rpm;
int err;
int sum_err;
float u;
int old_err;
int speed_sig;
int rpm;


void setup() 
{
pinMode(dir,OUTPUT);
pinMode(pwm,OUTPUT);
pinMode(r,INPUT);
attachInterrupt(0,pulsecount,RISING);
Serial.begin(9600);
}

void pulsecount()
{
 count++; 
}
void loop() 
{
 do
 {
  t = millis();
 } 
 while(t%10 !=0);

 rpm = count*0.0016667*60;
 count = 0;

 r=analogRead(A3);
 set_rpm = r/10;

 err = set_rpm - rpm;
 sum_err += err;
 u = 1*err + 0.5*sum_err + 1*(err-old_err);
 old_err = err;
 speed_sig = u*1.25;

  if(speed_sig>255)
  {
    speed_sig = 255;
  }
  digitalWrite(dir,LOW);
  analogWrite(pwm,speed_sig);

  Serial.println(rpm);
  Serial.println(set_rpm);
  Serial.println(err);
  Serial.println(sum_err);
  Serial.println(speed_sig);

  sum_err = 0;

  delay(1);
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น