Here is the Code and the diagram:
// Include Inseguitore
#include <Servo.h>
// Include Sensore Acqua e Display
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // libreria di gestione display lcd
// Include Bluetooth
#include <SoftwareSerial.h>
// Define Bluetooth
#define RXD 0
#define TXD 1
SoftwareSerial bt (RXD, TXD); //TXD 0, RXD 1
#define RELE 2 // PIN RELE VENTOLA
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // tipologia del display // addr en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// VARIABILI
int livello = 0; // variabile di memorizzazione del livello dell'acqua
int valoremin = 500; // variabile in cui viene memorizzato il valore minimo rilevabile dal sensore (definito sperimentalmente, con la bacinella vuota)
int valoremax = 700; // variabile in cui viene memorizzato il valore massimo rilevabile dal sensore (definito sperimentalmente, con la bacinella piena di acqua)
int i = 0; // indice utilizzato nel ciclo for per lo spegnimento preventivo dei led
// PIN INSEGUITORE
int sensorPin = A0;
int servoPin = 5;
// VARABILI INSEGUITORE
int sensorValue = 0;
int servoGrad = 90;
int tolleranza = 40;
Servo myservo;
void setup()
{
// Inizializzazione Monitor Seriale
Serial.begin(9600);
// analogReference(EXTERNAL);
// Inizializzazione Display
lcd.begin(16, 2); // 16 Caratteri, 2 Righe
for (int i = 0; i < 3; i++) // Accende l'illuminazione e fa lampeggiare 3 volte lo schermo
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // Termina lo show mantenendo illuminato lo sfondo
// PinMode
pinMode(RELE, OUTPUT); // RELE Ventola
pinMode (10, OUTPUT); // led verde collegato alla porta 9
pinMode (11, OUTPUT); // led verde collegato alla porta 10
pinMode (12, OUTPUT); // led giallo collegato alla porta 11
pinMode (13, OUTPUT); // led rosso collegato alla porta 12
digitalWrite (13, HIGH); // accende la spia rossa di livello basso (rimane sempre accesa) livello acqua <20%
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
//pinMode(RXD, INPUT); // Non usarlo
//pinMode(TXD, OUTPUT); // Non usarlo
// Inizializzazione Bluetooth
Serial.println("Bluetooth Connesso");
bt.begin(9600); // Bluetooth Connected
// INSEGUITORE
pinMode(sensorPin,INPUT);
myservo.attach(servoPin);
myservo.write(servoGrad);
// INSEGUITORE
}
void loop()
{
// TEMPERATURA
int aRead = 0;
aRead = analogRead(1);
delay(1000);
int temperatura = aRead * 0.48875;
Serial.print("Temperatura = ");
Serial.print(aRead);
Serial.print(" - ");
Serial.print(temperatura);
Serial.println("C" );
delay(500);
if(temperatura > 40)
{
digitalWrite(RELE, HIGH);
}
else
{
digitalWrite(RELE, LOW);
}
// TEMPERATURA
// SENSORE ACQUA
livello = analogRead (2); //acquisisce il segnale dal sensore livello acqua sull'analogico A2
delay(500);
Serial.print ("Livello = ");
Serial.print (livello);
if (livello < 500) // se il segnale e’ sotto il minimo
livello = 500; // lo porta al minimo
if (livello > 700) // se il segnale e’ sopra il massimo
livello = 700; // lo riporta al massimo
livello = map(livello, valoremin, valoremax, 0, 100); // Remap livello con scala 0 - 100
Serial.print (" - ");
Serial.print(livello); // espone sul monitor seriale la % di riempimento
Serial.println ("%");
lcd.clear ();
lcd.setCursor(0, 0); // posiziona il cursore all'inizio della prima riga
lcd.print ("Livello: ");
lcd.print (livello); // espone il livello sul display lcd
lcd.print ("%");
lcd.setCursor(0, 1);
lcd.print ("Temperatura:");
lcd.print(temperatura);
lcd.print ((char)223);
lcd.print ("C");
for (i = 10; i <= 12; i ++)
digitalWrite (i, LOW); // Spegne preventivamente i led giallo e verdi
if (livello > 20)
digitalWrite (12, HIGH); // se il livello e' piu' del 20% accende la spia gialla (LIVELLO Medio/BASSO)
if (livello > 50)
digitalWrite (11, HIGH); // se il livello e' piu' del 50% accende la prima spia verde (Livello MEDIO/ALTO)
if (livello > 80)
digitalWrite (10, HIGH); // se il livello e' piu' del 80% accende la seconda spia verde (Livello ALTO)
delay (1250); // attende circa un secondo prima di effettuare una nuova rilevazione
// SENSORE ACQUA
// BLUETOOTH
while(bt.available())
{
char info = bt.read();
switch(info)
{
case 'I':
{
digitalWrite(4, HIGH); // RELE' LUCI INTERNE
Serial.print("INFO: ");
Serial.println("LUCI INTERNE ON");
break;
}
case 'i':
{
digitalWrite(4, LOW);
Serial.print("INFO: ");
Serial.println("LUCI INTERNE OFF");
break;
}
case 'E':
{
digitalWrite(6, HIGH); // RELE' LUCI ESTERNE
Serial.print("INFO: ");
Serial.println("LUCI ESTERNE ON");
break;
}
case 'e':
{
digitalWrite(6, LOW);
Serial.print("INFO: ");
Serial.println("LUCI ESTERNE OFF");
break;
}
}
}
// BLUETOOTH
// INSEGUITORE
sensorValue = analogRead(sensorPin);
if(sensorValue < (512-tolleranza))
{
if(servoGrad < 180) servoGrad++;
}
if(sensorValue > (512+tolleranza))
{
if(servoGrad > 0) servoGrad--;
}
myservo.write(servoGrad);
// INSEGUITORE
}
