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 Radiocomando – 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.9 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
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