Go Down

Topic: 3Serre (Read 6512 times) previous topic - next topic

-d0b-


stefa24

prima di addentrarsi nel pid, di che dimensioni sono le serre? di quali sistemi disponi per scaldare/raffrescare?
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
https://www.youtube.com/channel/UCnY1DNrSywgadjyqqtbvyew

-d0b-

giusto... più tosto che rispondere qua ho deciso di modificare la prima pagina del post.  :smiley-wink:

stefa24

ok ho letto il primo post, non sono in grado di darti indicazioni su come dimensionare stufette e ventole, ci sono molte variabili in gioco. Inoltre automatizza tutto visto che ci sei anche la serra dei pomodori.
Per la ventilazione puoi pensare, in primis, a finestre motorizzate e dove serve velocità di ricambio ad un ventilatore come hai previsto.
Per il riscaldamento una o più stufette, con accorgimenti per non riscaldare aria inutilmente.
Se hai necessità di raffrescare degli spruzzi sulla copertura può essere una valida soluzione.
Detto questo con arduino puoi monitorare e controllare tutto, anche da web come hai previsto.
Un solo programma per tutto per me sarebbe complesso, io sono per un dividi ed impera, pensando ad un arduino anche standalone, per ogni serra
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
https://www.youtube.com/channel/UCnY1DNrSywgadjyqqtbvyew

-d0b-

#19
Dec 11, 2014, 07:38 pm Last Edit: Dec 11, 2014, 08:21 pm by -d0b-
grazie stefa per i consigli... per ora non ho ancora pensato all'attrezzatura necessaria tipo stufette ecc... ho una vaga idea che prenderà forma nel momento della realizzazione delle strutture.

Per ora mi concentro su Arduino... ho aggiustato un po lo sketch risolvendo i problemi con i ds18b20, fra poco mi arriverà un lettore microSD un modulo orologio e un modulo wifi.

Io invece preferisco un solo Arduino che mi controlla più cose... Non è bello ciò che è bello ma è bello ciò che piace...

Secondo voi cosa si puo fare per migliorare questa parte di sketch...

stefa24

Non mi ritengo un programmatore e quelli che ho fatto li ho fatti anche con un po di fatica all'inizio, ognuno credo che alla fine maturi un suo stile, importante è commentare il più possibile per futuri interventi, io evito il più possibile gli IF{} cercando di usare i DO e i WHILE, e gli SWITCH.
In questa fase di test, cerca di riprodurre al meglio le condizioni reali, in particolare per quanto riguarda la lunghezza dei cavi dei sensori, DS e DTH so che per il DS ci sono degli accorgimenti se ne è parlato moltissimi post fà come questo
http://forum.arduino.cc/index.php?topic=21762.0
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
https://www.youtube.com/channel/UCnY1DNrSywgadjyqqtbvyew

stefa24

in questo post si parla di serre ma non lo ho letto tutto
http://forum.arduino.cc/index.php?topic=216132.0
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
https://www.youtube.com/channel/UCnY1DNrSywgadjyqqtbvyew

giorgio90

#22
Dec 12, 2014, 10:13 am Last Edit: Dec 12, 2014, 10:14 am by giorgio90
Mi permetto di sollevare alcuni dubbi sul progetto (bello, anche se non nuovo) in questione :

Quote
La serra dei pomodori non mi interessa controllare ma solo monitorare, infatti posizionerò 2 sensori tipo DHT11
Sensore davvero scarso, lo stavo testando questi giorni e dire che è impreciso è un regalo...penso che mi orienterò su un DHT22. Considera che sulle temperature ha un'imprecisione di +- 2 °C e sull'umidità +-5% RH

Quote
una stufetta per scaldare quando le temperature scenderanno sotto una determinata temperatura
con una stufetta non fai niente, o piuttosto fai male. A meno che non usi qualcosa di più "ad ampio raggio", ad esempio a soffitto, o con più unità di minore potenza, con una singola stufetta avrai come risultato quello di avere una zona molto calda vicino a dove è la stufa (e non fa bene alle piante) e una zona ancora fredda nella parte più lontana della serra, produrrai perciò un forte gradiente termico che alle piante bene non fa.
Aggiungi che affidarti a un singolo DHT11 per governare tutto è un azzardo...considerando quanto è economico il sensore, e quanto è inaffidabile, basta che questo ci metta più del previsto a rilevare la temperatura giusta e nel frattempo la stufa ti ha abbrustolito le piante.

Quote
. serra pomodori piu grande con : 2 dht11 + 1 ds18b20
. serra peperoncini piu piccola con : 1 dht11 + 1 ds18b20
. semenzaio con : 1 dht11 + 1 ds18b20
l'umidità del terreno come la misuri? non vedo nessun sensore apposito, di certo non puoi farlo con il DHT11

Quote
Quando il sensore rivela umidita del tereno pari a zero... quindi secchissimo... parte la pompa che rimane accesa tot periodo...
falso, i sensori di umidità suolo non arrivano mai a zero. Funzionano analizzando la conduttività tra due parti metalliche che si infilano nel terreno. Avere un valore 0 (tralasciando che non avverrebbe comunque mai) significherebbe che il terreno è secco al 100%, cioè una pianta sarebbe stramorta e non ci sarebbe la minima traccia di acqua. Da mie sperimentazioni i valori di terreno secco sono sui 1010 (è un sensore analogico) mentre un terreno completamente inzuppato è sui 80.

Quote
i collegamenti visto che non ho grandi esperienze in saldature
mmmm, quindi terrai tutti i cavettini volanti? secondo me inizia a far pratica con un saldatore, se ti piace arduino non puoi non saperne usare uno, anche economico.
Con tutti i cavettini basta una minima cosa che se ne stacca uno e diventi matto a capire cosa non funziona...

Quote
ho capito che la libreria PID serve per colmare eventuali imprecisioni dei sensori eccc eccc ...
un controllo con PID sarebbe il massimo ma effettivamente è un po' troppo per delle semplici serre...non è una cosa banale, anzi è parecchio incasinata, quindi secondo me non serve in questo caso.

Quote
Io invece preferisco un solo Arduino che mi controlla più cose... Non è bello ciò che è bello ma è bello ciò che piace...
Anche questa cosa mi fa storcere il naso.
Non tanto per i sensori digitali che problemi più di tanto non dovrebbero averne, ma per quelli analogici quali quelli per il controllo umidità suolo. Far correre cavi per 5-10m (immagino che arduino sarà messo in una posizione equidistante da tutte e tre le serre) non è una buona idea perchè il segnale analogico potrebbe essere "rovinato" nel tragitto, sopratutto correndo vicino a altri cavi come quelli a 230V per alimentare ventole, stufe, ecc...L'idea di un arduino per ogni serra non è malvagia...considerando che un Arduino pro mini costa due spiccioli, uno per ogni serra non è un problema.


Riepilogando, prima di buttarti a scrivere codice, verifica la fattibilità di tutti i requisiti "hardware"...perdere un mese per scrivere un codicione e poi non funziona nulla perchè i componenti non vanno bene non è molto saggio. Io sono del parere che prima si fa un'analisi della fattibilità dei componenti e poi ci si mette a fare il codice. Anche perchè scrivendo il codice col pensiero "poi si pensa a come costruirò tutto" non ti permette di prendere in considerazione le necessità che vengono fuori proprio dai problemi pratici...
WWW.GIORGIOCASIELLO.COM

-d0b-

#23
Dec 12, 2014, 11:04 am Last Edit: Dec 12, 2014, 11:07 am by -d0b-
bene bene vedo che i consigli non mancano... piu che consigli sono mazzate ahahah.....

Quote
in questo post si parla di serre ma non lo ho letto tutto
http://forum.arduino.cc/index.php?topic=216132.0
ho riletto e riletto questo post, ma non ho trovato grande giovamento d'averlo fatto, un po' troppo caotico....

