2022年 10月 17日
少量多潅水6連装置の工作 ⑤
|
トマトの少量多潅水栽培法は二夏経過してみて装置の使い勝手を良くしたく改良をおこなう。
②課題:日差しが強く葉面蒸散が激しい時は自動での潅水が追いつかず萎れてしまう事が度々あった。先の細いジョウロを挿し込み注水すれば回復するが一々操作が面倒だった。 改善:各ポンプごと手動の注水ボタンを追加した。ambientへのデータ送信が30秒間隔でその間はボタン操作を受け付けない(delay処理のため)そのためリセットボタン(画像黒色)も取り付けて同時押しで注水開始するようにした。(プログラム次第で可能かと思うがプログラムが書けずリセットボタンにした)
#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 = "****"; // ライトキー
#define PUMP1 13 #define PUMP2 12 #define PUMP3 14 #define PUMP4 27 #define PUMP5 26 #define PUMP6 25
#define SW1 4 #define SW2 16 #define SW3 17 #define SW4 5 #define SW5 18 #define SW6 19
int pump_time = 1000UL*60UL; //30ml灌水時間60秒 int Humidity1 = 55; //灌水開始湿度 生育ステージで変更 int Humidity2 = 65; int Humidity3 = 75;
void setup() { pinMode(PUMP1,OUTPUT); pinMode(PUMP2,OUTPUT); pinMode(PUMP3,OUTPUT); pinMode(PUMP4,OUTPUT); pinMode(PUMP5,OUTPUT); pinMode(PUMP6,OUTPUT); pinMode(SW1,INPUT_PULLUP); //手動灌水スイッチ pinMode(SW2,INPUT_PULLUP); pinMode(SW3,INPUT_PULLUP); pinMode(SW4,INPUT_PULLUP); pinMode(SW5,INPUT_PULLUP); pinMode(SW6,INPUT_PULLUP); Serial.begin(9600);
WiFi.begin(ssid, password); // Wi-Fiネットワークに接続する while (WiFi.status() != WL_CONNECTED) { // 接続したか調べる delay(500); Serial.print("."); } ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化 } void loop() { int humi1 = analogRead(A5); int humi2 = analogRead(A4); int humi3 = analogRead(A7); int humi4 = analogRead(A6); int humi5 = analogRead(A3); int humi6 = analogRead(A0); humi1 = map(humi1, 1810, 3650, 100, 0); //水中1810を100 空中3650を0に変換 humi2 = map(humi2, 1590, 3490, 100, 0); humi3 = map(humi3, 1910, 3500, 100, 0); humi4 = map(humi4, 1560, 3850, 100, 0); humi5 = map(humi5, 1100, 2730, 100, 0); humi6 = map(humi6, 1170, 3530, 100, 0); Serial.print(humi1); Serial.print(","); Serial.print(humi2); Serial.print(","); Serial.print(humi3); Serial.print(","); Serial.print(humi4); Serial.print(","); Serial.print(humi5); Serial.print(","); Serial.println(humi6);
float pot1 = (humi1); float pot2 = (humi2); float pot3 = (humi3); float pot4 = (humi4); float pot5 = (humi5); float pot6 = (humi6); ambient.set(1, pot1); //ポット1の湿度 ambient.set(2, pot2); ambient.set(3, pot3); ambient.set(4, pot4); ambient.set(5, pot5); ambient.set(6, pot6); ambient.send(); // Ambientに送信する
if(digitalRead(SW1) == LOW){ //手動注水ボタン1 digitalWrite(PUMP1,HIGH); delay(pump_time); digitalWrite(PUMP1,LOW); } if(digitalRead(SW2) == LOW){ digitalWrite(PUMP2,HIGH); delay(pump_time); digitalWrite(PUMP2,LOW); } if(digitalRead(SW3) == LOW){ digitalWrite(PUMP3,HIGH); delay(pump_time); digitalWrite(PUMP3,LOW); } if(digitalRead(SW4) == LOW){ digitalWrite(PUMP4,HIGH); delay(pump_time); digitalWrite(PUMP4,LOW); } if(digitalRead(SW5) == LOW){ digitalWrite(PUMP5,HIGH); delay(pump_time); digitalWrite(PUMP5,LOW); } if(digitalRead(SW6) == LOW){ digitalWrite(PUMP6,HIGH); delay(pump_time); digitalWrite(PUMP6,LOW); } if(humi1<Humidity1){ //潅水開始の数値 digitalWrite(PUMP1,HIGH); delay(pump_time); //灌水秒数 digitalWrite(PUMP1,LOW); } if(humi2<Humidity1){ digitalWrite(PUMP2,HIGH); delay(pump_time); digitalWrite(PUMP2,LOW); } if(humi3<Humidity1){ digitalWrite(PUMP3,HIGH); delay(pump_time); digitalWrite(PUMP3,LOW); } if(humi4<Humidity1){ digitalWrite(PUMP4,HIGH); delay(pump_time); digitalWrite(PUMP4,LOW); } if(humi5<Humidity1){ digitalWrite(PUMP5,HIGH); delay(pump_time); digitalWrite(PUMP5,LOW); } if(humi6<Humidity1){ digitalWrite(PUMP6,HIGH); delay(pump_time); digitalWrite(PUMP6,LOW); }
delay(1000UL*30UL); }
①課題:ポンプ稼働中に点灯するLEDが基板上なので室内から確認出来ない。
改善:LEDを各蠕動ポンプの左側に取り付けてどのポンプが稼働中なのか視認し易くした。


by ainame60
| 2022-10-17 08:06
| DIY・電子工作
|
Comments(0)

