以前投稿した水位センサーとリレースイッチの記事の内容を組み合わせて、「水位センサーの値に応じてAC100V機器をON/OFFさせる」という仕組みを作りました。
今回は水槽の換水作業を想定して、「一定の水位に達したらポンプを止めて水の供給を止める」「水位が足りなくなったらポンプを稼働して水を供給する」という仕組みを実現しています。
環境
- MacOS Monterey 12.6.2
- Arduino IDE 1.8.20
材料
- Arduino (今回はKeyStudioのLeonard R3開発ボードを使用しました)
- リレースイッチ
- フロートスイッチ(水位センサー)
- 半固定抵抗10kΩ
- ジャンパーワイヤ
- ブレッドボード
- 分解してもよい延長タップ
- 100V入力機器
事前準備
リレースイッチ記事の『事前準備』を参考にして、延長タップのケーブルの一部を裁断し、皮膜を剥いて導線を剥き出しにします。
配線
コード
コード
waterlevel_and_relayswitch.ino
#include <stdio.h>
#include <time.h>
#define SIGNAL_PIN 13
#define ANALOG_PIN A0
#define FILL 0 // 水位が足りている場合のアナログ値
int water_level = 0;
bool relay_state = false;
void setup() {
Serial.begin(9600);
pinMode(SIGNAL_PIN, OUTPUT);
pinMode(ANALOG_PIN, INPUT);
}
void loop() {
water_level = analogRead(ANALOG_PIN);
Serial.print("water_level_value :");
Serial.println(water_level);
if(water_level != FILL && relay_state == false){ // 水位が足りないかつリレースイッチがOFFの時
relay_on(); // リレースイッチをONにして機器を動かす
}else if(water_level == FILL && relay_state == true){ // 水位が足りているかつリレースイッチがONの時
relay_off(); // リレースイッチをOFFにして機器を止める
}else{ // それ以外の時は何もしない
}
delay(500UL);
}
void relay_on() {
digitalWrite(SIGNAL_PIN, HIGH);
relay_state = true;
Serial.println("relay_on");
delay(1 * 1000UL);
}
void relay_off(){
digitalWrite(SIGNAL_PIN, LOW);
relay_state = false;
Serial.println("relay_off");
// 動作停止時間10秒を最低限確保(水位境目での動作不良防止)
delay(10 * 1000UL);
}
結果
実際に動作させた時の様子がこちらです。
水位現象時のアナログ出力値はセンサーによって個体差があります。
センサー値の変化を検知して、リレースイッチの状態が変化していることが分かります。
今回は水槽の換水作業を想定して水位センサーを使用しましたが、センサーの種類を変えれば、様々な分野に応用が効きそうです。