Mobiler RFID -Leser - Ein Maker -Kit -Projekt mit Particle und Ubidots

In den letzten Jahren Ubidots Particle zusammengetan, um ein übergeordnetes Ziel zu erreichen: die schnelle, einfache und effiziente Erstellung von IoT Lösungen zu ermöglichen.

Heute können wir mit Stolz sagen, dass weltweit IoT eingesetzt werden . Von Unternehmern und Start-ups bis hin zu großen und kleinen Unternehmen – wir unterstützen Firmen dabei, die datengetriebene Zukunft zu gestalten.

Kürzlich Friedl die Herausforderung an, ein IoT Produkt von Grund auf zu entwickeln. Anfangs waren seine Kenntnisse edge diesem Gebiet begrenzt. Dank seiner Recherchen – und zahlreicher YouTube-Videos – gewann er jedoch das nötige Selbstvertrauen, verschiedene Tools einzusetzen, um sein Ziel zu erreichen: die Entwicklung eines mobilen RFID-Lesegeräts, ohne IoT Experte zu sein.

Nach diesem erstaunlichen Ergebnis haben wir uns mit Friedl in Verbindung gesetzt, um ihm zu seinem Erfolg zu gratulieren und von seinen Erfahrungen zu lernen. Wir wollten diese Geschichte auch mit der Ubidots Community teilen, da wir glauben, dass sie inspirierend ist und viele neue Erkenntnisse bietet.

Angesichts dieser großartigen Leistungen werde ich in meinem Interview Friedls Entwicklungsprozess, die Techniken, die er zur Erreichung seines Ziels einsetzte, und weitere wertvolle Erkenntnisse beleuchten.

Der Originalbeitrag ist auf der Particle Community . Friedl hat ihn freundlicherweise auch mit Ubidots .

Verfasst von : friedl_1977

Als erstes Projekt habe ich mir vorgenommen, einen mobilen RFID-Leser zu entwickeln, der Live-Daten über Webhooks an MySQL, Google Sheets oder Ubidots sendet.

Notiz:

Dies ist kein Tutorial im eigentlichen Sinne, sondern lediglich eine Produktpräsentation. Da ich im Particle Forum viel Hilfe erhalten habe, habe ich mich entschlossen, meine Eagle-Dateien und den Code zu veröffentlichen, um sie allen Interessierten zugänglich zu machen.

Ich gehe davon aus, dass Sie überedge der Particle Umgebung und Webhooks verfügen und Ihr Konto sowie Ihre Geräte in Particle Console eingerichtet haben. Falls nicht, holen Sie dies bitte nach, bevor Sie diesen Build durchführen.

Die Kurzbeschreibung:

Entwicklung eines wirklich drahtlosen (mobilen) RFID-Scanners zum Scannen von RFID-Karten, Erfassen der UIDs dieser Karten und deren Übermittlung an einen der folgenden Empfänger:

Materialliste:

  1. MFRC522 3- Kartenlesermodul
  2. 3,7V LiPo 1 1100mA Akku
  3. Batterielademodul 1
  4. LM394N 1
  5. Eine Gruppe von 0603-LEDs zur Batterieanzeige
  6. 2 RGB-LEDs für Systemstatus und Kartenlesestatus
  7. Particle Photon
  8. Schiebeschalter – Netzstrom
  9. Neigungsschalter 1
  10. Kundenspezifische Leiterplattenentwicklung (von PCBWAY oder einem ähnlichen Anbieter )
  11. Kundenspezifisches Gehäuse
  12. Verschiedene 0603-Widerstände
  13. Ferrit 2 !!!

Das Wichtigste zuerst:

Wenn Sie so denken wie ich, reicht Ihnen ein einfaches, generisches Prototypengehäuse nicht aus. Deshalb habe ich mir etwas mehr Mühe gegeben, mich mit Rhinoceros vertraut gemacht und ein einfaches, aber elegantes (oder zumindest dachte ich das) Gehäuse entworfen, das den Particle Photon und einige andere Komponenten präsentieren sollte.

Außerdem habe ich mich gegen eine Standard-Prototyping-Platine entschieden, da ich Kabel absolut hasse. Ich habe ein Bild meines ersten Versuchs beigefügt, mit einer Prototyping-Platine und Jumperkabeln eine „hübsche“ Platine zu bauen, aber nach ein paar Stunden wurde mir klar, dass das einfach nicht funktioniert. Wieder eine Lernkurve, also habe ich gegoogelt, ein paar Stunden auf YouTube verbracht und mich schließlich in Autodesk Eagle zurechtgefunden. Jede Minute hat sich gelohnt.

***Das letzte Bild zeigt die vollständig bestückte Leiterplatte mit der Status-LED, die „OK “ anzeigt, sowie den LM3914N in Aktion, der einen Ladezustand des Akkus von ca. 90 % anzeigt. (7 von 8 LEDs)

Ich habe die Gerber-Dateien an PCBWAY und in weniger als einer Woche hatte ich meine brandneuen, kundenspezifischen Leiterplatten bereit zur Montage.

Das Wichtigste:

Nun zum Programmieren – das ist der Teil, mit dem ich die größten Schwierigkeiten habe. Dank einiger hilfsbereiter Nutzer in den Foren Particle und Hackster habe ich aber den untenstehenden Code entwickelt. Er ist vielleicht nicht der eleganteste Code, aber er funktioniert. Ihr könnt ihn also gerne verwenden und verbessern.

// Projekt: Mobiles RFID-Anwesenheitsregister // Ein Projekt von FireFli (PTY) LTD // Datum: Juli 2019 // Zusammengestellt von: Friedl Basson // Details: Scannen von UIDs von RFID-Karten und Veröffentlichung per Webhooks an UbiDots, MySQL-Datenbank oder Google Sheets // Danksagung: Besonderer Dank gilt der Particle Community für ihre Unterstützung und die Ermöglichung dieses Projekts! // Firmware: V2.1.1 //Systemmodus// - Auskommentieren, wenn Sie WLAN über Particle -App einrichten und keine nachträgliche Verbindung zu einem anderen WLAN-Netzwerk benötigen. //SYSTEM_MODE(SEMI_AUTOMATIC); // Diese #include-Anweisung wurde automatisch von der Particle IDE hinzugefügt. #include "RFID.h" #include <Ubidots.h> /* Definiere die Pins für SS (SDA) und RST (Reset) für Hardware- und Software-SPI */ #define SS_PIN A2 #define RST_PIN D2 /* Definiere die Pins für DATA OUT (MOSI), DATA IN (MISO) und CLOCK (SCK) nur für Software-SPI */ #define MOSI_PIN D3 #define MISO_PIN D4 #define SCK_PIN D5 // Initialisiere RGB START - RGB-LED und Summer dienen als Systemstatusanzeige int redPin = D6; int greenPin = D1; int bluePin = D0; int buzzPin = D7; // RGB initialisieren END /* Eine Instanz der RFID-Bibliothek erstellen */ #if defined(_USE_SOFT_SPI_) RFID RC522(SS_PIN, RST_PIN, MOSI_PIN, MISO_PIN, SCK_PIN); // Software SPI #else RFID RC522(SS_PIN, RST_PIN); // Hardware SPI #endif //const char* WEBHOOK_NAME = "rfid_uid"; const char* WEBHOOK_NAME = "Ubidots"; Ubidots ubidots("webhook", UBI_PARTICLE); void setup() { Serial.begin(9600); // WiFi.listen(); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); pinMode(buzzPin, OUTPUT); // Anmeldeinformationen für neue WLAN-Verbindung festlegen /* Dieser Abschnitt ist nur erforderlich, wenn Sie sich nach der Ersteinrichtung mit einem neuen WLAN-Netzwerk verbinden möchten. Dies funktioniert nur, wenn die aktuellen WLAN-Anmeldeinformationen gelöscht wurden. Der Code wird nur einmal beim Start ausgeführt und legt die angegebenen neuen Anmeldeinformationen fest. Sobald die neuen Anmeldeinformationen festgelegt sind, wird dieser Code nicht erneut ausgeführt. */ WiFi.on(); if (!WiFi.hasCredentials()) { WiFi.setCredentials("SSID", "PASSWORD", WPA2, WLAN_CIPHER_AES); } WiFi.connect(); waitUntil(WiFi.ready); Particle.connect(); #if !defined(_USE_SOFT_SPI_) /* Aktivieren der HW-SPI-Schnittstelle */ SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV8); SPI.begin(); #endif /* RFID-Lesegerät initialisieren */ RC522.init(); delay(5000); digitalWrite(bluePin, HIGH); digitalWrite(greenPin, HIGH); digitalWrite(redPin, LOW); } void loop() { /* Temporärer Schleifenzähler */ uint8_t i; /* Wurde eine Karte erkannt? */ if (RC522.isCard()) { /* Falls ja, Seriennummer auslesen */ RC522.readCardSerial(); char str[16]; snprintf(str, sizeof(str) , "%02X %02X %02X %02X" , RC522.serNum[0] , RC522.serNum[1] , RC522.serNum[2] , RC522.serNum[3] ); // Webhooks// /* RFID_WP = Ihr Webhook-Name str = Ihre zu veröffentlichenden Daten PRIVAT oder ÖFFENTLICH */ // Particle("RFID_WP", str, PRIVATE); // Daten in der WordPress-Datenbank veröffentlichen // Particle("XLS", str, PRIVATE); // Daten in Google Sheets veröffentlichen Serial.print(str); /* Fügt Kontext-Schlüssel-Wert-Paare hinzu */ ubidots("UID", str); char* context = (char *) malloc(sizeof(char) * 60); /* Erstellt den Kontext mit dem obigen Array, der an Ubidots gesendet werden soll */ ubidots(context); ubidots("UID", 1, context); // Ändern Sie dies für Ihren Variablennamen bool bufferSent = false; bufferSent = ubidots(WEBHOOK_NAME, PUBLIC); // Nutzt particle Webhooks zum Senden von Daten //} // - TRY Ubidots - // // digitalWrite(buzzPin, HIGH); delay(500); digitalWrite(buzzPin, LOW); digitalWrite(bluePin, LOW); delay(750); digitalWrite(bluePin, HIGH); } else if (RC522.isCard()) { RC522.readCardSerial(); char str[16]; snprintf(str, sizeof(str) , "%02X %02X %02X %02X" , RC522.serNum[0] , RC522.serNum[1] , RC522.serNum[2] , RC522.serNum[3] ); digitalWrite(bluePin, LOW); digitalWrite(greenPin, LOW); digitalWrite(redPin, HIGH); // digitalWrite(buzzPin, HIGH); delay(1000); digitalWrite(bluePin, HIGH); digitalWrite(greenPin, HIGH); digitalWrite(redPin, LOW); digitalWrite(buzzPin, LOW); } delay(500); }

Frontends:

Dank der Webhook-Funktion in der Particle Console konnte ich den Code problemlos an nahezu jeden beliebigen Ort senden. Wer sich mit PHP und MySQL gut auskennt, kann natürlich auch ein eigenes serverseitiges Skript schreiben. Für alle, die wie ich noch nicht so viel Erfahrung damit haben, empfehle ich die folgenden beiden Dienste:

Sie unterscheiden sich erheblich, daher sollten Sie sich beide ansehen, um herauszufinden, welches System besser für Ihre Zwecke geeignet ist. Kurz gesagt: Wenn Sie die Daten live an einem Ort Ihrer Wahl veröffentlichen möchten, ist Zapier (oder ein ähnlicher Dienst) die beste Wahl. Wenn es Ihnen nichts ausmacht, die Daten auf einem externen Server zu speichern, Ubidots Dashboard beigefügt, das ich in Ubidots .

Im Nachhinein:

Anfangs dachte ich, der Bau einer Batterieanzeige außerhalb des Mikrocontrollers wäre die beste Lösung, da sie unabhängig funktionieren und dringend benötigte digitale Pins freigeben würde. Der Nachteil dabei ist jedoch, dass ohne ein analoges Eingangssignal an den Mikrocontroller die Batterielebensdauer nicht auf einem dashboardangezeigt werden kann. Der LM3914N erfordert außerdem Berechnungen zur Einstellung der Referenzspannungen und zur Bestimmung der passenden Widerstände in Abhängigkeit von der Spannungsdifferenz zwischen „voll geladen“ und „entladen“. Beachten Sie, dass Sie aus praktischen Gründen mit einer Batteriespannung von 3,1 V im entladenen Zustand arbeiten sollten, da die meisten Komponenten unter 3 V nicht funktionieren oder unregelmäßig reagieren. Im Endeffekt läuft es also auf dasselbe hinaus.

