#define BLYNK_TEMPLATE_NAME "Cattle Monitoring System"
#define BLYNK_AUTH_TOKEN "uSDmb2rqnyzAOOiCSbReSIiSlnUt3he1"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 21
#define DHTTYPE DHT22
#define BUTTON1_PIN 12
#define BUTTON2_PIN 14
#define BUZZER_PIN 27
#define ALERT_TEMPERATURE 20
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int counter = 0;
void setup() {
Serial.begin(115200);
Serial.println("Starting...");
dht.begin();
lcd.init();
lcd.backlight();
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(BUTTON2_PIN, INPUT_PULLUP);
lcd.setCursor(0, 0);
lcd.print("Smart Cattle");
lcd.setCursor(0, 1);
lcd.print("Monitoring");
delay(2000);
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
lcd.setCursor(0, 0);
lcd.print("Failed to read");
lcd.setCursor(0, 1);
lcd.print("from DHT sensor");
delay(2000);
return;
}
if (temperature > ALERT_TEMPERATURE) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ALERT: High Temp!");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
Serial.println("High temperature detected, buzzing...");
digitalWrite(BUZZER_PIN, HIGH);
delay(5000); // Buzz for 5 seconds
digitalWrite(BUZZER_PIN, LOW);
delay(1000); // Wait for 1 second after buzzer off
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print(" %");
lcd.setCursor(10, 1);
lcd.print("Cnt: ");
lcd.print(counter);
}
if (digitalRead(BUTTON1_PIN) == LOW) {
counter++;
delay(200);
}
if (digitalRead(BUTTON2_PIN) == LOW) {
counter = 0;
delay(200);
}
delay(2000);
}