Come insegnare il computer ai bambini

Come insegnare il computer ai bambiniIl modo migliore per far imparare ad usare il computer ai bambini è dargliene uno e lasciarli fare. Già all'età di ...

Si guadagna davvero con Tradedoubler?

Si guadagna davvero con Tradedoubler?Si guadagna davvero con Tradedoubler? Per rispondere a questa domanda ed evitare che qualcuno mi quereli, mi limito a ...

Fai da te: come ottenere risultati perfetti

Fai da te: come ottenere risultati perfettiParliamo qui del segreto per ottenere risultati impeccabili nei nostri lavori. Sono molti a fermarsi prima di iniziare, ...

Conviene far riparare la lavatrice?

Conviene far riparare la lavatrice?Quando conviene far riparare una lavatrice, lavastoviglie o frigorifero? Pochi calcoli per prendere una decisione oggettiva ...

Post correlati

L'oscilloscopio PCE-SDS serie 10xx

L'ampia banda passante da 50MHz rende questo oscilloscopio utilizzabile in molti campi dell'elettronica ...

Alimentatore variabile in corrente e tensione

Sfruttando il regolatore L200 di ST, con implementazione da datasheet, si può ottenere un alimentatore ...

Eseguire saldature perfette

Vediamo alcuni suggerimenti per utilizzare al meglio sldatore e stagno ed evitare le saldature fredde, molto ...

Scacciacani elettronico a ultrasuoni

Un circuito elettronico per tenere lontani cani e gatti, entrambi infastiditi dagli ultrasuoni. Si tratta ...

Caricabatterie solare per cellulari

Se ci capite di avere il cellulare e non avere la possibilità di utilizzare il caricatore perchè ci troviamo ...

1 Stella2 Stelle3 Stelle4 Stelle5 Stelle (5.00 su 5)
Loading ... Loading ...

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).


 C |  copy code |? 
01
void TxChar(unsigned char c) {
02
unsigned char bitno;
03
 
04
INIT_PORT;
05
bitno = 4;
06
do {
07
   TxData = 0;
08
       delay_2Us (165);
09
   if(c & 1)
10
      TxData = 0;
11
   else
12
      TxData = 1;
13
  c = (c >> 1) | 0x80;
14
       delay_2Us (164);
15
   TxData = 1;
16
       delay_2Us (165);
17
} while(--bitno);
18
}

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:


 C |  copy code |? 
01
int RxRadio(void) {
02
   unsigned char bitno, tmp, width, w0;
03
 
04
state0:
05
   width = 0;
06
   d1 = 0;
07
   d2 = 0;
08
   bitno = 0;
09
   while(!RxDt)
10
   continue; /* wait for start bit */
11
   while (RxDt) {
12
      delay_2Us(4);
13
      width++;
14
      if (width > 45)
15
         goto state0;
16
   }
17
   if (width < 30)
18
      goto state0;      
19
 
20
state1:
21
   width = 0;
22
   w0 = 0;
23
   tmp = 1;
24
   while (!RxDt){    
25
      delay_2Us(4);  
26
      w0++;
27
      if (w0 > 90)
28
         goto state0;
29
   }
30
   while (RxDt) {    
31
      delay_2Us(4);  
32
      width++;
33
      if (width > 90)
34
         goto state0;
35
   }
36
   if (width < 20)
37
      goto state0;      
38
   if (width > w0)    
39
      tmp = 0;
40
   if (bitno > 7)
41
      d1 = (d1 >> 1) | (tmp << 7);
42
   else
43
      d2 = (d2 >> 1) | (tmp << 7);
44
   bitno ++;
45
   if (bitno == 12)
46
      return width;
47
   goto state1;
48
 
49
}

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.


 C |  copy code |? 
01
void InitTx(void) {
02
   TxData = 1;  
03
   delay_2Us (165);
04
   TxData = 0;  
05
}
06
void EndTx (void) {
07
   TxData = 0;
08
   DelayMs(10);
09
}
10
 
11
...
12
 
13
for (j=0; j<16; j++)
14
      for (i=0; i<256; i++)
15
         for (t=0; t<4; t++) {
16
            InitTx();
17
            TxChar (i);
18
            TxChar (i>>4);
19
            TxChar (j);
20
            EndTx();
21
          }
22
   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

5 comments to Come funzionano i telecomandi dei cancelli

  • Riccardo
    Ok, ho capito come funziona. Mi sfugge solo quel “INIT_PORT;”.
  • Riccardo
    E poi dove è lo schema elettronico? E i sorgenti completi?
  • Riccardo
    Il codice non è molto chiaro, io ho un telecomando della FAAC (foto: http://seenly.com/CEUyDPmh).Come dovrei fare per mandare lo stesso codice che manda il mio telecomando?Gli switch sono impostati così (1=su, 0=giu):101001111000Quelli dovrebbero essere i 12 bit, ma come faccio a trasmetterli con il PIC? Non ho capito il funzionamento del tuo codice :(
  • andrea mirenda
    salve,ho letto il tuo tutorial è mi è stato molto utile per certi versi, ma nel frattempo mi sono posto nuove domande.ho comprato il TX della quasar il suo datasheet dice che il segnale può essere modulato fino a 3khz. Ma se io dovessi emulare la codifica national del MM53200 ogni bit è di 0,32 ms quindi: 1 /0,32 ms =3.125 Khz, posso farlo con questo trasmettitore?
  • hmm… amazing.

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

I più letti

Verniciare a spruzzo

Impariamo ad utilizzare la pistola per verniciare ...

Costruire un compressore

Riciclare un vecchio frigorifero e convertirlo in compressore. ...

Energia

Sfruttare l'energia solare di notte

Sfruttare l’energia solare di notteIl limite dell'energia solare è ovviamente quello che... il sole splende solo di ...

Alcune considerazioni su energia nucleare

Alcune considerazioni su energia nucleareRiporto alcune considerazioni oggettive sull'energia nucleare e solare. Ad oggi ...

Pannelli solari termici

Pannelli solari termiciI pannelli solari termici sono utilizzati per sfruttare l'energia solare e riscaldare ...