Mobiler RFID-Leser – ein Maker-Kit-Projekt mit Particle & Ubidots

In den letzten Jahren Ubidots Particle zusammengetan , um ein ultimatives Ziel zu erreichen; ermöglicht die schnelle, einfache und effiziente Erstellung von IoT -Lösungen.

Heute können wir mit Stolz sagen, dass IoT -Projekten auf globaler Ebene eingesetzt werden . Von Unternehmern und Start-ups bis hin zu großen und kleinen Unternehmen unterstützen wir Unternehmen bei der Gestaltung der datengesteuerten Zukunft.

Kürzlich Friedl der Herausforderung, ein IoT -Produkt von Grund auf zu entwickeln. Friedls Wissen zu diesem Thema war von Anfang an begrenzt. Dank der von ihm durchgeführten Recherchen – und vieler YouTube-Videos – wurde er jedoch sicherer, eine Vielzahl von Werkzeugen zu nutzen, um sein Ziel zu verwirklichen; Erstellen eines mobilen RFID-Lesegeräts, ohne ein IoT Experte zu sein.

Nachdem wir dieses erstaunliche Ergebnis erzielt hatten, nahmen wir Kontakt mit Friedl auf, um ihm zu seinem Erfolg zu gratulieren und aus seiner Leistung zu lernen. Wir wollten diese Geschichte auch mit der Ubidots -Community teilen, weil wir glauben, dass sie inspirierend ist und von der man lernen kann.

Angesichts dieser großartigen Erfolge werde ich mich in meinem Interview mit Friedls Entwicklungsprozess, den Techniken, mit denen er sein Ziel erreichte, und anderen wertvollen Lektionen befassen.

Der Originalbeitrag ist auf der Website der Particle Community zu finden . Ubidots geteilt .

Geschrieben von : friedl_1977

Als erstes Projekt wollte ich einen mobilen RFID-Leser bauen, der Live-Daten über Webhooks entweder an MySQL, Google Sheets oder Ubidots sendet.

Notiz:

Dies ist kein eigentliches Tutorial, sondern lediglich eine Präsentation des Produkts. Da mir das Particle-Forum sehr geholfen hat, habe ich beschlossen, meine Eagle-Dateien und meinen Code zu veröffentlichen, um sie jedem zur Verfügung zu stellen, der sie nutzen möchte.

Ich gehe davon aus, dass Sie über Grundkenntnisse der Particle-Umgebung und Web-Hooks verfügen und Ihr Konto und Ihre Geräte in Particle Console eingerichtet haben. Wenn nicht, tun Sie dies bitte, bevor Sie mit diesem Build beginnen.

Der Auftrag:

Aufbau eines wirklich drahtlosen (mobilen) RFID-Scanners mit dem Zweck, RFID-Karten zu scannen, die UIDs dieser Karten zu erfassen und sie entweder zu senden;

Stückliste:

  1. MFRC522 3 Kartenlesermodul
  2. 3,7 V LiPo 1 1100 mA Akku
  3. Batterieladung 1 Modul
  4. LM394N 1
  5. Reihe von 0603-LEDs für die Batterieanzeige
  6. 2 x RGB-LEDs für Systemstatus und Kartenlesestatus
  7. Teilchenphoton
  8. Schiebeschalter – Hauptstrom
  9. Neigungsschalter 1
  10. Kundenspezifische Leiterplatte (von PCBWAY oder ähnlich )
  11. Gehäuse nach Maß
  12. Verschiedene 0603-Widerstände
  13. Ferrit 2 !!!

Das Wichtigste zuerst:

Wenn Sie so sind wie ich, wird ein einfaches generisches Prototyp-Gehäuse nicht ausreichen, also habe ich mir ein wenig mehr Mühe gegeben, mich mit Rhinoceros vertraut gemacht und ein einfaches, aber dennoch elegantes (oder zumindest dachte ich das) elegantes Gehäuse entworfen, das zur Geltung kommt das Teilchenphoton und einige andere Komponenten.

Darüber hinaus habe ich mich entschieden, mich nicht für ein generisches Protoboard zu entscheiden, da ich Kabel absolut hasse. Ich habe ein Bild von meinem ersten Versuch beigefügt, eine „hübsche“ Platine aus Protoplatine und Überbrückungsdrähten zu bauen, aber nach ein paar Stunden wurde mir klar, dass das einfach nicht geht. Noch eine Lernkurve: Google habe ein paar Stunden auf YouTube verbracht und es geschafft, mich in Autodesk Eagle zurechtzufinden. Jede Minute wert.

***Das letzte Bild zeigt die vollständig zusammengebaute Platine mit der Status-LED, die „OK “ anzeigt, sowie den LM3914N in Aktion, der eine zu ±90 % geladene Batterie anzeigt. (7 von 8 LEDs)

Ich habe die Gerber-Dateien an PCBWAY und in weniger als einer Woche waren meine brandneuen kundenspezifischen Leiterplatten für die Montage bereit.

Das Wichtige:

Nun die Codierung, das ist der Teil, mit dem ich am meisten zu kämpfen habe, aber dank einiger hilfsbereiter Herren in den Particle- und Hackster-Foren habe ich mir den folgenden Code ausgedacht. Nun ist es wahrscheinlich nicht der sauberste Code, der jemals geschrieben wurde, aber er funktioniert. Sie können ihn also jederzeit verwenden und verbessern, wenn Sie möchten.

// Projekt: Mobiles RFID-Anwesenheitsregister // Ein Projekt von FireFli (PTY) LTD // Datum: Juli 2019 // Zusammengestellt von: Friedl Basson // Details: Nach UIDs von RFID-Karten scannen und über Webhooks an UbiDots und MySQL senden DB oder Google Sheets // Credits: Besonderer Dank geht an die Particle-Community für die Unterstützung und die Ermöglichung dieses Projekts! // Firmware: V2.1.1 //Systemmodus// – auskommentieren, wenn Sie WLAN über die Particle-App einrichten und nachträglich keine Verbindung zu einem anderen drahtlosen Netzwerk herstellen müssen //SYSTEM_MODE(SEMI_AUTOMATIC); // Diese #include-Anweisung wurde automatisch von der Particle-IDE hinzugefügt. #include "RFID.h" #include < Ubidots .h> /* Definieren Sie die Pins, die für die SS- (SDA) und RST-Pins (Reset) für SOWOHL Hardware- als auch Software-SPI verwendet werden */ #define SS_PIN A2 #define RST_PIN D2 /* Definieren Sie die Pins, die für die Pins DATA OUT (MOSI), DATA IN (MISO) und CLOCK (SCK) nur für SOFTWARE-SPI verwendet werden */ #define MOSI_PIN D3 #define MISO_PIN D4 #define SCK_PIN D5 //Initialisierung von RGB START – RGB-LED und Summer werden als Systemstatusanzeige verwendet int redPin = D6; int greenPin = D1; int bluePin = D0; int BuzzPin = D7; //Initialisierung von RGB END /* Erstellen Sie eine Instanz der RFID-Bibliothek */ #if definiert(_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 wird nur benötigt, wenn Sie nach der Ersteinrichtung eine Verbindung zu einem neuen WLAN-Netzwerk herstellen möchten. Dies funktioniert nur, wenn die aktuellen WLAN-Anmeldeinformationen gelöscht wurden. Der Code wird beim Start NUR EINMAL ausgeführt und legt die angegebenen neuen Anmeldeinformationen fest. Sobald neue Anmeldeinformationen festgelegt wurden, 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 Sie die HW-SPI-Schnittstelle */ SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV8); SPI.begin(); #endif /* RFID-Leser initialisieren */ RC522.init(); Verzögerung (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()) { /* Wenn ja, dann erhalte seine Seriennummer */ 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 Daten, die Sie PRIVAT oder ÖFFENTLICH veröffentlichen möchten */ // Particle.publish("RFID_WP", str, PRIVATE); //Daten in Wordpress DB veröffentlichen // Particle.publish("XLS", str, PRIVATE); // Daten in Google Sheets veröffentlichen Serial.print(str); /* Fügt Kontext-Schlüssel-Wert-Paare hinzu */ ubidots .addContext("UID", str); char* context = (char *) malloc(sizeof(char) * 60); /* Erstellt den Kontext mit dem Array oben, um ihn an Ubidots zu senden */ ubidots .getContext(context); ubidots .add("UID", 1, Kontext); // Änderung für Ihren Variablennamen bool bufferSent = false; bufferSent = ubidots .send(WEBHOOK_NAME, PUBLIC); // Wird Partikel-Webhooks verwenden, um Daten zu senden //} // - TRY Ubidots - // // digitalWrite(buzzPin, HIGH); Verzögerung (500); digitalWrite(buzzPin, LOW); digitalWrite(bluePin, LOW); Verzögerung (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); Verzögerung (1000); digitalWrite(bluePin, HIGH); digitalWrite(greenPin, HIGH); digitalWrite(redPin, LOW); digitalWrite(buzzPin, LOW); } Verzögerung(500); }

Frontends:

Dank der Webhook-Funktion in der Particle Console konnte ich den Code nahtlos an nahezu jedem Ort veröffentlichen. Wenn Sie PHP und MySQL recht gut kennen, können Sie vielleicht Ihr eigenes serverseitiges Skript schreiben, aber für diejenigen, die wie ich neu in diesem Bereich sind, würde ich die folgenden zwei Dienste empfehlen;

Da es große Unterschiede gibt, schauen Sie sich beide an, um herauszufinden, welches für Ihren Einsatz besser geeignet ist. Fazit: Wenn Sie möchten, dass die Daten live an einem Ort Ihrer Wahl veröffentlicht werden, ist Zapier (oder etwas Ähnliches) die richtige Wahl. Wenn es Ihnen nichts ausmacht, Daten auf dem Server einer anderen Person zu speichern, Ubidots eine viel kostengünstigere Lösung (Kosten pro Datenpunkt) und bietet den zusätzlichen Vorteil einiger praktischer Widgets zur grafischen Darstellung Ihrer Daten. Ich habe einen Screenshot eines Beispiel Dashboard das ich in Ubidots .

Im Nachhinein:

Anfangs dachte ich, dass es die beste Idee wäre, eine Batterieanzeige zu bauen, die außerhalb des Mikrocontrollers funktioniert, da sie unabhängig funktionieren würde und dringend benötigte digitale Pins freigibt, aber der Nachteil dabei ist, dass kein analoger Eingang an den MC gesendet wird , können Sie die Akkulaufzeit nicht auf einem dashboard anzeigen. Der LM3914N erfordert außerdem einige Berechnungen, um Referenzspiralen festzulegen und zu bestimmen, welche Widerstände je nach Spannungsunterschied zwischen „vollständig geladen“ und „entladen“ verwendet werden sollen. Bedenken Sie, dass Sie aus praktischen Gründen mit 3,1 V an der Batterie arbeiten sollten, da die Batterie leer ist, da die meisten Komponenten unter 3 V nicht mehr funktionieren oder sporadisch zu reagieren beginnen. Sechs davon, nehme ich an.

Ich würde den Neigungsschalter auch nicht erneut verwenden, um die Batterieanzeige auszulösen, da diese zu empfindlich ist und ein „Flackern“ verursacht. Ein einfacher taktiler Schalter scheint eine viel bessere Idee zu sein … nur eine Überlegung.

Ein Muss:

Die größte Lernkurve hier war für mich die Auswirkung jedes Metalls oder Schaltkreises und eines RFID-Lesegeräts. Ich habe die gesamte Einheit entworfen, gebaut und getestet, zunächst verbunden mit einem konstanten Netzteil. Aufgrund der kompakten Bauweise des Geräts wurde die Batterie in unmittelbarer Nähe zum RFID-Lesemodul installiert. Die Konsequenz…. Keine Scans 😲 Als vorübergehende Maßnahme habe ich die Batterie mit Isolierband umwickelt, was „ok“ funktioniert hat. Ich habe bei Amazon etwas Ferrit als Ave Maria bestellt und wie von Zauberhand gehörten die Störungen der Vergangenheit an.

Vielen Dank an alle, die das Projekt in irgendeiner Weise unterstützt haben, @ScruffR für das Verständnis, dass wir alle irgendwo anfangen mussten und für die extreme Geduld 🙂 Außerdem ein großes Dankeschön an @Joe von Particle für die tollen Maker Kits. Ich freue mich auf weitere Projekte!!!

Dateien:

Eagle-Schaltplan – DOWNLOAD

Eagle Board-Datei - DOWNLOAD


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

F/ Was hat Sie dazu bewogen, in das IoT Ökosystem einzusteigen?

A/ Ich war schon immer technikbegeistert und mein Wunsch, neue Dinge zu schaffen, passt perfekt in den IoT Bereich. Neue Dinge zu entwickeln, die das Leben verbessern können, ist das, was mir am meisten Spaß macht.

F/ Warum haben Sie viele Plattformen ausprobiert?

A/ Da ich ein völliger IoT Neuling bin und mich nicht besonders für das Programmieren interessiere, war ich auf der Suche nach einer benutzerfreundlichen Plattform, die im Vergleich zum Schreiben einer eigenen Plattform auch kosteneffizient ist. Ich habe festgestellt, dass die meisten Plattformen unter Berücksichtigung erfahrener Benutzer entwickelt wurden, was es für jemanden, der neu im IoT ist, sehr schwierig macht. Selbst einige erfahrene Benutzer könnten es als unnötig kompliziert empfinden, zu viel Zeit mit der Konfiguration des Systems zu verbringen. Da mein Fokus hauptsächlich auf der Entwicklung von Produkten, dem Produkt- und PCB-Design liegt, war es für mich unerlässlich, eine Lösung zu finden, die ich schnell verstehen und anwenden kann.

F/ Was haben Sie von jedem einzelnen gelernt?

A/ Die meisten Plattformen scheinen entmutigend zu erlernen und sehr teuer zu sein, wenn man nicht aufpasst. Niedrige Vorabkosten oder „kostenlose“ Versionen können Sie leicht dazu verleiten, das Produkt zu nutzen, aber sobald Sie mit dem Streamen von Live-Daten beginnen, wird es sich als recht teuer erweisen.

F/ Warum haben Sie sich für Ubidots entschieden?

A/ Ubidots erwies sich als das Beste aus beidem: leicht zu erlernen, recht kostengünstig und faire Datennutzungsrichtlinie. Darüber hinaus war der Support großartig! Die Benutzeroberfläche ist leicht zu verstehen und die Option zur benutzerdefinierten Beschriftung ist interessant, wenn auch etwas teuer.


Ich hoffe wirklich, dass diese Geschichte Sie dazu inspiriert, mit dem Aufbau und Tüfteln Ihrer eigenen unterschiedlichen IoT Ubidots , um Ihr Bestes zu geben, um Ihren Prozess zu ermöglichen.