2022年 09月 09日
ベルサイホンと電子工作 4
|
アクアポニックスの満排水状況とズッキーニの潅水状況の監視機器を合体してみた。
アクアポニックスの水槽が空の状態から満水になり排水が始まるまでポンプが稼働するがズッキーニへの潅水ポンプも同時に作動するように並列接続。




※時間外の動作が上手くいかない理由が判った
最初は
else if(tm.Hour < 7 && tm.Hour > 16 && value == HIGH)7以下且つ16以上なんて数はありえないので
else if(tm.Hour < 7 || tm.Hour > 16 && value == HIGH)
これだと16時以降且つvalueがHIGHのばあいは良いが7時前且つvalueがHIGHの時がダメ
else if((tm.Hour < 7 && tm.Hour > 16) && value == HIGH)
カッコで括ったらうまく動作した。演算子に優先順位があるとは気づかずおそまつだった。

深夜の雨で水位が上がり二度ほどポンプが稼働して満排水の動作が行われている。これでスケッチが上手く行ってると証明された。
#include <DS1307RTC.h>
#include <Wire.h>
#include <WiFi.h>
#include <Ambient.h>
const char* ssid = "Buffalo-****";
const char* password = "******";
WiFiClient client;
Ambient ambient;
unsigned int channelId =*******; // AmbientのチャネルID
const char* writeKey = "**********"; // ライトキー
int VpinR=26; //流水センサー電源
int VpinZ=14; //ズッキセンサー電源
int datapinR=32; // 流水の有無
int datapinZ=33; // ズッキ注水有無
int pumppin=25; //ポンプ駆動
int FlSW=27; // フロートsw
//int data=0; //流水有り0、無し1
//int data2=0; //ポンプ稼働1 停止0
void setup() {
Serial.begin(115200);
delay(10);
Wire.begin(21,22);
Serial.print(".");
pinMode(VpinR,OUTPUT);
pinMode(VpinZ,OUTPUT);
pinMode(datapinR,INPUT);
pinMode(datapinZ,INPUT);
pinMode(pumppin,OUTPUT);
pinMode(FlSW,INPUT_PULLUP);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500); //100→500
}
ambient.begin(channelId, writeKey, &client);
Serial.print("WiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.println();
}
digitalWrite(VpinR,HIGH); // センサー給電
digitalWrite(VpinZ,HIGH); // センサー給電
delay(500);
int value = digitalRead( FlSW ); //満排水状態
int valueZ = analogRead(datapinZ); //ズッキ注水有無
int valueR = analogRead(datapinR); //DO pinR 排水流の有無
int valueP = digitalRead(pumppin); //ポンプ稼働1 停止0
valueZ = map(valueZ, 2300, 4095, 100, 0);
valueR = map(valueR, 2000, 4095, 100, 0);
Serial.print(" ポンプ稼働");
Serial.print(valueP); //ポンプ稼働1 停止0
Serial.print("水位");
Serial.print( value*10 );
Serial.print("流水");
Serial.print( valueR );
Serial.print("ズッキ注水");
Serial.println( valueZ );
float pump = ( valueP*5 );
float leve = ( value*10 );
float drain = ( valueR );
float pour = ( valueZ );
float tmH = ( tm.Hour );
ambient.set(1, pump); //ポンプ稼働1 停止0
ambient.set(2, leve); //水位レベル
ambient.set(3, drain); //排水有無
ambient.set(4, pour); //ズッキ注水有無
ambient.set(5, tmH); //時間
ambient.send();
digitalWrite(VpinZ,LOW);
if(tm.Hour >= 7 && tm.Hour <= 16 && valueR<46){ //時間内且つ水流なし
digitalWrite(VpinR,LOW);//センサー休止
digitalWrite(pumppin,HIGH); //ポンプon
delay(1000UL*6UL); //センサー読取り間隔6秒
}
else if(tm.Hour >= 7 && tm.Hour <= 16 && valueR>=46){ //時間内且つ水流あり
digitalWrite(VpinR,LOW); //センサー休止
delay(1000UL*35UL); //本格排水待ち35秒
digitalWrite(pumppin,LOW); //ポンプoff
delay(1000UL*60UL*30UL); //待機30分
}
else if((tm.Hour < 7 || tm.Hour > 16) && value == HIGH){ //時間外且つ水位あり
digitalWrite(VpinR,LOW); //センサー休止
digitalWrite(pumppin,HIGH); //ポンプON
}
else{ //時間外 水流、水位なしの場合
digitalWrite(VpinR,LOW); //センサー休止
digitalWrite(pumppin,LOW); //ポンプoff
delay(1000UL*60UL*1UL); //センサー読取り間隔1分
}
delay(1000UL*30UL);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
by ainame60
| 2022-09-09 05:10
| DIY・電子工作
|
Comments(0)

