Info Soil Moisture

Ciao, devo posizionare una sonda per rilevare l'umidità del terreno a più di 10metri da dove si trova Arduino per leggere i valori mediante LCD, visto che il cavo è così lungo per non avere valori sballati quale resistenza dovrei usare? Grazie

Non lo so mica, non ci dai informazioni riguardante il modello di sensore.
Ciao Uwe

Il sensore è quello a forchetta,ne userò due tipi:
Uno con interfaccia i2c ed uno con relè incorporato
Qui i link :
[u]https://www.google.it/search?q=soil+moisture+rele&prmd=isvn&source=lnms&tbm=isch&sa=X&ved=0ahUKEwj3r4OynezZAhWM6xQKHUhRABwQ_AUIESgB&biw=360&bih=560#imgrc=TVMLY0Nc6djttM:[/u]

[u]http://www.circuitstoday.com/arduino-soil-moisture-sensor[/u]

Uno con interfaccia i2c ed uno con relè incorporato

Quello con il rele incorporato, lo usi da solo.. ad arduino non lo colleghi

L'altro ................ dove la vedi l'interfaccia I2C ?
Ha solo A9 ( per collegarlo ad un pin analogico ) e D0 ( per un pin digitale )

brunello22:
Quello con il rele incorporato, lo usi da solo.. ad arduino non lo colleghi

Quello con il relè lo collegherò da solo

brunello22:
L'altro ................ dove la vedi l'interfaccia I2C ?
Ha solo A9 ( per collegarlo ad un pin analogico ) e D0 ( per un pin digitale )

Non è in i2c ho sbagliato. Sarà collegato ad Arduino con una LCD shield per visualizzare la lettura del sensore..

visto che il cavo è così lungo per non avere valori sballati quale resistenza dovrei usare?

Però non ho capito la domanda... cosa c'entra una resistenza ?

Pensavo che la resistenza sarebbe stata utile allo scopo, mi sarò sbagliato quindi.. Mi pento di non avere scelto il campo dell'elettronica a scuola,cosa posso mettere? Se dite che non cambia niente lo collego così com'è..

Ciao. uso uno sketch per un igrometro dove al calare dell'umidita' del terreno attiva un rele', funziona bene in quanto a terra secca attiva il rele' e quando raggiunge l'umidita' lo spegne, questo lo fa' con la variabile " else "...
Cmq io vorrei che il rele' si accendesse e spegnerebbe con un semplice ritardo di (500)mills il giusto per avere un breve contatto e rimanesse spento , se tolgo la variabile " else " e metto un " delay " dentro il loop non fa' altro che ripetere questo comando, quindi accende/spegne sempre (ed e' scontato che faccia cosi') .. Avete un suggerimento su come posso dare questa istruzione?

 // Igrometro -- il valore_limite e' 990 --

  int igro = analogRead(A3); // Legge il valore analogico
  int umdtrr = 0; // Variabile umidità suolo
  umdtrr = map (igro, 100, 990, 100, 0); // converto il valore analogico in percentuale
  Serial.print("Umidità del terreno: ");
  Serial.print(umdtrr);
  Serial.println ("%"); //Stampa a schermo il valore

  if (igro <= valore_limite)
    digitalWrite(9,HIGH);// Attiva Relè 1
  else
    digitalWrite(9,LOW); // Spegni Relè 1
  delay(2000);

Ho due informazione da chiedervi :

1: Non riesco a convertire il valore in percentuale della lettura di un igrometro , se ho un valore di 380% dovrei convertirlo in 38% ma non ci riesco

2: Quando l'igrometro e immerso in acqua(umido) dà un valore inferiore a 300, se invece è in aria(secco) dà un valore di 1023, come posso convertire questi valori ?
Con sensore umido sul seriale dovrei avere +/- 100% con sensore secco invece +/- 0%... Sapete aiutarmi??

Su questo sketch ho sbagliato qualcosa?

int lettura = 0; // Pin analogico a cui è collegato il sensore 
int pompa = 9; //Pin a cui è collegato i rele' per attivare al pompa 
void setup() {  
Serial.begin(9600);  
pinMode (pompa, OUTPUT); 
} 
void loop() {  

lettura = analogRead(A0);

int umdtrr = 0; // Variabile umidità suolo
umdtrr = map (lettura, 100, 1023, 100, 0); // converto il valore analogico in percentuale
Serial.print("Umidità del terreno: ");
Serial.print(lettura);
Serial.println ("%"); //Stampa a schermo il valore	  

if (lettura >= 900 ) {    
digitalWrite(pompa, LOW); 
}  
else 
{    
digitalWrite(pompa, HIGH); 
	}  
   delay(1000); 
 }

Risolti tutti e due le mie informazioni :

