Salve a tutti,
ho seguito alla lettera alcuni esempi online e addiritura provate l'esempio presente nella libreria RCSwitch.h per leggere i segnali da un ricevitore a 433Mhz.
Il DATA del ricevitore l'ho collegato sul pin 2 come da commento anche se sta scritto zero.
Il fatto e' che nella condizione se il ricevitore e' disponibile non entra mai.
Cosa potrebbe essere?
/*
Simple example for receiving
https://github.com/sui77/rc-switch/
*/
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
if (value == 0) {
Serial.print("Unknown encoding");
} else {
Serial.print("Received ");
Serial.print( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
}
mySwitch.resetAvailable();
}
}
Sei sicuro il trasmettitore funzioni ? Come e con cosa spedisci ?
tonyhhkx:
Il fatto e' che nella condizione se il ricevitore e' disponibile non entra mai.
Sei cosciente del fatto che quella libreria è specifica per lavorare solo con un ristretto tipo di hardware commerciale. ?
In pratica coppie di Tx/Rx che usano i chipset specificati, ovvero se non usi l'hardware che dice chi ha realizzato la libreria questa non funziona.
l'esempio trovato mostra le foto con il mio stesso ricevitore.
Al di la se trasmetto qualcosa, nel loop dovrebbe entrare nel .avaiable() no?
Ma no, dai !! Available un dato, NON available il modulo 
Stessa cosa della Serial, available se arriva qualcosa NON se la seriale è attiva/disponibile
@nid a ecco XD
Ok quindi, perche non ricevo niente?
Ho provato a trasmettere con woki toki, telecomando auto, rx auto radiocomandata ma non riceve nulla.
C'e' qualche altro test che potrei fare?
tonyhhkx:
l'esempio trovato mostra le foto con il mio stesso ricevitore.
Non è un questione di ricevitore, è una questione di trasmettitore e relativa codifica, ovvero se non usi uno dei coder indicati la libreria non capisce un piffero di quello che arriva.
Come dice @astro. Faccio un paragone (non prenderlo alla lettera); è come leggere i tasti da un telecomando, con un IR ricevitore 38khz, ricevi da qualsiasi telecomando (sempre a 38khz) ma ogni telecomando ha le sue "codifiche".
perfetto, a me interessa che riceve. Se poi non riesco a decodificare e' un altro paio di maniche, ma il segnale devo pur riceverlo no? Oppure se non ho la chiave per decodificare quel segnale che sta viaggiando non lo posso proprio intercettare? Perche dall'esempio spiegava che qualsiasi segnale riuscirei a leggerlo anche se non capirei una mazza perche dovrei decodificarlo
Link a dove hai letto stà cosa ?
ho seguito alla lettera alcuni esempi online e addiritura provate l'esempio presente nella libreria RCSwitch.h per leggere i segnali da un ricevitore a 433Mhz.
non è che ti confondi e vuoi usare la VirtualWire
tonyhhkx:
Perche dall'esempio spiegava che qualsiasi segnale riuscirei a leggerlo anche se non capirei una mazza perche dovrei decodificarlo
Quella librerie fornisce un out solo se i dati ingresso corrispondono alla codifica attesa, in caso contrario non ottieni nulla, come è ovvio che sia visto che l'eventuale segnale viene interpretato come spazzatura e come tale irrilevante.
ecco il link:
http://www.chimerarevo.com/hardware/arduino-decodificare-stringhe-433-mhz-153002/
diciamo che dice che premento i tasti del 'telecomando' si intercettano.
Ma non ho capito bene nell'esempio dove in quel caso si andranno a programmare i codici
tonyhhkx:
diciamo che dice che premento i tasti del 'telecomando' si intercettano.
Ma non ho capito bene nell'esempio dove in quel caso si andranno a programmare i codici
Funziona solo se hai un Tx che usa le codifiche supportate dalla libreria, oppure usi un Tx collegato ad Arduino che trasmette i corretti codici tramite quella libreria.
Come al solito quella paginetta è molto fumosa e troppo generalista, non spiega nulla, è la classica vetrina per dire "guarda quanto sono bravo", anche se in realtà nel 99.999% si tratta di cose scopiazzate da qualche altra parte senza aver capito nulla di come funziona il tutto.
ahahhahaah immaginavo allora. In teoria o pratica quindi non esiste un modo per intercettare queste frequenze 'libere'?
EDIT: quindi questo e' un altro di quelli furbi?
Dipende dalla codifica che usa il Tx, ne esistono molte, alcune sono tra loro compatibili, se non la conosci c'è poco da fare.
Per dirla tutta, la codifica utilizzata dai classici telecomandi per apriporte/apricancelli più diffusi non è supportata da nessuna libreria per Arduino, lo so bene perché ho dato una mano al prof. Menniti per il suo ultimo articolo su Elettronica IN, riguarda un decoder per questi radiocomandi, e ho dovuto realizzare da zero tutto il codice per leggere i dati.
ok mi arrendo, pero' modificando il codice potrebbe essere possibile farlo credo
Edit: lo con stesso ricevitore e' stato fatto lo sniffer dei segnali a 433mhz con rasberry.
Sempre stessa cosa di codici oppure esiste uno sniffer universale?
tonyhhkx:
pero' modificando il codice potrebbe essere possibile farlo credo
Ovviamente si, il problema è modificarlo, cosa per la quale devi sapere prima quale codifica usa il tx altrimenti non sai cosa fare.
In tutti i casi non è un problema semplice da affrontare e che non si risolve tramite le "cose" pappa pronta di Arduino, il codice va scritto in C puro interagendo direttamente con l'hardware degli AVR, in particolare con gli interrupt e i timer.
mhmm pensavo ci fosse una matrice dove bastava cambiare i valori con quelli del trasmettitore che ti serve...
tonyhhkx:
mhmm pensavo ci fosse una matrice dove bastava cambiare i valori con quelli del trasmettitore che ti serve...
Non è così semplice, ti spiego rapidamente come funziona la cosa per la maggioranza di questi radiocomandi.
Fondamentalmente si tratta di una trasmissione seriale di tipo asincrono, questo a latere del tipo di modulazione del Tx/Rx, dove il valore del singolo bit è dato dal rapporto tra Ton e Toff della durata di un singolo bit, tipicamente con rapporti di 1/3 e 2/3.
La prima fregatura è che a seconda della codifica (tipo di chipset) lo stato 0 e 1 possono essere legati sia alla durata 1/3 che 2/3, seconda fregatura è che i bit trasmessi possono essere un numero compreso tra 10 e 32, in alcuni rari casi anche di più, terza fregatura è che la velocità di trasmissione dei bit non dipende dal tipo di codifica, dipende solo dal clock usato per il decoding/encoding ed è fortemente variabile tra i vari modelli di telecomando, inoltre deve essere prevista una larga tolleranza su i timing, non meno di +/-10% perché derivano da clock rc che sono poco precisi.
Per farla breve, per poter decodificare il segnale devi avere queste informazioni:
- Numero di bit trasmessi.
- Clock bit o durata del bit.
- Percentuali Ton e Toff e come sono assegnate.
- Eventuale key di codifica per la sicurezza, tipicamente da 8 a 12 bit.
Il clock bit è misurabile via software usando un timer, il numero di bit trasmessi si può contare tra due start bit consecutivi, però se non conosci le percentuali assegnate a Ton e Toff, con relativo valore, non puoi decodificare nulla, idem se non conosci l'eventuale key, però questa si può ricavare.
Come ti ho già detto non è una cosa semplice da implementare per via dell'elevato numero di variabili, sopratutto se vuoi decodificare molte tipologie diverse di radiocomandi, e perché serve utilizzare direttamente le risorse del micro in un modo che Arduino, inteso come wiring (il framework utilizzato per la programmazione) non supporta direttamente.
Si può fare però tocca lavorare in C puro, conoscere molto bene gli AVR a livello hardware/software e sapere come utilizzare direttamente le periferiche e gli interrupt.