Untitled

 avatar
unknown
plain_text
15 days ago
4.4 kB
9
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