Códigos do controle remoto lennox RC-109

Este remoto é usado em uma TV Lenoxx cujo modelo ainda não sei.

Protocolo NEC 32 bits

 

 

Códigos do controle remoto do receptor ISDB-T Aquário DTV-6000

Este controle não apenas é parecido com o do receptor ISDB-T comercializado pela Infokit. Os códigos são os mesmos.

Protocolo NEC de 32bits

 

 

Códigos do controle remoto do receptor de satélite GVT/VIVO

Até onde sei todos os aparelhos da GVT usam o mesmo controle remoto e a VIVO ao comprar a GVT só mudou o nome.

Protocolo RC6 de 36 bits

O quinto byte alterna (é um protocolo Philips) entre “A” (00001010) e “2” (00000010)

Controle_remoto_GVT_DSC02639_640_automalabs.com.br

Este controle tem uma particularidade. As rotinas de leitura da biblioteca IRremoteESP8266 interpretam sem problemas os comandos acima, mas se você usar esses comandos com a função sendRC6 da mesma biblioteca, o receptor da GVT ignora completamente. A mesma biblioteca mostra que o que ela está transmitindo não bate com o remoto original. Se você transmitir com 36 bits é completamente diferente. Se transmitir como 32 bits o código decodificado confere, mas há uma diferença.

Analisando bit por bit eu identifiquei essa diferença. É assim a forma real do código da tecla “zero”:

remoto_gvt_SignalPlot_key0

O zero em preto é o start bit do protocolo RC6. Tudo depois dele (10000000011100000010011000000000) já é o código para a tecla zero (80702600 em binário).

Os quatro bits que antecedem o start bit (1110) não existem no protocolo RC6 como definido pela biblioteca.

E criei uma nova função que chamei de sendRC6gvt.

Eu acrescentei essa rotina ao arquivo IRremoteESP8266.cpp e a chamada para ela em IRremoteESP8266.h. Eu estou usando a versão 1.x. Se você estiver usando a versão 2.x vai precisar fazer algumas mudanças.

Note que você deve chamar essa rotina alternativa dizendo que o código é de 32bits e não de 36.  Os outros 4 bits, do cabeçalho, minha rotina transmite “por fora”.

 

Como localizar automaticamente seu projeto na rede

Neste post, ao menos por enquanto, eu não vou dar nenhum código. Apenas explicar em linhas gerais o processo.

Considerações gerais

Os três protocolos mais usados para comunicação com seu projeto são UDP, TCP e HTTP. Cada um deles tem suas vantagens e desvantagens, mas o único realmente apropriado para localização é o UDP, porque é o único que pode enviar mensagens sem ficar esperando por uma resposta.

Digamos que sejam dois dispositivos: cliente e servidor.

  • No cliente, emita um broadcast (mensagem para 255.255.255.255) UDP na rede com uma mensagem do tipo: “onde você está”?. Todos os dispositivos no mesmo segmento de rede recebem o broadcast;
  • No servidor você deve responder essa pergunta de uma forma que o cliente saiba que a resposta vem do dispositivo certo. Você pode responder direto para o cliente (nem sempre é possível) ou fazer também um broadcast com a resposta (recomendável). Por exemplo, se a consulta tiver a pergunta “MEUSERVIDOR?” a resposta pode ser “MEUSERVIDOR!” ou “MEUSERVIDOR1”, “MEUSERVIDOR2”, etc;
  • Na ponta que fez a consulta, extraia da resposta o IP de quem enviou;
  • Se o IP do servidor não estiver na mesma faixa do cliente você vai precisar reconfigurar algo. Se estiver…
  • Pronto, agora você pode usar esse endereço IP para se conectar ou enviar mensagens por outros protocolos, como TCP e HTTP.

Outras considerações

Isso não é gambiarra. Produtos comerciais usam esse mesmo método geral de localização automática. Por exemplo, câmeras IP;

Em condições normais, broadcasts não são propagados através de roteadores. Seria um pesadelo se fossem;

Ao fazer broadcast para 255.255.255.255 o servidor responderá mesmo que esteja em outra sub-rede lógica. Por exemplo, se o cliente tiver um IP do tipo 10.0.0.x e por alguma razão o servidor estiver configurado para 192.168.0.x , ainda assim haverá resposta para o broadcast, mas o cliente só a receberá se a resposta também for um broadcast. Isso é útil para localizar equipamentos mal configurados, mas você não poderá estabelecer uma conexão HTTP ou TCP enquanto não trouxer o servidor para a mesma sub-rede lógica que o cliente. Se quiser que o broadcast somente localize dispositivos na mesma sub-rede lógica, deve mandar a mensagem para o endereço de broadcast da sub-rede. Por exemplo, numa rede do tipo 10.0.0.x o endereço de broadcast é 10.0.0.255.

Sempre que seu servidor iniciar é recomendável fazer o broadcast de sua identificação. Faça também com que o cliente esteja atento a esses broadcasts para detectar automaticamente a presença do servidor.

 

Ferramentas de criação de menus HTML

A melhor opção gratuita que encontrei até agora foi o Easy CSS Menu.

Prós

  • Realmente gratuito e aparentemente sem pegadinhas;
  • Gera menus profissionais, muito bonitos;
  • Gera código HTML e CSS fácil de editar;
  • Você pode usar esse código no seu projeto de automação.

Contras

  • Efeitos dependem de código javascript obfuscado. 15/12/2019: Hoje, passados mais de três anos, eu revisitei o assunto e apesar do site dizer “não requer javascript” a versão mais recente do programa, 5.3, ainda gera um menu que depende de um arquivo “mbjsmbmcp.js” para funcionar.

Notas

1) Você pode tornar o código javascript “legível” usando o serviço online jsbeautifier.

2) O código javascript gerado impede o uso do evento onClick dos itens de menu. Como o código é obfuscado o jeito mais fácil de habilitar os eventos é remover a linha que carrega o arquivo .js.

Com isso você perde os efeitos, mas de resto tudo continua funcionando.

3) Alternativamente, você pode editar o código apagando todas as referências a .onClick. Mas comigo funcionou bastando dar uma busca pela função que começa com

e apagar o seguinte trecho que vem logo a seguir:

4) Você pode acrescentar manualmente (com copiar e colar em um editor de textos) itens ao menu, mas preste atenção a linhas como esta:

Nas configurações default o número no final da linha precisa corresponder ao número de itens do menu * 36, ou o gradiente ficará bagunçado. No exemplo são (216/36=) 6 itens.

 

 

Notas sobre o uso de RFID em aplicações de segurança.

Nota: O que explico a seguir se aplica certamente a sistemas de 125kHz. Ainda não tenho certeza quanto a sistemas RFID milfare de 13.56MHz.

Evite cometer o erro de usar apenas o valor da tag RFID como identificação. Tags RFID em geral se apresentam a qualquer dispositivo que pergunte seu número, silenciosamente. Então para  obter o número de uma tag (copiar a tag) basta ficar bem próximo da tag por um breve instante. Sua tag é um cartão na forma de crachá ou cartão no bolso ou chaveiro? Um estranho esbarrando em você na rua pode estar copiando sua tag. Basta saber em que parte do corpo você normalmente a carrega.

Mas este é o jeito simples. Um atacante mais sofisticado pode facilmente ler sua tag passando a um metro de você.

Isto se chama “tag snooping”.

E após saber o número da tag, basta transmitir o número nas proximidades do leitor. Isso se chama “tag spoofing” e pode ser feito com um Arduino e alguns componentes extras.

Se seu sistema não exigir uma senha além do número da tag, fica muito vulnerável a ser invadido até por um adolescente.

 

Anatomia de um leitor RFID

Um leitor RFID essencialmente se compõe dos seguinte blocos:

  • Alimentação;
  • Antena;
  • Amplificador de sinal.

E opcionalmente existe um microcontrolador para decodificar o sinal e já apresentar o código da tag em um formato compreensível.

Tomando como exemplo o Módulo RDM6300:

Modulo_RFID_UART_RDM6300_DSC00520_640_automalabs.com.br

A antena não aparece na foto, mas da esquerda para a direita temos os seguintes componentes ativos:

  • LM358 – Responsável pela amplificação de sinal – Essencial;
  • 1117 – Regulador de tensão de 3.3V – Poderia não estar presente se a tensão já fosse regulada externamente;
  • SILF330 – Microcontrolador – Não essencial.

O objetivo do microcontrolador neste módulo é simplificar a vida do usuário. Ele decodifica o sinal presente na saída do amplificador baseado em LM358 e apresenta na saída do módulo o valor da tag já com uma interface padrão UART TTL. Isso permite que o próximo estágio, implementado pelo usuário, só tenha o trabalho de comparar as tags lidas com as tags armazenadas.

Porém é perfeitamente possível, se necessário, ligar a saída do amplificador diretamente em um pino de um Arduino e implementar a rotina de decodificação você mesmo. Isso é explicado neste artigo que mostra como fazer seu próprio leitor RFID, de onde eu retirei o diagrama abaixo, que mostra quase todo o essencial em um leitor RFID:

