Controller radio per effetti sonori - Trasmettitore

Il dispositivo trasmettitore è incaricato della gestione dell'input dell'utente (la pressione dei tasti), della codifica e dell'invio al ricevitore del dato corrispondente.

Trattandosi di un dispositivo "particolare", differente da un normale telecomando, deve rispondere ai seguenti requisiti:

  • Piccole dimensioni, non deve essere ingombrante e deve nascondersi facilmente in un abito;
  • Deve avere pulsanti in varie zone del corpo, collegati al dispositivo con dei cavi;
  • I pulsanti devono essere facilmente sostituibili in caso di rottura;
  • La batteria deve essere semplice da sostituire ed avere una discreta durata;
  • La trasmissione deve essere veloce (va usato in real-time durante gli spettacoli), ma anche affidabile (pensate se un comando venisse frainteso o non inviato!).

Componenti:

I componenti che ho selezionato per questo dispositivo sono principalmente:

  • Un LM7805 per la stabilizzazione della tensione della batteria a 5V;
  • Un PIC16F628A, microcontrollore a 18 pin preposto alla lettura dell'input dell'utente (matrice di tasti) e alla codifica del dato da inviare;
  • Radio trasmettitore Qam-tx1 operante a 433.92 MHz (QAM indica il produttore Quasar e il tipo di modulazione utilizzato AM, non la modulazione di ampiezza e fase QAM);
  • 10 pulsanti collegati al radiocomando attraverso spezzoni di cavo di lunghezza da poco meno di 50cm a quasi 1m.
    Sono connessi secondo una matrice di 5 linee e 2 colonne (usando solo 7 pin del PIC per fare il polling);
  • 20 morsettiere a molla per connettere i cavi dei pulsanti. Le ho scelte perché sono resistenti, anti-strappo e facili da manipolare.

Alimentazione

Il circuito è alloggiato in un contenitore di plastica nera comprato su eBay e provvisto di un comodo scomparto per l'inserimento di una pila da 9V a cui si collega un LM7805 provvisto dei soliti condensatori di corredo. La tensione di alimentazione del circuito è, quindi, pari a 5V.

L’LM7805 ed i suoi circuiti sono ormai conosciuti da tutti, ma per completezza riporto qui sotto lo schema della sezione di alimentazione:

(clicca sull'immagine per vederla più grande)

Un interruttore a pulsante interrompe il positivo della batteria da 9V. Quando questo è chiuso, il 7805 stabilizza la tensione in uscita a 5V. I condensatori da 330nF e 100nF in ingresso ed in uscita all’IC sono necessari per una buona stabilità della tensione, mentre il condensatore da 100uF è un condensatore di filtro che assicura una buona stabilità della linea di alimentazione all'intera circuiteria.

Microcontrollore

Come già anticipato, il microcontrollore utilizzato è il PIC16F628A. Si tratta di un PIC a 18 pin molto diffuso, ed è proprio il PIC giusto per questo compito: uno più piccolo non basterebbe, uno più grande sarebbe sprecato ed ingombrante.

Lo schema delle connessioni è molto semplice ed è riportato qua di seguito:

(clicca sull'immagine per vederla più grande)

In alto a destra è visibile il modulo radio, il quale richiede solo le due connessioni di alimentazione, un ingresso dati e un pin per l'antenna. Dell'utilizzo di questo modulo parlerò nel prossimo capitolo.
L'antenna del trasmettitore è uno spezzone di filo non rigido (non sottoposto quindi a rischio di rottura), dimensionato ad un quarto della lunghezza d'onda della frequenza a cui lavora il modulo (circa 17cm per 433.92 MHz).

Nonostante la disponibilità in questa MCU di un clock interno, ne ho utilizzato uno esterno proveniente da un quarzo a 4 MHz con due condensatori da 22 pF per avere la massima stabilità possibile (maggior stabilità del clock = maggior precisione ed affidabilità del segnale radio).

L'uscita modulata inviata al modulo radio è presente sul pin A2 mentre sul pin A1 troviamo un led che ho utilizzato molto in fase di debug ma che non trova applicazioni pratiche nel normale funzionamento, tranne il lampeggiare due volte all'avvio del PIC (per eventuale debug futuro).

Infine, i pin della porta B sono utilizzati per il polling della tastiera (tranne B7), due come colonne d’uscita e cinque come righe d’ingresso.

Lo schema è tutto qua, come è possibile notare è abbastanza elementare. Nel prossimo capitolo parlerò di come avviene la trasmissione e di quale protocollo ho utilizzato.

Un ulteriore dettaglio è la disposizione dei connettori per i pulsanti. Come ho già detto, ho utilizzato delle morsettiere a molla. I pulsanti sono 10, vi sono quindi 10 coppie di cavi. Di conseguenza ho utilizzato due file di morsettiere a 10 poli connesse ai pin del PIC secondo questo schema:

(clicca sull'immagine per vederla più grande)

Per chiarezza ecco una foto dell'interno del trasmettitore in cui sono visibili le morsettiere ed i terminatori dei cavi che vanno ai pulsanti.
Mentre il cavo dei pulsanti in sé deve essere molto flessibile (per correre comodamente all’interno degli abiti) le morsettiere a molla gradiscono molto di più un cavo monofilare rigido. Ho risolto la situazione saldando dei puntali terminali ai singoli cavi in modo da garantirgli contemporaneamente un’alta flessibilità ed un solido bloccaggio meccanico.
Ecco anche una foto dei pulsanti coi cavi connessi (ho protetto i contatti dei pulsanti con le coperture dei jack audio da 3.5 mm):

(clicca sulle immagini per vederle più grandi)

Nella foto precedente potete inoltre notare la disposizione dei componenti di cui abbiamo appena parlato, anche se questo vi riuscirà sicuramente meglio in quest'altra foto:

(clicca sull'immagine per vederla più grande)

Da notare il ridotto spazio a disposizione per il montaggio del circuito.

Ecco infine uno schema che mette insieme tutti i singoli pezzi visti sinora:

(clicca sull'immagine per vederla più grande)

Bene, l'ultima cosa che manca per comprendere appieno questo dispositivo è il codice sorgente caricato sul PIC e una spiegazione del protocollo di trasmissione utilizzato. Il codice sorgente lo trovate qui di seguito (insieme al file precompilato), la spiegazione del protocollo è nel prossimo capitolo.


Codice Sorgente

Il codice sorgente è scritto in assembly per avere il più stretto controllo possibile sulle tempistiche di trasmissione attraverso l'utilizzo di routine di ritardo calibrate al microsecondo. Per la scrittura e la compilazione ho utilizzato Pic Simulator IDE, dotato di editor, compilatore e tool di simulazione.

Per permettere il corretto funzionamento del programma, i fuses vanno impostati nel modo seguente:

Brown-out reset: abilitato
Flash program memory code protection: disabilitato
Data EEPROM memory code protection: disabilitato
Power-up timer: abilitato
Watchdog timer: disabilitato
Low voltage in-circuit serial programming: disabilitato
RA5/MCLR pin function select: digital input
Oscillator selection: XT

Il codice è relativamente semplice da capire: esegue continuamente la lettura in polling della matrice di pulsanti, in caso uno sia premuto genera il segnale codificato (vedi prossimo capitolo) e lo invia al trasmettitore.