วันพุธที่ 8 กรกฎาคม พ.ศ. 2558

วันที่37 ที่Fibo

-การcalibrate PH sensor  EC sensor และmotor ได้เรียบร้อยพร้อมมีการทดลองตามคริปด้านล่างส่งได้อ่านค่าได้



-ตัวอย่างโค้ดที่ทำงาน
ส่วนที่1 แล้วจะไปเรียกใช้ฟังชันก์ส่วนที่2
//___Pin assigned___//
const int pin_Pwm = 9;
String inputstring = "";                                                       //a string to hold incoming data from the PC
int inputstringLength = 0;


//motor interpreter
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   inputmotor;

bool inPC = 0;

//inputstring
boolean input_stringcomplete = false;                                          //have we received all the data from the PC

String sensorstringPH = "";                                                      //a string to hold the data from the Atlas Scientific product
boolean sensor_stringcompletePH = false;                                         //have we received all the data from the Atlas Scientific product
String PHout = "";

String sensorstringEC = "";                                                      //a string to hold the data from the Atlas Scientific product
boolean sensor_stringcompleteEC = false;                                         //have we received all the data from the Atlas Scientific product
String ECout = "";


void setup()
{
  Serial.begin(38400);                                                       //Serial with PC to 38400
  Serial2.begin(38400);                                                      //Serial with pH meter to 38400
  Serial3.begin(38400);                                                      //Serial with EC meter to 38400


  attachInterrupt(0, Millis, RISING);
  pinMode(pin_Pwm, OUTPUT);
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  Serial.println("Initialize DONE!!!");
}

void Millis()
{
  counter++;
}

void loop()
{
   if (inputmotor <= 50 )                                                  //send to serial over 50
  {
    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
      err = inputmotor - rpm / 100;
      sum_err += err;
      u = Kp * err + Ki * sum_err + Kd * (err - old_err);
      old_err = err;
      pwm_set = u * 1.2;
      analogWrite(pin_Pwm, pwm_set);
      
      pwm_set += 0;
      counter = 0;
      Prev_time = Cur_time;
      pwm_set = 0;
    }
  }      
  //___Receive Command___//
  if (Serial.available() > 0)
  {
    while (Serial.available() > 0)
    {

      inputstring += char(Serial.read());
      inputstringLength += 1;
      delay(1);
    }
    inPC = 1;
  }

  //read PH
  if (Serial3.available() > 0)
  {
    while (Serial3.available() > 0)
    {
      PHout += char(Serial3.read());
      delay(1);
    }
    Serial.print("PH:");
    Serial.print(PHout);
  }

  //read EC
  if (Serial2.available() > 0)
  {
    while (Serial2.available() > 0)
    {
      ECout += char(Serial2.read());
      delay(1);
    }
    Serial.print("\t");
    Serial.print("EC:");
    Serial.println(ECout);
  }
  PHout = "";
  ECout = "";
  //___Command Checker___//
  if (inPC)
  {
    Command_Checker();
    inPC = 0;
  } else {}
}

ส่วนที่2

void Command_Checker()
{
  if (inputstringLength == 6)
  {
    if ((inputstring[4] == 'Y') && (inputstring[5] == 'U'))
    {
      if (inputstring[0] == 'M')
      {
        Serial.print("Motor Command : ");
        Serial.println(inputstring);
        String temp = "";
        temp.reserve(30);
        for (int i = 1; i < (inputstringLength - 2); i++)
        {
          temp += inputstring[i];
        }
        Serial.println(temp);
        inputmotor = temp.toInt();
        inputstring = "";
        inputstringLength = 0;
      }
      else if (inputstring[0] == 'P')
      {
        Serial.print("PH Command : ");
        Serial.println(inputstring);

        String temp = "";
        temp.reserve(30);
        for (int i = 1; i < (inputstringLength - 2); i++)
        {
          temp += inputstring[i];

        }
        Serial.println(temp);
        if (temp == "C04")
        {

          Serial.println("calibratePH4");
          Serial3.print("cal,low,4\r");
        }
        else if (temp == "C07")
        {
          Serial.println("calibratePH7");
          Serial3.print("cal,mid,7\r");
        }
        else if (temp == "C10")
        {
          Serial.println("calibratePH10");
          Serial3.print("cal,high,10\r");
        }
        else if (temp == "L00")
        {
          Serial.println("Turn off pH LED");
          Serial3.print("L,0\r");
        }
        else if (temp == "L11")
        {
          Serial.println("Turn on pH LED");
          Serial3.print("L,1\r");
        }
        else if (temp == "X00")
        {
          Serial.println("Reset PH");
          Serial3.print("x\r");
        }
        inputstring = "";
        inputstringLength = 0;
      }
      else if (inputstring[0] == 'E')
      {
        Serial.print("EC Command : ");
        Serial.println(inputstring);

        String temp = "";
        temp.reserve(30);
        for (int i = 1; i < (inputstringLength - 2); i++)
        {
          temp += inputstring[i];
        }
        Serial.println(temp);
        if (temp == "12K")
        {
          Serial.println("calibrateEC12K");
          Serial2.print("Cal,low,12000\r");
        }
        else if (temp == "80K")
        {
          Serial.println("calibrateEC80K");
          Serial2.print("Cal,low,80000\r");
        }
        else if (temp == "CLE")
        {
          Serial.println("Clear EC");
          Serial2.print("Cal,clear\r");
        }
        else if (temp == "L00")
        {
          Serial.println("Turn off pH LED");
          Serial2.print("L,0\r");
        }
        else if (temp == "L11")
        {
          Serial.println("Turn on pH LED");
          Serial2.print("L,1\r");
        }
        else if (temp == "X00")
        {
          Serial.println("Reset EC");
          Serial2.print("x\r");
        }
        inputstring = "";
        inputstringLength = 0;
      }
      else
      {
        Serial.print("Command (heading) ERROR!!! : ");
        Serial.println(inputstring);
        inputstring = "";
        inputstringLength = 0;
      }
    }
    else
    {
      Serial.print("Command (ending) ERROR!!! : ");
      Serial.println(inputstring);
      inputstring = "";
      inputstringLength = 0;
    }
  }
  else if (inputstringLength == 0)
  {
    // Do nothing
  }
  else
  {
    Serial.print("Command (overall) ERROR!!! : ");
    Serial.println(inputstring);
    Serial.println(inputstringLength);
    inputstring = "";
    inputstringLength = 0;
  }
}


-งานต่อไปคือออกแบบPCB  ที่จะมาต่อกับ module sensor ทั้ง2ตัว และmotorด้วย
    -ตามที่คิดจะเป็นแบบด้านเดียวและกัดเองน่าจะราคาถูกและประหยัดทุกๆด้านด้วย เช่น เวลา งบ และได้ทำเอง



น้ำยากัดปริ้น

การกัดปริ้น

แผ่นกัดปริ้น(แผ่นทองแดง)

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

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