Go Down

Topic: Irrigazione automatica (Read 6275 times) previous topic - next topic

gpb01

#210
Jul 26, 2019, 10:26 am Last Edit: Jul 26, 2019, 10:27 am by gpb01
... Micro$oft docet
... lo dico sempre che Micro$oft con il suo CTRL-ALT-DEL ha rovinato intere generazioni :D :D :D

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

Federico66






PS
Per chi non sapesse, "The IT Crowd" è una sitcom inglese nella quale ""Ha provato a spegnerlo e riaccenderlo?", è la soluzione ad ogni problema informatico :)

@Guglielmo, naturalmente puoi ripulire :)


"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

karnhack

#212
Jul 26, 2019, 12:31 pm Last Edit: Jul 26, 2019, 12:35 pm by karnhack
Grazie ragazzi, con l'esempio di Standardoil ho risolto. Vedervi discutere mi incoraggia, perché un novello come me è portato a pensare che il problema è solo suo che non capisce, invece dai vostri discorsi si evince che anche un professionista ha bisogno di tempo e ragionamenti per capire il funzionamento.

Standardoil

Sì, ma tu rispondi a federico66, che ti ha fatto una domanda che 'sento anche mia':
Perché non usi la eeprom interna?
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

karnhack

#214
Jul 26, 2019, 02:08 pm Last Edit: Jul 26, 2019, 03:07 pm by karnhack
Non avevo visto la domanda di Federico, cmq preferisco preservare Arduino piuttosto che  l'rtc che con due soldi lo ricompro. Visto che con questo progetto sto imparando sto facendo anche parecchie cazzate soprattutto all'inizio, per esempio mettendo la scrittura nvram nel loop,  bruciando due schede (Arduino clone + TinyRTC). Per finire in bellezza ieri mi è caduto il vino sul raspberry... una frana!
Sono più portato per la meccanica che per l'elettronica e la programmazione, sto cercando di imparare senza troppe pretese per fare qualche piccola automazione e giocare un po.

gpb01

#215
Jul 26, 2019, 02:37 pm Last Edit: Jul 26, 2019, 02:37 pm by gpb01
... per esempio mettendo la scrittura nvram nel loop,  bruciato due schede (Arduino clone + TinyRTC). Per finire in bellezza ieri mi è caduto il vino sul raspberry... una frana!
Tranquillo, abbiamo tutti cominciato facendo ... danni inenarrabili :D :D :D :D :D

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

karnhack

#216
Aug 02, 2019, 01:55 pm Last Edit: Aug 02, 2019, 02:16 pm by karnhack
Qualcosa non va con la funzione del troppopieno...  in pratica funziona al contrario cioè quando l'interruttore del troppopieno è CHIUSO l'elettrovalvola si apre e viceversa. Ovviamente la prima cosa che ho fatto è stata quella di invertire le costanti APERTO a 1 e CHIUSO a 0 ma in questo modo non funziona proprio.
Sarà che nel codice non c'è una condizione che gli dice espressamente cosa deve fare quando è APERTO?

Code: [Select]

const byte ACCESO = LOW;
const byte SPENTO = HIGH;
const byte APERTO = 0;
const byte CHIUSO = 1;

....

if (first_pass) {
    Serial.println("Fase: RIEMPIMENTO / RABOCCO");
    digitalWrite(pinElettrovalvola, ACCESO);             // valvola aperta
}

if (digitalRead(pinTroppopieno) == CHIUSO) {        // se bidone pieno
    digitalWrite(pinElettrovalvola, SPENTO);        // chiudi valvola
    if (ePausa == ATTIVO) { fase = PAUSA_24H; }     // Se ePausa e true vai a PAUSA 24
    else                  { fase = RIPOSO;    }     // altrimenti vai a RIPOSO
}
else if (trascorso >= 180) {                        // e se timeout riempimento supera i 3 minuti
    digitalWrite(pinElettrovalvola, SPENTO);        // chiudi valvola
    fase = ALLARME;                                 // vai ad allarme contatto guasto o manca acqua
}



Maurotec

Allora inverti questi,
Code: [Select]

const byte ACCESO = LOW;
const byte SPENTO = HIGH;

Cioè,
Code: [Select]

const byte ACCESO = HIGH;
const byte SPENTO = LOW;


Oppure,

Code: [Select]

void switchEV0( const bool tf ) {
     digitalWrite( pinElettrovalvola, tf );   
}


o se preferisci le macro,

Code: [Select]

#define SET_EV0_ON() (digitalWrite( pinElettrovalvola, HIGH ))
#define SET_EV0_OFF() (digitalWrite( pinElettrovalvola, LOW ))


Per richiamare una macro ti basta,
Code: [Select]

SET_EV0_ON(); // per accenderla
SET_EV0_OFF(); // per spegnerla


Ciao.

karnhack

#218
Aug 03, 2019, 12:37 pm Last Edit: Aug 03, 2019, 12:42 pm by karnhack
Maurotec forse non mi sono spiegato bene e ti chiedo scusa. In ogni caso ho fatto le prove che mi hai suggerito ma succede il finimondo, si accende tutto pompa ed elettrovalvola ed ignora completamente l'interruttore del troppopieno.
Il problema secondo me è sull'interruttore che funziona solo se è chiuso... quindi se è chiuso aspetta che si apre e questo funziona:
Code: [Select]

if (first_pass) {
    Serial.println("Fase: RIEMPIMENTO / RABOCCO");
    digitalWrite(pinElettrovalvola, ACCESO);        // valvola aperta
}

