- ベストアンサー
Arduinoでタンクに自動補給
- Arduinoを使用して、タンクの自動補給システムを作りたいです。
- タンクには上部と下部にフロートスイッチを設置し、タンクが空になったらポンプを稼働させるようにしたいです。
- タンクが満タンになったらポンプを停止させるスケッチを作成する方法がわかりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
モーター稼働時間制限を入れてあります (現在60秒) 最大稼働時間を過ぎるとモーターを停止し、エラーランプ D13 が点滅します 復帰にはリセットスイッチを押します シリアルモニタに状況を出力して確認 スイッチ用 内蔵プルアップでは弱いので、外部プルアップ抵抗が必要になると思われます。 #define SW1 2 // D2 full on #define SW2 3 // D3 empty off #define SW_ON LOW #define SW_OFF HIGH #define SW1_READ() digitalRead( SW1 ) #define SW2_READ() digitalRead( SW2 ) #define MOTOR 6 // D6 #define MOTOR_ON() digitalWrite( MOTOR , HIGH ) #define MOTOR_OFF() digitalWrite( MOTOR , LOW ) #define MOTOR_CNT_MAX 60 // 60s モーター最大稼働時間 unsigned int motor_cnt = 0; void setup() { Serial.begin(9600); Serial.println("Arduino Program Start !!"); pinMode( SW1 , INPUT_PULLUP ); pinMode( SW2 , INPUT_PULLUP ); pinMode( MOTOR , OUTPUT ); pinMode( 13 , OUTPUT ); // error lamp MOTOR_OFF(); } void loop() { if ( SW1_READ() == SW_ON ){ // 上部フロートSWチェック Serial.println("motor off"); MOTOR_OFF(); motor_cnt = 0; } if ( SW2_READ() == SW_OFF && SW1_READ() == SW_OFF ){ // 下部フロートSWチェック MOTOR_ON(); } if ( digitalRead( MOTOR ) == HIGH ){ // モーター稼働時間チェック Serial.print("motor on "); Serial.print( motor_cnt , DEC ); Serial.println(" s "); motor_cnt++; if ( motor_cnt > MOTOR_CNT_MAX ){ MOTOR_OFF(); Serial.println(" --- SENSOR ERROR !! --- "); while(1){ digitalWrite( 13 , 1 - digitalRead( 13 ) ); // エラーランプ点滅 delay(200); } // while } } delay( 1000 ); // 1s }
その他の回答 (2)
- cwdecoder
- ベストアンサー率20% (200/997)
No.1です。 フロートスイッチが壊れた場合の対策も考えておいたほうがいいでしょうね。 一定時間以上のポンプ動作続いた場合は停止させて、万一、オーバーフローしたとしても被害を最小限にするなど・・・。
- cwdecoder
- ベストアンサー率20% (200/997)
SW1,SW2が何を意味しているのか分かりませんが、SW1とSW2が違う高さについていて、SW1、SW2が両方オフになったら、ポンプを始動、SW1、SW2両方オンになれば、ポンプ停止したいということでしょうか? であれば、一旦SW1=オンになったらSW2=オフになるまでポンプ停止。 一旦SW2=オフになったら、SW1=オンになるまでポンプ稼働すればいいだけの話ではないでしょうか。 私はC言語やアセンブラしか知りませんが、何の言語でも一緒だと思います。
お礼
SW1,SW2は磁石を内臓したフロートでその浮き沈みでリードスイッチが動作するものです 〇〇になるまで動作(HIGHとかLOW)を継続するというプログラムをどう書いた良いのか解りません 宜しくお願いします。
お礼
思い通りの動作できました。エラーランプまで付加して頂きごありがとうございます。 タンクの満タンまでのタイムを測り実際より長めの時間を設定します。 基板への作り込みの際にはプルアップ抵抗も外付けにします koujikuuさんには以前もお世話になりましたけどプログラムが自由に書ける人って羨ましいです。少しでも理解して今後役立てるようがんばります。 本当にご親切に感謝いたします。