2018年5月4日金曜日

RS232Cからの温度データ読み取り


RS232CからデータをこれまでPC(NEC9801)で計測していたが,
Arduino経由エクセルに切り替えを行うべくArduinoの準備をしたので備忘録として残しておきます.
まずは,配線図


RS232Cの先には熱電対がついており,RC232Cのピンから0-60度の温度データが0-5Vに割り当てられて出力されている.概要はRS232Cからの電圧を読み取り,任意の温度になった時にスイッチを押し,ブザーを鳴らし,その時の温度データを記録するというものです.
Arduino側のピン番号割り当ては,
A0:スイッチの接点
A1:RS232Cからのアナログ電圧
Digital 1:スイッチのON/OFF
Digital 13:ブザーのON/OFF

でOKでした.
以下スケッチです.

unsigned long int milli_time;    //variable to hold the time

float voltage0;         //variable to hold the voltage form A0
float voltage1;         //variable to hold the voltage form A0
float voltage2;         //variable to hold the voltage form A0
float voltage3;         //variable to hold the voltage form A0
float trigertemp;
int b_pin = 7;   // デジタルデータ出力用ピン番号
int state = 0;   // ピンより取得したデータ格納用
int buzzer  = 13; // ブザーのピン番号

void setup() {
  Serial.begin(9600);               //
  Serial.println("CLEARDATA");        //
  Serial.println("LABEL,ComTime,Time,MeasTemp,MaxTemp, MinTemp, Trigger");  
                                      //
  pinMode(b_pin, INPUT);     // ボタンスイッチ用に入力に設定
  pinMode(buzzer, OUTPUT);   // ブザーを出力に設定
}

void loop() {
  milli_time = millis();
  trigertemp=0.0;
  voltage0 = ((5.0 * analogRead(A0) / 1024.0) * 11.354+7.7273); // measured temp.
  voltage1= ((5.0 * analogRead(A0) / 1024.0) * 11.354+7.7273); // Max. Temp.
  voltage2 = ((5.0 * analogRead(A0) / 1024.0) * 11.354+7.7273); //Min. Temp.
  voltage3= 5.0 * analogRead(A3) / 1024.0; //triger
  //以下ブザースイッチ文
    state = digitalRead(b_pin);  // ピンよりデータ取得
  Serial.println(state);       // シリアルモニタに出力
  //取得データにより分岐
  if(state == 1){
    tone(buzzer,400,100);  // ブザーを鳴らす
  }
  else{
    digitalWrite(buzzer,LOW);   // ブザーを消音
  }

  delay(50);
  // 以下出力文
  if (voltage3 > 1){ 
    trigertemp=voltage0;

    }
  else 
  {
    trigertemp=0.0;
  }
    

  Serial.print("DATA,TIME,");
  Serial.print(milli_time);
  Serial.print(",");
  Serial.print(voltage0);
  Serial.print(",");
  Serial.print(voltage1);
  Serial.print(",");
  Serial.print(voltage2);
  Serial.print(",");
  Serial.println(trigertemp);
    
  delay(250);                    //測定間隔
}

///

0 件のコメント:

コメントを投稿