Go Down

Topic: Automazione Tende antipioggia (Read 13809 times) previous topic - next topic

simosere

Ciao ete!!!!  Quindi consigli di leggere il valore  in digitale? In pratica cosi facendo avrei piove e non piove... e come faccio a comandare la chiusura delle tende  grandi e piccola? La piccola va chiusa solo in caso di nubifragio.... coai facebdo nn potrei piu... o sbaglio!?

Etemenanki

In effetti, se hai due diverse tende con due soglie, sarebbe meglio leggerla in analogico ... ma poi per via della differenza di composizione chimica che puo avere la pioggia di volta in volta, non puoi avere la certezza di un risultato sempre uguale ... non so neppure se sia possibile avere due diverse soglie digitali sempre uguali, per lo stesso motivo ... devo pensarci su un po, vado a farmi un mezzo litro di caffe' espresso cosi mi rilasso un po :D

(scherzi a parte, forse, e sottolineo forse, si puo fare anche con il capacitivo, ma prima devo vedere se funziona e fino a che punto ... ti sapro' dire appena riesco a provare)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

simosere

In effetti, se hai due diverse tende con due soglie, sarebbe meglio leggerla in analogico ... ma poi per via della differenza di composizione chimica che puo avere la pioggia di volta in volta, non puoi avere la certezza di un risultato sempre uguale ... non so neppure se sia possibile avere due diverse soglie digitali sempre uguali, per lo stesso motivo ... devo pensarci su un po, vado a farmi un mezzo litro di caffe' espresso cosi mi rilasso un po :D

(scherzi a parte, forse, e sottolineo forse, si puo fare anche con il capacitivo, ma prima devo vedere se funziona e fino a che punto ... ti sapro' dire appena riesco a provare)
Ok grazie Ete!!!

simosere

#528
Oct 08, 2018, 02:42 pm Last Edit: Oct 08, 2018, 02:43 pm by simosere






cmq dalle prove che sto facendo se faccio una lettura in questo modo:

  
Code: [Select]
digitalWrite (pin_pioggia, HIGH );
  delay(piccolo ritardo);
  misurazione = analogRead(pin_sensore);
  digitalWrite (pin_pioggia, LOW );


e poi faccio in modo che il pin_pioggia rimane sempre LOW per tot tempo...durante questo tot tempo il valore letto del pin analogico è zero...

c'è un modo per baipassare questa cosa?
comunque al netto dei preziosi consigli di Ete, questa cosa può fare secondo voi? anche cambiando approccio e leggendo solo se piove o no, e calibrando il sensore, potrebbe allungare di non poco la vita del sensore.... non credete?

grazie

simosere

#529
Oct 09, 2018, 08:28 am Last Edit: Oct 09, 2018, 08:29 am by simosere
Ciao Ragazzi,

ho buttato giù un codice che funziona per metà:

in pratica in condizioni di asciutto effettuata letture alternando l'alimentazione del sensore come consigliato da brunello, ma se durante una lettura il sensore legge valori <599 (a 600 le tende grandi si chiudono) da qual momento in poi il sensore si disattiverà per verificare ogni 10 secondi (per esempio oppure 10 minuti) il valore del sensore che se inferiore a 599 lo setterà sempre a 599 per farlo entrare nel secondo if.

il problema sorge se il valore durante la verifica dopo 10 secondi o dopo 10 minuti scende sotto 399(la tenda piccola si chiude a valori <400), in pratica sia le condizioni <599 e <399 sono vere e quindi mi viene restituito sia il valore a 599 sia il valore 399, invece dovrebbe escludermi il 599....

ho fatto vare prove ma serza risolvere...

potrebbe l'utilizzo dello Switch (case) raiutarmi?
è questa secondo voi una strada percorribile per allungare la vita del sensore in attesa di trovare una soluzione più duratura?
altri consigli?

grazie







Code: [Select]
 
void controllaPIOGGIA() {
     if(cambiostato1 == false && cambiostato2 == false ) {
          digitalWrite (pin_pioggia, HIGH );
         delay(10);
         misurazione = analogRead(pin_sensore);
         Serial.println(misurazione);
        
         digitalWrite (pin_pioggia, LOW );
         }

            
             if(misurazione <599) {
            
              startingTimePIOGGIA = millis();
         cambiostato1 = true;
         Serial.println(cambiostato1);
         misurazione = 599;
         digitalWrite (pin_pioggia, LOW );
         Serial.println(misurazione);
        
          }
          if(cambiostato1 == true ) {
         if(misurazione == 599 ) {
         if ((millis() - startingTimePIOGGIA) > isrTimerPIOGGIA) {
         digitalWrite (pin_pioggia, HIGH );
         delay(10);
         misurazione = analogRead(pin_sensore);
         Serial.println(misurazione);
         digitalWrite (pin_pioggia, LOW );
        }
        }
  
            if(misurazione >601 && cambiostato1 == true  ) {
          cambiostato1 = false;  
        

        }
        
           if(misurazione <399 ) {
          
              startingTimePIOGGIA2 = millis();
              
              cambiostato1 = false;
         cambiostato2 = true;
        
         Serial.println(cambiostato2);
         misurazione = 399;
         digitalWrite (pin_pioggia, LOW );
         Serial.println(misurazione);
        
         }
         if(cambiostato2 == true ) {
         if(misurazione == 399) {
         if ((millis() - startingTimePIOGGIA2) > isrTimerPIOGGIA2) {
         digitalWrite (pin_pioggia, HIGH );
         delay(10);
         misurazione = analogRead(pin_sensore);
         Serial.println(misurazione);
         digitalWrite (pin_pioggia, LOW );
        }
        }
  
            if(misurazione >401 && cambiostato2 == true  ) {
          cambiostato2 = false;
          cambiostato1 = true;  


        }


        
    
}

}
}

simosere

ragazzi, ho sistemato il codice e funziona:

mi piacerebbe però una vostra opinione....

grazie

Code: [Select]
void controllaPIOGGIA() {

 if(cambiostato1 == false && cambiostato2 == false ) {
          digitalWrite (pin_pioggia, HIGH );
         delay(10);
         misurazione = analogRead(pin_sensore);
         Serial.println(misurazione);
       
         digitalWrite (pin_pioggia, LOW );
         }

             if(misurazione >= 410 && misurazione <599) {
             
              startingTimePIOGGIA = millis();
         cambiostato1 = true;
         Serial.println(cambiostato1);
          Serial.println(cambiostato2);
         misurazione = 599;
         digitalWrite (pin_pioggia, LOW );
         Serial.println(misurazione);
       
          }
          if(cambiostato1 == true ) {
         if(misurazione == 599 ) {
         if ((millis() - startingTimePIOGGIA) > isrTimerPIOGGIA) {
         digitalWrite (pin_pioggia, HIGH );
         delay(10);
         misurazione = analogRead(pin_sensore);
         Serial.println(misurazione);
         digitalWrite (pin_pioggia, LOW );
        }
        }
   
            if(misurazione >601 && cambiostato1 == true  ) {
          cambiostato1 = false;   
         

        }
        }

if(misurazione <409 ) {


             
              startingTimePIOGGIA2 = millis();
             
              cambiostato1 = false;
              cambiostato2 = true;
         
         Serial.println(cambiostato1);
          Serial.println(cambiostato2);
         misurazione = 409;
         digitalWrite (pin_pioggia, LOW );
         Serial.println(misurazione);
         
         }
         if(cambiostato2 == true ) {
         if(misurazione == 409) {
         if ((millis() - startingTimePIOGGIA2) > isrTimerPIOGGIA2) {
         digitalWrite (pin_pioggia, HIGH );
         delay(10);
         misurazione = analogRead(pin_sensore);
         Serial.println(misurazione);
         digitalWrite (pin_pioggia, LOW );
        }
        }
   
            if(misurazione >410 && cambiostato2 == true  ) {
          cambiostato2 = false;
          cambiostato1 = true; 


        }


       
   
}

}








     
     

simosere

#531
Oct 19, 2018, 01:49 pm Last Edit: Oct 19, 2018, 01:50 pm by simosere
Ciao Ragazzi,

sto avedo noie con il sensore DHT22, si è saturato e mi da sempre letture di umidità di 99.9% e leggevo che purtoppo questi sensori sono soggetti a questo tipo di problemi...

girovagando su internete ho trovato questo:


https://www.amazon.it/gp/product/B07D8T4HP6/ref=ox_sc_act_title_1?smid=A1X7QLRQH87QA3&psc=1




si può collegare a qualsiasi pin analogico oppure per forza ai pin A4 e A5? perchè sono usati dal display.

grazie

gpb01

Quel sensore usa il bus I2C (e non segnali analogici). Su Arduino UNO il bus è sugli stessi pin del A4 ed A5 e quindi li perdi, su Arduino MEGA è sui pin 20 e 21.

Guglielmo
Search is Your friend ... or I am Your enemy !

simosere

Ok grazie Gugliemo... quindi avrei bisogno di un i2c expander in caso... giusto?

gpb01

Ok grazie Gugliemo... quindi avrei bisogno di un i2c expander in caso... giusto?
Per che fare ? ? ? :o :o :o

Mi sa che è meglio che ti STUDI come funziona un bus I2C ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

simosere

Quello che nn ho capito è  se i pin a4 e a5 li uso per il display come faccio a collegare amche il bme280?

Nn lho capito nemmeno "studiando" il post consigliato....

Grazie

Patrick_M

semplice...se i pin li devi usare per l'I2C NON li puoi usare per altri collegamenti che non siano anche loro I2C
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

gpb01

#537
Oct 19, 2018, 08:38 pm Last Edit: Oct 19, 2018, 08:39 pm by gpb01
semplice...se i pin li devi usare per l'I2C NON li puoi usare per altri collegamenti che non siano anche loro I2C
Il BME280 è un I2C (per la versione SPI usi tutt'altri pin) ... quello che lui continua NON capire, perché legge invece di STUDIARE è che ogni device I2C ha un suo indirizzo e che qundi, sullo stesso bus, ce ne possono essere tanti ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

simosere

#538
Oct 19, 2018, 08:40 pm Last Edit: Oct 19, 2018, 08:43 pm by gpb01
Il BME280 è un I2C (per la versione SPI usi tutt'altri pin) ... quello che lui continua NON capire, perché legge invece di STUDIARE è che ogni device I2C ha un suo indirizzo e che qundi, sullo stesso bus, ce ne possono essere tanti ;)

Guglielmo
Ok grazie Guglielmo. Ora ho capito... prometto di leggere ancora quanto da te consigliato,ma con più attenzione.

Grazie a tutti

simosere

#539
Oct 29, 2018, 02:07 pm Last Edit: Oct 29, 2018, 02:09 pm by simosere
Ciao a tutti!!

sto sbattendo la testa con una parte del codice per il controllo remoto di arduino, non ho problemi a ricevere informazioni da arduino, ma ora vorrei inviarle...

utilizzo questa parte di codice per "creare" le stringhe che arduino poi, trmiate esp8266 mi invia....

Code: [Select]
// ----- WEBPAGINA -----
      String Webpagina = "Pioggia:"+ String(misurazione) + "\r\n";
      
      String two =  "Vento:" +  String(Rotations) + "\r\n";

      String three =  "tGcS:" + String(attivaz_chiusuraGRANDESX) + "\r\n";

      String four =  "tGcC:" + String(attivaz_chiusuraGRANDECENTRO) + "\r\n";

      String five = "tPc:" + String(attivaz_chiusuraPICCOLA) + "\r\n";
    

      

      // ----- WEBPAGINA -----
 
      sendData("AT+CIPSEND=" + String(connectionId) + "," + Webpagina.length() + "\r\n", 500, true);
      sendData(Webpagina, 1000, true); // Stuur de webpagina door.
      sendData("AT+CIPSEND=" + String(connectionId) + "," + two.length() + "\r\n", 500, true);
      sendData(two, 1000, true); // Stuur de webpagina door.
      sendData("AT+CIPSEND=" + String(connectionId) + "," + three.length() + "\r\n", 500, true);
      sendData(three, 1000, true); // Stuur de webpagina door.
      sendData("AT+CIPSEND=" + String(connectionId) + "," + four.length() + "\r\n", 500, true);
      sendData(four, 1000, true); // Stuur de webpagina door.
      sendData("AT+CIPSEND=" + String(connectionId) + "," + five.length() + "\r\n", 500, true);
      sendData(five, 1000, true); // Stuur de webpagina door.
      
      
      sendData("AT+CIPCLOSE=" + String(connectionId) + "\r\n", 1000, true); // Sluit de connectie.
      
      
    }
  }




ora vorrei invece creare un pulsante per cambiare lo stato di un flag.... e quindi mandare io da remoto l'imput ad arduino di cambiarmelo....  non ho trovato nulla in rete e non ho idea di come apoprocciarmi...

grazie

Go Up