Índice:
Vídeo: UChip - Serial Over IR !: 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
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
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
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
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:
Texto para fala, clique em um UChip com tecnologia ARMbasic e outros SBCs com tecnologia ARMbasic: 3 etapas
Text to Speech Clique em um ARMbasic Powered UChip e em outros SBCs ARMbasic Powered: Introdução: Bom dia. Meu nome é Tod. Sou um profissional aeroespacial e de defesa que também é um pouco geek no coração. Inspiração: Vindo da era do BBS discado, microcontroladores de 8 bits, computadores pessoais Kaypro / Commodore / Tandy / TI-994A, quando R
UChip - esboço simples para motores de controle remoto e / ou servos via rádio 2.4 GHz Tx-Rx !: 3 etapas
UChip - Desenho Simples para Controle Remoto de Motores e / ou Servos via Rádio Tx-Rx de 2,4 GHz !: Eu realmente gosto do mundo RC. Usar um brinquedo RC dá a sensação de que você está no controle de algo extraordinário, apesar de ser um pequeno barco, carro ou drone! No entanto, não é fácil personalizar seus brinquedos e fazer com que eles façam o que você quiser
UChip - Barco RC sem garrafas de plástico e leitor de CD-ROM !: 4 etapas
UChip - Barco RC sem garrafas de plástico e CD-ROM Player !: Depois de implementar o hardware e software para conectar meu rádio drone a motores / servos, o próximo passo foi fazer um bom uso do trabalho árduo feito e construir meu próprio RC brinquedo, que é … Barco! Como não sou engenheiro mecânico, optei pelo easi
Sabre de luz da UChip - “Que a força esteja com você”: 6 etapas
UChip Lightsaber - “May the Force Be With You”: Você já sonhou em ser um Jedi ou Sith do universo Star Wars, balançando um poderoso sabre de luz para apoiar seu próprio lado? Qualquer que seja a resposta, aqui está: Como fazer um sabre de luz DIY com µChipFirst, deixe-me especificar que pretendo
UChip - BEEP Sonar Sensor com transmissão de dados Bluetooth: 4 etapas
UChip - BEEP Sonar Sensor com transmissão de dados Bluetooth: Recentemente, desenvolvi um BEEP como um sonar de carro e um adaptador Serial Bluetooth para USB usando o uChip. Cada projeto foi bastante interessante por si só, mas … seria possível mesclá-los e criar um sensor de “transmissão remota BT BEEP como um carro”?!? T