Sommario:

UChip - Serial Over IR!: 4 passaggi
UChip - Serial Over IR!: 4 passaggi

Video: UChip - Serial Over IR!: 4 passaggi

Video: UChip - Serial Over IR!: 4 passaggi
Video: (COLA-POTATO CHIPS)Who'stheBest?1,2,3 or 4?#shorts #tiktok #viral 2024, Luglio
Anonim
UChip - Seriale su infrarossi!
UChip - Seriale su infrarossi!
UChip - Seriale su IR!
UChip - Seriale su IR!

La comunicazione wireless è diventata una caratteristica fondamentale nei nostri progetti al giorno d'oggi e parlando di wireless, la prima cosa che mi viene in mente è Wi-Fi o BT, ma gestire i protocolli di comunicazione Wi-Fi o BT non è un compito facile e consuma molto di risorse MCU, lasciando poco spazio per la codifica della mia applicazione. Pertanto, di solito opto per un modulo Wi-Fi/BT esterno collegato in serie al microcontrollore in modo da dividere i ruoli e ottenere una maggiore libertà.

Tuttavia, a volte Wi-Fi e BT sono "eccessivi" per alcune applicazioni che richiedono un basso bitrate e una breve distanza di comunicazione. Inoltre, l'utilizzo di Wi-Fi o BT implica la necessità di connettere il proprio Smartphone o dispositivo con apposita autenticazione.

Immagina di dover semplicemente accendere/spegnere una luce esterna, o cambiare l'intensità della lampada, o aprire un cancello elettrico. Varrebbe la pena usare Wi-Fi o BT?

A seconda dell'ambiente e delle applicazioni, la comunicazione wireless sulla lunghezza d'onda IR (infrarossi) potrebbe rivelarsi utile. Un Serial over IR, implementato con pochi componenti esterni (3 componenti discreti!), e uChip (una piccolissima scheda compatibile Arduino) possono essere la soluzione che stavi cercando!

Distinta base (per un dispositivo Tx-Rx):

1 x uChip

1 x LED IR: avente il picco di emissione a 950nm

1 x TSOP-38238 (di equivalente)

1 x resistenza da 1KOhm

Hardware

1 x breadboard/scheda prototipo

1 x tubo di plastica nero: diametro interno delle stesse dimensioni del LED IR, il tubo è necessario per evitare diafonia con il ricevitore TSOP.

1 x foglio di alluminio (3 cm x 3 cm)

1 x nastro

SUGGERIMENTO: è possibile creare un dispositivo solo TX o solo RX nel caso sia necessaria una comunicazione unidirezionale rimuovendo l'hardware RX/TX non necessario dal circuito o abilitando/disabilitando il relativo codice nello sketch.

Passaggio 1: cablaggio

Cablaggio
Cablaggio
Cablaggio
Cablaggio
Cablaggio
Cablaggio

Collegare i componenti insieme secondo lo schema.

Qualche nota sul semplice schema. Poiché il TSOP-38238 consente un'alimentazione da 2,5 V a 5 V e assorbe al massimo 0,45 mA (trovate la scheda tecnica QUI), alimenterò il ricevitore utilizzando due pin, che forniranno rispettivamente la massa e l'alimentazione. Ciò consente di accendere/spegnere il ricevitore su richiesta e una configurazione del cablaggio hardware molto semplice. Inoltre, nel caso sia necessaria una comunicazione unidirezionale, è possibile scegliere se realizzare un dispositivo solo (Tx/Rx) semplicemente disabilitando/abilitando il TSOP-38238.

Come funziona il circuito?

È abbastanza semplice. Il pin di uscita TSOP viene abbassato quando il sensore rileva un treno di 6 impulsi o più a 38 KHz, d'altra parte viene alzato quando non c'è un tale segnale. Pertanto, per trasmettere i dati seriali su IR, ciò che fa il circuito è alimentare l'anodo del LED con un PWM a 38 KHz modulato con il segnale seriale TX che abbassa il catodo del LED.

Di conseguenza, ad un livello alto della seriale TX0, il LED non è polarizzato o polarizzato al contrario (nessun impulso) e il pin di uscita TSOP è tirato alto. Trasmettendo un livello basso sulla seriale, il LED viene alimentato e genera impulsi IR in base al segnale PWM applicato; pertanto, l'uscita TSOP viene ridotta.

Poiché la trasmissione è diretta (0->0 e 1->1) non sono necessari inverter o altre logiche lato ricevitore.

Regolo la potenza di uscita ottica del LED selezionando il duty cycle PWM in base all'applicazione. Maggiore è il ciclo di lavoro, maggiore è la potenza di uscita ottica e quindi più lontano trasmetterai il tuo messaggio.

Tieni presente che dobbiamo ancora generare impulsi! Pertanto, non dovresti superare il ciclo di lavoro del 90%, altrimenti il TSOP non rileverà il segnale come impulsi.

Hai bisogno di più potenza?

Per aumentare la corrente, possiamo semplicemente ridurre il valore della resistenza da 1kOhm?

Forse, non essere troppo esigente! La corrente massima che si ottiene da un pin dell'MCU è limitata a 7 mA quando si pilota il pin della porta più forte del normale (PINCFG. DRVSTR = 1 e VDD > 3V) come indicato nella scheda tecnica SAMD21.

Tuttavia, la configurazione standard (che è quella adottata dalle librerie IDE di Arduino di default) limita la corrente a 2mA. Pertanto, l'utilizzo di 1kOhm fornisce già il limite attuale con le impostazioni predefinite!

L'aumento della corrente non è solo una questione di componenti elettrici. Brevemente:

  • Cambiare la resistenza (il cui valore minimo è limitato a circa 470Ohm -> VDD/470~7mA);
  • Impostare corrispondentemente PORT->PINCFG->DRVSTR a 1;

Fornirò il codice che include questa funzione in un futuro aggiornamento.

Ma ricorda, l'affondamento e il drenaggio della corrente dai pin MCU vicino ai suoi limiti non è un approccio così buono. In effetti, riduce la durata e l'affidabilità dell'MCU. Pertanto, suggerisco di mantenere la normale potenza dell'unità per un utilizzo a lungo termine.

Passaggio 2: programmazione

Carica lo sketch “IRSerial.ino” in uChip (o la scheda compatibile Arduino che stai utilizzando).

Nel caso in cui sia necessario cambiare il pin che genera il PWM, assicurati di utilizzare un pin collegato a un timer TCC, poiché questa versione del codice funziona solo con timer TCC (controlla il "variant.c" della tua scheda per queste informazioni). Aggiungerò il codice per utilizzare anche i timer TC nei futuri aggiornamenti.

Il codice è abbastanza semplice. Dopo aver impostato il PIN_5 basso (fornisce TSOP GND) e il PIN_6 alto (alimentando il TSOP), l'MCU avvia il PWM su PIN_1, impostando il periodo del timer e confrontando la cattura di conseguenza con la modulazione di frequenza necessaria (nel mio caso è 38KHz) e il dovere ciclo (12,5% di default). Questo viene fatto sfruttando la funzione standard analogWrite() sui pin PWM e modificando solo il registro PER_REG (period register) e CC (capture compare) (il codice scritto è semplicemente un taglia e incolla dalla libreria wire_analog). È possibile impostare la frequenza necessaria in base al sensore TSOP modificando PER_REG (che è il limite superiore azzerando il contatore del timer), mentre impostare CC proporzionalmente al valore del periodo alla percentuale di duty cycle desiderata.

Successivamente, il codice imposta la porta seriale utilizzando la velocità di trasmissione corretta che è 2400 bps. Perché un baud rate così basso?! La risposta è nella scheda tecnica TSOP che puoi trovare QUI. Poiché il TSOP è dotato di filtri di reiezione del rumore elevato per evitare commutazioni indesiderate, è necessario inviare un treno di impulsi multipli per abbassare il pin di uscita TSOP (il numero di impulsi dipende dalla versione TSOP, 6 è il valore tipico). Allo stesso modo, l'uscita TSOP viene alzata dopo un periodo di tempo minimo equivalente a 10 impulsi o più. Di conseguenza, per impostare l'uscita TSOP come segnale modulante TX0, è necessario impostare il baud rate considerando la seguente equazione:

Baud seriale < PWM_frequency/10

Usando 38KHz questo si traduce in un baudrate inferiore a 3800bps, il che significa che il baud rate "standard" più alto consentito è di 2400pbs, come anticipato in precedenza.

Vuoi aumentare il baud rate? Ci sono due opzioni.

L'opzione più semplice è cambiare il TSOP in una versione a frequenza più alta (come TSOP38256), che ti consentirebbe di raddoppiare la velocità di trasmissione (4800 bps)

Non abbastanza?! Quindi è necessario creare il proprio collegamento ottico utilizzando un semplice LED IR + fotodiodo e circuiti di amplificazione. Tuttavia, questa soluzione richiede molta codifica ed esperienza elettronica per evitare che il rumore influisca sui dati trasmessi e quindi la sua implementazione non è affatto facile! Tuttavia, se ti senti abbastanza sicuro, sei più che benvenuto a provare a creare il tuo sistema TSOP!:)

Infine, ho impostato la porta SerialUSB (2400bps) che utilizzo per inviare e ricevere dati sul monitor seriale.

La funzione loop() include il codice necessario per passare i dati sui due serial e viene copiata direttamente dallo sketch di esempio SerialPassthrough modificando solo i nomi dei serial.

Passaggio 3: schermatura del LED IR

LED IR schermato
LED IR schermato
LED IR schermato
LED IR schermato

Se accendi il circuito sopra dopo aver caricato il codice "IRSerial.ino", controlla il monitor seriale su Arduino IDE e prova a inviare una stringa. Probabilmente vedrai che uChip sta ricevendo esattamente ciò che sta trasmettendo! C'è una diafonia nel circuito a causa della comunicazione ottica tra il LED IR e il TSOP dello stesso dispositivo!

Ecco che arriva la parte difficile di questo progetto, prevenire il cross-talk! Il loop deve essere interrotto per effettuare la comunicazione seriale bidirezionale su IR.

Come interrompiamo il ciclo?

Prima opzione, si riduce il ciclo di lavoro PWM, abbassando così la potenza ottica del LED. Tuttavia, questo approccio riduce anche la distanza sulla quale si ottiene un canale IR seriale affidabile. La seconda opzione è schermare il LED IR, creando così un "raggio" IR direzionale. È una questione di tentativi ed errori; alla fine, usando un pezzo di tubo dell'aria pneumatico nero avvolto in un foglio di alluminio e nastro adesivo (che fornisce isolamento elettrico) sono riuscito a interrompere il discorso incrociato. L'inserimento del LED IR trasmittente all'interno del tubo impedisce la comunicazione tra TX e RX dello stesso dispositivo.

Guarda l'immagine per vedere la mia soluzione, ma sentiti libero di provare altri metodi e/o di suggerire la tua! Non esiste una soluzione assoluta a questo problema (a meno che non sia necessario un semplice canale unidirezionale) e probabilmente è necessario regolare il layout dei circuiti, il ciclo di lavoro PWM e lo schermo IR in base alle proprie esigenze.

Una volta interrotto il cross talk, puoi verificare che il tuo dispositivo funzioni ancora creando un loop sul dispositivo Tx-Rx sfruttando la riflessione della lunghezza d'onda IR sulle superfici riflettenti IR.

Passaggio 4: comunicare

Comunicare!
Comunicare!
Comunicare!
Comunicare!

Questo è tutto

Il tuo dispositivo seriale su IR è pronto per comunicare, usalo per inviare dati su IR, accendi/spegni tutto ciò che ti piace o controlla lo stato di un sensore che stai segretamente nascondendo!

La distanza su cui la comunicazione è affidabile non è tanto quanto per un dispositivo WiFi o BT. Tuttavia, è direzionale (a seconda dell'apertura del LED e del sistema di schermatura IR implementato), che può essere molto utile in alcune applicazioni!

Presto caricherò un video dove potrete vedere alcuni esempi delle applicazioni che ho realizzato. Divertiti!

Consigliato: