Olá galera, dessa vez demorei a postar novidades, mais acho que o assunto que vou apresentar hoje é de grande interesse de muitos, pois se trata de uma tecnologia relativamente simples mais que traz muitos benefícios a automação em geral, tanto de empresas como do setor residencial.
RFid – Radio Frequency IDentification
Há algum tempo venho lendo uma série de artigos envolvendo o uso desta tecnologia, mais ainda faltava por as mãos no hardware, e ver como realmente funciona na prática, para estimar qual a sensibilidade e eficiência este processo nos provê.
Para este projeto foi adquirida junto a MikroE uma placa de expansão que contem todo o hardware necessário para funcionamento deste processo, este inclui na placa o receptor EM4095 e a antena, que ao meu ver são os dois componentes críticos do projeto, tudo isto ao custo de pouco mais de R$ 40,00 incluindo os 5 cartões RFid.
Vale lembrar que todas as placas de expansão comercializadas pela mikroElektronika, que no Brasil é representada pela empresa Microgenios, são totalmente compatíveis com a PK2Lab.
O projeto consiste de uma trava eletrônica, onde o usuário deve aproximar um cartão próximo ao equipamento para que seu acesso a determinada área seja permitida, neste exemplo temos a possibilidade de cadastrar um cartão para cada área, sendo este código armazenado na memória EEPROM do microcontrolador.
Abaixo temos o vídeo de funcionamento do projeto e o código, escrito em C no compilador MikroC PRO.
Código fonte:
/******************************************************************************
JL Audio Manutenção Eletrônica
Data: 09/2011
Autor: Jean Carlos
Projeto: RFid LOCK
Microprocessador: PIC18F4550
Clock do processador: 48MHz
Estação de desenvolvimento: PK2Lab
Compilador: MikroC V4.60.0.0
Versão atual: 1.0
Descrição:
Este programa demosntra o uso da placa de RFid da
empresa mikroE, atráves de dois cartões cadastrados
temos o acionamento de dois reles da placa PK2Lab.
Para efetuar o cadastro do cartão referente ao Rele 1
pressione a tecla RD6, e efetue um resete na placa,
para o rele 2, pressione a chave RD7.
Ao se aproximar do sensor um cartão não cadastrado
é gerado um aviso sonoro de erro.
Placa RFid: mE RFid Reader Board
http://www.mikroe.com/eng/products/view/185/rfid-reader-board/
ac:RFid_Board
PK2Lab Placa de desenvolvimento PK2Lab
http://pk2lab.blogspot.com
ac:PK2Lab
Software: mikroC PRO for PIC
http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/
* NOTAS:
- mE RFid Reader deve ser conectada ao PORTB
- Jumper em VCC para chaves TACT
- Chaves de pull-down em RD6 e RD7
- O Clock do processador deve ser maior ou igual a 32Mhz (RFid)
*******************************************************************************/
// Inclusão do Driver do leitor RFid (RFid_Driver.h e RFid_Driver.c)
#include "RFid_driver.h"
//******************************************************************************
// Variáveis Globais
sbit Rele1 at RE1_bit;
sbit Rele2 at RE2_bit;
sbit Rele1_Direction at TRISE1_bit;
sbit Rele2_Direction at TRISE2_bit;
sbit Cfg_Sw1 at RD6_bit;
sbit Cfg_Sw2 at RD7_bit;
sbit Cfg_Sw1_Direction at TRISD6_bit;
sbit Cfg_Sw2_Direction at TRISD7_bit;
sbit OUT_ at RB0_bit;
sbit RDY_CLK at RB1_bit;
sbit SHD at RB2_bit;
sbit MOD_ at RB3_bit;
sbit OUT_Direction at TRISB0_bit;
sbit RDY_CLK_Direction at TRISB1_bit;
sbit SHD_Direction at TRISB2_bit;
sbit MOD_Direction at TRISB3_bit;
char Rele1_RFid[8];
char Rele2_RFid[8];
char code_error;
//******************************************************************************
// Interrupção
void Interrupt() {
RFid_Interrupt_Proc();
}
//******************************************************************************
// Rotinas Auxiliares
void Pause(){
Delay_ms(250); // Pausa
}
void Beep(){
Sound_Play(880, 250); // Toca som a 880Hz por 250ms
}
void Beep100ms(){
Sound_Play(880, 100); // Toca som a 880Hz por 100ms
}
void Beep3x(){
Beep();
Pause();
Beep();
Pause();
Beep();
Pause();
}
void Beep1seg(){
Sound_Play(880, 1000); // Toca som a 880Hz por 1 seg
}
void Beep_error(){
Sound_Play(880, 20);
Sound_Play(600,30);
Sound_Play(880, 20);
}
//******************************************************************************
//Rotina Principal
void main() {
ADCON1 = 0x0F; // Todos os pinos como IO digital
CMCON = 7; // Desabilita os comparadores de tensão
Rele1 = 0;
Rele2 = 0;
Rele1_Direction = 0;
Rele2_Direction = 0;
Cfg_Sw1_Direction = 1;
Cfg_Sw2_Direction = 1;
RFid_Init(); // Inicia a placa RFid
Sound_Init(&PORTE, 0); // Configuração do buzzer
if (Cfg_Sw1 || Cfg_Sw2){ // Caso a chave de configuração de um dos reles estiver pressionada...
Beep3x();
if (Cfg_Sw1){ // Grava cartão referente ao rele 1
Rele1 = 1;
Delay_ms(500);
RFid_GetID();
RFid_Store_ID2EEPROM(0x00);
Rele1 = 0;
Beep();
}
if (Cfg_Sw2){ // Grava cartão referente ao rele 2
Rele2 = 1;
Delay_ms(500);
RFid_GetID();
RFid_Store_ID2EEPROM(0x08);
Rele2 = 0;
Beep();
}
Delay_ms(2000);
Beep1seg();
// Sai do modo de configuração
}
else
{
// Inicio de RFid scanning e controle de reles
Beep1seg();
RFid_LoadFromEEPROM(0x00, Rele1_RFid); // Busca cartões cadastrados no EEPROM
RFid_LoadFromEEPROM(0x08, Rele2_RFid);
while (1){
RFid_GetID(); // Retorna RFid
Beep100ms();
code_error = 1;
// Checa se o código retornado confere com algum código gravado na EEPROM
// Caso positivo, aciona o rele correspondente por 2 segundos
if(RFid_Check_ID(Rele1_RFid)){
Rele1 = 1;
code_error = 0;
}
if(RFid_Check_ID(Rele2_RFid)){
Rele2 = 1;
code_error = 0;
}
//
if (code_error) { // Se o código retornado não confere com algum código gravado na EEPROM, indica erro!!!
Pause();
Beep_error();
Pause();
}
else{
Delay_ms(2000);
Rele1 = 0; // Desliga o rele, após 2 segundos de retenção.
Rele2 = 0;
}
}
}
}
JL Audio Manutenção Eletrônica
Data: 09/2011
Autor: Jean Carlos
Projeto: RFid LOCK
Microprocessador: PIC18F4550
Clock do processador: 48MHz
Estação de desenvolvimento: PK2Lab
Compilador: MikroC V4.60.0.0
Versão atual: 1.0
Descrição:
Este programa demosntra o uso da placa de RFid da
empresa mikroE, atráves de dois cartões cadastrados
temos o acionamento de dois reles da placa PK2Lab.
Para efetuar o cadastro do cartão referente ao Rele 1
pressione a tecla RD6, e efetue um resete na placa,
para o rele 2, pressione a chave RD7.
Ao se aproximar do sensor um cartão não cadastrado
é gerado um aviso sonoro de erro.
Placa RFid: mE RFid Reader Board
http://www.mikroe.com/eng/products/view/185/rfid-reader-board/
ac:RFid_Board
PK2Lab Placa de desenvolvimento PK2Lab
http://pk2lab.blogspot.com
ac:PK2Lab
Software: mikroC PRO for PIC
http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/
* NOTAS:
- mE RFid Reader deve ser conectada ao PORTB
- Jumper em VCC para chaves TACT
- Chaves de pull-down em RD6 e RD7
- O Clock do processador deve ser maior ou igual a 32Mhz (RFid)
*******************************************************************************/
// Inclusão do Driver do leitor RFid (RFid_Driver.h e RFid_Driver.c)
#include "RFid_driver.h"
//******************************************************************************
// Variáveis Globais
sbit Rele1 at RE1_bit;
sbit Rele2 at RE2_bit;
sbit Rele1_Direction at TRISE1_bit;
sbit Rele2_Direction at TRISE2_bit;
sbit Cfg_Sw1 at RD6_bit;
sbit Cfg_Sw2 at RD7_bit;
sbit Cfg_Sw1_Direction at TRISD6_bit;
sbit Cfg_Sw2_Direction at TRISD7_bit;
sbit OUT_ at RB0_bit;
sbit RDY_CLK at RB1_bit;
sbit SHD at RB2_bit;
sbit MOD_ at RB3_bit;
sbit OUT_Direction at TRISB0_bit;
sbit RDY_CLK_Direction at TRISB1_bit;
sbit SHD_Direction at TRISB2_bit;
sbit MOD_Direction at TRISB3_bit;
char Rele1_RFid[8];
char Rele2_RFid[8];
char code_error;
//******************************************************************************
// Interrupção
void Interrupt() {
RFid_Interrupt_Proc();
}
//******************************************************************************
// Rotinas Auxiliares
void Pause(){
Delay_ms(250); // Pausa
}
void Beep(){
Sound_Play(880, 250); // Toca som a 880Hz por 250ms
}
void Beep100ms(){
Sound_Play(880, 100); // Toca som a 880Hz por 100ms
}
void Beep3x(){
Beep();
Pause();
Beep();
Pause();
Beep();
Pause();
}
void Beep1seg(){
Sound_Play(880, 1000); // Toca som a 880Hz por 1 seg
}
void Beep_error(){
Sound_Play(880, 20);
Sound_Play(600,30);
Sound_Play(880, 20);
}
//******************************************************************************
//Rotina Principal
void main() {
ADCON1 = 0x0F; // Todos os pinos como IO digital
CMCON = 7; // Desabilita os comparadores de tensão
Rele1 = 0;
Rele2 = 0;
Rele1_Direction = 0;
Rele2_Direction = 0;
Cfg_Sw1_Direction = 1;
Cfg_Sw2_Direction = 1;
RFid_Init(); // Inicia a placa RFid
Sound_Init(&PORTE, 0); // Configuração do buzzer
if (Cfg_Sw1 || Cfg_Sw2){ // Caso a chave de configuração de um dos reles estiver pressionada...
Beep3x();
if (Cfg_Sw1){ // Grava cartão referente ao rele 1
Rele1 = 1;
Delay_ms(500);
RFid_GetID();
RFid_Store_ID2EEPROM(0x00);
Rele1 = 0;
Beep();
}
if (Cfg_Sw2){ // Grava cartão referente ao rele 2
Rele2 = 1;
Delay_ms(500);
RFid_GetID();
RFid_Store_ID2EEPROM(0x08);
Rele2 = 0;
Beep();
}
Delay_ms(2000);
Beep1seg();
// Sai do modo de configuração
}
else
{
// Inicio de RFid scanning e controle de reles
Beep1seg();
RFid_LoadFromEEPROM(0x00, Rele1_RFid); // Busca cartões cadastrados no EEPROM
RFid_LoadFromEEPROM(0x08, Rele2_RFid);
while (1){
RFid_GetID(); // Retorna RFid
Beep100ms();
code_error = 1;
// Checa se o código retornado confere com algum código gravado na EEPROM
// Caso positivo, aciona o rele correspondente por 2 segundos
if(RFid_Check_ID(Rele1_RFid)){
Rele1 = 1;
code_error = 0;
}
if(RFid_Check_ID(Rele2_RFid)){
Rele2 = 1;
code_error = 0;
}
//
if (code_error) { // Se o código retornado não confere com algum código gravado na EEPROM, indica erro!!!
Pause();
Beep_error();
Pause();
}
else{
Delay_ms(2000);
Rele1 = 0; // Desliga o rele, após 2 segundos de retenção.
Rele2 = 0;
}
}
}
}
//******************************************************************************
Arquivos para download:
Grande abraço a todos, e até a próxima!!!