RFID Sensor

Der RFID-Sensor bietet die Möglichkeit Signale eines bestimmten Tags zu erkennen. Diese Signale werden für die Öffnung der Tür des Briefkasten genutzt, wenn der erkannte Tag autorisiert ist.

Der verbaute MFRC522 RFID-Sensor nutzt das SPI-Interface des Wemos D1 Mini und benötigt daher sieben verschiedene Pins um alle nötigen Daten zu übertragen.
Die Schaltung muss, wie in Abb.1 zu sehen, verbunden werden, sodass der RFID-Sensor einwandfrei funktioniert.

Abb 1: RFID Schaltplan1

Im Programm wird zunächst überprüft, ob ein neuer RFID-Tag erkannt wird. Erkennt der RFID-Sensor einen neuen Tag, wird die Variable „ChipID” zurückgesetzt, um mögliche IDs aus vorherigen Erkennungen zu löschen.
Folgend wird die ID des neu ausgelesenen Tags in „ChipID” gespeichert und zur Erkennung in der Konsole ausgegeben.

 /* Nutzt RFID Sensor, um neu gelesenen Chip mit angegebener ChipID zu vergleichen.
   * Wenn der passende Chip gelesen wird, wird true zurueckgegeben, sonst false.
 */
  boolean RFIDDetected(){
    if (mfrc522.PICC_IsNewCardPresent()){
       //ChipID wird resettet
       chipID = 0;
       mfrc522.PICC_ReadCardSerial();
       
       // Neue ChipID in Variable laden
       for (byte i = 0; i < mfrc522.uid.size; i++){
         chipID=((chipID+mfrc522.uid.uidByte[i])*10);
       }
       Serial.println(chipID);


Nach dem Auslesen der ID wird diese mit einem, im Programmkopf festgelegten, Array „grantedChipIDs” verglichen. Dieses Array enthält alle IDs, die dazu berechtigt sein sollen, die Tür des Briefkasten zu öffnen.
Ist die neu ausgelesene „ChipID” in dem Array enthalten, wird der boolescher Wert „grant” auf „true” gesetzt.

 //gelesene ChipID mit allen erlaubten ChipIDs vergleichen
       boolean grant = false;
       for(int i = 0; i < sizeof(grantedChipIDs); i++){
         long tempChipID = grantedChipIDs[i];
         if(chipID == tempChipID){
           grant = true;
         }
       }

Im weiteren Verlauf wird „grant” genutzt, um als Rückgabevariable ein „true” oder „false” zurückzugeben. Ebenfalls wird in der Konsole eine Information zur Zulassung des Tags geschrieben.
Wird kein Chip erkannt, wird dies ebenfalls auf der Konsole wiedergegeben und der Wert „false” zurückgegeben.

//Je nach Ergebnis des Vergleichs wird true oder false zurueckgegeben
       if (grant){
         Serial.println("Zugang gewaehrt!");
         return true;
       } else {
         Serial.println("Chip hat keine Zugangsrechte!");
         return false;
       }
    } else {
      Serial.println("keinen Chip erkannt");
      return false;
    }
  }

In Abb.2 ist die Konsolenausgabe nach dem Erkennen eines zugelassenen Tags zu sehen.

Abb. 2: Konsole nach Erkennung eines zugelassenen Tags

1 MFRC522 RFID Reader am ESP8266 D1 Mini, 08.21.2020 makesmart.net/mfrc522-rfid-reader-esp8266-d1-mini/

Entwicklungsblog 7

Bei dem Andreas’ und Arthurs letzten Besuch im Makerspace wurden wir darauf hingewiesen, dass es zu Problemen kommen kann, wenn die Stromversorgung des Briefkastens abbricht, während er offen steht.
Da der Zustand der Tür bis zum diesem Zeitpunkt immer nur als Variable gespeichert wurde, wird dieser bei einem Neustart des Systems zurückgesetzt. In diesem Fall wäre es möglich die Tür nochmals zu öffnen, sodass sich die Tür überdreht.

Um das Problem zu lösen, haben wir die ESP_EEPROM Bibliothek genutzt. Sie ermöglicht es, Daten auf der Flash Memory zu speichern. Diese sind bei einem Systemneustart immer noch abrufbar.
So können wir den Stand der Tür immer wieder aufrufen und stellen sicher, dass die Tür nur einmal geöffnet oder geschlossen werden kann.

Mit dieser Ergänzung ist der Programmcode vollständig und wir müssen ihn nur noch bei unserem nächsten Treffen testen.

Zusammenbau des smarten Briefkastens

Der Zusammenbau erstreckte sich über mehrere Tage, wobei dies keine hintereinander folgende Tage waren. Dabei wurde neben dem Zusammenbauen der beiden Kästen auch die Elektronik und ihre Funktionsweisen getestet.

Zusammenbau der beiden Kästen

Bis auf die Schräge, die Säulen, den Plexiglastüren und der Elektronik besteht der smarte Briefkasten aus Holzplatten. Bei den Holzplatten handelt es sich um Bastel-Sperrholz Platten, die 420 mm lang, 297 mm breit und 4 mm dick sind. Zum Ausschneiden der Holzplatten wurde der von Anatolij Fandrich zur Verfügung gestellte Makeblock Laserbox Pro verwendet. Die Schräge und die Säulen wurden mit jeweils mit einem 3D-Drucker gedruckt.

Zuerst wurde der Unterkasten gefertigt. Danach der Oberkasten. Die meisten Steckverbindungen lagen lose ineinander, sodass alle Holzplatten mit Holzleim geklebt wurden. Dazu gehören auch die Teile für die Motor- und Kugellagerhalterungen.

Bei dem Unterkasten wurden zuerst jeweils zwei Seitenwänden aneinandergeklebt. Dann wurden die Seitenwänden mit dem Boden des Unterkastens geklebt. Darauf folgte die Befestigung der Motorhalterungen und das Aneinanderkleben der zwei Holzplatten für den Deckel. Durch die quadratischen Bohrungen in den beiden Platten des Deckels und dem Holzpin, konnten die beiden Platten möglichst genau verleimt werden. Beim Kleben wurden die Platten so übereinandergelegt, dass die beide Bohrungen aufeinander waren. Gleichzeitig wurde der Holzpin mit hineingeklebt.

Abb.1: Unterkasten ohne Deckel

Die Abb.1 zeigt den zusammengebauten Unterkasten ohne Deckel, mit den hineingelegten Motoren und einem Tastschalter. Die Abb.2 zeigt den Unterkasten inklusive des Deckels. Wie es in den Blogeinträgen zur Modellierung bereits beschrieben wurde, ragen die Pins von den Motoren in den Oberkasten hinein. Die Motoren selbst jedoch befinden sich im Unterkasten.

Abb.2: Unterkasten mit Deckel

Beim Zusammenbauen des Oberkastens wurde zuerst die Schräge auf den Boden des Oberkastens eingebaut. Dabei wurde statt Holzleim Sekundenkleber verwendet, damit die Schräge auch wirklich haftet. Daraufhin wurde die Vorderseite des Oberkastens geklebt. Beim Kleben der Vorderseite wurde Sekundenkleber und Holzleim verwendet. Dabei wurde der Sekundenkleber auf die Seitenwand der Schräge und der Holzleim auf die Holz-Steckverbindungen der Bodenplatten verteilt. Durch die bereits befestigte Schräge wurde die Anbringung der Vorderseite einfacher. In Abb.3 sieht man wie die Bodenplatte, die Schräge und die Vorderseite miteinander verklebt sind.

Abb.3: Anfang des Zusammenbaus des Oberkastens

Als Nächstes folgte dann die Klebung der Seitenwände neben der Vorderseite des Oberkastens. Beim Kleben der Seitenwände hat man den Kasten auf die Seite gelegt. Dadurch kommt etwas Gewicht auf die Holzplatten, sodass die Seitenwände am Ende richtig befestigt sind. Das Kleben der beiden Holzplatten für die Rückwand entsprach das Kleben des Deckels des Unterkastens. Der einzige Unterschied war die Plattengröße.

Abb.4: Verbindungsstelle zwischen Unter- und Oberkasten

Der Deckel des Unterkastens wurde mit dem Boden des Unterkastens verklebt. Beim Aufeinanderlegen der beiden Kästen mit den Motoren ist leider festzustellen, dass der Oberkasten eine längere Seitenmaße hatte und dass die Motoren etwas zu weit aus dem Unterkasten hinausragen. Das bedeutet, dass die beiden Kästen nicht perfekt übereinander liegen. Die Vorderseite des Oberkastens sitzt nicht ganz auf dem Unterkasten und ragt dazu etwas über den Rand des Unterkastens hinaus. Daher wurde beim Verleimen nur ein Teil der Flächen mit Leim versehen. Beobachten lässt sich dies in Abb.5 und Abb.6. In Abb.4 kann man sehen, dass der Deckel des Unterkastens nicht ganz auf dem Unterkasten liegt. Wie erwähnt gibt es einen Konstruktionsfehler, bei dem die Motoren etwas zu weit nach oben ragen. Da der Deckel des Unterkastens mit dem Boden des Oberkastens verleimt ist, liegt der Deckel des Unterkastens nicht richtig auf dem Unterkasten.

Schließlich wurde die Decke des Oberkastens geklebt. An der Decke wurden zuvor die Kugellagerhalterungen verleimt und jedes Kugellager jeweils mit einem 608 ZZ Kugellager gefüllt, sodass man beim Einbauen der Säulen nur die Pins der Säulen in die Kugellagerhalterungen hineinstecken kann. In Abb.5 und Abb.6 sieht man die beiden zusammengeklebten Kästen aus zwei Perspektiven. Die Rückwand des Oberkastens ist nicht verleimt. Sie wird einfach an der Oberkasten gesteckt.

Abb.5: Die beiden Kästen aus der vorderen Perspektive
Abb.6: Die beiden Kästen aus der hinteren Perspektive

Die beiden Säulen sind jeweils aus drei Teilen zusammengebaut. Die 3 mm dicken Plexiglasplatten passten nicht in die Einkerbungen. Daher mussten die Säulen mit Pfeilen etwas nachbearbeitet werden. Anschließend wurden die jeweils drei Teile der Säulen nacheinander an den Plexiglasplatten verklebt. Hierbei wurde wieder der Sekundenkleber eingesetzt. In Abb.7 sieht man die beiden Säulen mit den verklebten Plexiglastüren.

Abb.7: Die Türen und Säulen

Die beiden Säulen in Abb.7 sind mit den Kugellagern in den Kugellagerhalterungen und den Motorpins im Innenraum des Oberkastens verbunden. Dabei wurden die Säulen zuerst mit den Kugellagern verbunden. Anschließend wurden die Motoren von unten in den Oberkasten hinein gesteckt und die Motorpins wurden in die Säulen gesteckt.

Zusammenbau der Elektronik

Für die Elektronik wurden insgesamt zwei ESP 8266 D1 Mini Mikrocontroller genutzt, da einer die Last des Programms nicht tragen konnte.
Der erste Schaltkreis besteht aus einem Mikrocontroller und dem Abstandssensor. Durch diesem wird das Paket erkannt und der Nutzer durch eine Benachrichtigung der Blynk App informiert.
Der Mikrocontroller ist lediglich mit dem Abstandssensor über die Pins „A0″ zur Datenübertragung, „5V” und „GND” verbunden. Diese drei Anschlüsse sind ebenfalls in Abb.11 erkennbar.

Der zweite Schaltkreis ist umfangreicher als der erste und besteht aus einem Mikrocontroller, dem RFID-Sensor, dem Motorshield, dem Tastschalter und der beiden Motoren.

Abb. 8: Tripler Base 1

