DIGA

ciao a tutti, sono uno studente che quest'anno ha la maturità e come progetto io e il mio socio abbiamo deciso di realizzare una diga e comandarla con arduino UNO. volevo chiedervi se potevate darmi una mano a realizzare il programma dato che non ho la minima idea di come si programmi... la diga ha 3 sensori di livello e un'elettrovalvola che lavora a 12 V. Quando l'acqua fa contatto con il sensore 1 fa accendere il led stessa cosa x il 2 e il 3 livello. il mio programma dovrebbe farmi spegnere un led quando è acceso l'altro ( es. quando sono al lvl 2, il led del lvl 1 è spento , etc.. )e poi quando arrivo al 3 lvl mi apre l'elettrovalvola. Infine quando l'acqua scarica tutta e arriva sotto al 1 livello l'elettrovalvola si chiude.. se potete aiutarmi io e il mio socio ve ne siamo grati :D aspetto una risposta ciaooo

Mi sembra un po' tardino per iniziare te e il tuo socio l'esame di maturità...

Se hai problemi di hardware dai un'occhiata qua: http://forum.arduino.cc/index.php?topic=146152.0 - Scheda 23, c'è un rain sensor che può andare bene anche come sensore per liquidi. Se volete una mano inizia a postare quello che avete fatto fino ad ora (se mai avete iniziato)...

no ma il circuito c’è tutto manca solo il programma…

Allora posta il circuito e la parte software che avete fatto fino ad ora :D

come circuito ho utilizzato questo schema trovato su internet http://www.youtube.com/watch?v=J4131ko8fvI al minuto 00:20 c’è lo schema

questo è il programma che ho buttato giu io xo non funziona…

const int sensore1 = 2;          // sensore 1 sul piedino 2
const int sensore2 = 3;          // sensore 2 sul piedino 3
const int sensore3 = 4;          // sensore 3 sul piedino 4
const int led1 = 5;              // led 1 sul piedino 5
const int led2 = 6;              // led 2 sul piedino 6
const int led3 = 7;              // led 3 sul piedino 7
const int elettrovalvola =  8;   // elettrovalvola sul piedino 8

// stati iniziali:

int statosensore1 = 0;         // stato iniziale pronto per essere letto dal sensore 1
int statosensore2 = 0;         // stato iniziale pronto per essere letto dal sensore 2
int statosensore3 = 0;         // stato iniziale pronto per essere letto dal sensore 3
int statoled1 = 0;             // stato iniziale pronto per essere letto dal led 1
int statoled2 = 0;             // stato iniziale pronto per essere letto dal led 2
int statoled3 = 0;             // stato iniziale pronto per essere letto dal led 3
int statoelettrovalvola = 0;   // stato iniziale pronto per essere letto dall'elettrovalvola

void setup() {
  // utilizza la variabile sensore 1 sul piedino 2 come ingresso:
  pinMode(sensore1, INPUT);
  // utilizza la variabile sensore 2 sul piedino 3 come ingresso:
  pinMode(sensore2, INPUT);
  // utilizza la variabile sensore 3 sul piedino 4 come ingresso:
  pinMode(sensore3, INPUT);
  // utilizza la variabile led 1 sul piedino 5 come uscita:
  pinMode(led1, OUTPUT);   
  // utilizza la variabile led 2 sul piedino 6 come uscita:
  pinMode(led2, OUTPUT);
  // utilizza la variabile led 3 sul piedino 7 come uscita:
  pinMode(led3, OUTPUT);
  // utilizza la variabile elettrovalvola sul piedino 8 come uscita: 
  pinMode(elettrovalvola, OUTPUT);
}

void loop(){
  // legge lo stato attuale del sensore 1:
  statosensore1 = digitalRead(sensore1);
  // se lo stato del sensore 1 è alto:
  if (statosensore1 == HIGH) {     
    // lascia acceso il led 1:   
    digitalWrite(led1, HIGH); 
  } 
  else {
    // fa lampeggiare il led 1:
    digitalWrite(led1, HIGH);
    delay(1000);
    digitalWrite(led1, LOW);
    delay(1000);
  }
 
  // legge lo stato attuale del sensore 2:
  statosensore2 = digitalRead(sensore2);
  // se lo stato del sensore 2 è alto:
  if (statosensore2 == HIGH) {     
    // accendi il led 2 e spegni il led 1:   
    digitalWrite(led2, HIGH); 
    digitalWrite(led1, LOW);
  } 
  else {
    // spegni il led 2 e accendi il led 1:
    digitalWrite(led2, LOW);
    digitalWrite(led1, HIGH);
  }
  
  // legge lo stato attuale del sensore 3:
  statosensore3 = digitalRead(sensore3);
  // se lo stato del sensore 3 è alto:
  if (statosensore3 == HIGH) {     
    // accendi il led 3 e spegni il led 2 e il led 1:   
    digitalWrite(led3, HIGH); 
    digitalWrite(led2, LOW);
    digitalWrite(led1, LOW);
    // aspetta 5 secondi:
    delay(5000);
    // apri l'elettrovalvola:
    digitalWrite(elettrovalvola, HIGH);
  } 
  else {
    // lascia acceso il led 2 e spegni led 3 e il led 1:
    digitalWrite(led3, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led1, LOW);
  } 
    
  // legge lo stato del sensore:
  statoelettrovalvola = digitalRead(elettrovalvola);
  // se lo stato del sensore 1, del sensore 2 e del sensore 3 sono bassi:
  if (statosensore1 == LOW && statosensore2 == LOW && statosensore3 == LOW) {     
    // chiudi l'elettrovalvola:   
    digitalWrite(elettrovalvola, LOW);
    // fa lampeggiare il led 1:
    digitalWrite(led1, HIGH);
    delay(1000);
    digitalWrite(led1, LOW);
    delay(1000);
  } 
}
  • Se sensore1 & sensore2 & sensore3==low setta variabile valvola=0
  • Se sensore1==high accende Led1 altrimenti spegne Led1
  • Se sensore2==high accende Led2 altrimenti spegne Led2
  • Se sensore3==high accende Led3 e setta variabile valvola=1 altrimenti spegne Led3
  • Se variabile valvola==1 accende elettrovalvola altrimenti spegne elettrovalvola

scusami ma non è come ho fatto io ?

Si, praticamente è lo stesso, l'ho scritto finché postavi. Dovè il problema?

non mi spegne l'altro led e cmq appena carico il programma il 1 led del 1 livello è già acceso anche se l'acqua nn fa contatto.

Vuol dire che c'è qualche problema con la parte elettronica... Hai provato a simulare il circuito usando i 5V di Arduino per ogni pin di input per vedere se il programma funziona?

A me sembra un programma realizzato senza applicare un minimo di logica. Se il sensore 3 è a bagno per forza di cose lo devono essere anche gli altri per cui si parte a valutare la condizione di sensore1

void loop(){
    // legge lo stato attuale del sensore 3:
    statosensore3 = digitalRead(sensore3);
    // se lo stato del sensore 3 è alto:
    if (statosensore3 == HIGH) {     
        // accendi il led 3 e spegni il led 2 e il led 1:   
        digitalWrite(led3, HIGH); 
        digitalWrite(led2, LOW);
        digitalWrite(led1, LOW);
        // aspetta 5 secondi:
        delay(5000);
        // apri l'elettrovalvola:
        digitalWrite(elettrovalvola, HIGH);
    } else {
        // legge lo stato attuale del sensore 2:
        statosensore2 = digitalRead(sensore2);
        // se lo stato del sensore 2 è alto:
       if (statosensore2 == HIGH) {     
       
       } else {
           // legge lo stato attuale del sensore 1:
             
       }
        
    } 
}

Ciao.

Grande Mauro, hai perfettamente ragione, l'acqua non galleggia XD

mauro ho modificato il programma x il 3 sensore ma la storia non cambia.. nn so magari sbaglio a collegare i fili...

Cioè hai modificato il programma come? Postalo.

Poi non ho capito cosa deve fare il programma.

Se il bicchiere è pieno: descrivi che deve fare Se il bicchiere è pieno per metà: descrivi che deve fare Se il bicchiere è vuoto: desrivi che deve fare.

Se hai il dubbio che i collegamenti siano fatti male, questo dubbio lo devi dissipare, cioè devi avere la certezza che i collegamenti siano fatti bene e che cioè che accade è quello che ti aspetti, senza questa certezza non devi passare alla fase successiva.

Quindi ricontrolla tutti i collegamenti, usa una versione del programma semplificata che ti permette di testare l'elettronica. Procedi a piccoli passi e traguardi e si pronto a tornare un passo indietro.

Ciao.

ma non c'è un programma che mi permetta di simulare il mio progetto ? cmq allora a bicchiere vuoto non deve fare nulla. quando l'acqua tocca il primo sensore di livello (ovvero il mio primo bc337) si deve accendere il mio led verde. quando l'acqua tocca il secondo sensore di livello (ovvero il mio secondo bc337) si deve accendere il mio led giallo. quando l'acqua tocca il terzo sensore di livello (ovvero il mio terzo bc337) si deve accendere il mio led rosso e far aprire l'elettrovalvola. infine quando l'acqua è scaricata chiude l'elettrovalvola. fine. i collegamenti che ho fatto io sono : PIN 2 ARDUINO : centrale del 1 BC337 PIN 3 ARDUINO : centrale del 2 BC337 PIN 4 ARDUINO : centrale del 3 BC337 tra PIN 5 e GND di ARDUINO : ho collegato in parallelo il led verde ovvero 1 lvl tra PIN 6 e GND di ARDUINO : ho collegato in parallelo il led giallo ovvero 2 lvl tra PIN 7 e GND di ARDUINO : ho collegato in parallelo il led rosso ovvero 3 lvl PIN 8 ARDUINO : x ora non ho collegato nulla ma ci collegherò l'elettrovalvola.

const int sensore1 = 2; // sensore 1 sul piedino 2 const int sensore2 = 3; // sensore 2 sul piedino 3 const int sensore3 = 4; // sensore 3 sul piedino 4 const int led1 = 5; // led 1 sul piedino 5 const int led2 = 6; // led 2 sul piedino 6 const int led3 = 7; // led 3 sul piedino 7 const int elettrovalvola = 8; // elettrovalvola sul piedino 8

// stati iniziali:

int statosensore1 = 0; // stato iniziale pronto per essere letto dal sensore 1 int statosensore2 = 0; // stato iniziale pronto per essere letto dal sensore 2 int statosensore3 = 0; // stato iniziale pronto per essere letto dal sensore 3 int statoled1 = 0; // stato iniziale pronto per essere letto dal led 1 int statoled2 = 0; // stato iniziale pronto per essere letto dal led 2 int statoled3 = 0; // stato iniziale pronto per essere letto dal led 3 int statoelettrovalvola = 0; // stato iniziale pronto per essere letto dall'elettrovalvola

void setup() { // utilizza la variabile sensore 1 sul piedino 2 come ingresso: pinMode(sensore1, INPUT); // utilizza la variabile sensore 2 sul piedino 3 come ingresso: pinMode(sensore2, INPUT); // utilizza la variabile sensore 3 sul piedino 4 come ingresso: pinMode(sensore3, INPUT); // utilizza la variabile led 1 sul piedino 5 come uscita: pinMode(led1, OUTPUT); // utilizza la variabile led 2 sul piedino 6 come uscita: pinMode(led2, OUTPUT); // utilizza la variabile led 3 sul piedino 7 come uscita: pinMode(led3, OUTPUT); // utilizza la variabile elettrovalvola sul piedino 8 come uscita: pinMode(elettrovalvola, OUTPUT); }

void loop(){ // legge lo stato attuale del sensore 1: statosensore1 = digitalRead(sensore1); // se lo stato del sensore 1 è alto: if (statosensore1 == HIGH) { // lascia acceso il led 1: digitalWrite(led1, HIGH); } else { // fa lampeggiare il led 1: digitalWrite(led1, LOW);

}

// legge lo stato attuale del sensore 2: statosensore2 = digitalRead(sensore2); // se lo stato del sensore 2 è alto: if (statosensore2 == HIGH) { // accendi il led 2 e spegni il led 1: digitalWrite(led2, HIGH); digitalWrite(led1, LOW); } else { // spegni il led 2 e accendi il led 1: digitalWrite(led2, LOW); digitalWrite(led1, HIGH); }

// legge lo stato attuale del sensore 3: statosensore3 = digitalRead(sensore3); // se lo stato del sensore 3 è alto: if (statosensore3 == HIGH) { // accendi il led 3 e spegni il led 2 e il led 1: digitalWrite(led3, HIGH); digitalWrite(led2, LOW); digitalWrite(led1, LOW); // aspetta 5 secondi: delay(5000); // apri l'elettrovalvola: digitalWrite(elettrovalvola, HIGH); } else { // legge lo stato attuale del sensore 2: statosensore2 == digitalRead(sensore2); // se lo stato del sensore 2 è alto: if (statosensore2 == HIGH) { // lascia acceso il led 2 e spegni led 3 e il led 1: digitalWrite(led3, LOW); digitalWrite(led2, HIGH); digitalWrite(led1, LOW); } else { // legge lo stato attuale del sensore 1: statosensore1 == digitalRead(sensore1); // se lo stato del sensore 1 è alto: if (statosensore1 == HIGH) { // lascia acceso il led 1 e spegni led 2 e il led 3: digitalWrite(led3, LOW); digitalWrite(led2, LOW); digitalWrite(led1, HIGH); } // legge lo stato del sensore: statoelettrovalvola = digitalRead(elettrovalvola); // se lo stato del sensore 1, del sensore 2 e del sensore 3 sono bassi: if (statosensore1 == LOW && statosensore2 == LOW && statosensore3 == LOW) { // chiudi l'elettrovalvola: digitalWrite(elettrovalvola, LOW);

} } } }

A parte che soffri di idiosincrasia ai suggerimenti e consigli...

pighixxx: Hai provato a simulare il circuito usando i 5V di Arduino per ogni pin di input per vedere se il programma funziona?

ma il circuito senza arduino mi funziona perfettamente... ovvio non mi fa lo scambio xche non ho i relè ma ho chiesto al mio professore se si può fare con arduino lo scambio e mi ha detto di si... e quindi non ho messo i relè

Quindi devi disegnare il nuovo circuito che stai usando, non serve che lo fai con il programma, basta un disegna a matita, scannerizzi e posti.

I led richiedono una R serie per evitare di distruggere il led e nel caso sia collegato ad un pin di arduino si rischia di dannegiarlo. Non ho capito come sono collegati i sensori, per come dovrebbe dovresti usare R e C, ma lo schema ancora lo devi disegnare, quindi aspetto lo schema e poi ti dico come modificarlo.

Nomina ogni componente nello schema così ci si può riferire con R1 R5, Q1 ecc.

Ciao.