• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Arduinoでタンクに自動補給)

Arduinoでタンクに自動補給

koujikuuの回答

  • ベストアンサー
  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.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 }

ainame60
質問者

お礼

思い通りの動作できました。エラーランプまで付加して頂きごありがとうございます。 タンクの満タンまでのタイムを測り実際より長めの時間を設定します。 基板への作り込みの際にはプルアップ抵抗も外付けにします koujikuuさんには以前もお世話になりましたけどプログラムが自由に書ける人って羨ましいです。少しでも理解して今後役立てるようがんばります。 本当にご親切に感謝いたします。

関連するQ&A

  • Arduino、LEDを光らせるスケッチについて

    Arduino初心者です。 LEDをチカチカ光らせるプログラムで質問があります。 30秒間、1秒間隔でLEDがON/OFFを繰り返し、その後LEDを5分間OFFにし、また、30秒間、1秒間隔でLEDがON/OFF、また5分間OFFという、繰り返しを続けるスケッチをどのように書いたらよいのか悩んでいます。 30秒間、1秒間隔でLEDがON/OFFを繰り返すスケッチは、理解出来るのですが、そこに、インターバルを入れようとすると途端に分からなくなります。 どなたか、上記繰り返しのスケッチの描き方をお教え願えないでしょうか。 よろしくお願いいたします。

  • Arduinoで電圧の切り替え

    Arduinoを使って5V,12V,14Vの電圧を切り替える回路を考えています 添付図SW1、SW2をArduinoからオン・オフして、それぞれ12V,14Vを切り替えようと思っています。74595からはショットキーバリアダイオードを介し5Vを出力します ここで、12V,14Vを出力した場合、Q3,Q6のコレクタに12Vや14Vの電圧が印加されてしまうと思うのですが、これはトランジスタが損傷するなど問題があるのでしょうか?ダイオードを入れたり、回路の見直しをした方がいいのでしょうか?

  • arduinoでミスト機を自作したい

    Arduinoで、本を見ながら複数LEDを光らせた程度の初心者です。 小さいミスト機(面A4サイズx幅7cm)を自作しようと思うのですが、タンクの水(250ml)が無くなる少し前(残量5ml~10ml)に、メールで知らせてくれる機能はどのようにすると良いでしょうか? 必要なパーツ、スケッチ、概要を教えてください。 あとタイマーについての質問ですが、これから自作するiPhoneアプリを使って、Bluetooth-Arduino UNOで、タイマーを制御することはできますか? (Arduino FIOが無線に最適のようですが、Arduino UNOでも基盤にUSB端子を付けて、ノートパソコンにつけるBluetoothのミニ端子つけるとできそうな気もなんとなくするのですが、出来ないものなのでしょうか。。。)

  • 水位センサーと対応した電源ON OFFについて

    電気について詳しくないので教えて下さい。 タンクの中に水を入れておいて減ったら給水する回路を作りたいと思います。 下の位置にある水位を切ったら電源がONになり、上のセンサーに水位が達したらOFFになる様な物を考えています。 ポンプは100Vの物を準備していますので、100Vの電源をON OFF出来ると嬉しいです。 詳しい方よろしくお願いいたします。

  • ARDUINOで5つのLEDをそれぞれ点滅させたり、フェードインさせた

    ARDUINOで5つのLEDをそれぞれ点滅させたり、フェードインさせたりしたい!! ARDUINO初心者です。5つのLEDをそれぞれ上記の様に制御したいと思っています。点滅は点灯、消灯が一定の点滅ではない効果を持たせたく、5つのLEDのうち、2つはフェードインフェードアウトで蛍のような効果にしたいと思っております。 以下、途中まで3つのLEDで試行錯誤してスケッチを構築したのですが、なかなかこれ以上、前へすすみません。 まず、このスケッチでの第一関門はプログラムの並列処理ができない、ということでした。 int ledPina = 9; int ledPinb = 10; int ledPinc = 11; void setup(){ pinMode(ledPina, OUTPUT); pinMode(ledPinb, OUTPUT); pinMode(ledPinc, OUTPUT); //LedPin a b cを出力に設定。 } void loop() { digitalWrite(ledPina, HIGH); // aのLEDをオン delay(500); //待機 digitalWrite(ledPina, LOW); //aをオフ delay(500); digitalWrite(ledPinb, HIGH); // bのLEDをオン delay(800); // 待機 digitalWrite(ledPinb, LOW); //bをオフ delay(300); digitalWrite(ledPinc, HIGH); // cのLEDをオン delay(100); // 待機 digitalWrite(ledPinc, LOW); //cをオフ delay(50); } おわかりの方、いらっしゃいましたら、お教え願えますでしょうか? よろしくお願い致します!!

  • Arduino DS18B20 でデータが取得で

    Arduino DS18B20 でデータが取得できない。 回路は下のサイトを参考にしました。 ArduinoIDE 1.8.8 を使ってスケッチ例の"Dallas temprature" "tester" をボードに書き込みました。 シリアルモニターでは下のような表示です。 11:43:49.686 -> Requesting temperatures...DONE どうもデバイスが見つけられないようです。 回路はあっているように思いますが、問題の切り分け方 ありますでしょうか?

  • C言語プログラミングについて…Arduinoを用い

    C言語プログラミングについて…Arduinoを用いて、以下の文でスイッチ「RedSwitch(赤スイッチ)」が押された回数だけ後で光るというプログラミングを作りました。次にその使用した「switch case」文を「if」文、もしくは「if else」に変換して同じプログラミングを作りなさいという課題が出て、いろいろと変えてみたのですが、シリアルモニタを見るとif文を用いた時に「RedSwitch」が押された「回数」ではなく連続的に?押した「秒数」をカウントして困ってます。どうやったら改善できるのでしょうかか?ご教授お願いしたします。 void sw_check(void) { switch(SW_RedSwitch) { case 0: if ( digitalRead(2)==SW_ON ) { SW_RedSwitch=1; } break; case 1: if ( digitalRead(2)==SW_OFF ) { SW_RedSwitch=2; } break; } } void blink(void) { digitalWrite(13,LED_ON); delay(500); digitalWrite(13,LED_OFF); delay(500); } void loop() { unsigned char SW_CNT=0,SW_TIME=0,i; while( (SW_TIME<100) || (SW_CNT==0) ) { sw_check(); if ( SW_RedSwitch==2 ) { SW_RedSwitch=0; SW_CNT++; SW_TIME=0; } SW_TIME++; delay(20); } for (i=1 ; i<=SW_CNT ; i++) { blink(); } }

  • スプリンクラー設備の起動用圧力タンクの動作

    消防設備を学習しているのですが、スプリンクラー設備でわからないことがあります。それは、起動用圧力タンクの圧力が減圧してポンプを作動させた場合、ポンプ起動によって加圧され、圧力計の指針が元の圧力(OFFのときの圧力)を超えた場合、ポンプは停止するのでしょうか? あるいは、手動でOFFにしない限り、ポンプは回転し続けるのでしょうか? 

  • VT-マグナのリザーブタンク

    最近、中古でVT-マグナを買ったのですが、リザーブタンクについて教えてください。 ONとOFFとRSVがあるのですが、ONとRSVではどちらがリザーブタンクからの給油になるのでしょうか? リザーブ4l+7lのタンクだと言われたのですが、ONの状態で走っていてガソリンを入れたら7.2l入りました。 これって、ONにしておくとリザーブタンクも使用するってことですか? 初心者なので、知っていて当然のような質問ですみません。 よろしくお願いします。

  • 仕切ったタンクに上水道と山水。

    仕切ったタンクに上水道と山水。 初めて質問します。 山間部に住んでいるものです。家庭で一つのタンクを真ん中で2つに仕切り、片方は山水を貯めます。 もう片方は水道水(簡易水道?)をボールタップにて貯めます。 タンクの水の使用目的は、両方のタンクからポンプにて畑の灌水等をしたいです。夏は山水の量が少ないので上水道で。その他の時(山水の水量があるとき)は山水で灌水をしたいです。ポンプの吸い込み口 はバルブで切り替えます。それぞれのタンクには、水があふれても、途中から流れ出るようにします。 この使用方法は水道法にひかかるのでしょうか?タンク(手作り)の仕切りが不十分だと山水と水道水が混じりますし、ボールタップの位置よりも山水の方が増えた場合等どうなるのかと(水道配管へ逆流??)・・・ 素人質問ですがご教授お願いします。