Índice:

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

Vídeo: UChip - Serial Over IR !: 4 etapas

Vídeo: UChip - Serial Over IR !: 4 etapas
Vídeo: ЦЫПЛЕНОК ТАПАКА. Простой рецепт для начинающих!!! 2024, Julho
Anonim
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!

A comunicação wireless se tornou uma característica fundamental em nossos projetos hoje em dia e por falar em wireless, a primeira coisa que me vem à cabeça é Wi-Fi ou BT, mas lidar com os protocolos de comunicação Wi-Fi ou BT não é uma tarefa fácil e consome muito de recursos MCU, deixando pouco espaço para codificar meu aplicativo. Portanto, costumo optar por um módulo externo Wi-Fi / BT conectado em série ao microcontrolador para dividir as funções e ganhar mais liberdade.

No entanto, às vezes Wi-Fi e BT são “exagerados” para alguns aplicativos que exigem baixa taxa de bits e curta distância de comunicação. Além disso, o uso de Wi-Fi ou BT implica na necessidade de conectar seu Smartphone ou dispositivo com autenticação adequada.

Imagine que você simplesmente precisa ligar / desligar uma luz externa, ou alterar a intensidade da lâmpada, ou abrir um portão elétrico. Valeria a pena usar Wi-Fi ou BT?

Dependendo do ambiente e dos aplicativos, a comunicação sem fio pelo comprimento de onda IR (infravermelho) pode ser útil. Um Serial over IR, implementado com poucos componentes externos (3 componentes discretos!) E uChip (uma placa compatível com Arduino muito pequena) pode ser a solução que você estava procurando!

Lista de materiais (para um dispositivo Tx-Rx):

1 x uChip

1 x LED IR: tendo o pico de emissão em 950nm

1 x TSOP-38238 (de equivalente)

1 x 1 resistor KOhm

Hardware

1 x placa de ensaio / placa proto

1 x Tubo de plástico preto: diâmetro interno do mesmo tamanho que o LED IR, o tubo é necessário para evitar diafonia com o receptor TSOP.

1 x folha de alumínio (3 cm x 3 cm)

1 x fita

DICA: Você pode fazer um dispositivo somente TX ou somente RX no caso de precisar de uma comunicação unidirecional removendo o hardware RX / TX desnecessário do circuito ou habilitar / desabilitar o código relacionado no esboço.

Etapa 1: Fiação

Fiação
Fiação
Fiação
Fiação
Fiação
Fiação

Conecte os componentes de acordo com o esquema.

Algumas notas sobre o esquema simples. Como o TSOP-38238 permite uma fonte de alimentação de 2,5 V a 5 V e absorve no máximo 0,45 mA (você encontra a ficha AQUI), estarei alimentando o receptor usando dois pinos, que fornecerão o aterramento e a fonte de alimentação respectivamente. Isso permite ligar / desligar o receptor sob demanda e uma configuração de fiação de hardware muito simples. Além disso, no caso de você precisar de uma comunicação unidirecional, você pode escolher se deseja fazer um dispositivo somente (Tx / Rx) simplesmente desabilitando / habilitando o TSOP-38238.

Como funciona o circuito?

É muito simples. O pino de saída TSOP é puxado para baixo quando o sensor detecta um trem de 6 pulsos ou mais em 38 KHz, por outro lado, ele é puxado para cima quando não há tal sinal. Portanto, para transmitir os dados seriais por IR, o que o circuito faz é alimentar o ânodo do LED com um PWM de 38KHz modulado com o sinal serial TX que puxa para baixo o cátodo do LED.

Consequentemente, em um nível alto do TX0 serial, o LED não é polarizado ou polarizado no sentido inverso (sem pulsos) e o pino de saída TSOP é puxado para cima. Transmitindo um nível baixo na serial, o LED é energizado e gera pulsos IR de acordo com o sinal PWM aplicado; portanto, a saída do TSOP é reduzida.

Como a transmissão é direta (0-> 0 e 1-> 1), não há necessidade de inversores ou outra lógica no lado do receptor.

Eu regulo a potência de saída óptica do LED selecionando o ciclo de trabalho PWM de acordo com a aplicação. Quanto maior o ciclo de trabalho, maior a potência de saída óptica e, portanto, mais longe você transmitirá sua mensagem.

Lembre-se de que ainda precisamos gerar pulsos! Assim, você não deve ultrapassar o ciclo de trabalho de 90%, caso contrário, o TSOP não detectará o sinal como pulsos.

Você precisa de mais energia?

Para aumentar a corrente, podemos simplesmente reduzir o valor do resistor de 1kOhm?

Talvez, apenas não seja muito exigente! A corrente máxima que você obtém de um pino do MCU é limitada a 7mA ao conduzir o pino da porta mais forte do que o normal (PINCFG. DRVSTR = 1 e VDD> 3V) conforme declarado na folha de dados SAMD21.

No entanto, a configuração padrão (que é a adotada pelas bibliotecas do Arduino IDE como padrão) limita a corrente a 2 mA. Portanto, usar 1kOhm já dá o limite de corrente com as configurações padrão!

Aumentar a corrente não é apenas uma questão de componentes elétricos. Brevemente:

  • Alterar o resistor (cujo valor mínimo é limitado a aproximadamente 470Ohm -> VDD / 470 ~ 7mA);
  • Defina o PORT-> PINCFG-> DRVSTR correspondente para 1;

Fornecerei o código incluindo esse recurso em uma atualização futura.

Mas lembre-se, afundar e drenar a corrente dos pinos MCU perto de seus limites não é uma abordagem tão boa. Na verdade, ele reduz a vida útil e a confiabilidade do MCU. Portanto, sugiro manter a força normal da unidade para uso a longo prazo.

Etapa 2: Programação

Carregue o esboço “IRSerial.ino” no uChip (ou na placa compatível com Arduino que você está usando).

Caso precise trocar o pino que gera o PWM, certifique-se de que está usando um pino conectado a um temporizador TCC, pois esta versão do código funciona apenas com temporizadores TCC (verifique o “variant.c” da sua placa para esta informação) Vou adicionar o código para usar também temporizadores TC em atualizações futuras.

O código é bastante simples. Depois de definir o PIN_5 baixo (fornece TSOP GND) e PIN_6 alto (alimentando o TSOP), o MCU inicia o PWM em PIN_1, definindo o período do temporizador e a captura comparada de acordo com a modulação de frequência necessária (no meu caso é 38KHz) e dever ciclo (12,5% como padrão). Isso é feito explorando a função analogWrite () padrão nos pinos PWM e alterando apenas o registro PER_REG (registro de período) e CC (comparação de captura) (o código escrito é simplesmente um recortar e colar da biblioteca wiring_analog). Você pode definir a frequência necessária de acordo com a alteração do sensor TSOP PER_REG (que é o limite superior que zera o contador do temporizador), enquanto define CC proporcionalmente ao valor do período para a porcentagem desejada do ciclo de serviço.

Em seguida, o código define a porta serial usando a taxa de transmissão correta que é 2400bps. Por que uma taxa de transmissão tão baixa ?! A resposta está na folha de dados do TSOP que você pode encontrar AQUI. Uma vez que o TSOP apresenta filtros de alta rejeição de ruído para evitar comutação indesejada, é necessário enviar um trem de pulsos múltiplos para puxar para baixo o pino de saída do TSOP (o número de pulsos depende da versão do TSOP, 6 é o valor típico). Da mesma forma, a saída do TSOP é elevada após um período mínimo de tempo equivalente a 10 pulsos ou mais. Consequentemente, para definir a saída TSOP como o sinal TX0 modulante, é necessário definir a taxa de transmissão considerando a seguinte equação:

Baud serial <PWM_frequency / 10

O uso de 38KHz resulta em uma taxa de transmissão inferior a 3800 bps, o que significa que a taxa de transmissão "padrão" mais alta permitida é de 2400 pbs, conforme antecipado anteriormente.

Você quer aumentar a taxa de transmissão? Existem duas opções.

A opção mais fácil é mudar o TSOP para uma versão de frequência mais alta (como o TSOP38256), o que permitiria que você dobrasse a taxa de transmissão (4800bps)

Insuficiente?! Em seguida, você precisa fazer seu próprio link óptico usando um simples LED IR + fotodiodo e circuito de amplificação. No entanto, esta solução requer muitos conhecimentos de codificação e eletrônica para evitar que o ruído afete os dados transmitidos e, portanto, sua implementação não é nada fácil! No entanto, se você se sentir confiante o suficiente, é mais que bem-vindo para tentar fazer seu próprio sistema TSOP!:)

Por fim, defino a porta SerialUSB (2400bps) que utilizo para enviar e receber dados no monitor serial.

A função loop () inclui o código necessário para transmitir dados sobre as duas séries e é copiado diretamente do esboço de exemplo SerialPasst através da alteração apenas dos nomes das séries.

Etapa 3: Blindagem LED IV

LED IV de blindagem
LED IV de blindagem
LED IV de blindagem
LED IV de blindagem

Se você ligar o circuito acima após carregar o código “IRSerial.ino”, verifique o Serial Monitor no Arduino IDE e tente enviar uma string. Você provavelmente verá que o uChip está recebendo exatamente o que está transmitindo! Há uma interferência no circuito devido à comunicação óptica entre o LED IV e o TSOP do mesmo dispositivo!

Aí vem a parte difícil desse projeto, evitar conversas cruzadas! O loop deve ser interrompido para fazer a comunicação serial bidirecional via IR.

Como quebramos o loop?

Primeira opção, você reduz o ciclo de trabalho do PWM, diminuindo assim a saída de potência óptica do LED. No entanto, essa abordagem também reduz a distância na qual você obtém um canal IR serial confiável. A segunda opção é blindar o LED IV, criando um “feixe” IV direcional. É uma questão de tentativa e erro; por fim, usando um pedaço de mangueira pneumática preta enrolada em papel alumínio e fita adesiva (fornecendo isolamento elétrico), consegui interromper a conversa cruzada. Colocar o LED IR de transmissão dentro do tubo evita a comunicação entre o TX e o RX do mesmo dispositivo.

Olhe a foto para ver minha solução, mas fique à vontade para experimentar outros métodos e / ou sugerir o seu! Não existe uma solução absoluta para este problema (a menos que você precise de um canal unidirecional simples) e provavelmente precisará ajustar o layout do circuito, o ciclo de trabalho PWM e o escudo de infravermelho de acordo com suas necessidades.

Depois de interromper a conversa cruzada, você pode verificar se o seu dispositivo ainda está funcionando criando um loop no dispositivo Tx-Rx explorando a reflexão do comprimento de onda IR em superfícies reflexivas IR.

Etapa 4: comunique-se

Comunicar!
Comunicar!
Comunicar!
Comunicar!

Isso é tudo

Seu dispositivo serial sobre IR está pronto para se comunicar, use-os para enviar dados sobre IR, ligue / desligue o que quiser ou verifique o status de um sensor que você está escondendo secretamente!

A distância na qual a comunicação é confiável não é tanto quanto para um dispositivo WiFi ou BT. No entanto, é direcional (dependendo da abertura do LED e do sistema de proteção IV implementado), o que pode ser muito útil em algumas aplicações!

Em breve farei o upload de um vídeo onde vocês poderão ver alguns exemplos das inscrições que fiz. Aproveitar!

Recomendado: