Salve a tutti ho la necessità di controllare due pompe a 24v dc nel seguente modo ho 4 galleggianti e 2 pompe che non devono mai andare insieme la pompa 1 deve andare se l'ingresso 1 on ingresso 2 off mentre la seconda deve andare se ingresso 3 ingresso 4 off ma questa seconda non deve andare finche la pompa 2 non si ferma. Secondo voi è fattibile farlo con arduino? Grazie
Non sono molto chiare le condizioni di attivazione delle pompe comunque la risposta è si con Arduino puoi comandare le due pompe inserendo la logica che non preveda l'attivazione delle due pompe in contemporanea
Se non sbaglio hai descritto (con un paio di imprecisioni) questo:
Non serve logica programmabile. Però se invece vuoi usare un Arduino, allora si, bastano le due espressioni logiche che calcolano p1 e p2.
Esattamente questo c'è qualche esempio di programmazione che posso prendere come esempio per poi adattarmelo?
p1 = i1 && !i2;
ecc.
i1=digitalRead(pingalleg1) ;
i2=digitalRead(pingalleg2) ;
i3=digitalRead(pingalleg3) ;
i4=digitalRead(pinGalleg4) ;
//ogni ix sarà 0 o 1
p1 = i1 && !i2;
p2 = (i3 && !i4) && !p1;
digitalWrite(pinPompa1, p1) ;
digitalWrite(pinPompa2, p2) ;
In elettronica e informatica la precisione è importante, altrimenti non si ottiene il risultato voluto! Bisogna fare attenzione a scrivere chiaramente, rileggendo criticamente quanto si è scritto.
"Ho 4 galleggianti e 2 pompe che non devono mai andare insieme.
- La pompa 1 deve andare se l'ingresso 1 è on e l'ingresso 2 off.
- La pompa 2 deve andare se sia ingresso 3 che ingresso 4 sono off.
- La pompa 2 non deve andare finche la pompa 2 non si ferma."
Forse la pompa 2 non deve andare finché gira la pompa 1?...
if (in1 && !in2) {pompa1 ON} // ! significa negazione.
if (!in3 && !in4 && pompa1_OFF) {pompa2 ON}
i1=digitalRead(PINGALL1);
i2=digitalRead(PINGALL2);
i3=digitalRead(PINGALL3);
i4=digitalRead(PINGALL4);
p1= i1 && !i2; // ! significa negazione.
p2=!i3 && !i4 && !p1;
digitalWrite(PINPOMPA1, p1);
digitalWrite(PINPOMPA2, p2);
Be pure questo non mi pare chiaro né corretta come analisi. Se stiamo calcolando quando azionare pompa due non può dire finché la pompa 2 non si ferma. Forse voleva dire finché pompa 1 non si ferma.
Inoltre "non si ferma" intende semplicemente che non è attiva o deve aver fatto un passaggio off-on-off?
Poco chiara analisi richieste
Naturalmente, conoscere l'applicazione esatta sarebbe di grande aiuto.
Non sappiamo quali siano i suoi collegamenti, se galleggiante on significa 1 o 0, e se pompa accesa sia 1 o 0.
Modificherei con le solite costanti da valorizzare una sola volta all'inizio del programma in base ai collegamenti:
i1 = digitalRead(pingalleg1)==IN_LEVEL_ON ;
...
digitalWrite(pinPompa2, p2 ? OUT_LEVEL_ON : OUT_LEVEL_OFF) ;
Esatto
Adesso faccio delle prove ma praticamente la pompa 2 non dave mai accendersi finché la pompa 1 è in funzione.
mi è venuto un dubbio i galleganti lavorano a 24V DC metre arduino legge i segnali in input solo a 5V come posso fare per trasformare il segnale (high e low) da 24V a 5V in modo che sia letto da arduino? i gallegganti sono seplici interruttori aperti o chiusi.
Se "sono seplici interruttori aperti o chiusi" perché non li fai lavorare a 5V? ... comunque, se lavori a 24V, basta un semplice partitore resistivo sull'ingresso di Arduino.
Guglielmo
Perché il resto dell'impianto è a 24v e vorrei tenere i 5 v solo per i comandi di arduno. Potrebbe andare bene come quello dell'immagine allegata? E il pin signal lo collego in un pin digitale non i quelli analogici corretto?
Rammenta sempre che, per gli AVR (es. ATmega328P), come da datasheet:
VIL : Input Low Voltage, except XTAL1 and RESET pin : Min. -0.5V, Max. 0.2xVCC (alimentato fino a 2.4V) ; Min. -0.5V, Max. 0.3xVCC (alimentato fino a 5V).
VIH : Input High Voltage, except XTAL1 and RESET pins : (alimentato fino a 2.4V) Min. 0.7 x VCC, Max. VCC + 0.5; (alimentato fino a 5V) Min. 0.6 x VCC, Max. VCC + 0.5
Dato che Arduino è alimentato a 5V, se applichi le formule hai:
VIL (ovvero LOW) : Min. -0.5 V, Max. 0.3 x 5 = 1.5V
VIH (ovvero HIGH) : Min. 0.6 x 5 = 3V, Max 5 + 0.5 = 5.5V
... quindi, il partitore deve dare in uscita meno di 1.5V per poter leggere LOW e deve dare più di 3V (con il limite di 5V) per poter leggere HIGH, quindi, date le resistenze, fai tu i calcoli se quello va bene.
Guglielmo
Se no, ci metti un paio di PC817 con 4k7 in serie al LED, emettitore a massa e collettore all'ingresso con pull-up.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.