if (digitalRead(pinTroppopieno) == CHIUSO) {        // se bidone pieno
    digitalWrite(pinElettrovalvola, SPENTO);        // chiudi valvola
    if (ePausa == ATTIVO) { fase = PAUSA_24H; }     // Se ePausa e true vai a PAUSA 24
    else                  { fase = RIPOSO;    }     // altrimenti vai a RIPOSO
}
else if (trascorso >= 180) {                        // e se timeout riempimento supera i 3 minuti
    digitalWrite(pinElettrovalvola, SPENTO);        // chiudi valvola
    fase = ALLARME;                                 // vai ad allarme contatto guasto o manca acqua
}


Però se lo trova aperto non ha nessuna informazione su come deve comportarsi ed esegue direttamente lo switch passando alla fase successiva:

Code: [Select]

if (digitalRead(pinTroppopieno) == CHIUSO) {        // se bidone pieno
    digitalWrite(pinElettrovalvola, SPENTO);        // chiudi valvola
    if (ePausa == ATTIVO) { fase = PAUSA_24H; }     // Se ePausa e true vai a PAUSA 24
    else                  { fase = RIPOSO;    }     // altrimenti vai a RIPOSO
}



Sto facendo delle prove che non funzionano però sto vedendo che le costanti dichiarate dell'interruttore sono corrette, il problema è altrove.

karnhack

Fermi tutti, ho risolto!
Ho cambiato interruttore  e saldato il contatto su NC... anziché su NO...

Claudio_FF

#220
Aug 03, 2019, 01:31 pm Last Edit: Aug 03, 2019, 01:34 pm by Claudio_FF
Che poi, essendo un finecorsa, dal punto di vista della sicurezza era anche meglio lasciarlo su NC, così un'interruzione accidentale del collegamento veniva vista come livello raggiunto. Se metti il contatto NO e il cavetto si interrompe, la condizione di livello raggiunto non diventa mai vera  ;) (avevo anche suggerito un timeout sul riempimento proprio per evitare un rabbocco che non si arresta mai)
* * * * Una domanda ben posta è già mezza risposta * * * *

karnhack

Che poi, essendo un finecorsa, dal punto di vista della sicurezza era anche meglio lasciarlo su NC, così un'interruzione accidentale del collegamento veniva vista come livello raggiunto. Se metti il contatto NO e il cavetto si interrompe, la condizione di livello raggiunto non diventa mai vera  ;) (avevo anche suggerito un timeout sul riempimento proprio per evitare un rabbocco che non si arresta mai)
Ciao Claudio, pensavo mi avessi abbandonato! :D

Riguardo al finecorsa hai ragione ma non riesco a risolvere altrimenti e con sto caldo la via di minor resistenza ha la precedenza... poi si rischierebbe di arrivare a 300 risposte su questo thread anche se per me non è un problema...
Cmq non mi preoccupo più di tanto perché ho inserito una valvola di sicurezza meccanica che chiude la mandata in caso di malfunzionamento... inoltre se ricordi ho inserito uno stato di allarme alla quale collegherò un "cicalino"  o come si chiama lui...

karnhack

#222
Aug 06, 2019, 09:25 am Last Edit: Aug 06, 2019, 09:26 am by karnhack
Ragazzi vi ringrazio per tutto l'aiuto, finalmente comincio a vedere la fine.
Ora sono ad un bivio e cioè scegliere il tipo di alimentazione e stavo pensando a due vie e cioè :
- usare un alimentatore da 5v per alimentare arduino, relé ed rtc e alimentare la pompa peristaltica ed il motorino a parte con un alimentatore da 12v
- Alimentare tutto col 12V visto che ho letto che arduino se alimentato da usb "taglia" automaticamente la corrente portandola a 5v

Non capendo di elettronica però non so se sia "salutare" sparare i 12v sull' arduino e non vorrei si riscaldasse troppo e che nel tempo si danneggi. Volendo potrei anche mettere uno stepdown visto che ne ho uno e far fare questo lavoro a lui. Cosa mi consigliate? Grazie mille


Claudio_FF

#223
Aug 06, 2019, 06:14 pm Last Edit: Aug 06, 2019, 06:15 pm by Claudio_FF
Puoi alimentare tutto a 12 MA NON appoggiandoti al regolatore interno 5V di Arduino, serve obbligatoriamente uno step-down (per quei relé occorrono come minimo 300mA in totale).

Se lo step-down è lineare e non switching, allora dovrai dissipare più di 2W, il che vorrebbe dire un'aletta formato bancomat.


PS: bello il supporto stampato 3D 8)
* * * * Una domanda ben posta è già mezza risposta * * * *

karnhack

#224
Aug 06, 2019, 06:44 pm Last Edit: Aug 06, 2019, 06:51 pm by karnhack
Come alimentatore ho un 12v 2A recuperato da qualche parte, mentre lo step down è un MP1584EN che ha queste caratteristiche... credo di riuscire ad alimentare tutto anche se non so bene che motore usare per la pompa peristaltica, forse un nema visto che ne ho già uno anche se mi sembra un po sprecato:

Mini regolatore di alimentazione step-down MP1584EN ad elevata efficienza energetica con tensione regolabile da 0.8V a 20V e corrente massima di 3A. Il peso di soli 3gr lo rende ideale in tutte le applicazioni di mobilità, comunicazione e miniaturizzazione, è perfetto per essere utilizzato in modellismo, aeromodelli e droni.

TENSIONE DI INGRESSO 4.5V - 28V
TENSIONE IN USCITA 0.8V - 20V
CORRENTE 3A
RIPPLE <30mV
FREQUENZA DI SWITCHING 1MHz
EFFICIENZA 96%
DIMENSIONI 22x17x4mm




Go Up