Quote
Sensore davvero scarso, lo stavo testando questi giorni e dire che è impreciso è un regalo...penso che mi orienterò su un DHT22. Considera che sulle temperature ha un'imprecisione di +- 2 °C e sull'umidità +-5% RH
Verissimo me ne sono accorto anch'io in sti giorni... la soluzione che ho pensato? Comprarne altri piu accurati oppure aumentare il numero di dht11 per poi sommarli e dividerli ottenendo un risultato piu accurato.

Quote
con una stufetta non fai niente, o piuttosto fai male. A meno che non usi qualcosa di più "ad ampio raggio", ad esempio a soffitto, o con più unità di minore potenza, con una singola stufetta avrai come risultato quello di avere una zona molto calda vicino a dove è la stufa (e non fa bene alle piante) e una zona ancora fredda nella parte più lontana della serra, produrrai perciò un forte gradiente termico che alle piante bene non fa.
Aggiungi che affidarti a un singolo DHT11 per governare tutto è un azzardo...considerando quanto è economico il sensore, e quanto è inaffidabile, basta che questo ci metta più del previsto a rilevare la temperatura giusta e nel frattempo la stufa ti ha abbrustolito le piante.
questo argomento per ora non mi interessa molto, infatti vi sono molteplici soluzioni solo da scegliere quella piu adatta. Comunque osservazioni giustissime!

Quote
l'umidità del terreno come la misuri? non vedo nessun sensore apposito, di certo non puoi farlo con il DHT11
Probabilmente non sono stato molto chiaro, la strada che prenderò sarà quella dell'autocostruzione, in rete si trovano molte guide. Una cosa che farò è quella di comprare un paio di rilevatore umidità terra (tipo quello in foto) per confrontare i dati di quelli autocostruiti.



la parte di sketch riguardanti i sensori umidità terreno, sarà giusto?

Code: [Select]
// ************************************************************************************************
//***** Sensori Umidità Terreno pomodori --- in questo momento ne uso solo 2
// ************************************************************************************************
int analogPin1 = A0; // Sensore 1 umidità Suolo pomodori
float SoilH1 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin2 = A1; // Sensore 2 umidità Suolo pomodori
float SoilH2 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin3 = A2; // Sensore 3 umidità Suolo pomodori
float SoilH3 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin4 = A3; // Sensore 4 umidità Suolo pomodori
float SoilH4 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin5 = A4; // Sensore 5 umidità Suolo pomodori
float SoilH5 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin6 = A5; // Sensore 6 umidità Suolo pomodori
float SoilH6 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin7 = A6; // Sensore 7 umidità Suolo pomodori
float SoilH7 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin8 = A7; // Sensore 8 umidità Suolo pomodori
float SoilH8 = 0; // variabile per memorizzare il valore proveniente dal sensore
float SoilHf = 0; // da memorizzare x irrigazione
// ************************************************************************************************
//***** Sensori Umidità Terreno peperoncini
// ************************************************************************************************
int analogPin9 = A8; // Sensore 9 umidità Suolo peperoncini
float SoilH9 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin10 = A9; // Sensore 10 umidità Suolo peperoncini
float SoilH10 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin11 = A10; // Sensore 11 umidità Suolo peperoncini
float SoilH11 = 0; // variabile per memorizzare il valore proveniente dal sensore
int analogPin12 = A11; // Sensore 12 umidità Suolo peperoncini
float SoilH12 = 0; // variabile per memorizzare il valore proveniente dal sensore
float SoilHm = 0; // da memorizzare x irrigazione  


