/* ABE 80 - G2L
Project
Design of an Arduino-based IoT system for Agricultural Production
Submitted by: Paul Andreau M. Lescano & Jhanylla N. Marasigan
January 3, 2024
*/
#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <ThingSpeak.h>
const int DHT_PIN = 19;
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 4 );
WiFiClient client;
const char* ssid = "Wokwi-GUEST"; // wokwi public gateway
const char* pass = ""; // no password
unsigned long myChannelNumber = 2342610; // from your ThingSpeak account
const char* myWriteAPIKey = "7XSR0TQM00GVEHK7"; // from your ThingSpeak account
const char* server = "api.thingspeak.com";
int temp;
int hum;
int thi;
int pos = 0;
int counter;
float distance;
int percentfull;
int RedLED= 27;
int OrangeLED= 14;
int YellowLED= 12;
int GreenLED= 13;
int LDR= 23;
int Lightbulb= 26;
#define ECHOpin 33
#define TRIGpin 25
String THIstatus;
String Daylight;
String Waterlevel;
void setup() {
Serial.begin(9600);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
lcd.init();
lcd.backlight();
WiFi.begin(ssid, pass);
while(WiFi.status() != WL_CONNECTED){
Serial.print(" . ");
delay(100);
}
Serial.println("WiFi Connected!");
Serial.println("");
WiFi.mode(WIFI_STA); // instructing the Wi-Fi module to operate in Station mode, allowing the device to connect to an
ThingSpeak.begin(client); // initialize communication
pinMode(GreenLED, OUTPUT);
pinMode(YellowLED, OUTPUT);
pinMode(OrangeLED, OUTPUT);
pinMode(RedLED, OUTPUT);
pinMode(LDR, INPUT);
pinMode(Lightbulb, OUTPUT);
pinMode(TRIGpin, OUTPUT);
pinMode(ECHOpin, INPUT);
delay(20000);//alisin ko din after, for simu onleh
}
void loop() {
if (WiFi.status() != WL_CONNECTED){
Serial.print("Attempting to reconnect");
while(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, pass);
Serial.print(".");
delay(100);
}
}
temp = dhtSensor.getTemperature();
Serial.print("Temperature, C = ");
Serial.println(temp);
hum = dhtSensor.getHumidity();
Serial.print("Humidity, % = ");
Serial.println(hum);
thi=(1.8*temp+32) - (0.55 - 0.0055 * hum) * (1.8*temp - 26);
//https://www.frontiersin.org/articles/10.3389/fanim.2022.946592/full
Serial.print("THI = ");
Serial.println(thi);
if(thi<= 72){
THIstatus="Safe";
digitalWrite(GreenLED, HIGH);
digitalWrite(YellowLED, LOW);
digitalWrite(OrangeLED, LOW);
digitalWrite(RedLED, LOW);
}
else if(thi>= 73 && thi<=77){
THIstatus="Alert";
digitalWrite(GreenLED, LOW);
digitalWrite(YellowLED, HIGH);
digitalWrite(OrangeLED, LOW);
digitalWrite(RedLED, LOW);
}
else if(thi>= 78 && thi<=82){
THIstatus="Danger";
digitalWrite(GreenLED, LOW);
digitalWrite(YellowLED, LOW);
digitalWrite(OrangeLED, HIGH);
digitalWrite(RedLED, LOW);
}
else{
THIstatus="Emergency";
digitalWrite(GreenLED, LOW);
digitalWrite(YellowLED, LOW);
digitalWrite(OrangeLED, LOW);
digitalWrite(RedLED, HIGH);
counter=0;
}
Serial.print("Stress Level = ");
Serial.println(THIstatus);
if(digitalRead(LDR)==HIGH){
Serial.print("FARM: ");
Daylight="Dark";
Serial.println(Daylight);
digitalWrite(Lightbulb, HIGH);
}
else{
Serial.print("FARM: ");
Daylight="Light";
Serial.println(Daylight);
digitalWrite(Lightbulb, LOW);
}
//Start measurement from ultrasonic sensor
digitalWrite(TRIGpin, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGpin, LOW);
//Read measurement from ultrasonic sensor
int duration = pulseIn(ECHOpin, HIGH);
Serial.print("Water level, cm = ");
distance=(duration/58);
Serial.println(184-distance);
/*Watertank from Bestank is assumed to be 1000L
having a height of 184cm*/
percentfull= (1-(distance/184))*100;
Serial.print("Water tank percentage: ");
Serial.print(percentfull);
Serial.println("%");
lcd.setCursor(0, 0);
lcd.print("SMART CATTLE FARM");
lcd.setCursor(0, 1);
lcd.print("T,C = ");
lcd.print(temp);
lcd.setCursor(0, 2);
lcd.print("H,% = ");
lcd.print(hum);
lcd.setCursor(0, 3);
lcd.print("Stress = ");
lcd.print(THIstatus);
lcd.setCursor(9, 1);
lcd.print("THI = ");
lcd.print(thi);
lcd.setCursor(9, 2);
lcd.print("TANK,% = ");
lcd.print(percentfull);
if(THIstatus="Emergency"){
while(counter<15){
tone(15, 960, 250);
delay(250);
tone(15, 853, 250);
delay(250);
counter++;
}
}
ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, hum);
ThingSpeak.setField(3, thi);
ThingSpeak.setField(4, percentfull);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x==200){
Serial.println("Channel update successful");
}
else {
Serial.println("problem updating channel. HTTP error code" + String(x));
}
Serial.println("");
delay(20000);
lcd.clear();
}