Ich würde den Neigungsschalter auch nicht mehr für die Batterieanzeige verwenden, da er zu empfindlich ist und ein Flackern verursacht. Ein einfacher Tastschalter wäre da deutlich besser… nur so eine Idee.

Ein Muss:

Die größte Herausforderung für mich war der Einfluss von Metall oder Schaltkreisen auf ein RFID-Lesegerät. Ich habe das gesamte Gerät zunächst an ein Netzteil angeschlossen und getestet. Aufgrund der kompakten Bauweise befand sich der Akku in unmittelbarer Nähe des RFID-Lesemoduls. Die Folge: Keine Scans 😲 Als provisorische Lösung umwickelte ich den Akku mit Isolierband, was einigermaßen funktionierte. Schließlich bestellte ich Ferritkerne bei Amazon – quasi als letzten Versuch – und wie durch Zauberhand war die Störung verschwunden.

Vielen Dank an alle, die in irgendeiner Weise zum Projekt beigetragen haben, an @ScruffR für sein Verständnis, dass wir alle irgendwo anfangen mussten, und für seine große Geduld 🙂 Ein riesiges Dankeschön geht auch an @Joe von Particle für die fantastischen Maker Kits. Ich freue mich schon auf weitere Projekte!!!

Dateien:

Eagle-Schaltplan - DOWNLOAD

Eagle Board Datei - DOWNLOAD


Großartig, oder? Und nun, wie versprochen... Hier finden Sie einige der Fragen, die Friedl freundlicherweise beantwortet hat.

F: Was hat Sie dazu bewogen, im IoT Ökosystem anzufangen?

A/ Ich habe mich schon immer für Technologie begeistert und mein Wunsch, Neues zu erschaffen, passt perfekt zum IoT Sektor. Die Entwicklung neuer Produkte, die das Leben verbessern können, ist das, was mir am meisten Freude bereitet.

F: Warum haben Sie so viele Plattformen ausprobiert?

Da ich im Bereich IoT völlig neu bin und Programmieren nicht besonders mag, suchte ich nach einer benutzerfreundlichen und kostengünstigen Plattform, anstatt selbst etwas zu entwickeln. Ich stellte fest, dass die meisten Plattformen für erfahrene Nutzer konzipiert waren, was es für IoTNeulinge sehr schwierig macht. Selbst erfahrene Nutzer verbringen mitunter viel Zeit mit der Konfiguration unnötig komplizierter Systeme. Da mein Schwerpunkt auf der Produktentwicklung, dem Produkt- und Leiterplattendesign liegt, war es unerlässlich, eine Lösung zu finden, die ich schnell verstehen und sofort einsetzen kann.

F: Was haben Sie von jedem einzelnen gelernt?

A/ Die meisten Plattformen wirken auf den ersten Blick kompliziert und sind sehr teuer, wenn man nicht aufpasst. Niedrige Anschaffungskosten oder „kostenlose“ Versionen verleiten zwar leicht zur Nutzung des Produkts, doch sobald man mit dem Streamen von Live-Daten beginnt, erweist es sich als recht kostspielig.

F: Warum haben Sie sich für Ubidotsentschieden?

A/ Ubidots erwies sich als die beste Lösung: leicht zu erlernen, recht kostengünstig und mit fairen Datenschutzrichtlinien. Hinzu kam ein hervorragender Support! Die Benutzeroberfläche ist intuitiv verständlich und die Option für benutzerdefinierte Labels ist interessant, wenn auch etwas teuer.


Ich hoffe sehr, dass diese Geschichte Sie dazu inspiriert, mit dem Bau und der Entwicklung eigener IoT Projekte zu beginnen, und noch besser: Wir hoffen, dass Sie Ubidots , um Ihre Bemühungen optimal zu unterstützen und Ihren Prozess zu ermöglichen.