Che hardware per rilevare un cambio di stato (stato 0=+4v; stato 1=+12v)

Ciao. Non so come realizzare questa cosa: ho un nodo dove in standby ci sono +4V. Al verificarsi di un determinato evento questo nodo passa a +12V (e dopo circa 30 secondi torna in standby).
Io ho necessita, collegandomi in parallelo a questo nodo, di rilevare questo cambio di stato e poi farci qualcosa da definire, il top sarebbe inviare un messaggio mqqt. non mi interessa rilevare il ritorno in standby ma solo il passaggio da +4v a +12v. Pensavo ad esempio ad un modulo esp8266 che potrebbe inviare il messaggio mqtt ma come rilevo il cambio di stato?
Si può fare?

Il metodo più semplice è realizzare un partitore di resistenze.

Riferendomi ad un arduino a 5V, colleghi una resistenza da 10k tra l'ingresso di arduino e la massa, poi una coppia di resistenze da 10k poste in serie, saranno connesse tra l'ingresso citato e il nodo da esaminare.

Dunque ok, se ho capito bene, guardando lo schema che ho trovato in rete sul partitore che allego sotto, in questo modo da te suggerito (due R da 10) abbatto la tensione a 2V e 6V. questo è sufficiente? Forse però mi conviene usare un esp8266 che ha il modulo wifi integrato e posso trasmettere il messaggio mqqt che dici? Se non sbaglio funziona a 3,3V. Per fargli leggere lo stato "0" e "1" che tensione devo fornire al pin logico? Se ho ben capito mi basta giocare sulle due resistenze del partitore no? Cioè se usassi una resistenza da 30 ed una da 10 dovrei abbattere i due stati in 1V e 3V se ho capito bene (mi confermi che l'unita di misura è Kohm?)
non conoscevo il partitore, molto interessante

corrobor:
ho un nodo dove in standby ci sono +4V

Per sapere se e come ci si può collegare al "nodo" sono indispensabili queste informazioni:

  • La tensione è riferita a quale riferimento? Si può collegare il riferimento alla massa del circuito che deve effettuare la misura (Arduino, ESP o quello che è) senza causare cortocircuiti o altri problemi?
  • Che impedenza ha il "nodo"? In altre parole si può caricare con un partitore di tensione senza alterarne irrimediabilmente la tensione, oppure bisogna interporre un disaccoppiamento ad alta impedenza (inseguitore di tensione)?

Non sapendo nulla del "nodo" magari è più semplice e sicuro realizzare un comparatore di tensione analogico con un operazionale che pilota un optoisolatore (tanto serve solo sapere il livello logico, non il valore della tensione).

Per rilevare la variazione come al solito l'edge detect si effettua confrontando la lettura attuale con la precedente (che ci si è salvati in una variabile al giro precedente).

Claudio_FF:
Per sapere se e come ci si può collegare al "nodo" sono indispensabili queste informazioni:

  • La tensione è riferita a quale riferimento? Si può collegare il riferimento alla massa del circuito che deve effettuare la misura (Arduino, ESP o quello che è) senza causare cortocircuiti o altri problemi?
  • Che impedenza ha il "nodo"? In altre parole si può caricare con un partitore di tensione senza alterarne irrimediabilmente la tensione, oppure bisogna interporre un disaccoppiamento ad alta impedenza (inseguitore di tensione)?

Non sapendo nulla del "nodo" magari è più semplice e sicuro realizzare un comparatore di tensione analogico con un operazionale che pilota un optoisolatore (tanto serve solo sapere il livello logico, non il valore della tensione).

Per rilevare la variazione come al solito l'edge detect si effettua confrontando la lettura attuale con la precedente (che ci si è salvati in una variabile al giro precedente).

Ok allora cerco di essere più preciso. Si tratta di un videocitofono. Tra due contatti del videocitofono (quelli che portano il segnale audio/video) ci sono normalmente 4v. Quando qualcuno citofona la tensione passa a 12. Io voglio collegarci un qualcosa che rilevi la variazione (ovvero hanno citofonato), lo comunichi in qualche modo al mio server home assistant (mqqt credo sia la soluzione migliore) e tramite un'automazione che scriverei ad hoc farei arrivare un avviso sul mio Smartphone (magari già Telegram) e magari una foto del cancello da una cam ip che ho fuori o altre mille cose a cui non ho ancora pensato. Non so se ho reso l'idea. Devo rilevare l'evento "hanno citofonato"

Riferendomi allo schema e relativa formula che hai pubblicato per tradurlo in parole povere:
se R1 = 20.000 Ohm e R2 = 10.000 Ohm l'uscita al nodo B sarà 1/3 di quella in ingresso A.

Vin Vout
12V -> 4V
4V -> 1,3V

Questo partitore potrebbe andar bene per un Arduino a 5V.

Per ESP8266 che accetta tensioni sino a 3.3V ti serve R1 = 30.000 in modo cha la tensione in uscita diventi 1/4 di quella di ingresso.

Vin Vout
12V -> 3V
4V -> 1V

Data l'alta impedenza rappresentata da questo partitore puoi tranquillamente fare qualche prova, senza il timore di provocare qualche guaio.
In questo modo puoi capire se riesci a leggere lo stato. Potresti sostituire R1 con un trimmer da 47.000 così da adattare meglio l'uscita a commutare l'ingresso di arduino

Ma posso collegare le masse insieme?
Cioè una cosa del genere? Non si crea un corto?

Beh, di fatto non sai quale sia la massa del citofono, né che tensione abbiano quei fili rispetto alla terra ambientale. Così ti colleghi più o meno "flottante" ai capi di una resistenza. Non introduci tensioni. L'unico inconveniente che vedo è la possibilità di introdurre ronzio/disturbi nell'impianto citofonico attraverso il loop che si forma attraverso le alimentazioni.

corroborcitofono.png

corroborcitofono.png

Claudio_FF:
Beh, di fatto non sai quale sia la massa del citofono, né che tensione abbiano quei fili rispetto alla terra ambientale. Così ti colleghi più o meno "flottante" ai capi di una resistenza. Non introduci tensioni. L'unico inconveniente che vedo è la possibilità di introdurre ronzio/disturbi nell'impianto citofonico attraverso il loop che si forma attraverso le alimentazioni.

corroborcitofono.png

Questo schema é molto interessante. Potresti spiegarmene la logica?

È lo stesso partitore di tensione che hai disegnato tu, solo che c'è uno zener a protezione del GPIO, e un altro zener per togliere 3.3V dal segnale da leggere (i valori delle resistenze risultano modificati di conseguenza).

corroborcitofono2.png

corroborcitofono2.png

Claudio_FF:
È lo stesso partitore di tensione che hai disegnato tu, solo che c'è uno zener a protezione del GPIO, e un altro zener per togliere 3.3V dal segnale da leggere (i valori delle resistenze risultano modificati di conseguenza).

corroborcitofono2.png

Ok il circuito é chiaro ma non mi é chiaro questo (mia carenza):
lo zener sottrae 3,3 v quando attraversato in modo inverso? Perdonami questo passaggio non mi é chiaro. Cioè se io colego uno zener da 3,3 in modo inverso, fa passare la corrente solo se la tensione é superiore a 3,3, giusto? La caduta di tensione sul diodo non é pari a quella di un diodo normale ovvero attorno a 0,6/0,7v? Questa cosa mi interessa moltissimo.

Cioè se metto in diodo zener da 9v? Non ottengo come risultato 0v in stand by e 3v quando la tensione passa a 12?

Anche se inizialmente ho condiviso la soluzione del partitore, sarei dell'idea di valutare come possibile alternativa l'utilizzo di un foto-accoppiatore.

Ferificato che i 2-3mA necessari a pilotare il led del foto-accoppiatore non creano problemi al "nodo" del citofono è di gran lunga una soluzione più pulita e sicura.

lelebum:
Anche se inizialmente ho condiviso la soluzione del partitore, sarei dell'idea di valutare come possibile alternativa l'utilizzo di un foto-accoppiatore.

Ferificato che i 2-3mA necessari a pilotare il led del foto-accoppiatore non creano problemi al "nodo" del citofono è di gran lunga una soluzione più pulita e sicura.

Cos'è il foto accoppiatore? Non lo conosco.
Edit ok ho letto su Wikipedia ho capito. Quindi cosa dovrei procurarmi?

Come foto-accoppiatore ho usato un 4N35, e lo puoi sostituire con altri disponibili dal tuo rivenditorei

LD1 è opzionale e serve solo per monitorare lo stato 4/12V

Unica cosa da controllare, quando applichi di 12V tra R1 e “0citofono”, la tensione ai capi del transistor del 4N35 non deve superare i 0,5V. Nel caso abassi il valore di R1 a 1.5k o 1.2k

Ok adesso mi studiò il circuito. Intanto grazie. Se non ne capisco la logica ti chiederò ok?

Quando la tensione del citofono è 4V:
la tensione inversa dello zener sommata alle tensioni di giunzione dei led si oppongono alla circolazione della corrente sulla linea e pertanto il led del 4N35 rimane spento, il transistor rimane interdetto e tramite R3 la tensione all'ingresso del ESP8266 risulta alta.

Quando la tensione del citofono è 12V:
tale valore supera le tensioni di zener e led sopradette e ora la corrente circola limitata da R1.
Pertanto il led LD1 e quello del 4N35 si accendono, e il foto-transistor espostto alla luce del led va in conduzione mandando a massa l'ingresso del ESP8266 che risulterà basso.

Tale circuito offre il vantaggio di separare e isolare il circuito del citofono da quello del ESP8266, evitando qualsiasi interferenza.

Vista la tua esperienza ti consiglierei di sospendere lo sviluppo del software e concentrarti sul hardware.
Monti il circuito su una basetta e comincia a "divertirti", questo alla fine è lo scopo, fare una serie di prove simulando con un alimentatore la variazione di tensione e tutto il resto.

Si si certo!! Prima di gioco in po’ e poi vedo .

Il circuito mi é chiaro. Solo una curiosità a livello “teorico” sullo zener: perché metterne uno da 3,3 e non uno con un valore maggiore invece di fare cadere il grosso della tensione sulla resistenza? Solo una curiosità.
Il circuito é chiaro ! Se ho ben capito poi, a livello software devo ragionare al contrario ovvero quando il PIN della gpio é in stato High vuol dire che sono in standby ovvero 4v mentre quando passa a low si é attivato il foto transistor ovvero il PIN va a massa. Chiaro

Per quanto riguarda il lato software non ho problemi a scriverlo. Volevo solo condividere con voi la logica, poi il codice lo scrivo da me.

Quindi farei così: oltre ad inizializzare il wifi e il broker mqqt, nel successivo loop farei fare questo:

  • leggere lo stato del pin logico
  • confrontarlo con lo stato logico precedente (questo valore lo salvo su una variabile alla fine del ciclo loop, vedi in fondo. Al primo giro viene inizializzato pari a 0)
  • se lo stato attuale è diverso dallo stato precedente, verificare che lo stato attuale sia LOW
  • se low inviare il messaggio mqqt
  • fine delle condizioni
  • porre la variabile "stato precedente" uguale allo stato attuale del pin
  • delay 1 secondo (poco? troppo?)
    fine del loop

Vi torna?

... perché metterne uno da 3,3 e non uno con un valore maggiore invece di fare cadere il grosso della tensione sulla resistenza?

E' una scelta personale più o meno condivisibile.
Più ti avvicini con la tensione dello zener ai 12V più si riduce il valore della resistenza .
In caso di sovratensione la corrente che circola nel circuito subirebbe variazioni molto accentuate, con possibili problemi ai componenti.

Nel tuo caso probabilmente i 12V sono stabilizzati a monte e qunidi potresti modificare i valori.