こんばんは。
お父ラボ(お父Lab.)です。
金魚水槽の自動水換え装置を目標にプログラミング学習を始めました。
まずはアルディーノ(ARDUINO)でプログラミング・電子工作を学びます。
今日は温度センサーの話です。センサーの読み値によって動きを変化させます。
私のやりたい金魚水槽の自動水換え装置にかなり近づいてきています。
例えば温度センサーなら、「水温が30℃以上なら水換え」という動きが可能です。
pHセンサーなら、「所定の酸度に傾いたら水換え」
画像処理と組み合わせれば「泡の消え方が悪くなったら〜」みたいなことも可能なのでしょうか…。
まずは回路です。
左の黒いのが温度センサー、右のLED3つは基準温度からの差によって光り方が変わります。
プログラムの内容は温度センサーのアナログ値を電圧に変換して、
電圧値を温度に変換します。
変換された温度が基準に対して、2℃以上4℃未満だとLEDが1つ点くというものです。
「今回のプログラム」
const int sensorPin = A0; // センサーのアナログ入力端子
const float baselineTemp = 29; // 基準温度を29.0℃に設定
void setup(){
Serial.begin(9600);// アルディーノとPCのシリアルポートを開く
for(int pinNumber = 2; pinNumber<5; pinNumber++){
pinMode(pinNumber,OUTPUT);
digitalWrite (pinNumber, LOW);
}
// アウトプットの端子を定義し、LOWにする。forのループでまとめて定義。
}
void loop(){
int sensorVal = analogRead(sensorPin); // sensorValにアナログ値を格納する。
Serial.print("Sensor Valve: ");
Serial.print(sensorVal); //画面に表示する文字
// ADコンバータから読み取った値を電圧に変換する
float voltage = (sensorVal/1024.0) * 5.0;
Serial.print(", Volts: ");
Serial.print(voltage);
Serial.print(" , degrees C: ");
// 電圧を温度に変換する
float temperature = (voltage -.5) * 100;
Serial.println(temperature);
if(temperature < baselineTemp){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+2 &&
temperature < baselineTemp+4){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+4 &&
temperature < baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1000);
}
