• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
lettura digitale velocità ingresso

Velocità lettura ingresso digitale
#1
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
Risposta
#2
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.
Risposta
#3
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

[Immagine: 2019-06-21-15_41_32-Window.png]

La lettura dello stato di un pin, probabilmente è ancora più veloce.
Risposta
#4
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?
Risposta
#5
Ti direi di abbandonare node red sul RaspberryPi a terra, e di realizzare uno script Python che si occupi totalmente della segnalazione e visualizzazione
Risposta
#6
Quello che fa fatica a rilevare però è quello in volo connesso all'A.R.T.V.A. ...
Risposta
#7
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?
Risposta
#8
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.


Allegati Anteprime
   
Risposta
#9
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?
Risposta
#10
(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.
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect