#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <DHT.h>
int entrancePin = 7;
int exitPin = 4;
int beeCount = 10; // Counter for bee movements. Assume bee total number is 10
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define HUMIDITY_SENSOR_PIN A0
const int LED_PIN = 13;
const int BUZZER_PIN = 8;
LiquidCrystal_I2C lcd(0x27, 16, 2);
SoftwareSerial bluetooth(10, 11);
void setup() {
Serial.begin(9600); //for debugging
lcd.init();
lcd.backlight();
pinMode(entrancePin, INPUT);
pinMode(exitPin, INPUT);
bluetooth.begin(9600);
dht.begin();
pinMode(HUMIDITY_SENSOR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
delay(1000);
}
void loop() {
float temperatureC = dht.readTemperature();
int humidityLevel = dht.readHumidity();
int moistureLevel = readHumidity();
if (digitalRead(entrancePin) == HIGH) { //check if bee entered
beeCount++;
Serial.print("Bee entered. Count: "); //for debugging change to BT
Serial.println(beeCount); //for debugging change to BT
delay(1000);
}
if (digitalRead(exitPin) == HIGH) { //check if bee exited
beeCount--;
Serial.print("Bee exited. Count: "); //for debugging change to BT
Serial.println(beeCount); //for debugging change to BT
delay(1000);
}
lcd.setCursor(0, 0);
lcd.print("Temps:");
lcd.setCursor(7, 0);
lcd.print(temperatureC);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity:");
lcd.setCursor(10, 1);
lcd.print(humidityLevel);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("Moisture:");
lcd.setCursor(10, 2);
lcd.print(moistureLevel);
if(humidityLevel > 60){
bluetooth.println("Humidity level above 60%");
Serial.println("Humidity level above 60%"); //for debugging
blinkLED();
buzzerOn();
}else if(humidityLevel < 50){
bluetooth.println("Humidity level below 50%");
Serial.println("Humidity level below 50%"); //for debugging
blinkLED();
buzzerOn();
}
if (temperatureC > 40) {
bluetooth.println("Temperature is above 40 degrees Celsius");
Serial.println("Temperature is above 40 degrees Celsius"); //for debugging
blinkLED();
buzzerOn();
}else if(temperatureC < 10){
bluetooth.println("Temperature is below 10 degrees Celsius");
Serial.println("Temperature is below 10 degrees Celsius"); //for debugging
blinkLED();
buzzerOn();
}
delay(1000);
}
void blinkLED() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
void buzzerOn() {
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(BUZZER_PIN, LOW);
delay(1000);
}
int readHumidity() {
int humidityVal = analogRead(HUMIDITY_SENSOR_PIN);
return humidityVal;
}