int lettura = 0; // Pin analogico a cui è collegato il sensore 
int pompa = 9; //Pin a cui è collegato i rele' per attivare al pompa 
int sensorValue = 1023;
void setup() {  
Serial.begin(9600);  
pinMode (pompa, OUTPUT); 
} 
void loop() {  

lettura = analogRead(A0);

sensorValue = map (lettura, 1023, 100, 0, 100); // converto il valore analogico in percentuale
Serial.print("Umidità del terreno: ");
Serial.print(sensorValue);
Serial.println ("%"); //Stampa a schermo il valore	  

if (lettura >= 900 ) {    
digitalWrite(pompa, LOW); 
else
{    
  digitalWrite(pompa, HIGH); 
}  
delay(1000); 
}

Avrei bisogno di un vostro aiuto in questo sketch..

Questo sketch serve per accendere una elettrovalvola e per dare un breve impulso per avviare il motore di un sistema di irrigazione, il segnale al pin A0 viene dato da un igrometro che però può capitare avvolte di dare false letture a che si avvia quando già lo ha fatto poco prima..

Volevo sapere se c'è una istruzione che ritardi la lettura dentro la if , cioè spiegato in parole povere :
Ricevo un segnale, aspetto tot secondi se allo scadere di questo tempo il segnale è ancora LOW allora leggo la if se invece è HIGH non leggo più la if..
Si può fare ?

void loop(){

if(digitalRead(pin_sensore) == 0 ){

delay(100);  

digitalWrite(RELAY1,LOW); // Start l'elettrovalvola

digitalWrite(RELAY2,HIGH); // Relè on/off spento

delay(120000); //Attesa riempimento impianto      
              
   digitalWrite(RELAY2,LOW); // Avvio motore per irrigare

   delay(500); // Attesa Start Relè on/off

   digitalWrite(RELAY2,HIGH); // Contatto relè on/off

   delay(200000); // Attesa spegnimento elettrovalvola 
      }
			
if(digitalRead(pin_sensore) == 1 ){

   digitalWrite(RELAY1,HIGH); // Elettrovalvola spenta
	     
    }
    delay(100);
  }

RISOLTO : passo passo imparo qualcosa

	if(digitalRead(pin_sensore) == 0 ){
		delay(10000);
				}
		if(digitalRead(pin_sensore) == 1 ){
			digitalWrite(RELAY1,HIGH);
				digitalWrite(RELAY1,HIGH);	
				}
		else{
   digitalWrite(RELAY1,LOW); // Start l'elettrovalvola
   digitalWrite(RELAY2,HIGH); // Relè on/off spento
   delay(120000); //Attesa riempimento impianto                    
   digitalWrite(RELAY2,LOW); // Avvio motore per irrigare
   delay(500); // Attesa Start Relè on/off
   digitalWrite(RELAY2,HIGH); // Contatto relè on/off
   delay(200000); // Attesa spegnimento elettrovalvola 
		}
			if(digitalRead(pin_sensore) == 1 ){
   digitalWrite(RELAY1,HIGH); // Elettrovalvola spenta
	     
    }
    delay(100);
  }

Se metto il pin A0 in INPUT_PULLUP di un Primo Arduino e gli collego un pin digitale OUTPUT di un Secondo Arduino cosa succede?
Quando metto un pin digitale in output questo eroga 5v invece se metto il pin A0 come input questo va a massa e credo che in corto è assicurato..
Nel secondo arduino al posto del pin digitale posso mettere il pin Analogico come Output...cambia qualcosa?
Corregetemi se sbaglio

Un pin in INPUT è in input e basta (ed è un INGRESSO ad alta impedenza), se attivi la PULLUP, applichi semplicemente una resistenza di un valore superiore ai 10KΩ tra il pin in ingresso ed il Vcc ...

... detto questo che lo colleghi ad un segnale, proveniente da quello che ti pare, purché il segnale NON sia superiore come tensione ai 5.5V, NON puoi fare alcun corto ... un pin in INPUT serve proprio a leggere segnali che vanno da 0 (GND) a Vcc (+5).

Guglielmo

P.S.: Uno dei pin A0 .. A5, se dichiarato INPUT o INPUT_PULLUP o OUTPUT, NON è più un pin analogico, ma diventa, a tutti gli effetti, un pin digitale.

Grazie Guglielmo, ora provo

cicciozuc:
Grazie Guglielmo, ora provo

Ricorda che i due Arduino DEVONO avere il GND in comune ... :wink:

Guglielmo

Cosa vuoi dire in comune, ti spiego

Ho messo il pin A0 come input_pullup perché riceve un breve segnale (ON, (delay,500),OFF) da un relè collegato al primo Arduino come un pulsante, io volevo togliere il relè e dare direttamente un impulso al pin A0

Se tu vuoi leggere da un Arduino il valore di un pin di un altro Arduino, i due DEVONO avere il GND collegato tra loro, ovvero avere un "riferimento comune".

Per capire il perché di questa cosa leggi QUESTO thread.

Guglielmo

Quindi collego i pin gnd dei due Arduino e metto in comunicazione il pin output del primo e il pin A0 input del secondo Arduino? In questo caso visto che l'output viene da un igrometro e con una modifica fatta allo sketch non ho più un breve impulso On/OFF posso dichiarare il pin A0 come input e non più come pullup..Correggimi