Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ognigiorno.com/wp-content/plugins/math-comment-spam-protection/math-comment-spam-protection.php:1) in /var/www/html/ognigiorno.com/wp-includes/feed-rss2.php on line 8 Telecomando – OgniGiorno.com https://www.ognigiorno.com insieme tutti i giorni Tue, 03 May 2011 12:07:37 +0000 en-US hourly 1 https://wordpress.org/?v=5.8.10 Duplicare un telecomando per cancelli a 433Mhz https://www.ognigiorno.com/2009/03/31/duplicare-un-telecomando-per-cancelli-a-433mhz.html https://www.ognigiorno.com/2009/03/31/duplicare-un-telecomando-per-cancelli-a-433mhz.html#respond Tue, 31 Mar 2009 08:20:51 +0000 http://www.ognigiorno.com/?p=256 Facendo sempre riferimento al post “come funzionano i telecomandi dei cancelli” per i dettagli sul metodo di codifica e decodifica e sul protocollo utilizzato, vediamo qui come copiare un telecomando, analizzando i due casi in cui abbiamo o no il telecomando originario.
Nella foto è visibile il circuito utilizzabile come “passepartout”, per inviare tutti i codici in sequenza.
passepartout

Come si può immaginare questo è il primo metodo: se non abbiamo il trasmettitore da clonare, tramite questo circuito che pilota un trasmettitore radio (Io uso i moduli Quasar) tramite un PIC (il 16F506 nel mio caso). Il PIC genera tutti i codici a 12bit e in meno di 15 minuti li invia tutti (vanno inviati per 3 volte consecutive per la decodifica).
Se il nostro scopo è costruire un radiocomando duplicato del primo, probabilmente è più efficiente interfacciare il circuito ad un computer (per esempio via seriale tramite RS232) per avere indicazione sul codice che viene effettivamente trasmesso.
Se accendo il circuito per strada, l’effetto (in realtà molto divertente) è quello di vedere tutti i cancelli aprirsi, fino a quando non si apre anche il mio.

Il secondo metodo consiste nel realizzare un decodificatore in grado di ricevere il codice inviato dal telecomando e visualizzarlo (possiamo usare un display o la solita seriale). Utilizzando un modulo ricevitore radio collegato al controllore si riesce ad ottenere il valore che deve essere ritrasmesso.
Se il trasmettitore è di quelli con i dip switch si può leggere il codice dalla posizione degli interruttori.
Lo schema pratico ed il codice sono allegati in questo post.

Tutto questo vale solo se lavoriamo con un radiocomando a codifica fissa. I rolling code funzionano in modo diverso, inviando un codice differente per ogni trasmissione.

Il costo di tutto questo è davvero irrisorio: i controllori costano meno di un euro (comprati dal sito Microchip) e i moduli Quasar costano circa 5 euro l’uno.

]]>
https://www.ognigiorno.com/2009/03/31/duplicare-un-telecomando-per-cancelli-a-433mhz.html/feed 0
Decodificare i telecomandi infrarossi https://www.ognigiorno.com/2009/03/21/decodificare-i-telecomandi-infrarossi.html https://www.ognigiorno.com/2009/03/21/decodificare-i-telecomandi-infrarossi.html#respond Sat, 21 Mar 2009 13:36:03 +0000 http://www.ognigiorno.com/?p=200 Read More »Decodificare i telecomandi infrarossi]]> I telecomandi infrarossi (IR) sono utilizzati da molti anni per controllare televisori, impianti stereo, videoregistratori e molti altri dispositivi. Posso immaginare che in ogni casa ce ne sia almeno uno. Anzi… immagino che molti pensino: “Magari ne avessi solo uno!!”.
Il meccanismo di controllo remoto è basato su un trasmettitore (telecomando) ed un ricevitore (incorporato nel dispositivo che si controlla). Vediamo in questo articolo il protocollo che implementano.
Vedremo anche esempi pratici e il codice per realizzare tramite controllori PIC un decodificatore. Le applicazioni sono demandate alla nostra fantasia. Per esempio possiamo controllare la luce del salotto con lo stesso telecomando del televisore.

irdecoder

Il modulatore
Per la comunicazione viene utilizzato un LED emettitore di infrarossi, un led che emette luce ad una frequenza non visibile. Questa luce viene modulata in modo da trasmettere in sequenza (trasmissione seriale) le informazioni (bit).
Nell’ambiente esistono moltissime fonti di infrarossi (la luce del sole, le lampadine, …) per questo motivo le informazioni vengono solitamente modulate su una portante di qualche decina di kHz (i valori utilizzati vanno da 30 a 60).
Vediamo cosa significa:

La trasmissione viene miscelata alla frequenza della portante. Il risultato è visibile in figura. In questo modo il ricevitore è in grado di ricostruire il segnale originario tramite un filtro passa-banda centrato sulla frequenza della portante. Si eliminano in questo modo disturbi ed interferenze.

modulato

A semplificazione del circuito di decodifica sono disponibili in commercio componenti che racchiudono ricevitore e filtro (TSOP12xx, dove xx indica la frequenza della portante. TSOP1236 riceve a 36kHz, TSOP1248 a 48kHz, e così via). Questi ricevitori hanno 3 piedini: +5v, GND e signal out. Quest’ultimo si può collegare direttamente al piedino di ingresso del nostro controllore.

La trasmissione
A questo punto possiamo concentrarci esclusivamente sui dati che vengono trasmessi, pensando al protocollo di comunicazione e a come vengono codificati i simboli (1 e 0). Purtroppo non esiste uno standard universale, ma ogni produttore ha sviluppato il suo.
Mi voglio concentrare in questo articolo sul protocollo adottato da Philips (il mio telecomando), tratterò a parte una raccolta di protocolli differenti. Il protocollo qui descritto è uno dei diversi implementati da Philips. Il nome corretto è RC-5.

Codifica
Il primo elemento da analizzare è come vengono rappresentati i due simboli 1 e 0. è in base a questo che va scritto l’algoritmo per il PIC (assembler o C).

La portante utilizzata è 36kHz
Modulazione:

philipsmodulazione

Protocollo
3 bit di start – 5 bit indirizzamento – 7 bit comando

philipsprotocollo

I primi 3 bit vengono utilizzati per segnalare l’inizio trasmissione: i primi due hanno valore fisso a 1, il terzo cambia ogni volta che viene lasciato e ripremuto un pulsante. Serve per distinguere tra una pressione prolungata dello stesso tasto e due pressioni successive. Questo bit viene chiamato Toggle (T)
L’indirizzamento è utilizzato per identificare il dispositivo da controllare (televisore, videoregistratore, …)
Il comando identifica il tasto premuto.
In figura vediamo come è composta la stringa che vene trasmessa alla pressione di ogni tasto. I valori dell’esempio sono: Indirizzo = 2, comando = 13

Passiamo alla pratica.
Manca solo il codice. L’esempio qui allegato decodifica il telecomando e trasmette sulla seriale (RS232) i due valori di comando e device. Serve come esempio, per comprendere il funzionamento della routine di decodifica. Questa può essere infatti utilizzata per qualsiasi impiego. Il progetto allegato è scritto e compilato per il 12F519, ma il codice è utilizzabile per tutti i PIC baseline. Con la versione free del compilatore picc di HI-TECH (quello che utilizzo io) vanno modificati i tempi per controllori di fascia più alta (l’ottimizzazione non è il massimo). In alternativa va riscritto il codice in assmbler. Per ora l’ho utilizzato solo su questo controllore, ma appena scriverò l’assembler, lo posterò.

]]>
https://www.ognigiorno.com/2009/03/21/decodificare-i-telecomandi-infrarossi.html/feed 0
Come funzionano i telecomandi dei cancelli https://www.ognigiorno.com/2009/03/08/come-funzionano-i-telecomandi-dei-cancelli.html https://www.ognigiorno.com/2009/03/08/come-funzionano-i-telecomandi-dei-cancelli.html#respond Sun, 08 Mar 2009 17:03:33 +0000 http://www.ognigiorno.com/?p=96 Read More »Come funzionano i telecomandi dei cancelli]]> Studiamo il funzionamento dei radiocomandi a 433 Mhz solitamente utilizzati per aprire i cancelli. Parliamo qui di quelli a codifica fissa, non dei rolling code.

La codifica/decodifica viene quasi sempre realizzata utilizzando una coppia di circuiti integrati (HT12E e HT12D o equivalenti), dedicati allo scopo, abbinati ad un trasmettitore e un ricevitore radio.

