Go Down

Topic: Progetto innaffiatore (Read 7067 times) previous topic - next topic

ratto93

Ma allora torniamo al problema di capire come fai a capire quando basta ? ti serve un sensore che legga l'umidità del terreno, il mio metodo è molto grezzo e semplice però funziona solo che va tarato a mano, quello che misura l'umidità del terreno è decisamente migliore e nell'instructables che hai postao cè praticamente tutto, per aggiungere quel che richiedi basta un codice uguale al blink with delay, in quanto poi il codice riparte e rieffettuata la lettura quando vede che serve acqua la rilascia.....
Se corri veloce come un fulmine, ti schianterai come un tuono.

leo72


dicevo di far eseguire il ciclo per un tot di volte xche volevo dargli acqua per 5 sec fermarmi per altri 5 e ridagliela per altri 5 finché non basta!

Usando il ciclo for:
http://arduino.cc/en/Reference/For

Fai un ciclo: apri l'acqua; aspetti 5 sec; chiudi l'acqua; aspetti 5 secondi; ripeti x volte.

imagider

ho usato il ciclo for! faccio un esempio:
fa buio la fotoresistenza mi legge che è ora di dare acqua alle piante mi esegue il ciclo for per 10 volte quando ha finito non è ancora giorno e mi legge lo stesso valore quindi mi riparte con il ciclo for questo è lo sketch che ho fatto finora è solo uno schizzo ho usato un led al posto della pompetta
Code: [Select]
int sensorPin = A0;
int sensorValue = 0;
int led = 13;

void setup() {
  Serial.begin( 9600 );
  pinMode(sensorPin, INPUT);
  pinMode(led, OUTPUT);
}

void loop() {
  int tempo;
  tempo=1;
  sensorValue = analogRead(sensorPin);
  Serial.print("Valore: ");
  Serial.println( sensorValue );
 
  if (sensorValue >950){
    for(tempo;tempo<10;tempo=tempo+1)
    {
    digitalWrite(led,HIGH);
    delay(2000);
    digitalWrite(led,LOW);
    delay(5000);
    }
   
  }
    if (sensorValue <830){
      digitalWrite(led,LOW);
    }
}

ratto93

In linea di massima dovrebber funzionare :)
Se corri veloce come un fulmine, ti schianterai come un tuono.

imagider

No! Xche quando è notte continuerebbe a ripetere il ciclo for fino a mattino xD io devo fare in modo che mi faccia il ciclo for 10 volte e poi basta! Non deve eseguirlo un'altra volta! Si deve mettere in attesa del prossimo valore

ratto93

metti un altro if dentro al ciclo for, fai un controllo sulla ldr e quando il valore inizia ad aumentare fai un Go to all'inizio del loop
Se corri veloce come un fulmine, ti schianterai come un tuono.

imagider

ho fatto in questo modo:
Code: [Select]
int sensorPin = A0;
int sensorValue = 0;
int led = 13;

void setup() {
  Serial.begin( 9600 );
  pinMode(sensorPin, INPUT);
  pinMode(led, OUTPUT);
}

void loop() {
  int tempo;
  int ciclo;
  ciclo=0;
  sensorValue = analogRead(sensorPin);
  Serial.print("Valore: ");
  Serial.println( sensorValue );
ciclo:

  if (sensorValue <830 && ciclo>9){
    digitalWrite(led,LOW);
  }
  tempo=0;
  if (sensorValue >950 && ciclo<1){
    for(tempo;tempo<10;tempo=tempo+1)
    {
      digitalWrite(led,HIGH);
      delay(1000);
      digitalWrite(led,LOW);
      delay(1000);
      ciclo=ciclo+1;
    }
    if (ciclo>9){
      goto ciclo;
    }

  }
}




Vi prego aiuto  =( non so come fare in modo che si fermi! continua a farmi lampeggiare il led :(

pighixxx

#37
May 16, 2013, 03:35 pm Last Edit: May 16, 2013, 04:34 pm by pighixxx Reason: 1
Da quello che ho capito devi far partire un ciclo di innaffiatura (10 cicli?) quando viene buio.
La soluzione potrebbe essere questa:

Code: [Select]
int sensorPin = A0;
int sensorValue = 0;
int led = 13;
boolean fatto=false;


void setup() {
 Serial.begin( 9600 );
 pinMode(sensorPin, INPUT);
 pinMode(led, OUTPUT);
}

void loop() {
 sensorValue = analogRead(sensorPin);
 Serial.print("Valore: ");
 Serial.println( sensorValue );
 // Se il sensore supera il valore x
 if (sensorValue >950) innaffia(); else fatto=false;
}

void innaffia()
{
 if (fatto==false) {
   //Ciclo di innaffiatura
   for (int i=0; i <= 10; i++){
     digitalWrite(led,HIGH);
     delay(1000);
     digitalWrite(led,LOW);
     delay(1000);
   }
   fatto=true;
 }
}



edit
cosi fa solo un ciclo a notte.

edit
correzione codice (Aggiunte parentesi)

imagider

ho provato il tuo programma ma non fa nulla! io ho un ciclo alla sera e uno al mattino

pighixxx


ho provato il tuo programma ma non fa nulla! io ho un ciclo alla sera e uno al mattino


Ad occhio dovrebbe fare le cose che non fa il programma che hai postato te.
SensorValue cos'è il valore della fotoresistenza? Se si quando la oscuri che valore ti da? e quando è illuminata?

imagider

quando è illuminata da 840 oscurata da 980!

pighixxx

Scusa mi sono dimenticato le parentesi...

Code: [Select]

int sensorPin = A0;
int sensorValue = 0;
int led = 13;
boolean fatto=false;


void setup() {
  Serial.begin( 9600 );
  pinMode(sensorPin, INPUT);
  pinMode(led, OUTPUT);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  Serial.print("Valore: ");
  Serial.println( sensorValue );
  // Se il sensore supera il valore x
  if (sensorValue>950) innaffia(); else fatto=false;
}

void innaffia()
{
  if (fatto==false) {
    //Ciclo di innaffiatura
    for (int i=0; i <= 10; i++){
      digitalWrite(led,HIGH);
      delay(1000);
      digitalWrite(led,LOW);
      delay(1000);
    }
    fatto=true;
  }
}

imagider

grazie mille! ora va come voglio  :) se ho altri problemi vi chiedo grazie ancora

pighixxx


grazie mille! ora va come voglio  :) se ho altri problemi vi chiedo grazie ancora


Sono contento.  :D
Mi sono riletto il post e ho visto che hai utilizzato gli schemi dell'ABC. La prossima volta assicurati di avere scaricato l'ultima versione  ;)
Buon lavoro,

PighiXXX

Go Up