Um alle elektronischen Einzelteile miteinander verbinden zu können wurde eine Tripler Base genutzt. Diese ist in Abb. 8 zu sehen. Sie streckt die Pins des Mikrocontrollers, sodass insgesamt drei Shields gleichzeitig genutzt werden können. Die jeweils äußeren Reihen an den einzelnen drei Bases, wurde mit einer achter Stifteleiste verlötet. So konnte der Mikrocontroller auf die linke Base gesteckt werden.
Hierdurch wurde jeder Pin mit dem gleichen Pin auf den anderen Bases verbunden. Zusätzlich konnten die unteren drei Reihen an jeder Base, welche mit „GND”, „3″ und „5″ beschriftet sind genutzt werden, um Ground, 3,3 Volt und 5 Volt weiterzureichen.
Das Motorshield wurde daraufhin auf die mittlere Base gesteckt. Die mit dem RFID-Sensor verbundenen Kabel wurden in die Steckleiste gesteckt, die an den Mikrocontroller gelötet ist. Der Steckplan ist in dem Eintrag zum RFID-Sensor zu finden.
Die Motoren und die Batteriebox wurden, wie in dem Eintrag zu den Motoren zu sehen, an das Motorshield verbunden.
An den Tastschalter wurde ein Steckkabel gelötet, welches mit dem Pin „D0″ in der Steckleiste des Mikrocontrollers verbunden wurde. Dieses Steckkabel ist über dem Tastschalter mit einem der blauen Kabel verbunden, welches getrennt wurde. Zwischen den beiden Hälften des Kabels wurde ein Widerstand gelötet und das Ende des Kabels wurde an eine der Ground Leisten der Tripler Base gelötet. Ein weiteres Kabel wurde an ein Bein der zweiten Reihe des Tastschalters und an einer der 5 Volt Leisten der Tripler Base gelötet.
Die fertig bearbeitete Tripler Base ist in Abb. 9 abgebildet.

Abb. 9: Nahaufnahme der Tripler Base

Die fertige Schaltung ist in Abb. 10 zu sehen.

Abb 10: Schaltkreis 2

Anbindung der Elektronik an die Kästen

Der RFID-Sensor und der Abstandssensor sind mit Heißkleber und der Tastschalter ist mit Sekundenkleber befestigt. Die Batterie-Box für das Motor-Shield ist mit Isolierband an einer Seitenwand des Unterkastens befestigt. Die Motoren befinden sich lose in den jeweiligen Halterungen. Die restliche Elektronik sitzt ebenso lose im Unterkasten. Die Verbindungen vom Abstandssensor zum Mikrocontroller und von den Motoren zu dem Motor-Shield besteht jeweils aus zwei Female-Male Jumper Kabel. Diese erleichtern das Abnehmen des Oberkastens vom Unterkasten, da beim Abnehmen des Oberkasten die Verbindungen der Motoren und des Abstandssensor unterbrochen werden müssen.

Der Abstandssensor ist in der Aussparung der Schräge befestigt. Die Pins des Abstandssensors sind um 90 Grad gebogen, damit es keine Probleme mit den Verbindungskabel gibt. In Abb. 11 sieht man wie der Sensor eingebaut ist.

Abb. 11: Der befestigte Abstandssensor

In Abb. 12 ist, bis auf den Abstandssensor und dem zugehörigen Mikrocontroller, die gesamte Elektronik im Unterkasten zu sehen.

Abb. 12: Die gesamte Elektronik im Unterkasten
M1: Video zur Inbetriebnahme

1 „Tripler Base” https://www.wemos.cc/en/latest/d1_mini_shield/tripler_base.html (753×753)

Ideenfindungsprozess

In diesem Projekt geht es um den Entwurf eines smarten Briefkastens für Pakete.

Angenommen man hat ein Paket bestellt und ist zur Lieferungszeit nicht anwesend. Der Postbote kann nun über einen RFID-Chip oder -Karte den Briefkasten öffnen und das Paket dort hineinlegen. Anschließend drückt der Bote auf einen Taster zum Schließen des Briefkastens. Sobald nun das Paket in dem Kasten liegt, wird der Empfänger über das Smartphone benachrichtigt. Sobald der Empfänger wieder Zuhause ist, kann er anschließend den Briefkasten öffnen und das Paket aus dem Briefkasten entnehmen. Dadurch wird der Weg zur nächsten Postfiliale vermieden.

