Projeto RFID+LCD+ETHERNET+RELÉ

Boa noite,

Estou com um projeto para monitorar o fluxo de tags via web e estou usando um arduino uno, um shield ethernet, um módulo relé e um módulo RFID da Sparkfun (ID-12).
Gostaria de uma ajuda por onde começo a procurar códigos exemplos.
Já procurei bastante, mas nada que seja específico!

Qualquer ajuda é válida.

Agradeço

Podes procurar no google ]:smiley:

Desculpe a brincadeira, mas "coisa específica" poderás não encontrar, mas é fácil encontrar para cada um das partes, então terás apenas que juntar tudo depois.

Na site da Sparkfun, desse produto, tem um link para um tutorial, podes começar por lá... :wink:

Dívidas ou problemas posta aqui...

Isto ajuda-te ?
Foi o meu entretem no sabado à tarde(esta a chover ...)

#define RX_PIN 2
#define TX_PIN 3
#define CARD_LENGH 14
#define PIN_RELAY A0

#include <SoftwareSerial.h>
#include <SPI.h>        
#include <Ethernet.h>
#include <EthernetUdp.h>  
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,20,4); 

char cardNumber[CARD_LENGH];
int relayState = 0;


byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 100, 3); 
unsigned int localPort = 8888;      
int packetSize=0;


char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; 
char  ReplyBuffer[] = "OK";       

EthernetUDP Udp;

SoftwareSerial rfidReader(RX_PIN, TX_PIN); // RX, TX

void setup()  
{
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("RFID CONTROLLER");
  Serial.begin(9600);
  rfidReader.begin(9600);
  lcd.setCursor(4,1);
  lcd.print("Passe Cartao");
  Serial.println("Passe Cartao");
  pinMode(PIN_RELAY,OUTPUT);
  
}

void loop()
{
  if(findCard())getCardID();
  int packetSize = Udp.parsePacket();
  if(packetSize)processUDPData();
}


boolean findCard()
{
   if (rfidReader.available()){
     unsigned char startByte = rfidReader.read();
     if (startByte == '%') return true;
     else return false;
   }
}

void getCardID()
{
  while(rfidReader.available() <=12){};
  for(uint8_t i = 0; i<= 12;i++)
  {
    cardNumber[i] = rfidReader.read();
  }
  if(cardNumber[12] == '?'){
  cardNumber[12] = '\0';
  Serial.println(cardNumber);
  lcd.setCursor(3,3);
  lcd.print(cardNumber);
  relayState = !relayState;
  digitalWrite(PIN_RELAY,relayState);
  Serial.println("Sending ID");
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(cardNumber);
    Udp.endPacket(); 
  }
  else Serial.println("Cartao Invalido");
}

void processUDPData()
{
    Serial.print("Ip do PC e:  ");
    IPAddress remote = Udp.remoteIP();
    for (int i =0; i < 4; i++)
    {
      Serial.print(remote[i], DEC);
      if (i < 3)
      {
        Serial.print(".");
      }
    }
    Serial.print(", na porta ");
    Serial.println(Udp.remotePort());

    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    Serial.println(packetBuffer);
 int digit = atoi(packetBuffer);
 if(digit == 1){Serial.print("Liga");digitalWrite(PIN_RELAY,0);}
 if(digit == 0){Serial.print("Desliga");digitalWrite(PIN_RELAY,1);} 
 Serial.println(digit);
 if (digit == '1')
    // send a reply, to the IP address and port that sent us the packet we received
    Serial.println("Sending");
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(ReplyBuffer);
    Udp.endPacket(); 
}

O desafio que me lançaram foi automatizar uma cancela de um parque de uma discoteca.O cliente VIP tem cartoes RFID que pode chegar a entrada da discoteca e passar o cartão na cancela.O arduino envia esse ID do cartao via sockect udp para o servidor da discoteca e ele lê na basedados se esta ou não autorizado a entrar.Se estiver ele envia para o arduino um 1 senao envia 0 e não abre a cancela(ira dar uma info no lcd inda nao implementado )
Em termos prova de conceito em breadboard esta a funcionar, necessita de corrigir umas cenas , mas o código que escrevi pode te dar uma luz para o que queres fazer.Estou a implementar tudo o que necessitas.(RFid Mifare , Lcd, Rele e ethernet shield)
O meu LCD é I2C para poupar no numero de fios, mas podes usar qualquer outro adaptando o codigo.
O código não esta terminado, comentado nem livre de falhas, sim porque as tem 8)
Para testares o socket UDP sacas isto:

Depois na aba UDP Client colocas o ip 192.168.100.3 na porta 8888 e fazes open
Sempre que passes um cartao no leitor devera aparecer no programa e se escreveres 1 e carregares em SEND o rele deve atracar
Enviando um 0 deve desligar
Como te disse retira a idea do meu codigo, nao me peças para eu o alterar para fazer isto ou aquilo pois nao o farei!
Apenas posso ajudar-te com duvidas que tenhas
Podes usa-lo como te der na telha ...

Quando eu for para Portugal já sei quem procurar para ir às discotecas com entrada VIP! lol