#include <Wire.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
#include "DHTesp.h"
const int DHT_PIN = 15;
DHTesp dhtSensor;
const int servoPin = 18;
Servo servo; //initialize servo
#define trigPin 19 // initilize pin19 for HCSR04 trigger pin
#define echoPin 23 // initilize pin23 for HCSR04 Echo pin
#define ledR 32 // initilize pin32 for LED RED
#define ledG 27 // initilize pin35 for LED GREEN
int pos = 0;
void setup()
{
lcd.begin (16, 2); // begin LCD
lcd.init(); // Initialize LCD
lcd.setCursor(2, 0); // Set the cursor
// Print a message to the LCD.
lcd.backlight();
lcd.print(" WELCOME");
lcd.setCursor(1, 1);
lcd.print("CHICKEN FEEDER");
delay(5000);
// initialize the lcd
Serial.begin (115200);
servo.attach(servoPin, 500, 2400);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledR, OUTPUT);
pinMode(ledG, OUTPUT);
int pos = 0;
}
void loop()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
lcd.begin(16, 2);
// clear old screen data
lcd.clear();
// text to be dispalyed on the screen
lcd.setCursor(1, 0);
lcd.print("CHICKEN FEEDER");
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
lcd.setCursor(2, 1);
lcd.print ("LEVEL :");
if (distance <= 50)
{
servo.write(180);
Serial.print(distance);
lcd.print (distance);
lcd.print ("cm");
digitalWrite(ledR, HIGH);
digitalWrite(ledG, LOW);
delay(100);
for (pos = 180; pos >= 0; pos -= 1) // goes from 180 degrees to 0 degrees // in steps of 1 degree
{
servo.write (pos); // tell servo to go to position in variable 'pos'
delay (15); // waits 5ms for the servo to reach the position
}
digitalWrite(ledR, HIGH);
digitalWrite(ledG, LOW);
Serial.println("cm : PLEASE TOPUP CHICKEN'S FOOD ");
delay(500);
for (pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{
servo.write(pos);
delay(15);
}
}
else {
Serial.print(distance);
lcd.print (distance);
lcd.print ("cm");
digitalWrite(ledR, LOW);
digitalWrite(ledG, HIGH);
Serial.println("cm : CHICKEN FOOD IN GOOD LEVEL ");
delay(500);
servo.write(0);
}
}