#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <LiquidCrystal_I2C.h>
/* Pin Definitions */
#define PIN_PH_SENSOR 34
#define PIN_EC_SENSOR 35
#define PIN_PELTIER_MOSFET 32
/* Global Objects */
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(115200);
Serial.println("Grover GrowBox Initializing...");
/* I2C Setup */
Wire.begin(21, 22);
/* LCD Setup */
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Grover Init...");
/* BME280 Setup */
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor!");
lcd.setCursor(0, 1);
lcd.print("BME280 Error!");
}
/* GPIO Setup */
pinMode(PIN_PH_SENSOR, INPUT);
pinMode(PIN_EC_SENSOR, INPUT);
pinMode(PIN_PELTIER_MOSFET, OUTPUT);
}
void loop() {
/* Read Temperature/Humidity */
float temp = bme.readTemperature();
float hum = bme.readHumidity();
/* Read pH/EC (Analog) */
int phRaw = analogRead(PIN_PH_SENSOR);
int ecRaw = analogRead(PIN_EC_SENSOR);
/* Mapping for Simulation */
float phVal = map(phRaw, 0, 4095, 0, 1400) / 100.0;
float ecVal = map(ecRaw, 0, 4095, 0, 5000) / 1000.0;
/* Serial Monitor Display */
Serial.print("Temp: "); Serial.print(temp); Serial.print("C | ");
Serial.print("Hum: "); Serial.print(hum); Serial.print("% | ");
Serial.print("pH: "); Serial.print(phVal); Serial.print(" | ");
Serial.print("EC: "); Serial.println(ecVal);
/* LCD Display Update */
lcd.setCursor(0, 0);
lcd.print("T:"); lcd.print(temp, 1); lcd.print("C H:"); lcd.print(hum, 0); lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("pH:"); lcd.print(phVal, 2); lcd.print(" EC:"); lcd.print(ecVal, 2);
/* Demo Peltier Logic */
if (temp > 28.0) {
digitalWrite(PIN_PELTIER_MOSFET, HIGH);
lcd.setCursor(0, 2);
lcd.print("COOLING: ON ");
} else {
digitalWrite(PIN_PELTIER_MOSFET, LOW);
lcd.setCursor(0, 2);
lcd.print("COOLING: OFF");
}
delay(2000);
}