/* Simulatore Tergicristallo Anteriore Auto
ON/ OFF, 2 Velocità (Normale / Veloce)
Azionamento Manuale in mod. Veloce
Azionamento Automatico con Sensore di umidità */
// Creazione Sensore di Umidità e Temperatura
#include <DHT.h> // Libreria Sensore DHT (DHT Sensor Library)
#define DHTPIN 8 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
// Creazione Servo
#include <Servo.h> // Libreria Servo
// Locking mechanism definitions */
#define SERVO_PIN 6 // Pin a cui è collegato
#define SERVO_LOCK_POS 0 // Posizione Finale
#define SERVO_UNLOCK_POS 180 // Posizione Iniziale / di Stop
Servo Tergicristallo;
// Definizione Pin IN / OUY
const int In = 2; // Interruttore ON / OFG
const int High = 4; // Selettore Velocità
const int Man = 7; // Comando Manuale
int val1 = 0; // Variabile Stato In
int val2 = 0; // Variabile Stato Man
int val3 = 0; // Varianile Stato High
#define LED_BUILTIN 13 // Led Interno al pin 13
#define LED_HR 12 // Led Umidità superiore al 70%
// Variabili di Tempo (In fase di Test)
unsigned long Time;
void setup() {
Serial.begin(9600); // Inizializza Stampante Seriale
dht.begin(); // Inizializza Sensore DHT
Tergicristallo.attach(6); // Inizializza Servo al pin 6
pinMode(In, INPUT); // Imposta In come ingresso
pinMode(High, INPUT); // Imposta Man come ingresso
pinMode(LED_BUILTIN, OUTPUT); // Imposta Led interno come uscita
pinMode(LED_HR, OUTPUT); // Imposta Led Umidità come uscita
Time = millis; // Associa funzione tempo millis a Time
}
void loop() {
// Leggi l'umidità
float h = dht.readHumidity();
// Se l'umidità è superiore al 70% (ad esempio), attiva l'uscita digitale 12
if (h > 70) {
digitalWrite(LED_HR, HIGH);
} else {
digitalWrite(LED_HR, LOW);
}
// Stampa Valore Umidità su Stampante Seriale
Serial.print("Umidità: ");
Serial.print(h);
Serial.println("% ");
// Associa Ingresso alle variabili 1 e 2
val1 = digitalRead(In); // val1 = In
val2 = digitalRead(Man); // val = Man
// In (val1) è On o se l'umidità è > 50%, e Man (val2) è Off ...
if (((val1 == HIGH || h > 50) && h < 75) && val2 == LOW) {
Sel_Vel(); // Avvia Ciclo Tergicristallo
}
// Se In (val1) e Man (val2) sono entrambi On ...
if ((val1 == HIGH && val2 == HIGH)) {
digitalWrite(LED_BUILTIN, HIGH); // Accendi il led interno
Tergicristallo.write(SERVO_LOCK_POS); // Avvia Tergicristallo
delay(500); // Durata Ciclo veloce
digitalWrite(LED_BUILTIN, LOW); // Spegni il Led interno
Tergicristallo.write(SERVO_UNLOCK_POS); // Riporta a pos. iniziale Tergicristallo
delay(500); // Durata Pausa veloce
}
// Se In (val1), Man (val2) e l'umidità è < 50% ...
if ((val1 == LOW && val2 == LOW && h < 50)) {
digitalWrite(LED_BUILTIN, LOW); // Spegni il Led interno
Tergicristallo.write(SERVO_UNLOCK_POS); // Riporta a pos. iniziale Tergicristallo
}
// Se Man (val2) o l'umidità è > 75% ...
if ((val2 == HIGH || h > 75)) {
digitalWrite(LED_BUILTIN, HIGH); // Accendi il Led interno
Tergicristallo.write(SERVO_LOCK_POS); // Avvis Tergicristallo
delay(500); // Durata Ciclo veloce
Tergicristallo.write(SERVO_UNLOCK_POS); // Riporta a pos. iniziale Tergicristallo
delay(500); // Durata Pausa veloce
}
}
// Ciclo Tergicristallo con Selettore Velocità
void Sel_Vel() {
// Leggi Valore Umidità
float h1 = dht.readHumidity();
// Associa Ingresso alla variabile 3
val3 = digitalRead(High); // val3 = High
// Se High (val3) è On o l'umidità è > 75% Avvia Ciclo Veloce:
if (digitalRead((val3 == LOW || h1 > 75))) {
digitalWrite(LED_BUILTIN, HIGH); // Accendi il Led interno
Tergicristallo.write(SERVO_LOCK_POS); // Avvia Tergicristallo
delay(500); // Durata Ciclo Veloce
digitalWrite(LED_BUILTIN, LOW); // Spegni il Led interno
Tergicristallo.write(SERVO_UNLOCK_POS); // Riporta in pos. iniziale Tergicristallo
delay(500); // Dutata Pausa Veloce
} else { // Altrimenti Avvia Ciclo Normale
digitalWrite(LED_BUILTIN, HIGH); // Accendi il Led Interno
Tergicristallo.write(SERVO_LOCK_POS); // Avvia Tergicristallo
delay(1000); // Durata Ciclo Normale
digitalWrite(LED_BUILTIN, LOW); // Spegni il Led interno
Tergicristallo.write(SERVO_UNLOCK_POS); // Riporta in pos. iniziale Tergicristallo
delay(1000); // Durata Pausa Normale
}
}