Leggere stato relè

[Premessa]
Non sono molto ferrato in queste cose, quindi potrei scrivere una discreta dose di cavolate... abbiate pietà...
[/Premessa]

Dopo questa doverosa captatio benevolentiae espongo il mio dubbio:
Dovrei leggere lo stato di un relè. Il relè c'è già e comanda per i fatti suoi un motore a 24 Vcc.
Visto che sul relè il contatto NC è libero volevo usarlo per contare con arduino quante volte viene fatto parire il motore. Alimenterei arduino con un alimentatore a 12 Vcc indipendente da tutto il resto.
Dopo varie ricerche ed elucubrazioni, sarei arrivato a 3 possibili soluzioni:
A) prendo i 12 V, li porto al contatto del relè e dal contatto tramite un partitore arrivo ad un pin di ardino. In questo modo avrei il pin in "pull-down" e conto ogni volta che va a GND.
B) prendo i 5 V di arduino, li porto al contatto del relè e dal contatto arrivo direttamente ad un pin di ardino. In questo modo avrei il pin in "pull-down" e conto ogni volta che va a GND.
C) prendo il GND di arduino, lo porto al contatto del relè e dal contatto arrivo direttamente ad un pin di ardino. In questo modo avrei il pin in "pull-up" e conto ogni volta che va a VCC.
Allego uno schizzo delle 3 possibilità (perdonate il disegno, ma non sono a casa).


Ammesso che quello che ho scritto abbia un senso, quale delle 3 opzioni sarebbe preferibile?
Grazie

Tutto dipende dal relè in oggetto. Se è a doppio contatto isolato allora puoi sfruttarlo in tal modo, per quale soluzione magari qualcuno di più esperto ti potrà suggerire meglio ma non fanno molta differenza.
Se invece il relè è a contatto singolo non puoi collegarlo in tal modo in quanto avrai il comune che commuta tra NO e NC

Ciao e grazie per la risposta.
L'elettricista dice che i 2 contatti sono isolati, per questo volevo usare quello libero.

Ok, premesso che "ad occhio" non alimenterei Arduino con un 12 V perché fai fare una fatica bestiale al regolatore di tensione (visto che dici che è separato dal resto, non ne hai da 5 V??) se ci dici esattamente di quale relè parliamo (va bene pure il codice articolo e magari una o due foto) magari ti si può consigliare qualcosa di più preciso, visto che potrebbe essere SPDT, o DPDT, o DPST NO, ecc (ad uno o più contatti, se è interruttore o deviatore, ecc., ed il tuo schemino per me non ha senso),

Tanto per farti capire le varie tipologie:

Grazie anche a te. Non conoscevo queste diferenze...
Faccio fatica a fare una foto perché è posizionato in un "brutto posto".
Però l'elettricista dice che è DPDT.
Se la cosa è fattibile, i cavi sul relè me li monta l'elettricista e io faccio solo la parte arduino.

Il discorso 12 V arriva da qualche post letto anni fa, dove si diceva che in ambienti potenzialmente disturbati portare in giro segnali a 5 V era rischioso perché più soggetti a disturbi. Qualcuno suggeriva di alzare la tensione e portare in giro segnali a 12 V...
Ovvio che se posso risolvere tutto a 5 V è meglio.
L'alimentatore sarebbe un alimentatore commerciale che compro apposta per questo, quindi posso prenderlo a 5V, a 12 V o quello che mi torna più comodo.

Se DPDT allora puoi collegare il secondario ad Arduino per conoscerne lo stato.
Per quel che riguarda portare in "giro" 5V o 12V in presenza di disturbi non è che ti risolve, la differenza non sta nel 5VCC o 12VCC se non per l'attenuazione del segnale su lunghe tratte ma la farebbe passare dalla corrente continua all'alternata che garantisce maggiori immunità ai disturbi.
Chiaro che in questo caso non potresti però collegare il tutto ad Arduino senza un apposito circuito che ti permetta d'interfacciare il segnale in AC ad un pin di Arduino che NON tollera tensioni negative. Se il tuo relé è posizionato in una cassetta di derivazione o in un quadro elettrico e Arduino è (deve) essere posizionato altrove (Es. quadro apposito) utilizzare la corrente continua è una pessima idea e fornirà un sacco di falsi positivi/negativi
Prima di procedere oltre è il caso di spiegare bene il caso d'uso e come tutti gli elementi dell'impianto sono dislocati nel sistema perché se procedi come hai indicato credo che avrai parecchi problemi nelle letture.

