NFC

Hallo :slight_smile:

Ich arbeite derzeit an einem Projekt für meine Universität (ich studiere E-Technik) mit dem Arduino. Dabei gibt es ein Modelleisenbahnsystem, dass mit Mifare Classic 1K Transpondern ausgestattet ist. Die Tags sind in die Gleise eingelassen, sodass der Zug diese mit einer NFC Antenne erregen und auslesen kann. Darüber erhält er Informationen zu seiner Position, Geschwindigkeit, der Signalstellung u.ä… Um die Tags auszulesen und zu beschreiben verwende ich das NFC Grove Shield (v1.0) (I2C Bus) von Seeedstudio sowie die im seeedwiki vorgegebenen libraries und Beispiele.

Das Problem ist, dass sich die Tags mit den Nutzdaten nur bis zu einer Geschwindigkeit des Zuges von < 0,1 m/s auslesen lassen. Bei höheren Geschwindigkeiten kann ich lediglich den UID auslesen. Dies funktioniert jedoch bis zu Geschwindigkeiten > 1 m/s. Meine Idee ist es nun nur einen der 16 Sektoren zu beschreiben und auch nur den einen Sektor auszulesen, da mir die 3 Blöcke eines Sektors an Daten ausreichen.

Jedoch weiß ich nicht, in wie weit ich die Libraries verändern kann/ muss, sodass ich nur jeweils einen Sektor beschreibe und auch nur den einen auslese.

Hat jemand von Euch vielleicht schon mit dem NFC Grove Shield gearbeitet und kann mir eine Hilfestellung oder einen Tip geben, wie ich mein Problem beseitigen kann?

Vielen Dank und ein schönes Wochenende
Sophie

Hallo,
einige Link´s zu den Komponenten und Lib´s wären für weitere Informationen ganz Hilfreich.
Für mich sieht es so aus, als wenn Du ein Zeit/ReichweitenProblem hast.

Ich habe von den Dingern keine Ahnung, aber wenn es 16 Sektoren gibt, die sich lesen und schreiben
lassen- das von einer Lib gesteuert wird, dann würde ich in der Lib mal nach einer Schleife suchen die
diese Sektoren zählt. Es sollte im Sketch auch möglich sein, einen bestimmten Sektor zu bearbeiten.
Gruß und Spaß
Andreas

Hallo Andreas, vielen Dank erstmal für deine Antwort!

Mein verwendetes Shield im seeed Wiki:
http://wiki.seeedstudio.com/wiki/Grove_-_NFC

Die verwendeten Libraries:

und:

Im Anhang habe ich noch das Layout des Speichers eines solchen MIFARE Classic 1k angehängt.

Ich versuche seit Tagen fieberhaft in den Libraries eine “Verteilung” bzw. Zuordnung der Bytes zu finden, jedoch ohne Erfolg.

Lieben Dank und Grüße
Sophie

Hallo,
da wirst Du hier mit mir nicht weiterkommen. Das ist bit&bytesSchieberei.
Die werden nicht über eine Schleife beschrieben. Du sprichst in den Dingern
eine bestimmte Adr an, an der dann die bit&bytes richtig gestzt werden müssen.

Für schreib, lese u.s.w. gibt es bestimmte Kommandos damit die Dinger wissen,
was sie tun sollen.
Das Layout des Speicher nützt Dir nichts, weil nicht bekannt ist, wie die
angesprochen werden.

Für das MIFARE Classic 1k sollte es eigentlich Datenblätter geben, in denen
genau beschrieben steht wie diese angesprochen werden.

Da das ganze Zeug´s Standart ist, wird es ein Übertragungsprotokoll geben.
Shield <-> MIFARE Classic 1k

Da würde ich erst einmal nachschauen, ob es überhaupt möglich ist- was Du Dir
denkst.

Das Shield ist mit dem Arduino über I2C verbunden, d.h. man braucht nicht
unbedingt eine Lib um dieses anzusprechen, ähnlich einer RTC:

Wire.beginTransmission(0x68);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(0x68, 7);
while(Wire.available())
{

Sekunde = Wire.read();
Minute = Wire.read();
Stunde = Wire.read();
WTag = Wire.read();
Tag = Wire.read();
Monat = Wire.read();
Jahr = Wire.read();

mehr braucht es eigentlich nicht zum lesen und schreiben.
Dafür benötigst Du aber ein ausführliches Datenblatt des Shield.
Um es kurz zu machen, zu viele Unbekannte- vergesse es!

Wenn ich es richtig verstanden habe, dann funktioniert Dein senden/empfangen
ja.
Nehme doch einmal die Zeit für einen Lese/Schreibzugriff als Anhalt. Sagen
wir einmal 10ms.
D.h. innerhalb dieser 10ms darf der Zug nicht ausser Reichweite des MCT kommen.
Innerhalb dieser 10ms darf der nächste MCT nicht angesprochen werden.
Damit kann man dann schon etwas anfangen.

Du könntest das Shield auch als RelaisStation nutzen. Z.B. 10cm vor dem ersten
MTC einen Kontakt in die Gleise. Wird dieser passiert, wird der Arduino scharf
geschaltet. Über einen IRQ wird nun in Reichweite des MCT die gewünschte
Funktion ausgeführt. Spart auch einige ms.
Mit trickreicher Hardware kommst Du weiter als mit unbekannter Software.
Gruß und Spaß
Andreas