Il trasmettitore invia un codice composto da 12 bit. I radiocomandi hanno solitamente un dip switch che permette di selezionare il codice. Il codice identico deve essere impostato sul ricevitore, per permettere il riconoscimento.

Radiocomandi a più canali utilizzano una parte dei 12 bit per identificare il canale: per N canali si ha un indirizzo a 12-N bit.

Di seguito lo schema a blocchi tipico del radiocomando:

rtx

La velocità di trasmissione solitamente utilizzata è di 1000 baud, la codifica è la seguente:

encdec

Avendo queste informazioni siamo quindi in grado di realizzare un radiocomando con codifica e decodifica tramite PIC.

Per la parte radio utilizziamo i moduli trasmettitore e ricevitore della Quasar che permettono con pochi euro di ottenere ottimi risultati. Questi moduli possono essere acquistati presso qualsiasi distributore di componenti elettronici, anche se io preferisco risparmiare ed acquistare direttamente sul sito del produttore.

modulirtx

L’utilizzo dei moduli richiede veramente poco. Entrambi ricevitore e trasmettitore hanno 4 connessioni: positivo e negativo di alimentazione, antenna e dati.

Ecco la routine del trasmettitore (la frequenza di oscillazione da me utilizzata è di 8Mhz).

void TxChar(unsigned char c) {
unsigned char bitno;

INIT_PORT;
bitno = 4;
do {
TxData = 0;
delay_2Us (165);
if(c & 1)
TxData = 0;
else
TxData = 1;
c = (c >> 1) | 0x80;
delay_2Us (164);
TxData = 1;
delay_2Us (165);
} while(--bitno);
}

Come si vede dal codice, la routine effettua la trasmissione dei soli 4 bit meno significativi del parametro in ingresso. Questo per maggiore comodità, essendo a 12 bit il codice che deve essere trasmesso.

Il ricevitore è un po’ più complesso, a causa dei disturbi tipici del canale radio. Ho quindi implementato una sorta di macchina a stati finiti con due stati: in attesa e in ricezione:

int RxRadio(void) {
unsigned char bitno, tmp, width, w0;

state0:
width = 0;
d1 = 0;
d2 = 0;
bitno = 0;
while(!RxDt)
continue; /* wait for start bit */
while (RxDt) {
delay_2Us(4);
width++;
if (width > 45)
goto state0;
}
if (width < 30) goto state0; state1: width = 0; w0 = 0; tmp = 1; while (!RxDt){ delay_2Us(4); w0++; if (w0 > 90)
goto state0;
}
while (RxDt) {
delay_2Us(4);
width++;
if (width > 90)
goto state0;
}
if (width < 20) goto state0; if (width > w0)
tmp = 0;
if (bitno > 7)
d1 = (d1 >> 1) | (tmp << 7); else d2 = (d2 >> 1) | (tmp << 7); bitno ++; if (bitno == 12) return width; goto state1; }

Per ridurre problemi derivanti da disturbi o errori di ricezione, il decodificatore si aspetta di ricevere gli stessi dati per tre volte consecutive. In caso contrario non effettua la decodifica. La trasmissione avviene quindi correttamente se chiamiamo 3 volte con gli stessi valori la TxChar.

Di seguito un esempio che illustra come poter effettuare la trasmissione di tutte le combinazioni possibili in sequenza, utile se abbiamo perso il telecomando e vogliamo individuare il codice per duplicarlo.

void InitTx(void) {
TxData = 1;
delay_2Us (165);
TxData = 0;
}
void EndTx (void) {
TxData = 0;
DelayMs(10);
}

...

for (j=0; j<16; j++) for (i=0; i<256; i++) for (t=0; t<4; t++) { InitTx(); TxChar (i); TxChar (i>>4);
TxChar (j);
EndTx();
}
for (;;);

va considerato che la trasmissione completa dura:

(1000 baud x 12 bit + 10 ms + 330 us) x 3 volte = 67 ms per ogni codice trasmesso

2^12 combinazioni x 36 ms = 4096 x 67 ms = 274,432 s = 4,57 minuti

]]> https://www.ognigiorno.com/2009/03/08/come-funzionano-i-telecomandi-dei-cancelli.html/feed 0