A.RomainG PalareffNicolas DAILLYfcaron
Published

LoRaChecks

Revolutionize student attendance management with our seamless and intuitive RFID system, enabling automatic recording through simple swiping

IntermediateShowcase (no instructions)59
LoRaChecks

Things used in this project

Hardware components

Arduino Leonardo
Arduino Leonardo
×1
Arduino MKR WAN 1310
Arduino MKR WAN 1310
×1
LED (generic)
LED (generic)
×3
RFID reader (generic)
×1
Resistor 1k ohm
Resistor 1k ohm
×3
USB Cable, Mini USB Type B Plug
USB Cable, Mini USB Type B Plug
×2

Software apps and online services

Fusion 360
Autodesk Fusion 360
3D Design
Arduino IDE
Arduino IDE
Main program
Node-RED
Node-RED
To link our datas with our DB
The Things Stack
The Things Industries The Things Stack
SQL mariaDB
For the database

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)

Story

Read more

Custom parts and enclosures

Face avant

Face arrière

Schematics

Schéma électrique

Code

EnvoieRFID_To_Arduino.ino

Arduino
#include <SPI.h>
#include <RFID.h>

RFID RFID(10, 13); // Initialise l'objet RFID avec les broches 10 (SS) et 13 (RST)

void setup() {
  Serial.begin(9600);  // Initialise la communication serie pour le debogage
  Serial1.begin(9600); // Initialise la communication serie pour envoyer les donnees a la MKR WAN 1310
  SPI.begin(); // Initialise la communication SPI
  RFID.init(); // Initialise le lecteur RFID

  pinMode(4, OUTPUT); // Configure la broche 4 en tant que sortie pour la LED Jaune
}

void loop() {
  digitalWrite(4, HIGH); // Allume la LED Jaune
  if (RFID.isCard()) { // Verifie si une carte RFID est detectee
    if (RFID.readCardSerial()) { // Lit les donnees de la carte RFID
      int UID[5];

      // Lecture de l'UID RFID
      Serial.print("ID de la carte RFID : ");
      for (int i = 0; i < 5; i++) {
        UID[i] = RFID.serNum[i];
        Serial.print(UID[i], HEX); 
        Serial.print(".");
      }
      Serial.println();

        digitalWrite(4, LOW); // eteint la LED Jaune

        // Envoi de l'UID RFID via Serial1 (vers la MKR WAN 1310)
        Serial.println("Envoi de l'UID RFID...");
        for (int i = 0; i < 5; i++) {
          Serial1.write(UID[i]);
        }
        if (Serial1.availableForWrite() > 0) { // Verifie si la communication serie est prete a ecrire
          Serial.println("UID RFID envoye.");
        } else {
          Serial.println("Erreur lors de l'envoi de l'UID RFID.");
        }

        // Attente avant d'eteindre la LED
        delay(1000);
      
      RFID.halt(); // Met fin a la communication avec la carte RFID
    }
  }

  delay(350); // Attente courte pour eviter une boucle trop rapide
  digitalWrite(4, HIGH); // Allume la LED Jaune
}

EnvoieRFID_Via_LoRa.ino

Arduino
#include <SPI.h>
#include <MKRWAN.h>

LoRaModem modem;

const char *appEui = "2121568532320524"; // Identifiant de l'application LoRa
const char *appKey = "4F262F0399FEBCDB45EFD01E29A208A2"; // Cle d'application LoRa

void setup() {
  Serial.begin(9600); // Initialise la communication serie pour le debogage
  Serial1.begin(9600); // Initialise la communication serie pour recevoir les donnees de l'UID RFID

  pinMode(4, OUTPUT); // Configure la broche 4 en tant que sortie pour la LED Verte
  pinMode(5, OUTPUT); // Configure la broche 5 en tant que sortie pour la LED Rouge

  while (!Serial); // Attend que la communication serie soit disponible
  if (!modem.begin(EU868)) { // Initialise le modem LoRa pour la frequence EU868
    Serial.println("Failed to start module"); 
    while (1) {} // Boucle infinie si l'initialisation echoue
  }

  if (!modem.joinOTAA(appEui, appKey)) { // Rejoint le reseau LoRa via OTAA
    Serial.println("OTAA join failed, check your keys"); // Affiche un message en cas d'echec
    while (1) {} // Boucle infinie si la connexion echoue
  }

  Serial.println("Ready to send RFID data over LoRa!"); 
}

void loop() {
  digitalWrite(4, LOW); // eteint la LED Verte
  digitalWrite(5, LOW); // eteint la LED Rouge
  if (Serial1.available() >= 5) { // Verifie s'il y a des donnees disponibles sur la communication serie
    byte incomingData[5];
    Serial1.readBytes(incomingData, 5); // Lit les donnees RFID entrantes

    Serial.print("RFID Message Received (hex): "); 
    for (int i = 0; i < 5; i++) {
      Serial.print(incomingData[i], HEX); // Affiche l'UID RFID en format hexadecimal
      Serial.print(".");
    }
    Serial.println("");

    // Envoi des donnees RFID via LoRa
    int err;
    modem.setPort(3); // Definit le port LoRa a utiliser
    modem.beginPacket();
    for (int i = 0; i < 5; i++) {
      modem.write(incomingData[i]); // Envoie chaque octet de l'UID RFID
    }
    err = modem.endPacket(true); // Termine l'envoi des donnees LoRa
    if (err > 0) {
      Serial.println("RFID Message sent correctly over LoRa!");
      digitalWrite(4, HIGH); // Allume la LED Verte
      delay(1000); // Attend un certain temps
    } else {
      Serial.println("Error sending RFID Message over LoRa :("); 
      digitalWrite(5, HIGH); // Allume la LED Rouge
      delay(1000); // Attend un certain temps
      return;
    }
    
  }
}

Credits

A.Romain

A.Romain

1 project • 1 follower
G Palareff

G Palareff

1 project • 1 follower
Nicolas DAILLY

Nicolas DAILLY

28 projects • 16 followers
Associated Professor at UniLaSalle - Amiens / Head of the Computer Network Department / Teach Computer and Telecommunication Networks
fcaron

fcaron

12 projects • 1 follower

Comments