No diagrama acima, temos o LM324 fazendo o mesmo papel do LM358.

Se o leitor tiver interface USB o chip diretamente conectado a ela pode ser um simples conversor UART TTL – USB de baixo custo como um CH340 ou Silabs cp2101. Se assim for será possível obter o código em formato compatível com o Arduino em um dos pinos desse chip. Mas em alguns casos o mesmo microcontrolador que faz a decodificação também faz a interface USB, obrigando-nos a coletar o código ainda modulado na saída do amplificador

Notas sobre o uso de portas seriais “soft” no Arduino

  • Não use portas seriais virtuais se puder evitar. Por exemplo, se estiver portando o projeto para um Arduino Mega, mude todas as referências à porta virtual para que se refiram a uma das portas seriais reais do Mega. O seu projeto usará menos CPU e ganhará confiabilidade;
  • Por um tempo, foi recomendado usar a biblioteca de terceiros NewSoftSerial no lugar da biblioteca embutida. Mas desde a versão 1.0 NewSoftSerial foi adotada pelo núcleo do projeto. Se você portou um projeto antigo para a versão 1.x do arduino é recomendável deletar a biblioteca NewSoftSerial e troque todas as referências a “NewSoftSerial” para “SoftwareSerial” no seu sketch.
  • Entretanto, se por alguma razão você precisa ainda usar uma versão do Arduino anterior à 1.x, use NewSoftSerial nesses projetos.
  • Você também pode usar as entradas analógicas como portas seriais. Basta ter em mente que para as bibliotecas seriais essas portas começam a ser numeradas onde a numeração das digitais termina. Assim:
    • A0=14;
    • A1=15;
    • A2=16;
    • A3=17;
    • A4=18;
    • A5=19;
  • Então, “SoftwareSerial mySerial(16, 17);” irá separar as entradas analógicas A2 e A3 como porta serial virtual “mySerial”.
  • O autor da biblioteca sugere de passagem que as portas A6 e A7 também podem ser usadas, mas creio que seja um engano. Além de ser fato conhecido que A6 e A7, ao contrário de A0-A5, só podem ser usadas como entradas analógicas, eu testei em um Nano e não funcionou.
  • É recomendado usar apenas velocidades entre 9600 e 38400 nas portas virtuais. Tanto velocidades muito baixas quanto as muito altas criam problemas;

Notas sobre a utilização das portas analógicas do Arduino

A documentação do Arduino sobre as portas analógicas tem um erro. A página diz que o Arduino só tem 6 portas analógicas (A0 – A5).

The Atmega controllers used for the Arduino contain an onboard 6 channel analog-to-digital (A/D) converter.

Mas isso só é verdade para o Arduino Uno e Mega. Arduino Pro Mini e Nano tem 8 portas (A0 – A7). E as portas extras A6 e A7, ao contrário das outras, não podem ser usadas como portas digitais.

Como medir a tensão de alimentação do arduino.

Quase sempre assumimos que a tensão VCC no arduino seja 5V. Mas nem sempre é. Quando o Arduino está alimentado pela USB, a tensão é geralmente mais baixa que quando alimentado por fonte/bateria externa, não sendo incoum ter um valor de 4.7V ou 4.5V. Isso não faz diferença em um grande número de aplicações, mas em algumas onde use as portas analógicas e requeira precisão, você precisa levar em conta o valor exato de VCC. Saber se o valor está baixo também pode ajudar a diagnosticar problemas gerais de funcionamento.

Este artigo explica como isso é feito.  Está tudo embutido em uma função:

Exemplo de uso

É importante ter em mente que a tensão que você está medindo é a tensão após o regulador interno. Se você plugar uma bateria de 9V, 12V ou 24V, vai ler sempre 5V, de forma mais ou menos estável. Esta tensão geralmente só vai ser menor que os 5V quando a tensão de entrada cai abaixo do mínimo necessário para que o regulador funcione, ou seja: quando a tensão de entrada estiver menor que 7V ou quando você estiver alimentando por uma porta USB já carregada, usando cabos muito longos ou com uma fonte defeituosa.

Dito isso, temos as duas utilidades dessa medição:

  1. Você consegue detectar quando a bateria está chegando no limite da capacidade. Quando VCC deixar de ser estável e começar a cair, significa que a tensão de entrada caiu abaixo de 7V e o desligamento se aproxima;
  2. Medir qualquer voltagem usando as entradas analógicas requer que você conheça VCC; Se você não requer precisão, simplesmente chutar que é 5V basta. Mas se qualquer diferença comprometer seus resultados, você precisa levar em conta o valor real de VCC.