#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define SPEAKER_PIN 13
#define DHT22_PIN1 4
#define DHT22_PIN2 3
#define DHT22_PIN3 2
const int ECHO_PIN1 = 19;
const int ECHO_PIN2 = 18;
const int ECHO_PIN3 = 17;
const int TRIG_PIN1 = 16;
const int TRIG_PIN2 = 15;
const int TRIG_PIN3 = 14;
const int SWITCH_1 = 10;
const int SWITCH_2 = 9;
const int SWITCH_3 = 8;
const int TIMER_1 = 5;
const int TIMER_2 = 6;
const int TIMER_3 = 7;
DHT dht1(DHT22_PIN1, DHT22);
DHT dht2(DHT22_PIN2, DHT22);
DHT dht3(DHT22_PIN3, DHT22);
LiquidCrystal_I2C lcd(0x27, 16, 4);
unsigned long prevTime = millis();
unsigned long prevTimeBuzzer = millis();
boolean buzz = false;
double temp1 = 0, temp2 = 0, temp3;
long duration1, duration2, duration3;
int distance1, distance2, distance3;
int c1State, c2State, c3State;
int t1State, t2State, t3State;
int timer1State, timer2State, timer3State;
int d1 = 0, h1 = 0, m1 = 0, s1 = 0, ms1 = 0;
int d2 = 0, h2 = 0, m2 = 0, s2 = 0, ms2 = 0;
int d3 = 0, h3 = 0, m3 = 0, s3 = 0, ms3 = 0;
byte degreeCelcius[8] = { //Special character for degree celcius
B11000,
B11000,
B00000,
B00111,
B00100,
B00100,
B00100,
B00111
};
byte bottle[8] = { //Special character for bottle
B00100,
B00100,
B01110,
B01110,
B01110,
B01110,
B01110,
B01110
};
void setup() {
pinMode(ECHO_PIN1, INPUT);
pinMode(ECHO_PIN2, INPUT);
pinMode(ECHO_PIN3, INPUT);
pinMode(TRIG_PIN1, OUTPUT);
pinMode(TRIG_PIN2, OUTPUT);
pinMode(TRIG_PIN3, OUTPUT);
pinMode(SWITCH_1, INPUT);
pinMode(SWITCH_2, INPUT);
pinMode(SWITCH_3, INPUT);
pinMode(TIMER_1, INPUT);
pinMode(TIMER_2, INPUT);
pinMode(TIMER_3, INPUT);
lcd.init();
lcd.begin(16,4);
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("NIPA PALM");
delay(200);
lcd.setCursor(4, 1);
lcd.print("JUICE (SASA)");
delay(200);
lcd.setCursor(4, 2);
lcd.print("FERMENTATION");
delay(200);
lcd.setCursor(1, 3);
lcd.print("MONITORING DEVICE");
delay(2000);
lcd.clear();
dht1.begin();
dht2.begin();
dht3.begin();
}
void choose() {
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" CHOOSE CONTAINER ");
lcd.setCursor(0, 1);
lcd.print(" (1)Tuba ");
lcd.setCursor(0, 2);
lcd.print(" (2)Vinegar ");
lcd.setCursor(0, 3);
lcd.print(" (3)Ethyl Alcohol ");
}
void container1() {
lcd.backlight();
lcd.createChar(0, degreeCelcius);
lcd.setCursor(0, 1);
lcd.print("Temperature:");
lcd.setCursor(0, 2);
lcd.print("PH Content:");
lcd.setCursor(14, 2);
lcd.print("n/a");
lcd.setCursor(0, 3);
lcd.print("Alcohol Lvl: ");
lcd.setCursor(14, 3);
lcd.print("n/a");
temp1 = dht1.readTemperature(); // Read temperature in celcius from dht sensor
lcd.setCursor(13, 1); // Print temperature on the LCD
lcd.print(temp1);
lcd.write(byte(0));
lcd.print(" ");
lcd.setCursor(2, 0);
lcd.print("C1 = ");
if(d1 < 10){
lcd.print("0");
lcd.print(d1);
lcd.print(":");
}
else{
lcd.print(d1);
lcd.print(":");
}
if(h1 < 10){
lcd.print("0");
lcd.print(h1);
lcd.print(":");
}
else{
lcd.print(h1);
lcd.print(":");
}
if(m1 < 10){
lcd.print("0");
lcd.print(m1);
lcd.print(":");
}
else{
lcd.print(m1);
lcd.print(":");
}
if(s1 < 10){
lcd.print("0");
lcd.print(s1);
}
else{
lcd.print(s1);
}
lcd.createChar(1, bottle);
digitalWrite(TRIG_PIN1, LOW);
digitalWrite(TRIG_PIN1, HIGH);
digitalWrite(TRIG_PIN1, LOW);
duration1 = pulseIn(ECHO_PIN1, HIGH);
distance1 = 0.03435 * (duration1 / 2); // Measures distance in cm
if (distance1 <= 10) { // Checks if distance is less than 10 cm
lcd.setCursor(19, 0);
lcd.write(byte(1));
}
else{
lcd.setCursor(19, 0);
lcd.print(" ");
}
}
void container2() {
lcd.backlight();
lcd.createChar(0, degreeCelcius);
lcd.setCursor(0, 1);
lcd.print("Temperature:");
lcd.setCursor(0, 2);
lcd.print("PH Content:");
lcd.setCursor(14, 2);
lcd.print("n/a");
lcd.setCursor(0, 3);
lcd.print("Alcohol Lvl: ");
lcd.setCursor(14, 3);
lcd.print("n/a");
temp2 = dht2.readTemperature(); // Read temperature in celcius from dht sensor
lcd.setCursor(13, 1); // Print temperature on the LCD
lcd.print(temp2);
lcd.write(byte(0));
lcd.print(" ");
lcd.setCursor(2, 0);
lcd.print("C2 = ");
if(d2 < 10){
lcd.print("0");
lcd.print(d2);
lcd.print(":");
}
else{
lcd.print(d2);
lcd.print(":");
}
if(h2 < 10){
lcd.print("0");
lcd.print(h2);
lcd.print(":");
}
else{
lcd.print(h2);
lcd.print(":");
}
if(m2 < 10){
lcd.print("0");
lcd.print(m2);
lcd.print(":");
}
else{
lcd.print(m2);
lcd.print(":");
}
if(s2 < 10){
lcd.print("0");
lcd.print(s2);
}
else{
lcd.print(s2);
}
lcd.createChar(1, bottle);
digitalWrite(TRIG_PIN2, LOW);
digitalWrite(TRIG_PIN2, HIGH);
digitalWrite(TRIG_PIN2, LOW);
duration2 = pulseIn(ECHO_PIN2, HIGH);
distance2 = 0.03435 * (duration2 / 2); // Measures distance in cm
if (distance2 <= 10) { // Checks if distance is less than 10 cm
lcd.setCursor(19, 0);
lcd.write(byte(1));
}
else{
lcd.setCursor(19, 0);
lcd.print(" ");
}
}
void container3() {
lcd.backlight();
lcd.createChar(0, degreeCelcius);
lcd.setCursor(0, 1);
lcd.print("Temperature:");
lcd.setCursor(0, 2);
lcd.print("PH Content:");
lcd.setCursor(14, 2);
lcd.print("n/a");
lcd.setCursor(0, 3);
lcd.print("Alcohol Lvl: ");
lcd.setCursor(14, 3);
lcd.print("n/a");
temp3 = dht3.readTemperature(); // Read temperature in celcius from dht sensor
lcd.setCursor(13, 1); // Print temperature on the LCD
lcd.print(temp3);
lcd.write(byte(0));
lcd.print(" ");
lcd.setCursor(2, 0);
lcd.print("C3 = ");
if(d3 < 10){
lcd.print("0");
lcd.print(d3);
lcd.print(":");
}
else{
lcd.print(d3);
lcd.print(":");
}
if(h3 < 10){
lcd.print("0");
lcd.print(h3);
lcd.print(":");
}
else{
lcd.print(h3);
lcd.print(":");
}
if(m3 < 10){
lcd.print("0");
lcd.print(m3);
lcd.print(":");
}
else{
lcd.print(m3);
lcd.print(":");
}
if(s3 < 10){
lcd.print("0");
lcd.print(s3);
}
else{
lcd.print(s3);
}
lcd.createChar(1, bottle);
digitalWrite(TRIG_PIN3, LOW);
digitalWrite(TRIG_PIN3, HIGH);
digitalWrite(TRIG_PIN3, LOW);
duration3 = pulseIn(ECHO_PIN3, HIGH);
distance3 = 0.03435 * (duration3 / 2); // Measures distance in cm
if (distance3 <= 10) { // Checks if distance is less than 10 cm
lcd.setCursor(19, 0);
lcd.write(byte(1));
}
else{
lcd.setCursor(19, 0);
lcd.print(" ");
}
}
void timer1() {
s1 = s1 + 1;
if(s1==60){
s1 = 0;
m1 = m1 + 1;
}
if(m1==60){
m1 = 0;
h1 = h1 + 1;
}
if(h1==24){
h1 = 0;
d1 = d1 + 1;
}
}
void timer2() {
s2 = s2 + 1;
if(s2==60){
s2 = 0;
m2 = m2 + 1;
}
if(m2==60){
m2 = 0;
h2 = h2 + 1;
}
if(h2==24){
h2 = 0;
d2 = d2 + 1;
}
}
void timer3() {
s3 = s3 + 1;
if(s3==60){
s3 = 0;
m3 = m3 + 1;
}
if(m3==60){
m3 = 0;
h3 = h3 + 1;
}
if(h3==24){
h3 = 0;
d3 = d3 + 1;
}
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - prevTime > 1000){
c1State = digitalRead(SWITCH_1);
c2State = digitalRead(SWITCH_2);
c3State = digitalRead(SWITCH_3);
t1State = digitalRead(TIMER_1);
t2State = digitalRead(TIMER_2);
t3State = digitalRead(TIMER_3);
if(c1State == 0){
container1();
}
else if(c2State == 0){
container2();
}
else if(c3State == 0){
container3();
}
else{
choose();
}
if(t1State == 0){
timer1State = HIGH;
}
else{
d1 = 0;
h1 = 0;
m1 = 0;
s1 = 0;
timer1State = LOW;
}
if(t2State == 0){
timer2State = HIGH;
}
else{
d2 = 0;
h2 = 0;
m2 = 0;
s2 = 0;
timer2State = LOW;
}
if(t3State == 0){
timer3State = HIGH;
}
else{
d3 = 0;
h3 = 0;
m3 = 0;
s3 = 0;
timer3State = LOW;
}
if(timer1State){
timer1();
}
if(timer2State){
timer2();
}
if(timer3State){
timer3();
}
if(s1 >= 5 or d2 >= 14 or d3 >= 2){
if(currentTime - prevTimeBuzzer > 2000){
tone(SPEAKER_PIN, 450);
delay(500);
noTone(SPEAKER_PIN);
prevTimeBuzzer = currentTime;
}
}
prevTime = currentTime;
}
}