Für dieses Projekt können kleine bis mittel große Pakete in den Briefkasten hineingelegt werden.

Blynk

Blynk wird genutzt, um eine Benachrichtigung an das Handy des Nutzers zu senden, sobald der Abstandssensor ein Signal sendet.

Zunächst musste ein neues Projekt in der Blynk App erstellt werden. Hier wurde, wie in Abb.1 zu sehen, das Notification Element hinzugefügt. Die Abb.2 zeigt die vorgenommenen Einstellungen des Elements, die von den Standardeinstellungen nicht abweichen.

Abb.1: Projekt Briefkasten in der Blynk App
Abb.2: Einstellungen des Notification Elementes

Die Verbindung von dem Mikrocontroller zu dem Smartphone des Nutzers wird über den Server von Blynk hergestellt. Um dies umzusetzen, wird zunächst die Blynk Bibliothek als auch die ESP 2866 WiFi Bibliothek eingebunden.
Daraufhin werden Variablen zur Erleichterung der Verbindung zu Blynk festgelegt. Diese beinhalten die WLAN-Verbindungsdaten und der, von Blynk zufällig generierte, Authentifizierungscode. So kann mit „Blynk.begin()” die Verbindung mit den festgelegten Variablen als Parameter aufgestellt werden.
Ein Delay wird eingebaut, um die Verbindungsaufnahme zu erleichtern.

Mit „Blynk.run()” wird Blynk in der loop-Methode gestartet. Ebenfalls wurde eine while-Schleife eingeführt. Diese untersucht mit „Blynk.connected()”, ob die Verbindung abgebrochen wurde und verbindet sie in diesem Fall mit „Blynk.connect()” erneut.

Durch „Blynk.notify(“Du hast ein Paket erhalten!”)” wird eine Benachrichtigung an die Blynk App gesendet. Somit wird der Nutzer benachrichtigt.

Der gesamte Code ist im Folgenden aufgeführt:

//Blynk Libraries
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
//Variablen zur Verbindung mit Blynk
char auth[] = "";
char ssid[] = "";
char pass[] = "";



void setup() {
    Serial.begin(115200);
    //mit Blynk verbinden
    Blynk.begin(auth, ssid, pass);
    delay(500);
}

void loop() {
  while(Blynk.connected() == false){
    Blynk.connect();
    Serial.print(".");
  }
  Blynk.run();
  if(packageDetected()){
    delay(2000);
    Blynk.notify("Du hast ein Paket erhalten!");
    Serial.println("Paket");
  }
}

Abb. 3 zeigt die Blynk App, nachdem eine neue Benachrichtigung eingegangen ist.

Abb. 3: Eingehende Benachrichtung

Entwicklungsblog 1

Seit grob zwei Wochen haben wir mit der Arbeit an unserem Projekt begonnen und uns bereits mehrmals getroffen, um den groben Plan festzulegen. Den Makerspace konnten wir uns auch schon anschauen und einen Überblick der vorhandenen Materialien bekommen, sodass wir eine Liste unserer benötigten Komponenten schreiben konnten.

Wir haben uns dazu entschlossen einen smarten Briefkasten für Pakete zu bauen, der sich mit einem Smartphone von überall aus öffnen lässt. Liefert der Postbote ein Paket, wird der Nutzer durch die Blynk App benachrichtigt und kann die Tür an der Vorderseite des Briefkastens öffnen.

Die Einteilung der Aufgaben haben wir durch die Gebiete Modellierung, Programmierung und Zusammensetzung festgelegt. Hierbei kümmern sich Artur und Andreas vor allem um die Modellierung und Pascal und Anna programmieren hauptsächlich den Code. Unsere Ziele haben wir in Muss- und Kann-Zielen eingeteilt, um uns zunächst auf die wichtigen Funktionen zu konzentrieren und weitere schöne, aber nicht zwingend nötige, Funktionen zu implementieren, wenn wir mit den wichtigen fertig sind.
Als Deadline für unser Projekt haben wir den 08.09.2021 gesetzt. So haben wir, falls unerwartete Probleme auftreten, immer noch Zeit diese zu lösen.