2025年 09月 10日
防雨配電箱/プラケース被せ式
|



ズッキーニへの注水ポンプを制御するArduinoスケッチは自分で打ったが、ChatGPTに直されたのを丸写し
//ズッキ潅水とモニター ChatGPTの改善
//millis() で 30秒周期を管理(Ambient制限に対応)
//メインループがノンブロッキングになる → ポンプ制御やWiFi再接続が止まらない
//センサー値は複数回平均化で安定化
//WiFi切断時に自動再接続
#include <Wire.h>
#include <WiFi.h>
#include "Adafruit_Si7021.h"
#include <Ambient.h>
const char* ssid = "Buffalo-G-3DD8";//Buffalo-A-3DD8干渉が少ない通信が安定
const char* password = "******";
WiFiClient client;
Ambient ambient;
unsigned int channelId =***; // AmbientのチャネルID
const char* writeKey = "********"; // ライトキー
int VpinZ = 14; // ズッキセンサー電源
int datapinZ= 33; // ズッキ注水有無
int pumpPin = 27; // ズッキポンプ
int pumpState = LOW;
unsigned long previousMillis2 = 0; // ポンプ用タイマー
const unsigned long OnTime2 = 1000UL * 60UL * 2UL; // 2分
const unsigned long OffTime2 = 1000UL * 60UL * 30UL; // 30分
unsigned long previousSendMillis = 0;
const unsigned long sendInterval = 1000UL * 30UL; // 30秒ごとにAmbient送信
Adafruit_Si7021 sensor = Adafruit_Si7021();
void setup() {
pinMode(pumpPin, OUTPUT);
pinMode(VpinZ, OUTPUT);
pinMode(datapinZ, INPUT);
Serial.begin(115200);
while (!Serial);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println(WiFi.localIP());
ambient.begin(channelId, writeKey, &client);
if (!sensor.begin()) {
Serial.println("Did not find Si7021 sensor!");
while (true);
}
}
void loop() {
unsigned long currentMillis = millis();
// --- ポンプ制御 ---
if ((pumpState == HIGH) && (currentMillis - previousMillis2 >= OnTime2)) {
pumpState = LOW;
previousMillis2 = currentMillis;
digitalWrite(pumpPin, pumpState);
}
else if ((pumpState == LOW) && (currentMillis - previousMillis2 >= OffTime2)) {
pumpState = HIGH;
previousMillis2 = currentMillis;
digitalWrite(pumpPin, pumpState);
}
// --- 30秒ごとのセンサー送信 ---
if (currentMillis - previousSendMillis >= sendInterval) {
previousSendMillis = currentMillis;
digitalWrite(VpinZ, HIGH);
delay(500); // センサー安定化
long rawZ = 0;
for (int i = 0; i < 5; i++) {
rawZ += analogRead(datapinZ);
delay(10);
}
rawZ /= 5;
int valueZ = map(rawZ, 1600, 4095, 100, 0);
float temp = sensor.readTemperature();
float humid = sensor.readHumidity();
Serial.printf("潅水:%d 温度:%.2f 湿度:%.2f\n", valueZ, temp, humid);
ambient.set(1, valueZ);
ambient.set(2, temp);
ambient.set(3, humid);
if (!ambient.send()) {
Serial.println("Ambient send failed!");
}
digitalWrite(VpinZ, LOW);
}
// --- WiFi再接続処理 ---
if (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, password);
}
}
by ainame60
| 2025-09-10 06:00
| DIY・電子工作
|
Comments(0)

