Ciao a tutti, sto cercando di far leggere da un Gpio gli impulsi generati da un fotoaccoppiatore che riceve da un buzzer da 1 a 10 impulsi al secondo. Con nodered riesce a leggere fino a 5/6 impulsi al secondo, oltre non riesce.
Posso leggere gli impulsi in un'altra maniera che sia più veloce? Ad esempio con uno script in python o roba del genere che poi passerei a nodered per la gestione?
Grazie per l'aiuto
Luca
Prova ad utilizzare la libreria python "gpiozero"; con il fotoaccoppiatore puoi simulare la chiusura di pulsanti connessi ai pin del GPIO. La libreria ti permette di scrivere il codice per eventi e/o con polling.
27/01/2020, 23:08 (Questo messaggio è stato modificato l'ultima volta il: 27/01/2020, 23:20 da Zzed.)
certamente si.
La communtazione dello stato di un pin GPIO on e off è usato anche come benchmark delle prestazioni reali di un Raspberry. Ti sei dimenticato di specificare che modello di Raspberry Pi utilizzi, ma per darti un termine di paragone, ecco le prestazioni in migliaia di communtazioni al secondo (kHz) con Python e Gpiozero
La lettura dello stato di un pin, probabilmente è ancora più veloce.
28/01/2020, 09:07 (Questo messaggio è stato modificato l'ultima volta il: 28/01/2020, 09:54 da Luca Charruaz.)
Scusate, è un Pi 3b+, ma se fosse necessario userei anche un 4.
Ora provo con la gpiozero e vi faccio sapere. Grazie intanto!
Buona giornata
Ok, ho provato e mi sembra che sia molto veloce, forse allora il problema sta nello script, che deve contare quanti impulsi arrivano in 700 millisecondi e passare il risultato ad un nodo di nodered.
In pratica sto montando un raspi su un esacottero, a questo è collegato un A.R.T.V.A. che con 5 led mi da la direzione e con un buzzer mi segnala la distanza dall'atro A.R.T.V.A.
il buzzer emette 1 beep ogni 700 millisecondi (circa) quando rileva l'altro A.R.T.V.A. a circa 50 metri di distanza, al diminuire della distanza aumentano i beep fino a 10 (ad orecchio!) ogni 700 millisecondi.
Questi dati vengono trasmessi in seriale ad un trasmettitore rf 900 mhz a terra ad un altro raspberry che tramite node mi da l'interfaccia grafica con 5 led per la direzione e u numero da 1 a 10 per la distanza.
Credo che con Node la velocita di esecuzione sia lenta e quindi il risultato sulla distanza non venga rilevato correttamente. Avete suggerimenti su una script python o qualche nodo particolare?
Ti direi di abbandonare node red sul RaspberryPi a terra, e di realizzare uno script Python che si occupi totalmente della segnalazione e visualizzazione
28/01/2020, 14:03 (Questo messaggio è stato modificato l'ultima volta il: 28/01/2020, 14:10 da ippogrifo.)
La diffocoltà quindi è la comunicazione tra i due apparati A.R.T.V.A., che sono connessi tra loro (quello a terra e quello in volo che si interfaccia con un RPi) per mezzo di Tx/Rx operanti a 900 MHz? In seriale, che velocità e protocollo?
28/01/2020, 15:36 (Questo messaggio è stato modificato l'ultima volta il: 28/01/2020, 15:38 da Luca Charruaz.)
In realtà sembra che la comunicazione tra le unità rf funzioni bene. Probabilmente è il flow di node di rilevazione degli impulsi che non funziona correttamente. Fino a 4/5 impulsi funziona poi se aumentano si impalla.
Per questo motivo pensavo che con uno script python si alleggerisse il tutto, ma non sono tanto bravo in Python...
Il flowchart dello script potrebbe essere tipo quello che allego.
una volta rilevato il n di impulsi potrei inviarlo a nodered anche con una frequenza più rada, tipo il doppio del tempo.
In ricerca il drone verrebbe condotto molto lentamente quindi potrei anche avere la distanza in 1400 ms invece che in 700, basterebbe.
Oltre alla rilevazione dei beep ho anche la rilevazione di 5 led che mi danno la direzione ma quella è semplice e funziona bene anche con nodered.
Questo link potrebbe esserti di aiuto: https://pypi.org/project/pynodered/
Perchè non contare solo il numero degli impulsi nella finestra temporale di 714 ms? Sono treni d'impulsi che si ripetono ogni 700 ms con una distanza tra essi di XX ms per cui è necessario individuare la spaziatura?
29/01/2020, 13:06 (Questo messaggio è stato modificato l'ultima volta il: 29/01/2020, 13:10 da Luca Charruaz.)
(29/01/2020, 11:07)ippogrifo Ha scritto: Questo link potrebbe esserti di aiuto: https://pypi.org/project/pynodered/
Perchè non contare solo il numero degli impulsi nella finestra temporale di 714 ms? Sono treni d'impulsi che si ripetono ogni 700 ms con una distanza tra essi di XX ms per cui è necessario individuare la spaziatura?
L'A.R.T.V.A. funziona così:
tu lo metti in ricerca premendo per 3 secondi un pulsante.
-Se non rileva un'altro A.R.T.V.A. nel raggio di circa 70 metri non emette nessun suono e non accende nessun led per la direzione.
-Se rileva a distanza emette 1 beep ogni 700 ms (circa, questo valore è da appurare) accendendo uno dei led di direzione (sono disposti a semicerchio).
-Più ti avvicini all'altro A.R.T.V.A. e più il numero di beep emessi nell'arco dei 700 ms aumenta, fino ad arrivare a 10 (anche questo valore è da appurare ma ad orecchio sembrerebbe così)
-Se perde il segnale per qualche motivo sta muto e non accende led
-Quindi Il "rilevatore di distanza" deve azzerarsi ogni 700 ms
Io metto l'A.R.T.V.A. in ricerca e poi faccio decollare il drone e seguo un percorso di ricerca secondo la metologia della ricerca dispersi in valanga.