IEIndustrial Automation & EmbeddedB.Tech Capstone, SRM University, June 2023
Advanced Irrigation Automation System (AIAS)
Capstone smart-irrigation system — a NodeMCU RC rover with a submersible pump distributes water across irregular garden areas, while capacitive soil-moisture + DHT11 sensors stream to ThingSpeak for real-time analytics and remote threshold management.
Hardware & Architecture
- NodeMCU (ESP8266) + SIM800L GSM/GPRS module for networking.
- Capacitive soil-moisture sensor and DHT11 temperature/humidity sensor.
- L298N motor controller, 4x DC motors, 5V relay module, submersible mini water pump, 2200mAh LiPo battery.
Key Highlights
- RC rover with submersible pump + sprinkler navigates and evenly waters irregularly shaped garden areas.
- Continuous soil/temperature/humidity monitoring prevents overwatering and root rot.
- Cloud feedback loop streams sensor data to ThingSpeak for visualization, analytics, and remote threshold management.
Images



Code
aias_rc_control.inoRC Web-Server Motor Controlcpp
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
// Connections for drive Motor FR & BR
int enA = D1;
int in1 = D2;
int in2 = D3;
// Connections for drive Motor FL & BL
int in3 = D4;
int in4 = D5;
int enB = D6;
const int buzPin = D7; // Buzzer pin
const int ledPin = D8; // LED pin
const int wifiLedPin = D0; // WiFi connection indicator
String command; // String to store app command state
int SPEED = 1023; // Motor speed 330-1023
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200);
pinMode(buzPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(wifiLedPin, OUTPUT);
digitalWrite(wifiLedPin, HIGH);
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enB, OUTPUT);
analogWrite(enA, SPEED);
analogWrite(enB, SPEED);
// WiFi Connection Logic
if (WiFi.status() == WL_CONNECTED) {
digitalWrite(wifiLedPin, LOW);
} else {
WiFi.mode(WIFI_AP);
// AP setup omitted for brevity
digitalWrite(wifiLedPin, HIGH);
}
}
void loop() {
ArduinoOTA.handle();
server.handleClient();
command = server.arg("State");
// Movement Switch Logic
if (command == "F") Forward();
else if (command == "B") Backward();
else if (command == "R") TurnRight();
else if (command == "L") TurnLeft();
else if (command == "S") Stop();
// ... Additional speed and lighting commands
}aias_thingspeak.inoThingSpeak IoT Data Loggingcpp
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN D4
DHT dht(DHTPIN, DHT11);
String apiKey = "C251CK6FHOR7PST4";
const char *ssid = "AIAS";
const char *pass = "1234567890";
const char *server = "api.thingspeak.com";
void loop() {
// Data collection logic omitted for brevity
if (client.connect(server, 80)) {
String postStr = apiKey;
postStr += "&field1=";
postStr += String(soilmoisturepercent);
postStr += "&field2=";
postStr += String(h); // Humidity
postStr += "&field3=";
postStr += String(t); // Temperature
postStr += "&field4=";
postStr += String(relaypin);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
}
}