Cofre de moedas com Sistema RFID
Arthur Miranda, Sávio Dias, Manuela Delboni

Introdução

Com o crescimento da utilização dos bancos como fonte de se guardar o dinheiro em poupança, o uso dos cofres domésticos está entrando cada vez mais em desuso. Além de não possuírem um sistema seguro e organizado de se manusear e de contar a quantidade exata de moedas que se possui, os chamados "cofrinhos" não apresentam mais tanta evolução tecnológica. Dessa forma, este trabalho tem o objetivo de mostrar a aplicação de um cofre manuseado pelo sistema RFID, o qual o usuário tem acesso à parte interna do cofre pelo meio do uso de um cartão ou chaveiro codificado, visando facilitar e aumentar a segurança de onde se guarda seus "trocados". Além disso, possui um sistema de contabilidade da quantidade exata de dinheiro, no qual quem o utiliza pode sempre ter controle do quanto quer adicionar ou retirar de moedas.

Montagem

Circuito

Programa Arduino

#include <deprecated.h>
#include <MFRC522.h>
#include <MFRC522Extended.h>
#include <require_cpp11.h>

#include <SPI.h>

#include <LiquidCrystal.h>

#define buzzer 16
#define door_lock 15
#define door_open 9
#define door_sens 14
#define SS_PIN 53
#define RST_PIN 5
#define umreal 17
#define cinquentacents 18
#define vintecincocents 19
#define dezcents 20
#define cincocents 21
#define reset 49
#define rele 10


LiquidCrystal disp(8, 7, 6, 4, 3, 2);
MFRC522 mfrc522(SS_PIN, RST_PIN);// Create MFRC522 instance.
float valor = 0;

void rfid_func();
char st[20];
void setup()
{
disp.begin(16,2);
pinMode(rele, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(door_lock, OUTPUT);
pinMode(door_open, OUTPUT);
pinMode (door_sens, INPUT_PULLUP);
pinMode(umreal, INPUT_PULLUP);
pinMode(cinquentacents, INPUT_PULLUP);
pinMode(vintecincocents, INPUT_PULLUP);
pinMode(dezcents, INPUT_PULLUP);
pinMode(cincocents, INPUT_PULLUP);
pinMode(reset, INPUT_PULLUP);

Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();

Serial.println("Coloque cartão");
Serial.println();

digitalWrite(door_lock, LOW);
digitalWrite(buzzer, LOW);

disp.setCursor(0,0);
disp.print("Passe o Cartao");
disp.setCursor(0,1);
disp.print("R$:");
disp.setCursor(3,1);
disp.print(valor,2);
}

void loop()
{
rfid_func();
while (digitalRead(door_open, HIGH)){
if (!digitalRead(umreal)){
um();
}
if (!digitalRead(cinquentacents)){
cinquenta();
}
if (!digitalRead(vintecincocents)){
vintecinco();
}
if (!digitalRead(dezcents)){
dez();
}
if (!digitalRead(cincocents)){
cinco();
}
if (!digitalRead(reset)){
res();
}
}
}
void res() {

valor = 0.00;
disp.setCursor(3,1);
disp.print(valor,2);
disp.setCursor(7,1);
disp.print(" ");
delay(300);
}
void um() {

valor = valor + 1;
disp.setCursor(3,1);
disp.print(valor,2);
delay(300);
}
void cinquenta() {

valor = valor + 0.50;
disp.setCursor(3,1);
disp.print(valor,2);
delay(300);
}
void vintecinco() {

valor = valor + 0.25;
disp.setCursor(3,1);
disp.print(valor,2);
delay(300);
}
void dez() {

valor = valor + 0.10;
disp.setCursor(3,1);
disp.print(valor,2);
delay(300);
}
void cinco() {

valor = valor + 0.05;
disp.setCursor(3,1);
disp.print(valor,2);
delay(300);
}


void rfid_func()
{
// Procura por cartao RFID
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Seleciona o cartao RFID
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Mostra UID na serial
Serial.print("UID da tag :");
String conteudo= "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}

Serial.println();
Serial.print("Mensagem : ");
conteudo.toUpperCase();



if (conteudo.substring(1) == "9A 74 23 D9")//UID 1 - Cartao
{
Serial.println("ABERTO");
Serial.println();

disp.setCursor(0,0);
disp.print("Acesso permitido");
digitalWrite(buzzer, HIGH);
delay(400);
digitalWrite(buzzer, LOW);
delay(500);
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
delay(500);
digitalWrite(rele, HIGH);
delay(3000);
digitalWrite(rele, LOW);
disp.setCursor(0,0);
disp.print("Cofre aberto ");
//digitalWrite(rele, HIGH);
//delay(3000);
//digitalWrite(rele, LOW);


while(digitalRead(door_sens)) digitalWrite(door_open,HIGH);
digitalWrite(door_open, LOW);
digitalWrite(buzzer, HIGH);
delay(500);
digitalWrite(buzzer, LOW);
delay(500);

disp.setCursor(0,0);
disp.print("Passe o Cartao ");
}


if (conteudo.substring(1) != "9A 74 23 D9")
{
Serial.println("Negado");
Serial.println();
disp.setCursor(0,0);
disp.print("Acesso NEGADO");
digitalWrite(buzzer, HIGH);
digitalWrite(door_lock, HIGH);
delay(1000);
digitalWrite(buzzer, LOW);
digitalWrite(door_lock, LOW);
delay(400);
digitalWrite(buzzer, HIGH);
digitalWrite(door_lock, HIGH);
delay(1000);
digitalWrite(buzzer, LOW);
digitalWrite(door_lock, LOW);
delay(400);


disp.setCursor(0,0);
disp.print("Tente novamente");
delay(1500);

disp.setCursor(0,0);
disp.print("Passe o Cartao ");

}
}

Conclusão

Sendo assim, este trabalho apresenta um modelo que se encaixa na alta tecnologia dos dias atuais, fornecendo um sistema seguro, simples e rápido para qualquer um que querer utilizá-lo sendo dentro de casa ou no trabalho.

Referências

SILVA, A. M. Introdução à Programação Orientada a Objetos Com C++.  Elsevier, 2010.



Administrado por: Epaminondas Lage