NFC Tag aber andersrum

Hallo zusammen,

ich würde gerne eine Bestätigungsanzeige für das Scannen eines NFC-Tags basteln und würde mich über Anregungen freuen.

Folgende Ausgangslage:
Unsere Mitarbeiter haben eine App zur Zeiterfassung auf ihrem Smartphone.
Wollen sie sich ausloggen halten sie ihr Smartphone an einen fest angebrachten NFC Tag (NTag213). Normalerweise ist das ja andersrum -> man hält seinen persönlichen Tag an ein Lesegerät.
Damit man nicht vergisst sich wieder einzuloggen würde ich gerne eine Art Ampel bauen.

Meine Idee wäre Folgende:
Weil ich auf die Programmierung der Zeiterfassungsapp keinen Einfluss habe und auch keine Zugangskontrolle damit verbunden ist würde es schon reichen wenn ich einfach per Arduino checke ob sich ein beliebiges NFC-fähiges Gerät in der Nähe des fest installierten Tags befindet. Über ein Arduino Nano könnte ich ja dann LEDs schalten o.ä.
Ich habe hier ein PN532 Modul rumliegen, jetzt wäre noch die Frage ob ich das Modul irgendwie als Tag-Emulator nutzen kann weil ich ein bisschen befürchte, dass der Platz für Tag und Modul zu groß wird und keine saubere Erfassung erfolgt.
Es muss sonst nichts weiter geschehen, kein Logging, o.ä. die Prozedur ist einfach nur: wurde der Tag gescannt bzw wurde ein NFC-Gerät an den Tag gehalten? -> ja: grünes Licht -> nein: rotes Licht

Ich freue mich über jede Anregung :slight_smile:

wie willst du denn das anstellen?

wenn du versuchst die Arbeitszeit von Zuhause ab/anzumelden, man könnte den NFC-Tag kopieren, aber da du kein Einfluss auf App-Programmierung hast, kannst du nicht sicher sein dass Handy Position nicht mitgeschrieben ist/wird, um genau solche Aktionen zu vermeiden.

Sicher nicht.

Du könntest mit dem installierten Tag kommunizieren und hoffen, dass der Versuch eines anderen Geräts, den Kontakt auch herzustellen, stört. Dann natürlich selber aufhören, grün anzeigen und nach einiger Zeit wieder Kontakt mit dem Tag aufnehmen ?

Kann aber auch andersrum gehen und dein Modul verhindert, dass die eigentlich gewollte Aktion weiter funktioniert. Wenn ich für die Zeiterfassungs-App auf dem Handy zuständig wäre, würde ich deins als Sabotage ansehen :slight_smile:

Vielen Dank für eure Rückmeldungen.

Das ganze soll nicht zum Betuppen dienen, sonst könnte ich ja einfach den Tag kopieren.
Bzw. habe ich das schon gemacht um damit testen zu können :slight_smile:
Das Personalbüro weiss natürlich bescheid und ich habe einen Testaccount bekommen.

Wie will ich das anstellen... die Frage wäre ja ob es eine Möglichkeit gibt, dass das PN532 Modul einfach dem Arduino melden kann "Achtung hier ist ein NFC-Gerät gegengehalten worden"
Also nicht bei nur fest vorgegebenen IDs, sonder einfach bei jedem x-beliebigen Gerät auslöst.

Ich hatte auch schon überlegt einfach mit einem Näherungssensor wie dem HC-SR04 zu arbeiten und das Erfassen nur "vorzugaukeln".
Da war mein Gedankengang, dass ich den Sensor zuerst für eine "weite" Detektion nutze, also MA kommt zur Tür rein, das rote Licht geht an und dann bei einem Abstand zum NFC-Tag unter z.B. 5cm auf grün geschaltet wird. Anschließend wenn MA wieder außerhalb dieser Range auf rot.
Da sehe ich aber viele Fehlerquellen, ähnlich wie bei Michaels Vorschlag.

Das PN532 Modul funktioniert mit allen RFID und NFC Chips vom Typ 1 bis 4 sowie mit NXP MiFare Tags. Mit diesem Modul können Sie im NFC Modus einen NFC-Tag simulieren und mit einem NFC-fähigen Smartphone auslesen. Über DIP-Schalter auf dem Board können Sie das Kommunikationsprotokoll einstellen.

1 Like

Ich weiss nicht ob das so klappen würde. Ich möchte ja den Tag simulieren und gleichzeitig ein Ereignis auslösen wenn dieser Tag gescannt wird.

Edit: ach ja, es wird auch keinerlei Prüfroutine gebraucht à la "ist der MA überhaupt ausgestempelt".
Einfach nur "NFC-Device am Tag bzw. dem Reader daneben?" -> Aktion per Arduino
Da scheint echt die Näherungssensor-Variante am naheliegendsten zu sein, wenn mal eine Buchung nicht getrackt wird ist das halt persönliches Pech :wink:

Probieren geht über ...
Wenn fest angebrachten Tag durch NFC Modul ersetzt ist, wurde Modul wahrscheinlich wissen wenn es ausgelesen ist, ob Arduino es auch mitbekommt...
Aber was ist wenn jemand mit einem mobilen NFC-Auslesegerät kommt, wird er dann auch mit grünem Licht rein gelassen?

