วันพุธที่ 24 มิถุนายน พ.ศ. 2558

วันที่27 ที่Fibo

-ตัวทำละลาย support 3D printer สารละลายที่ทำปฏิกิริยาคือ โซดาไฟ แล้วมีเครื่องเร่งปฏิกิริยาคือทำการเขย่าให้เกิดความร้อนเพื่อเร่งปฏิกิริยาในการกัดวัสดุที่นำมาทำตัวประครองชิ้นงาน



-โค้ด PID ที่สามารถทำงานได้และควบคุมความเร็วได้สมบูรณ์ทำงานโด้วยการส่งserail ไปควบคุมPWM ได้หรือควบคุมความเร็วมอเตอร์

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 Kp = 1;           //ค่าคงที่ kp
float Ki = 0.5;         //ค่าคงที่ki
float Kd = 1;           //ค่าคงที่kd
float u = 0;
float pwm_set = 0;

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

int latter1 = 0;        //set pwm out 0-50
int s

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 ="";                                                        //พิมพ์ส่ง serial ไม่เกิน50
  if(Serial.available()>0)
  {
    while(Serial.available()>0)
    {
      latter += char(Serial.read());
    }
 
  Serial.println(latter);
  latter1=latter.toInt();
  }
  if(latter1 <=50 )                                                    //send to serial over 50
  {
  Serial.print("latter1:"); Serial.print(latter1); Serial.print("\t");

  Cur_time = millis();                                                   //set Cur_time is millis
  s = Cur_time-Prev_time;
  if(s >= 10)
      {

        j = (counter*10.0)/360.0;
        k = j/(s*0.001);
        rpm = k*60.0;    //rpm
        Serial.print("rpm:"); Serial.print(rpm); Serial.print("\t");
     
        err = latter1*1 - rpm/100;
        sum_err += err;
        u = Kp*err + Ki*sum_err + Kd*(err-old_err);
        old_err = err;
        pwm_set = u*1.2;          
        analogWrite(pwm,pwm_set);
        Serial.print("pwm_set:"); Serial.print(pwm_set); Serial.println("\t");
       
        pwm_set+=0;  
        counter=0;
        Prev_time = Cur_time;
        pwm_set=0;
      }
   }
}

void Millis()
{
  counter++;
}



-Electrical Conductivity Kit 
-ตัวนี้ติดปัญหา คือ cralibrate ยังไม่ได้
แหล่งที่มา https://www.sparkfun.com/products/retired/11193



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 Kp = 1;           //ค่าคงที่ kp
float Ki = 0.5;         //ค่าคงที่ki
float Kd = 1;           //ค่าคงที่kd
float u = 0;
float pwm_set = 0;

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

int latter1 = 0;        //set pwm out 0-50 
int s

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 ="";                                                        //พิมพ์ส่ง serial ไม่เกิน50 
  if(Serial.available()>0)
  {
    while(Serial.available()>0)
    {
      latter += char(Serial.read());
    }   
    
  Serial.println(latter);
  latter1=latter.toInt();
  }
  if(latter1 <=50 )                                                    //send to serial over 50
  {
  Serial.print("latter1:"); Serial.print(latter1); Serial.print("\t"); 
  
  Cur_time = millis();                                                   //set Cur_time is millis
  s = Cur_time-Prev_time;
  if(s >= 10)
      {

        j = (counter*10.0)/360.0;
        k = j/(s*0.001);
        rpm = k*60.0;    //rpm
        Serial.print("rpm:"); Serial.print(rpm); Serial.print("\t");  
        
        err = latter1*1 - rpm/100;
        sum_err += err;
        u = Kp*err + Ki*sum_err + Kd*(err-old_err);
        old_err = err;
        pwm_set = u*1.2;             
        analogWrite(pwm,pwm_set);
        Serial.print("pwm_set:"); Serial.print(pwm_set); Serial.println("\t");  
         
        pwm_set+=0;    
        counter=0;
        Prev_time = Cur_time;
        pwm_set=0;
      }
   }
}

void Millis()
{
  counter++;
}

-ต้องเอา Electrical Conductivity Kit ,PH sensor และ encoder motor มารวมกันในmega 2560 

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

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