Ok, grazie del chiarimento, probabilmente avevo capito male.

Il relè è in un quadro. I fili me li "porta fuori" l'elettricista. La parte che faccio io (arduino & co.) sarebbe posizionata in un contenitore a parte. Distanza tra relè e arduino circa 70 / 80 cm.

La soluzione C) potrebbe andar bene senza grossi sbattimenti. Magari aggiungi un filtro RC per attenuare i rimbalzi del contatto del relé (e se non basta fai anche un debounce software).

Evita di far passare i cavi in che arrivano ad Arduino vicino ai cavi di potenza, specie se alimentano carichi impulsivi, altrimenti rischi di portarti dentro dei disturbi difficili da gestire.

Ad ogni modo, secondo me la soluzione migliore sarebbe prevedere fin da subito di isolare galvanicamente tutti gli ingressi che arrivano "dal mondo esterno".

Ci sono anche delle comode shield pronte all'uso tipo questa
image

Grazie.
Allora faccio qualche prova con la C.

Alla separazione tra le 2 cose ci avevo pensato anch'io, ma dove prendo la seconda alimentazione? Cioè, arduino lo alimento come ho già detto, ma poi il segnale dove vado a prenderlo?

In effetti potresti usare l'alimentatore 12Vdc che già alimenta Arduino, ma di fatto a quel punto non hai più separazione galvanica.
Ci sono anche altre soluzioni, ma per regolamento non è possibile parlarne in questo forum (230Vac).

Era quello che pensavo di fare con la A...

Per carità che poi Guglielmo mi castiga...

In ogni caso grazie a tutti. Mi avete dato molte info e suggerimenti.

Ma dovresti partizionare il segnale o usare un optoisolatore come detto (non avendo però il vantaggio della separazione galvanica).
A quel punto ti conviene fare una prova direttamente con la soluzione C considerata la breve distanza da far percorrere ai cavi.

Ok grazie.
Usare un cavo schermato può essere utile o non cambia nulla?

Se porti 12V o 5V, in presenza del comando il pin di ingresso di Arduino va a livello ALTO, quindi UP e serve una resistenza di pull-down; devi contare quando va a livello alto.
Se chiudi a massa, il pin va a livello BASSO, DOWN, e serve una resistenza di pull-up; devi contare quando va a livello basso.

Il contatto è NC quindi non funziona al contrario?
Con 5V ho sempre il pin ALTO tranne quando il relè chiude?

Sei sicuro che il relè abbia i contatti NO e NC isolati tra loro? Di solito è un deviatore.

I contatti si aprono e in questo caso avresti il pin flottante e di conseguenza letture errate o false letture. La resistenza di pull-down o pull-up è sempre necessaria in questi casi.

Sì, un contatto NC ti fornisce il comando al contrario, comunque se chiude al positivo serve una resistenza di pull-down o, viceversa, se chiude a massa serve una resistenza di pull-up.

Se ha detto che è un DPDT si, è un doppio deviatore. Uno dei due li usa per il carico, l'altro per "informare" Arduino dello stato del relè.
Per intenderci:
image
Dando per scontato che ci sia già "qualcosa" che controlla il relè (pin A1 ed A2, anche questo a bassissima tensione?), e che i pin 11, 12 e 14 ad esempio siano per il carico (parliamo sempre di 12 V comunque, vero?), ti deve portare fuori 21, 22 e 24: ti basterà quindi collegare il GND di Arduino al 21 (centrale), poi o 22 (NC) o 24 (NO) ad un pin di Arduino (alimentato come norma a 5V con un banalissimo alimentatorino) configurato come INPUT_PULLUP.
Praticamente come se avesse un pulsante che porta a GND quel pin e da lì poi fare quello che gli pare (da check nella loop, fino all'uso di interrupt).

Non vedo altri problemi, tranne forse il debounce giustamente suggerito da cotestant per evitare i rimbalzi del relè ma pèer me forse basta pure un delay in questo caso...