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.

 

Postado em Sem categoria | Tags: | Deixe um comentário (responderei para o seu e-mail)

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

Postado em Sem categoria | Tags: | 5 Comments

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;
Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

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.

Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

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.
Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

Apps Android para testes e controle com os protocolos UDP e TCP

As apps abaixo, nas versões indicadas, não pedem nenhuma permissão abusiva e suportam broadcast UDP para envio e recepção. Exceto se indicado em contrário, para fazer um broadcast você sempre precisa definir 255.255.255.255 como IP destino.
  • NetIO – É a única app paga desta lista, mas vale a pena se você quer operar no dia-a-dia algum dispositivo via rede mas não sabe como criar sua própria app Android.  No site do desenvolvedor você tem acesso a um editor online onde você desenha sua própria interface e faz toda a configuração.
  • WiFi TCP/UDP Controller v1.13.1 – e WiFi TCP/UDP Controller 16 v1.7.2 (para telas pequenas) – A app gratuita que mais perto chega de NetIO. Você pode gravar uma grande quantidade de comandos. Você pode ter até cinco controladores virtuais, cada um tendo como alvo um servidor distinto, mas qualquer um deles pode apontar para o endereço de broadcast. Infelizmente só mostra na tela a última recepção por isso pode não ser o melhor para diagnóstico ou acompanhamento do funcionamento da comunicação. Não mostra o IP da recepção, o que pode ser inconveniente quando você monitora broadcasts. Os dados podem ser processados na própria app e você pode exibir apenas a parte da recepção que você quiser.
    OBS.: A porta de recepção é configurada em “Received Data Preference”.
  •  TCP/UDP Terminal v.1.4.0 – Mostra a recepção da forma de um log, mas também não mostra o IP de quem transmitiu.
  •  UDP Receiver and Sender v1.6 – Para quem só quer fazer um teste rápido é muito mais simples de usar. Coloque a porta que deseja escutar e imediatamente a app já mostra um log das recepções. Não mostra IP de quem transmitiu. Tamanho da fonte no LOG não é configurável.
  • UDP Data Log – Lite v1.4 – Apenas faz recepção UDP e é simples de usar. Eu prefiro o TCP/UDP Terminal, mas esta pode ser útil por suportar qualquer Android desde a versão 2.2;
  • UDP tool 1.0 – Não funcionou comigo

 

Postado em Sem categoria | 1 Comment

A diferença entre “shield” e “módulo”.

Todo shield é um módulo. “Shield” é um termo adotado pelos criadores do Arduino para designar módulos que foram construídos especificamente para montagem sobre um Arduino. Shields são convenientes e mais fáceis de usar isoladamente e produzem um resultado final mais elegante. Mas não tem flexibilidade por causa da pinagem fixa. Se dois shields usarem os mesmos pinos do Arduino você precisa fazer alteração em um deles. Módulos são mais flexíveis nesse sentido e mais baratos, por não serem “especializados”. Isto é: quando um fabricante cria um “shield GPS” ele está visando o Arduino apenas mas se ele fizer um “módulo GPS”, vai ter um público mais amplo: usuários de Arduino, ESP8266, Raspberry Pi, etc.

Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

A diferença entre buzzer ativo e passivo

Visualmente eles podem ser idênticos, mas o funcionamento é muito diferente. O buzzer ativo é um produto mais complexo, de uso mais simples. Ele já tem incorporado o circuito oscilador que produz o som e só requer energizar. O buzzer passivo é apenas um transdutor. Pense nele como um “alto falante” miniatura.

Buzzer ativo

  • Mais fácil de testar e usar: ao energizar já apita continuamente;
  • Não é o mais apropriado para criar melodias. É mais apropriado para alarmes/avisos/sinalização.

Buzzer passivo

  • Difícil de testar e usar: ao energizar você só ouve um débil estalo. Parece um buzzer ativo com defeito;
  • É o mais apropriado para fazer melodias, porque você tem o controle sobre os tons gerados.
Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)

Ferramentas para obter polígonos de coordenadas, para uso com GPS.

Quem precisa delimitar áreas (geofencing) a serem observadas por um sistema de automação baseado em GPS, como rotas, áreas proibidas, etc, freqüentemente precisa inserir no código matrizes de coordenadas. Por exemplo, digamos que você queira delimitar a circulação de uma pessoa ou veículo à região aproximada do bairro da Madalena, Em Recife (ou a qualquer lugar menos nessa região).

mapa_madalena_poligono_automalabs.com.br

Você precisaria introduzir no seu código uma matriz de coordenadas semelhante a esta (o formato exato varia):

(-8.050816223141625, -34.91300582885742)

(-8.05922962720018, -34.913434982299805)

(-8.059654541958096, -34.90407943725586)

(-8.049626434722773, -34.90373611450195)

Existem algumas ferramentas que você pode usar para facilitar o trabalho de obter essas coordenadas.

Estas são online e usam o Google Maps.

  • Polygon Creator Class (For Google Map API v3)  – Provavelmente o mais fácil de usar. Clique em Reset, clique no mapa até formar um quadrado e depois clique em “Show Paths”. O autor disponibilizou o código completo para baixar no Github. Mudando as coordenadas em “var singapoerCenter” (no código HTML) você fará o mapa abrir na região desejada;
  • Google Maps API v3 Tool – No topo escolha “Polygon” e “Javascript”. Na caixa ao lado de “Search”, coloque o nome da localidade onde você quer centralizar o mapa, por exemplo, “Madalena, Recife, Pernambuco” e clique em Search para posicionar o mapa. Clique em pelo menos três pontos sobre o mapa que já terá as coordenadas para o triângulo exibidas. Se clicar mais pontos o polígono correspondente será desenhado e as novas coordenadas serão exibidas.  Clique em “Clear Map” para desenhar outro polígono.
  • http://codepen.io/jhawes/pen/ujdgK – Para ver as coordenadas é preciso rolar a tela até ver a caixa de exibição e arrastar um dos pontos do triângulo. Essa é complicada de usar mas poderosa para quem entende algo de javascript. Você pode editar diretamente o código JS à direita da tela e ver as mudanças na hora. É possível mudar o formato com que as coordenadas são apresentadas, determinar coordenadas  padrão, etc. Por exemplo, troque o código JS pelo abaixo para fazer o mapa abrir em Recife , demarcando uma área sobre os bairros das Graças e Madalena e com uma exibição mais “limpa” das coordenadas.

Você pode salvar sua própria cópia, com muito lixo junto mas funcional, clicando em “Change View” -> “Full Page” e então use o comando do seu browser para salvar a página completa no seu HDD. O arquivo a editar depois não é o que você salvou, mas um .htm dentro da pasta criada automaticamente.

Postado em Sem categoria | Tags: | Deixe um comentário (responderei para o seu e-mail)

Erro “‘min’ was not declared in this scope” quando programando para o ESP8266

Arduino 1.6.5 com ESP8266 board package 2.0.0

Também pode ocorrer com max(), mas não aconteceu comigo.

Me deparei com este erro ao mesclar o programa graphics_test de Adafruit_ILI9341 com um programa que eu já estava usando no ESP8266.

Esse erro só ocorre quando uma das bibliotecas específicas do ESP8266 (não sei apontar qual ainda) é incluída no projeto. Ao usar “min” em um programa simples, compila normalmente.

Contorne o problema acrescentando “std::” antes de cada “min”, desta forma:

std::min()

Fonte

Postado em Sem categoria | Deixe um comentário (responderei para o seu e-mail)