Arduinoのバニラシールドで回路追加
パネルヒーターとのインターフェース開発の続き。
前回のプロトコルデコーダーのソフトを仕上げつつ、Arduinoのバニラシールド(ユニバーサル基板)を使って外付け回路を追加した。追加した回路はスイッチ操作送信部と温度センサー。スイッチ操作は、パネルヒーター側のタイミングに合わせてスイッチのON/OFF信号を送信する。温度センサーは室温を計測する。
元々パネルヒーターには温度センサーは無かったので、室温が上がり暑くなるとボイラーの水温を下げ、室温が下がって寒くなるとボイラーの水温を上げるという作業を手動で行っていた。この温度センサーにより、遠隔操作機能以外にも、オートエアコンのように設定した目標室温を維持するよう、ボイラーの水温を自動制御することができる(はず)。
使った温度センサーは秋月電子で買ったS-8120C。5個で200円なので1個40円。安い。外付け回路が不要で、電源電圧が範囲が広く、温度変化のリニアリティが高いのでこれを選んだ。
ArduinoへはA/Dコンバーター端子のA0へ接続した。但し、A/Dコンバーターの分解能を上げるため、リファレンスを3.3Vに接続している。Arduinoには3.3Vが出力されているので、ARefを3.3Vに接続。そのためソフトも、
analogReference(EXTERNAL);
と宣言する必要がある。これにより、3.3Vの変化が1024段階の変化となって読むことができる。後は温度センサーのデータシートに従って温度を計算。今回は室温がそれなりに計測できれば良いので、+30℃を基準に計算している。もっと誤差があるかと思ったが、室内にあるデジタル温度計とほぼ一緒であった。あと温度変化に対する反応が非常に早くてちょっと感動。
下記は1秒毎に温度を表示するスケッチ(Arduinoの世界ではプログラムのことをスケッチと呼ぶらしい)。
前回のプロトコルデコーダーのソフトを仕上げつつ、Arduinoのバニラシールド(ユニバーサル基板)を使って外付け回路を追加した。追加した回路はスイッチ操作送信部と温度センサー。スイッチ操作は、パネルヒーター側のタイミングに合わせてスイッチのON/OFF信号を送信する。温度センサーは室温を計測する。
元々パネルヒーターには温度センサーは無かったので、室温が上がり暑くなるとボイラーの水温を下げ、室温が下がって寒くなるとボイラーの水温を上げるという作業を手動で行っていた。この温度センサーにより、遠隔操作機能以外にも、オートエアコンのように設定した目標室温を維持するよう、ボイラーの水温を自動制御することができる(はず)。
使った温度センサーは秋月電子で買ったS-8120C。5個で200円なので1個40円。安い。外付け回路が不要で、電源電圧が範囲が広く、温度変化のリニアリティが高いのでこれを選んだ。
ArduinoへはA/Dコンバーター端子のA0へ接続した。但し、A/Dコンバーターの分解能を上げるため、リファレンスを3.3Vに接続している。Arduinoには3.3Vが出力されているので、ARefを3.3Vに接続。そのためソフトも、
analogReference(EXTERNAL);
と宣言する必要がある。これにより、3.3Vの変化が1024段階の変化となって読むことができる。後は温度センサーのデータシートに従って温度を計算。今回は室温がそれなりに計測できれば良いので、+30℃を基準に計算している。もっと誤差があるかと思ったが、室内にあるデジタル温度計とほぼ一緒であった。あと温度変化に対する反応が非常に早くてちょっと感動。
下記は1秒毎に温度を表示するスケッチ(Arduinoの世界ではプログラムのことをスケッチと呼ぶらしい)。
#define TEMP30 30
#define VOLTATTEMP30 1474
#define TEMPDELTA 8.2
#define AREFVOLT 3300
#define RESOLUTION 1024
const int PinAnalog = 0;
void setup()
{
analogReference(EXTERNAL);
Serial.begin(9600);
}
void loop()
{
int aval;
float temp,volt;
aval = analogRead(PinAnalog);
volt = ((long)aval * AREFVOLT) / RESOLUTION;
temp = TEMP30 + ((VOLTATTEMP30 - volt) / TEMPDELTA);
Serial.print("Temp ");
Serial.println(temp);
delay(1000);
}
近日、安曇野の自宅へ帰る予定なので、いよいよ実機デバッグを行う。