Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada, sendo:
"VERDE",indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);
Sistema de Segurança e Controle de Acesso com RFID e Arduino Este projeto, é uma evolução do projeto original "Arduino - Sistema de Segurança, Controle de Acesso" veja em: http://arduinobymyself.blogspot.com.br/2012/03/arduino-sistema-de-seguranca-controle.html Agora ao invés de usarmos um teclado para entradas de senha e para a liberação de uma porta ou acionamento de um dispositivo; usaremos um RFID (Radio Frequency Identifier Device) dispositivo de identificação via rádio frequência. Usaremos também um display LCD com 20 caracteres e 4 linhas para mostrar as mensagens do sistema, além de um servo-motor para efetuar o acionamento mecânico de travamento/liberação de uma porta ou outros disposivos (tais como catraca, fechaduras, etc...). O componente RFID é o MFRC522AN (MiFare RC522AN 13.56 MHz comunicação SPI) que pode ser facilmente encontrado em sites do brasil ou da china e por um preço acessível. http://www.fystore.com/p42892/RFID-module-Kits-S50-13-56-Mhz-6cm-With-Tags-SPI-Write-amp-Read-for-arduino-uno-2560.html FUNCIONAMENTO: Os usuários terão cartões e ou tokens/tags de acesso cadastrado no software ou em uma memória. Ao aproximar o cartão/token/tag do sensor RFID (aproximadamente 6 cm), o número serial deste cartão/token/tag é detectado e assim comparados com os seriais que estão cadastrados no software ou numa base de dados em uma memória; se for um número de serial cadastrado, o sistema libera a entrada deste usuário acendendo um LED verde e colocando mensagens de reconhecimento do usuário e de boas vindas no display LCD, alem de um servo-motor ser acionado para liberar um dispositivo mecânico. Caso contrário, o sistema não libera o acesso do usuário, acendendo um LED vermelho de advertência e mostrando mensagem no display LCD para o usuário contactar a administração. Durante o processo de liberação ou rejeição dos usuários, sinais sonoros característicos serão tocados em um buzzer. MATERIAL: 1 x Arduino UNO, MEGA, Duemilanove ou Teensy, etc... 1 x RFID MFRC522AN (comunicação SPI) 1 x servo-motor 1 x LCD 20x4 I2C 1 x LED verde 1 x LED vermelho 2 x reistor de 220R 1 x Buzzer 1 x Bread Board Fios e cabos para as ligações COMPONENTES:
Cartões e Tags RFID
Token ou Tag
Parte traseira do display LCD 20x4 I2C
Pinagem do LCD I2C: GND > GND do Arduino VCC > +5V do Arduino SDA > pino A4 do Arduino SCL > pino A5 do Arduino
Parte frontal do display LCD 20x4 I2C
Módulo RFID MFRC522AN
Pinagem e interligação com arduino UNO e MEGA
INTERLIGAÇÃO:
Para o Arduino UNO temos: Reset > Pin 5 SS > Pin 10 MOSI > Pin 11 MISO > Pin 12 SCK > Pin 13 Ground > Ground 3.3v > 3.3v Projeto completo: Lembrar que o LCD é I2C e 20x4 e o RFID é o MFRC522AN. Buzzer, servo e outros componentes são de uso geral.
Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo: "VERDE",indicação de nível 1 a 5 (Fácil); "AMARELO", indicação de nível 6 a 8 (Médio); VERMELHO, indicação de nível 9 e 10 (Difícil);
PINGBot - O Robot Explorador PINGBot é o Robot Explorador que usa um sensor ultra-sônico para poder desviar de objetos presentes em seu caminho. Como já vimos em um post anterior, o sensor ultra-sônico emite pulsos na frequência de 40KHz (imperceptível ao ouvido humano e de animais), esses pulsos ao baterem em um objeto, são refletidos e retornam ao sensor, depois de um determinado tempo; sabendo o tempo total de ida e volta dos pulsos e a velocidade do som no meio (ar), fica fácil calcular a distancia percorrida pelos pulsos e assim determinar a distância do objeto em relação ao sensor. Veja o post sobre sensor PING para maiores detalhes. No nosso segundo projeto Robótico, o usaremos o mesmo chassis do BUGBot, agora com uma PONTE-H dual com um chip L298H para controlar 2 motores DC (controle de direção e velocidade), o que dará maior agilidade ao nosso protótipo. O funcionamento básico é o seguinte: Ao inicializar o sistema o chassi do robot, será mantido parado e o sensor calculará a distancia FRONTAL, DIREITA e ESQUERDA; ele fará uma comparação destas distância e assim poderá decidir qual é o melhor caminho a seguir (o maior caminho sempre será a melhor opção !). Depois disto, ele iniciará a exploração, até o momento em que irá encontrar um objeto interferindo em seu progresso (ele deverá aproximar-se no máximo até uma distância limite, em centímetros, do objeto), quando ele deverá: parar, e analisar novamente as distâncias: FRONTAL, DIREITA e ESQUERDA; para assim poder novamente decidir qual é o melhor caminho a seguir - voltando novamente ao ciclo de operação. Falando em termos de lógica de programação, temos: incluir as bibliotecas; inicializar as variáveis e constantes; definir e inicializar os pinos; inicializar comunicação serial; "INÍCIO" chamar rotina de parada dos motores; posicionar servo a 90 graus; fazer leitura de distância e armazenar (FRONTAL); posicionar servo a 0 graus; fazer leitura de distância e armazenar (ESQUERDA); posicionar servo a 180 graus; fazer leitura de distância e armazenar (DIREITA); comparação(1): FRONTAL maior que ESQUERDA?; sim:- comparação(2): FRONTAL maior que DIREITA?; sim:- chamar rotina para seguir em frente; não:- chamar rotina para girar a direita; não:- (comparação(1) menor que:- chamar função para girar a esquerda; caso nenhuma condição for possível (todas as distâncias exatamente iguais:- andar para frente por um tempo e parar, e assim começar novamente o ciclo. andar até detectar distância menor que 20 centímetros; loop para a posição "INÍCIO"; rotina para seguir em frente: colocar nível alto no pino 2 e nível baixo no pino 1 de ambos os motores (definida rotação para frente; habilitar o "enable" de ambos os motores com um valor PWM para controle da velocidade; temporizar a ação; Rotina para girar à direita: colocar nível alto no pino 2 e nível baixo no pino 1 do motor esquerdo, definindo rotação para frente;
colocar nível baixo no pino 2 e nível alto no pino 1 do motor direito, definindo rotação para traz; habilitar o "enable" de ambos os motores com um valor PWM para controle da velocidade;
temporizar a ação;
Rotina para girar à esquerda: colocar nível baixo no pino 2 e nível alto no pino 1 do motor esquerdo, definindo rotação para traz;
colocar nível alto no pino 2 e nível baixo no pino 1 do motor direito, definindo rotação para frente; habilitar o "enable" de ambos os motores com um valor PWM para controle da velocidade;
temporizar a ação;
Rotina para parada dos motores:
desabilitar o "enable" de ambos os motores com um valor baixo;
colocar valor baixo em ambos os pinos 1 e 2 dos motores;
Notar que: os motores devem ser ligados de forma que quando acionado (valor alto) o pino 2 de cada motor (mantido o pino 1 em nível baixo) o mesmo tenha a rotação no sentido correto para levar o robot para frente. Vejamos um fluxograma para realizar estas funções (somente exemplo):
Isso nos dá uma ideia de como efetuar a programação do Arduino e o que ele deve executar. Nota: Utilizando o mesmo hardware, uma segunda versão com um código mais simples e enxuto, foi criada. Onde o funcionamento é o seguinte: Inicialmente o robot anda para frente até encontrar um obstáculo a uma distância menor do que a distância limite; Então ele analisa a distância à direita - se a distância à direita for maior que a distância limite - ele opta por girar à direita e seguir em frente; Se a distância à direita for, também, menor que a distância limite - então ele analisa a distância à esquerda - se a distância à esquerda for maior do que a distância limite - ele opta por girar à direita e seguir em frente; Caso nenhuma das distâncias, tanto direita ou esquerda for satisfatória - então ele dá um gira à 180 graus e segue em frente. Iniciando novamente o ciclo. Na seção Software e Programação, você encontra as duas versões para download. Hardware & Material: Nesta seção vamos verificar as necessidades em termos de material necessário e hardware utilizado. Usar o chassis construído para o BUGBot - Robot seguidor de Luz. Veja o post para maiores detalhes de construção. Lista de material: 1 x Arduino UNO, MEGA, Duemilanove, Duecemila ou Teensy 2.0++ 1 x Sensor ultra-sônico HC-SR04 1 x PONTE-H dual 1 x Servo Motor HXT900 9g/1,8Kg 1 x Kit Tamiya Box Gear com dois motores DC 3-6V Pack de baterias para alimentar o Arduino e os Motores (9V) Chassis para montagem Fios e cabos para as conexões.
Sensor Ultra-Sônico HC-SR04:
HC-SR04, pinos VCC,Trig, Echo e GND
Ponte-H Dupla:
Detalhe da PONTE-H, outros modelos podem ser usados
Cada um com seus detalhes de interconexão
Layout & Esquemas: Circuito do PINGBot; Verificar as pinagens utilizadas no programa (algumas modificações foram feitas).
A alimentação do Arduino, pode ser utilizada a partir da pont-H. Aconselho uma alimentação independente, com GNDs comuns entre elas. (devido a corrente elevada puxada pelos motores) Muito cuidado com as ligações para não inverter alimentações... o dano pode ser irreversível.
Correspondência; pinos Arduino x Elementos Externos: ***Use esta correlação dos pinos e a versão 9 do código, Modificações foram feitas com relação ao diagrama*** Arduino -> Elemento Externo 0 -> N/A 1 -> N/A 2 -> N/A 3 -> sensor PING pino echo 4 -> sensor PING pino Trigger 5 -> PONTE-H pino in1 6 -> PONTE-H pino in2 7 -> N/A 8 -> N/A 9 -> servo motor 10 -> PONTE-H pino in3 11 -> PONTE-H pino in4 12 -> buzzer 13 -> N/A Novo código pode ser obtido no github: https://github.com/Arduinobymyself/PINGBot.git
"Tive muitos problemas com ruído no sistema sensor de distância, o qual foi resolvido adicionando capacitores de 100nF entre os pinos dos motores DC e suas carcaças (além do capacitor que normalmente é adicionado entre seus pinos). O ruído interferia na leitura feita pelo sensor PING; de modo que o robot seguia em frente e parava, sem ter um objeto efetivamente ao alcance estipulado." Abaixo o esquema que resolveu o problema:
Fotos reais do projeto na fase de execução: Lembrar que o chassis utilizado foi o chassis do BUGBot, veja o post relacionado a ele para maiores detalhes de construção.
fixação do servo motor
Ponte H fixada e motores conectados
Sensor PING + anteparo + haste fixação do servo
Anteparo em acrílico
Sensor PING fixado ao servo motor
Servo motor fixado com fita dupla-face (experimento)
Arduino com ProtoShield e ligações
Servo motor fixado com cola quente - melhor opção (experimento)
Fixação ideal do servo, seria com parafusos
Detalhe do servo e sensor
Detalhe da ponte-H
detalhe do protoshield
Numa primeira instancia, coloquei um buzzer para sinalizar movimentação... depois acabei tirando. Mas a função ainda está no programa e é só implementar.
Retirado o buzzer, adicionado uma chave liga-desliga (alimentação da ponte-H)
Detalhe da bateria de alimentação da ponte-H
Detalhe da bateria de alimentação do Arduino
Vista Geral por cima
Vista Geral por cima
Vista Geral de frente
Detalhe dos capacitores adicionados para a solução de ruído
O problema de compartimento para baterias, também foi solucionado, utilizando duas peças plásticas (usadas em marcenaria e fabricação de móveis).
As peças foram colocadas em cima da roda 360 graus, aproveitando os parafusos de fixação da mesma.
Assim foi resolvido o problema e ainda deu mais estabilidade ao chassis.
As duas peças usadas para fixar as baterias do motor e do Arduino
Notar que a bateria do motor é do tipo recarregável... isso ajuda a economizar e dá maior potência ao carro.
Baterias acopladas
Visão superior
Software e Programação: Várias versões foram feitas na fase de testes iniciais. Foi feito programa para testes dos motores, duas versões para debug do software, até chagar a versão final V.5. E mais as versões V.6 e V.7 para usar com servos de rotação contínua "servos hakeados", que pretendo montar em um outro chassis (redondo). Os ajustes deram bastante trabalho, foram mais de 30h trabalhando no projeto. Acredito que para cada chassis e para cada tipo de motor utilizado, seja necessário uma demanda de tempo para debug e ajustes. Obtenha o código e as bibliotecas do projeto no GitHub abaixo: https://github.com/Arduinobymyself/PINGBot.git
Parâmetros de velocidade devem ser muito bem ajustados para compensar as diferenças dos motores (sabendo que não existem dois iguais e levando em conta os parâmetros do Gear-Box).
Obrigado a todos! Divulguem o blog arduinobymyself.blogspot.com.br, para que assim possamos divulgar conhecimento! Hardware e Software livre para todos. Este foi o último post do ano de 2012.
Boas festas, feliz natal e próspero Ano Novo Em 2013, novos projetos virão...