Code: [Select]
void loop() {
// ************************************************************************************************
//***** Umidità Suolo pomodori
// ************************************************************************************************

 if (analogRead(analogPin1) > 224) {
 SoilH1 = 100-(((analogRead(analogPin1))-224)*0.125);
 } else {
 SoilH1 = 100;
 }
 if (analogRead(analogPin2) > 224) {
 SoilH2 = 100-(((analogRead(analogPin2))-224)*0.125);
 } else {
 SoilH2 = 100;
 }

// uso solo 2 sensori
// if (analogRead(analogPin3) > 224) {
// SoilH3 = 100-(((analogRead(analogPin3))-224)*0.125);
// } else {
// SoilH3 = 100;
// }
// if (analogRead(analogPin4) > 224) {
// SoilH4 = 100-(((analogRead(analogPin4))-224)*0.125);
// } else {
// SoilH4 = 100;
// }
// if (analogRead(analogPin5) > 224) {
// SoilH5 = 100-(((analogRead(analogPin5))-224)*0.125);
// } else {
// SoilH5 = 100;
// }
// if (analogRead(analogPin6) > 224) {
// SoilH6 = 100-(((analogRead(analogPin6))-224)*0.125);
// } else {
// SoilH6 = 100;
// }
// if (analogRead(analogPin7) > 224) {
// SoilH7 = 100-(((analogRead(analogPin7))-224)*0.125);
// } else {
// SoilH7 = 100;
// } // if (analogRead(analogPin8) > 224) {
// SoilH8 = 100-(((analogRead(analogPin8))-224)*0.125);
// } else {
// SoilH8 = 100;
// }
// copiare i sensori mancanti con quelli presenti
SoilH3 = (SoilH1);
SoilH4 = (SoilH2);
SoilH5 = (SoilH1);
SoilH6 = (SoilH2);
SoilH7 = (SoilH1);
SoilH8 = (SoilH2);
SoilHf = ((SoilH1+SoilH2+SoilH3+SoilH4+SoilH5+SoilH6+SoilH7+SoilH8)/8);
// ************************************************************************************************
//***** Umidità Suolo peperoncini
// ************************************************************************************************
 if (analogRead(analogPin9) > 224) {
 SoilH9 = 100-(((analogRead(analogPin9))-224)*0.125);
 } else {
 SoilH9 = 100;
 }
 if (analogRead(analogPin10) > 224) {
 SoilH10 = 100-(((analogRead(analogPin10))-224)*0.125);
 } else {
 SoilH10 = 100;
 }
 if (analogRead(analogPin11) > 224) {
 SoilH11 = 100-(((analogRead(analogPin11))-224)*0.125);
 } else {
 SoilH11 = 100;
 }
 if (analogRead(analogPin12) > 224) {
 SoilH12 = 100-(((analogRead(analogPin12))-224)*0.125);
 } else {
 SoilH12 = 100;
 }

SoilHm = ((SoilH9+SoilH10+SoilH11+SoilH12)/4);  


comunque non sono molto sicuro del funzionamento, dovrei provarlo. Quando sarà tutto pronto sperimento e capirò il valore corretto da inserire e il giusto periodo di pompaggio.

Quote
un controllo con PID sarebbe il massimo ma effettivamente è un po' troppo per delle semplici serre...non è una cosa banale, anzi è parecchio incasinata, quindi secondo me non serve in questo caso.
... anchio pensavo di lasciar stare... per ora  :smiley-grin:

Quote
Anche questa cosa mi fa storcere il naso.
Non tanto per i sensori digitali che problemi più di tanto non dovrebbero averne, ma per quelli analogici quali quelli per il controllo umidità suolo. Far correre cavi per 5-10m (immagino che arduino sarà messo in una posizione equidistante da tutte e tre le serre) non è una buona idea perchè il segnale analogico potrebbe essere "rovinato" nel tragitto, sopratutto correndo vicino a altri cavi come quelli a 230V per alimentare ventole, stufe, ecc...L'idea di un arduino per ogni serra non è malvagia...considerando che un Arduino pro mini costa due spiccioli, uno per ogni serra non è un problema.


Riepilogando, prima di buttarti a scrivere codice, verifica la fattibilità di tutti i requisiti "hardware"...perdere un mese per scrivere un codicione e poi non funziona nulla perchè i componenti non vanno bene non è molto saggio. Io sono del parere che prima si fa un'analisi della fattibilità dei componenti e poi ci si mette a fare il codice. Anche perchè scrivendo il codice col pensiero "poi si pensa a come costruirò tutto" non ti permette di prendere in considerazione le necessità che vengono fuori proprio dai problemi pratici...
Avessi avuto piu esperienza sicuramente avrei fatto cosi.... ormai faccio cosa... tutto in uno...

per la lunghezza dei cavi, ho misurato, il piu lungo sara di 4 m, quindi non penso che ci saranno problemi.

si i sensori saranno un po volanti... ma se fai le cose fatte bene non si notano neanche  ;)






