Untitled
unknown
plain_text
7 months ago
4.4 kB
11
Indexable
// Liceo Virgilio Marone
#include <Servo.h> // includiamo la libreria con i comandi per controllare i servomotori
Servo myServo; // create servo object to control a servo
// pin sensore
#define alimentazioneSensore 12
#define lettura A0
#define BUZZER_PIN 3
// livelloLiquidoue per memorizzare il livello dell'acqua
int livelloLiquido = 0;
// Limite inferiore e superiore ottenuti in funzione della calibrazione
int limiteInferiore = 410;
int limiteSuperiore = 450;
// Dichiarazione pin a cui connettiamo il LED
byte ledRosso = 11;
byte ledGiallo = 10;
byte ledVerde = 9;
int angle = 0; //variabile che indica l'angolazione del servo
void setup() {
// Impostiamo il pin digitale 12 come OUTPUT
pinMode(alimentazioneSensore, OUTPUT);
// Impostiamo a LOW il +Vcc del sensore
digitalWrite(alimentazioneSensore, LOW);
// Impostiamo i pi a cui connettiamo i LED come OUTPUT
pinMode(ledRosso, OUTPUT);
pinMode(ledGiallo, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT); //anche il buzzer
myServo.attach(7); // attaches the servo on pin 7 to the servo object
angle=0; //angolo che indica la diga chiusa
angle = map(angle, 0, 1023, 0, 180);
myServo.write(angle); // sets the servo position according to the scaled value
// impostiamo la velocità della porta seriale
Serial.begin(9600);
}
void loop() {
// rileviamo la lettura del sensore
int livello = leggiSensore();
if (livello == 0) {
Serial.println("Livello acqua: Vuoto");
Serial.print("Livello acqua: ");
Serial.println(livello);
Serial.println("--------------------");
noTone(BUZZER_PIN);
angle=0;
angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myServo.write(angle);
digitalWrite(ledRosso, LOW);
digitalWrite(ledGiallo, LOW);
digitalWrite(ledVerde, LOW);
}
else if (livello > 0 && livello <= limiteInferiore) {
Serial.println("Livello acqua: Basso");
Serial.print("Livello acqua: ");
Serial.println(livello);
Serial.println("--------------------");
noTone(BUZZER_PIN);
angle=0;
angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myServo.write(angle);
digitalWrite(ledRosso, HIGH);
digitalWrite(ledGiallo, LOW);
digitalWrite(ledVerde, LOW);
}
else if (livello > limiteInferiore && livello <= limiteSuperiore) {
Serial.println("Livello acqua: Medio");
Serial.print("Livello acqua: ");
Serial.println(livello);
Serial.println("--------------------");
noTone(BUZZER_PIN);
angle=0;
angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myServo.write(angle);
digitalWrite(ledRosso, LOW);
digitalWrite(ledGiallo, HIGH);
digitalWrite(ledVerde, LOW);
}
else if (livello > limiteSuperiore) {
Serial.println("Livello acqua: Alto");
Serial.print("Livello acqua: ");
Serial.println(livello);
Serial.println("--------------------");
tone(BUZZER_PIN, millis()%1000+200);
digitalWrite(ledRosso, LOW);
digitalWrite(ledGiallo, LOW);
digitalWrite(ledVerde, HIGH);
angle=90;
angle = map(angle, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myServo.write(angle); // sets the servo position according to the scaled value
delay(100); // waits for the servo to get there
}
delay(1000);
}
// Funzione che permette la lettura del livello dell'acqua
int leggiSensore() {
digitalWrite(alimentazioneSensore, HIGH); // Attiva il sensore - viene fornita alimentazione
delay(50); // breve attesa di 50 ms prima di effettuare la lettura
livelloLiquido = analogRead(lettura); // Legge il valore e lo si memorizza nella variabile livelloLiquido
digitalWrite(alimentazioneSensore, LOW); // Togliamo alimentazione al sensore
return livelloLiquido; // invia alla funzione chiamante il valore letto
}Editor is loading...
Leave a Comment