Gambaran Umum
Sistem ini memantau kelembaban tanah di taman sekolah dan mengaktifkan pompa air secara otomatis ketika tanah kering. Data kelembaban juga dapat dilihat melalui antarmuka web atau notifikasi Telegram.
- Sensor kelembaban tanah (Soil Moisture Sensor)
- Pompa air mini (5V DC submersible pump)
- Notifikasi Telegram saat penyiraman aktif
- Antarmuka web untuk memantau riwayat kelembaban
- Opsional: integrasi dengan jadwal penyiraman harian
Cocok untuk pembelajaran mata pelajaran: IoT, Embedded System, Pemrograman Python, dan Teknologi Pertanian Digital.
Kebutuhan Perangkat Keras
- Raspberry Pi 3B+ atau 4
- Sensor Kelembaban Tanah (Soil Moisture Sensor, analog)
- Pompa air mini 5V DC (submersible pump)
- Modul Relay 1-channel
- Resistor 10kΩ (jika menggunakan ADC eksternal)
- Breadboard dan kabel jumper
- Opsional: MCP3008 ADC (jika sensor analog)
Kebutuhan Perangkat Lunak
- Raspberry Pi OS (64-bit recommended)
- Python 3.9+
- Pustaka Python:
RPi.GPIO,spidev(jika pakai MCP3008),requests,flask - Akun Telegram Bot (untuk notifikasi)
Langkah Instalasi
-
Instal dependensi Python:
sudo apt update sudo apt install python3-pip python3-spidev pip3 install RPi.GPIO requests flask -
Aktifkan SPI (jika pakai MCP3008):
sudo raspi-config → Interface Options → SPI → Enable -
Sambungkan komponen:
- Sensor kelembaban → MCP3008 CH0 (jika analog)
- MCP3008 → SPI ke Raspberry Pi
- Relay IN → GPIO 18
- Pompa → Relay NO terminal
-
Konfigurasi Telegram: Ganti
BOT_TOKENdanCHAT_IDdi kode. -
Jalankan skrip:
python3 smart_garden.py
Kode Program Lengkap (smart_garden.py)
import RPi.GPIO as GPIO
import time
import spidev
import requests
from flask import Flask, jsonify
# Konfigurasi
PUMP_PIN = 18
BOT_TOKEN = 'ISI_DENGAN_TOKEN_BOT_ANDA'
CHAT_ID = 'ISI_DENGAN_CHAT_ID_ANDA'
# Inisialisasi GPIO & SPI
GPIO.setmode(GPIO.BCM)
GPIO.setup(PUMP_PIN, GPIO.OUT)
GPIO.output(PUMP_PIN, GPIO.HIGH) # Relay aktif LOW
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1000000
app = Flask(__name__)
def read_moisture():
# Baca dari MCP3008 CH0
adc = spi.xfer2([1, (8 + 0) << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data # 0 (basah) – 1023 (kering)
def send_telegram(msg):
url = f'https://api.telegram.org/bot{BOT_TOKEN}/sendMessage'
try:
requests.post(url, data={'chat_id': CHAT_ID, 'text': msg})
except:
pass
def water_plants(duration=5):
GPIO.output(PUMP_PIN, GPIO.LOW)
send_telegram("🌱 Penyiraman dimulai selama {} detik.".format(duration))
time.sleep(duration)
GPIO.output(PUMP_PIN, GPIO.HIGH)
send_telegram("💧 Penyiraman selesai.")
@app.route('/status')
def status():
moisture = read_moisture()
return jsonify({
'moisture_value': moisture,
'moisture_percent': round((1023 - moisture) / 1023 * 100, 1),
'needs_water': moisture > 700
})
@app.route('/water')
def manual_water():
water_plants(5)
return jsonify({'status': 'success'})
# Loop utama (jalan di thread terpisah jika perlu)
def main_loop():
while True:
moisture = read_moisture()
if moisture > 700: # Threshold kering
water_plants(5)
time.sleep(300) # Cek tiap 5 menit
if __name__ == '__main__':
try:
# Jalankan Flask di thread terpisah jika ingin loop + web server
import threading
threading.Thread(target=main_loop, daemon=True).start()
app.run(host='0.0.0.0', port=5000)
except KeyboardInterrupt:
GPIO.cleanup()
spi.close()
Diagram Koneksi (Sederhana)
Raspberry Pi ──┬── GPIO18 → Relay IN
├── 3.3V, GND → MCP3008 VDD, GND
├── MOSI, MISO, SCLK, CE0 → MCP3008
└── MCP3008 CH0 → Sensor Kelembaban Tanah
Relay NO → Pompa Air 5V
Relay VCC → 5V, GND → GND
Pemecahan Masalah
- Sensor tidak terbaca: Pastikan SPI diaktifkan dan kabel MCP3008 terhubung benar.
- Pompa tidak menyala: Periksa logika relay (aktif LOW/HIGH) dan sumber daya pompa.
- Nilai kelembaban tidak masuk akal: Kalibrasi sensor di tanah kering dan basah untuk menentukan threshold yang tepat.
- Notifikasi Telegram gagal: Pastikan Raspberry Pi terhubung ke internet dan token valid.
- Flask error “Address already in use”: Hentikan proses sebelumnya dengan
sudo lsof -i :5000lalukill -9 [PID].