Wie gesagt soll es nur als Reminder dienen, kein Tracking, keine Zugangskontrolle, o.ä.

Also sollte die Zusatzelektronik nur anzeigen daß "gestempelt" wurde.
Zeigt das die App nicht an?

Grüße Uwe

Funktionieren solche Tags nicht nach dem Prinzip "wenn scanner in Reichweite, liefert dieser den Strom für den Tag" ? Warum also irgendwas mit einem PN532 versuchen? Ich würde mir da eher eine Möglichkeit überlegen, wie festzustellen ist, wann der Tag bestromt ist. Weil wenn Strom da, muss ja irgendwas mit dem Tag agieren.

Mein Stand / Meine Versuche sind gut 5 Jahre alt:

Mit einem PN532 *) habe ich es nicht geschaft einen NFC Tag zu emulieren.
ABER mit einem RF430CL330H und einem Arduino (mit Levelshifter - der RF430 war 3V3) hat das gut funktioniert.
Der Tag hat sich nicht nur mit einer UID identifiziert sondern auch Daten an das Handy übermitteln können. Das hat für Android und Iphone funktioniert

Wird der emulierte NFC Tag gelesen, erkennt man das auch bzw. der Arduino kann drauf reagieren (z.B. eine LED einschalten).

if (nfc.wasRead()) {
      Serial.print(millis());
      Serial.print(F("ms Something has read the NFC device! "));
      Serial.println(readcounter);
      //Update for the next reader
      readcounter++;
      tag_update();
    }

Also wenn du deinen Aufbau so ändern kannst, dass nicht der jetzige Tag gelesen werden soll, sondern der RF430CL330H dann kann ich mir das vorstellen dass es klappt.

Was ich mir nicht vorstellen kann, das verlässlich läuft, dass der "originale" NFC Tag und der RF430CL330H gelesen werden soll. Mit zwei Targets im Lesefeld wird das ganze nur noch komplizierter.

*) pass bei den PN532 auf, viele sind gefälscht - die funktionieren dann sowieso nur halb ...

Auch eine interessante Variante. Klingt auf jeden Fall vielversprechend, ich werde mir mal ein Modul bestellen und dann testen sobald es da ist.

Ich habe mir jetzt erstmal anders geholfen und gaukel nur eine erfolgreiche Scannung vor.
Das mache ich mit einem HC-SR04, der zunächst ab einer Entfernung unter 140cm LEDs rot leuchten lässt, ab 80cm dann blau und wenn die Entfernung unter 10cm UND ein kapazitiver Touchsensor, der knapp unter dem RFID sitzt, auslöst switchen die LEDs auf grün.

Ich wollte das Ganze noch mit einem DS3231 koppeln, damit die LEDs nur leuchten wenn es dunkel ist, also DS3231 als Zeitschaltuhr. Es läuft nämlich alles über einen Akku.

Kann ich den Arduino dann eigentlich in den Sleep-Modus setzen oder führt er dann meine Sensorabfragen nicht mehr sauber aus wenn er wieder aufwacht?

#include <FastLED.h>
#define DATA_PIN            8
#define NUM_LEDS            6
#define LED_TYPE            WS2812B
#define COLOR_ORDER         GRB
CRGB leds[NUM_LEDS];

int TRIGGER=7;
int ECHO=6;
long DAUER=0;
long ENTFERNUNG=0;

const int SENSOR_PIN = 9; // kapazitiver Touch-Sensor an Pin 9 
int lastState = LOW;     
int currentState;        

void setup()

{

Serial.begin (9600);
pinMode(SENSOR_PIN, INPUT);
pinMode(TRIGGER, OUTPUT);
pinMode(ECHO, INPUT);

FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
}

void loop()

{
currentState = digitalRead(SENSOR_PIN);
digitalWrite(TRIGGER, LOW);
delay(5);
digitalWrite(TRIGGER, HIGH);
delay(10);
digitalWrite(TRIGGER, LOW);
DAUER = pulseIn(ECHO, HIGH);
ENTFERNUNG = (DAUER/2) * 0.03432;
if (ENTFERNUNG >= 500 || ENTFERNUNG <= 0) // Wenn Entfernung >500cm

{

Serial.println("zu weit Weg");

}

else

{

Serial.print(ENTFERNUNG);

Serial.println(" cm");

}
 
if (ENTFERNUNG <= 80 && lastState == LOW && currentState == HIGH) //Wenn der Wert für die ENTFERNUNG unter oder gleich 80 ist UND Sensor ausgelöst hat, dann... 
{
fill_solid(leds,NUM_LEDS,CRGB::DarkGreen);
  FastLED.show(); 
  lastState = currentState;
}

else  //Und wenn das nicht so ist... 

if (ENTFERNUNG <= 140)//Wenn der Wert für die ENTFERNUNG unter oder gleich 140 ist, dann... 
{
fill_solid(leds,NUM_LEDS,CRGB::Blue);
  FastLED.show(); 
  lastState = currentState;
}

else

{
fill_solid(leds,NUM_LEDS,CRGB::Red);
  FastLED.show();
  lastState = currentState;
}



delay(1000);
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.