पार्ट्स लिस्ट
| पार्ट | संख्या | लगभग | खरीदें |
|---|---|---|---|
| ESP32 DevKit V1 (30-pin) | 1 | ₹380 | खरीदें ESP32 DevKit V1 (30-pin) |
| Capacitive soil moisture sensor v1.2 | 1 | ₹80 | खरीदें Capacitive soil moisture sensor v1.2 |
| 1-channel relay module, 5 V coil, 3.3 V-trigger (active-LOW) | 1 | ₹70 | खरीदें 1-channel relay module, 5 V coil, 3.3 V-trigger (active-LOW) |
| 5 V submersible mini pump + 1 m silicone tube | 1 | ₹150 | खरीदें 5 V submersible mini pump + 1 m silicone tube |
| 5 V 2 A adapter for the pump | 1 | ₹150 | खरीदें 5 V 2 A adapter for the pump |
| Jumper wires | 1 | ₹30 | खरीदें Jumper wires |
| कुल | ₹860 |
एफ़िलिएट सूचना: “खरीदें” लिंक से FlashReady को बिना अतिरिक्त लागत के छोटा कमीशन मिल सकता है। कीमतें अनुमानित हैं।
वायरिंग
| ESP32 DevKit V1 | Part · pin | Wire | Notes |
|---|---|---|---|
| — | 1-channel relay module (5 V coil) · NO | — | To पंप + (पंप का − अडैप्टर के GND पर) (not drawn) |
| 3V3 | Capacitive soil moisture sensor v1.2 · VCC | red | 3.3 V से AOUT, ESP32 के ADC की रेंज के अंदर रहता है |
| GND | Capacitive soil moisture sensor v1.2 · GND | black | |
| D34 | Capacitive soil moisture sensor v1.2 · AOUT | purple | ADC1 — Wi-Fi चालू होने पर भी काम करता है |
| VIN | 1-channel relay module (5 V coil) · DC+ | red | |
| GND | 1-channel relay module (5 V coil) · DC− | black | |
| D26 | 1-channel relay module (5 V coil) · IN | green | Active-LOW |
| 5 V 2 A पंप अडैप्टर · +5V | 1-channel relay module (5 V coil) · COM | red | रिले NO → पंप +; पंप − → अडैप्टर का GND। सिर्फ़ लो-वोल्टेज, मेन्स बिल्कुल नहीं |
बोर्ड की ख़ास बातें: अपने सेंसर के लिए <code>RAW_DRY</code> और <code>RAW_WET</code> कैलिब्रेट करें: raw वैल्यू हवा में और पानी में रखकर प्रिंट करें। रिले सिर्फ़ पंप की अपनी 5 V सप्लाई को स्विच करता है — केवल लो-वोल्टेज। पंप को ESP32 के पिनों से न चलाएँ।
कोड
// Plant watering system — ESP32 DevKit V1 + capacitive soil sensor + relay module + 5 V DC pump.
// Waters in short bursts when the soil is dry, then waits for the water to soak in.
// Soil AOUT → D34 (ADC1, works with Wi-Fi on). Relay IN → D26 (active-LOW). The relay switches the
// pump's own 5 V supply — low voltage only, never mains.
constexpr uint8_t SOIL_PIN = 34;
constexpr uint8_t RELAY_PIN = 26;
constexpr bool RELAY_ACTIVE_LOW = true;
// Calibrate: read the raw value with the probe in dry air and in a glass of water.
constexpr int RAW_DRY = 3000;
constexpr int RAW_WET = 1300;
constexpr int WATER_BELOW_PERCENT = 35;
constexpr unsigned long PUMP_MS = 5000; // one watering burst
constexpr unsigned long SOAK_MS = 60UL * 1000; // let it soak before measuring again
constexpr uint8_t MAX_BURSTS_PER_HOUR = 6; // safety: a broken sensor can't flood the pot
unsigned long hourStart = 0;
uint8_t burstsThisHour = 0;
void setPump(bool on) {
digitalWrite(RELAY_PIN, (on != RELAY_ACTIVE_LOW) ? HIGH : LOW);
}
int moisturePercent() {
long sum = 0;
for (int i = 0; i < 16; i++) {
sum += analogRead(SOIL_PIN);
delay(5);
}
int raw = sum / 16;
return constrain(map(raw, RAW_DRY, RAW_WET, 0, 100), 0, 100);
}
void setup() {
digitalWrite(RELAY_PIN, HIGH); // pump off before the pin becomes an output
pinMode(RELAY_PIN, OUTPUT);
setPump(false);
analogReadResolution(12);
Serial.begin(115200);
}
void loop() {
if (millis() - hourStart > 3600UL * 1000) {
hourStart = millis();
burstsThisHour = 0;
}
int moisture = moisturePercent();
Serial.printf("Soil moisture: %d%%\n", moisture);
if (moisture < WATER_BELOW_PERCENT && burstsThisHour < MAX_BURSTS_PER_HOUR) {
Serial.println("Dry — watering");
setPump(true);
delay(PUMP_MS);
setPump(false);
burstsThisHour++;
delay(SOAK_MS);
} else {
if (burstsThisHour >= MAX_BURSTS_PER_HOUR) Serial.println("Burst limit reached — check the sensor and tank");
delay(10000);
}
}// Plant watering system — ESP32 DevKit V1 + capacitive soil sensor + relay module + 5 V DC pump.
// Waters in short bursts when the soil is dry, then waits for the water to soak in.
// Soil AOUT → D34 (ADC1, works with Wi-Fi on). Relay IN → D26 (active-LOW). The relay switches the
// pump's own 5 V supply — low voltage only, never mains.
constexpr uint8_t SOIL_PIN = 34;
constexpr uint8_t RELAY_PIN = 26;
constexpr bool RELAY_ACTIVE_LOW = true;
// Calibrate: read the raw value with the probe in dry air and in a glass of water.
constexpr int RAW_DRY = 3000;
constexpr int RAW_WET = 1300;
constexpr int WATER_BELOW_PERCENT = 35;
constexpr unsigned long PUMP_MS = 5000; // one watering burst
constexpr unsigned long SOAK_MS = 60UL * 1000; // let it soak before measuring again
constexpr uint8_t MAX_BURSTS_PER_HOUR = 6; // safety: a broken sensor can't flood the pot
unsigned long hourStart = 0;
uint8_t burstsThisHour = 0;
void setPump(bool on) {
digitalWrite(RELAY_PIN, (on != RELAY_ACTIVE_LOW) ? HIGH : LOW);
}
int moisturePercent() {
long sum = 0;
for (int i = 0; i < 16; i++) {
sum += analogRead(SOIL_PIN);
delay(5);
}
int raw = sum / 16;
return constrain(map(raw, RAW_DRY, RAW_WET, 0, 100), 0, 100);
}
void setup() {
digitalWrite(RELAY_PIN, HIGH); // pump off before the pin becomes an output
pinMode(RELAY_PIN, OUTPUT);
setPump(false);
analogReadResolution(12);
Serial.begin(115200);
}
void loop() {
if (millis() - hourStart > 3600UL * 1000) {
hourStart = millis();
burstsThisHour = 0;
}
int moisture = moisturePercent();
Serial.printf("Soil moisture: %d%%\n", moisture);
if (moisture < WATER_BELOW_PERCENT && burstsThisHour < MAX_BURSTS_PER_HOUR) {
Serial.println("Dry — watering");
setPump(true);
delay(PUMP_MS);
setPump(false);
burstsThisHour++;
delay(SOAK_MS);
} else {
if (burstsThisHour >= MAX_BURSTS_PER_HOUR) Serial.println("Burst limit reached — check the sensor and tank");
delay(10000);
}
}Compiled for esp32 on esp32 3.3.12 · 3 Nov 2026
यह कैसे काम करता है
Capacitive soil sensor यह नापता है कि मिट्टी कितना charge जमा कर पाती है, और यह पानी की मात्रा के साथ बढ़ता है। सस्ते दो-काँटे वाले resistive प्रोब के उलट, इसमें बाहर खुला कोई धातु नहीं होता जिसमें जंग लगे, इसलिए यह गमले में महीनों चलता है।
ESP32 सेंसर को GPIO34 पर पढ़ता है (यह ADC1 पिन है, इसलिए बाद में Wi-Fi जोड़ने पर भी काम करता रहेगा), 16 रीडिंग का औसत लेता है और दो कैलिब्रेशन नंबरों से उसे 0–100 % पर मैप करता है। 35 % से नीचे यह पंप को पाँच सेकंड चलाता है, फिर दोबारा नापने से पहले एक मिनट रुकता है ताकि पानी मिट्टी में सोख जाए — वरना पानी नीचे पहुँचने से पहले ही यह पंप चलाता रहता।
एक burst limit पानी देने को एक घंटे में छह बर्स्ट तक सीमित रखती है। अगर सेंसर गमले से निकल जाए या टूट जाए, तो सबसे बुरी हालत में थोड़ा ज़्यादा पानी गिरेगा — बालकनी में बाढ़ नहीं आएगी।
पंप अपने अलग 5 V अडैप्टर से, रिले के COM और NO कॉन्टैक्ट के ज़रिए चलता है। पूरा प्रोजेक्ट लो-वोल्टेज है — इसमें कहीं भी मेन्स (230 V) नहीं है।
समस्या समाधान
नमी की रीडिंग उछलती रहती है
प्रोब को उसकी लाइन तक मिट्टी में घुसाएँ और इलेक्ट्रॉनिक्स वाला हिस्सा मिट्टी से ऊपर रखें — बोर्ड के ऊपरी हिस्से पर पानी गिरने से रीडिंग बेतुकी हो जाती है।
पंप चलता है पर पानी नहीं निकलता
मिनी पंप ख़ुद prime नहीं कर पाते: पंप टंकी में पानी के अंदर डूबा होना चाहिए। ट्यूब में हवा तो नहीं फँसी, यह देखें।
पानी ज़्यादा दे देता है
SOAK_MS बढ़ाएँ ताकि अगली रीडिंग से पहले पानी मिट्टी में फैल जाए, या WATER_BELOW_PERCENT कम करें।
आगे क्या करें
- float switch जोड़ें ताकि पंप कभी ख़ाली टंकी पर न चले।
- टंकी दोबारा भरने का समय होने पर फ़ोन पर नोटिफ़िकेशन भेजें।
- दूसरा सेंसर और पंप लगाकर कई गमलों को पानी दें।