giorgio90

#24
Dec 12, 2014, 11:12 am Last Edit: Dec 12, 2014, 11:13 am by giorgio90
ahahahahha guarda che almeno io preferisco le mazzate, ma almeno imparo qualcosa... :D
Ovviamente i commenti che ho fatto non erano per demoralizzarti, ma per metterti in guardia su alcuni elementi che io non sottovaluterei.

Per la questione DHT11 invece di stare a prenderne più di uno, somma, dividi, ecc...prendi direttamente il DHT22 che già è meglio e ha la precisione decimale...i DHT non hanno manco la precisione decimale ma di +-1 °C...cioè non avrai temperature come 23,40 ma solo 23,00 e sapendo che ci può essere un errore di +-2 in quel caso potresti avere 21 quando nella realtà ce ne sono 23,4 (esempio eh)...

Per i rilevatori umidità io mi riferivo a quelli...costano una fesseria...io ne ho 3 presi a meno di un euro l'uno...quasi quasi costa più a farseli che a prendere quelli.

Infine per la lunghezza dei cavi, mmmm, anche 4m non so se può andar bene. Sono sincero non mi sono mai spinto cosi lontano con un analogico, sopratutto se stenderai il cavo insieme ad altri vicini, quindi qui attendiamo il parere di chi ne sa di più...
WWW.GIORGIOCASIELLO.COM

-d0b-

#25
Dec 13, 2014, 10:55 am Last Edit: Dec 13, 2014, 11:02 am by -d0b-
 ;D  appena arrivato il modulo wifi ESP8266... ieri in verità...



Guidus93

Anche io sto facendo un progetto simile, per sensori di umidità utilizzo quelli che hai postato, il controllo dell'irrigatore lo faccio solo una volta al giorno un'ora prima che si accenda la luce. Se l'umidità media dei 4 sensori è troppo bassa faccio partire i gocciolatori per 15 minuti, ti consiglio di togliere i delay, perchè ti bloccano tutto il codice, ahimè ho dovuto sbatterci la testa anche io, i delay sono maledetti perchè ti bloccano il processore. Ti lascio il mio codice qui:
Code: [Select]


#define TIMERPUMP (1000UL * 60 * 15)
unsigned long rolltime = millis() + TIMERPUMP;
bool tropposecco;
bool statoirrigazione;

void irrigazione() {

if (tc = ton - 3600) {
  statoirrigazione = true;
}
else {
  statoirrigazione = false;
}

if (statoirrigazione == true) {
  letturasensoriterreno();

  if (umiditamedia > 200) {
    tropposecco = true;
  }
  if (tropposecco == true) {
    digitalWrite (pumpRelay, HIGH);
    if ((long)(millis() - rolltime) >= 0) {
      digitalWrite(pumpRelay, LOW);
      rolltime += TIMERPUMP;
      tropposecco = false;
      statoirrigazione = false;
    }
  }
  else {
    digitalWrite(pumpRelay, LOW);
  }
}
}

void letturasensoriterreno() {

  for (int i = 0; i < 30; i++) //samping 30 time within 3 seconds
  {
    moistureSum0 = moistureSum0 + analogRead(A0);
    moistureSum1 = moistureSum1 + analogRead(A1);
    moistureSum2 = moistureSum2 + analogRead(A2);
    moistureSum3 = moistureSum3 + analogRead(A3);

  }
  moistureValue0 = moistureSum0 / 30;//get the average value
  moistureValue1 = moistureSum1 / 30;
  moistureValue2 = moistureSum2 / 30;
  moistureValue3 = moistureSum3 / 30;

  moistureSum0 = 0;//reset the variable
  moistureSum1 = 0;
  moistureSum2 = 0;
  moistureSum3 = 0;
  umiditamedia = (moistureValue0 + moistureValue1 + moistureValue2 + moistureValue3) / 4;

}

Go Up