“Het meetinstrument ligt in de lade van mijn collega, maar hij is ziek – we kunnen er vandaag niet bij” (lade op slot) of “Dan moet ik u morgen de sleutel van de tweede kamer in het vakantiehuis brengen” zijn twee zinnen die het hier gepresenteerde project in gang hebben gezet. In onze dagelijkse wereld worden eenvoudige sleutels, of het nu gaat om een brievenbus, een ladebak of een kamerdeur, op grote schaal gebruikt. Zelfs op de lange termijn zullen dergelijke sloten niet worden vervangen door hoogwaardige elektronische sluitsystemen (om redenen van kosten of moeite). Maar wat gebeurt er als de sleutel eigenlijk niet beschikbaar is omdat een collega weg is op het werk? Hoe kan ik een extra ruimte geven aan een gebruiker van een vakantiehuis als ik zelf ver weg ben van het vakantiehuis?
Het project
Een eenvoudige oplossing kan worden gerealiseerd door een ivd-klare sleutelkast in zelfbouw. Deze kan door één persoon via het internet worden bediend, zodat bijvoorbeeld een sleutel aan collega’s op het werk via het internet kan worden vrijgegeven, of een andere kamersleutel op verzoek aan de huurder van het vakantiehuis ter beschikking kan worden gesteld. De basis hiervoor is een doos waarin zowel de toetsen als de elektronica passen. In het hier gepresenteerde scenario is gebruik gemaakt van een niet meer gebruikte assortimentsdoos uit de bouwmarkt. In deze doos is elektronica gebaseerd op het D1 Mini-systeem met geïntegreerde ESP8266 W-LAN-interface gebouwd. Een innovatieve aandrijving op basis van slimme materialen (vormgeheugenlegeringen) wordt gebruikt als boxopener op de interface. Tot slot wordt de programmering van een eenvoudige handeling via internet uitgelegd.

Projectprofiel
Geschikt voor: Gevorderde
Benodigde tijd: ca. 2 uur
Kosten: ca. 35 €
Deze materialen uit het Reichelt-winkelwagentje zijn nodig.
Daarnaast een afsluitbare doos, bij voorkeur met een scharnier (bijv. assortimentsdoos).
Voorbereidingen
Eerst zullen we ons kort vertrouwd maken met de onderdelen:
De kleine microcontroller is zeer royaal uitgerust voor zijn grootte: hij heeft 11 digitale poorten (allemaal met interrupts), een analoge ingang (max. 3,3 V) en een ingebouwde ESP8266 W-LAN module. De D1-minibord kan worden aangesloten op de PC via een USB-kabel. Hiervoor zijn de juiste drivers en de Arduino IDE-software nodig.
Ik heb hier mijn drivers voor zowel Windows 10 als voor MAC OSX gevonden:
Driver Link: https://github.com/himalayanelixir/Arduino_USB_Drivers
Je kunt de Arduino IDE hier gratis krijgen:
Software Link: https://www.arduino.cc/en/main/software
De D1 Mini Board kan worden gekoppeld aan diverse geschikte uitbreidingsborden. In ons voorbeeld nemen we een geschikte D1-relaisafscherming of een relais dat met een 3,3 V-spoelspanning kan worden geschakeld. Het relais wordt gebruikt voor het schakelen van aandrijvingen die een andere of hogere stroombehoefte hebben dan de digitale uitgangspennen van de D1 Mini Board.
De mechanische opening wordt gedaan door een vormgeheugenactuator (NiTinol-aandrijving). De kleine ONEasy 5N kan met een openingskracht van meer dan 500 g zelfs ietwat logge mechanismen ontkoppelen. Zo kan een zelfgemaakt slot worden ontgrendeld. De aandrijving is slechts 6 mm dik, zodat u relatief veel ruimte heeft voor de sleutels.

Technologische basis over de werkwijze en achtergrond vond ik in het Duits op de site van de fabrikant.
De uitvoering
De volgende afbeelding toont het elektronische schakelschema:

Voor het systeem worden twee batterijen gebruikt – een 3,6 V-batterij voor de elektronica en dus ook voor de W-LAN-interface, en een batterij voor de betreffende activering van de ontgrendelingsactor.
De spanning van de 3,6 V-accu wordt gemeten door het D1-board en via het internet aan de eigenaar doorgegeven. Men wil de voedingsspanning in de gaten houden, omdat deze continu wordt verbruikt door de elektronica.
Volgens het gegevensblad van de fabrikant levert het 9 V-blok 600 mAh en is daarmee voldoende voor ongeveer 200 vrijgaven van de vormgeheugenactuator. Hier kunt u in de toekomst een teller toevoegen, die laat zien hoe vaak u de 9 V-batterij al gebruikt heeft.
Het relais kan worden aangesloten op digitale poort 1 van de D1-kaart. Het relaisbord is zo ontworpen dat het relais via poort 1 kan worden aangestuurd. Als het relais wordt geactiveerd (d.w.z. CM met NO) wordt het circuit van het 9 V-blok gesloten met de vrijgaveaandrijving. De activeringstijd is hier van belang. De activeringstijd bepaalt de slag van de aandrijving. In het voorbeeld is een tijd van 1500 ms voldoende.
Als er een voedingseenheid moet worden aangesloten, of als u alleen met de 9 V-batterij wilt werken, kan er een speciale module voor de voedingsspanning van de D1 mini worden geïnstalleerd.
De montage
Zoek eerst een geschikte positie voor de ontgrendeling in de sleutelkast. In dit voorbeeld is de plastic grendel afgescheurd, zodat deze niet via een wig in de grendel kan grijpen. In plaats daarvan werd er een gat in de plastic snapper geboord. Op de scheidingswanden van de assortimentsdoos werd ruimte vrijgehouden om de ontgrendelingsaandrijving te monteren. Hij is zo geplaatst dat hij in de stroomloze toestand door het gat in de kliksluiter steekt. De ontgrendelingsaandrijving moet ook worden afgesteld. Aan de trekzijde was er oorspronkelijk een M4-draad, die werd afgevijld om een wig te vormen. Dus als de plastic klik wordt aangetrokken, duwt hij eerst de vergrendelschuif opzij (zie schetsen). Wanneer het gat in de kunststof snapper gelijk ligt met de lineaire as van de ontgrendelingsaandrijving, veert de schuif terug en wordt de behuizing met het deksel verbonden. De elektronica wordt volgens het schakelschema aan elkaar gesoldeerd en in de compartimenten aan de zijkant gemonteerd.

De software
In de beschrijving staat de code met de belangrijkste uitleg.
Om de software te implementeren moet de D1-minibord in de Arduino IDE worden geïnstalleerd. Om dit te doen, voeg eerst de volgende regel toe in de voorkeuren van de Arduino IDE’s onder “extra board administrator URL’s”: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Daarna kunt u met het sleutelwoord ESP8266 naar Tools>Board>Board Manager gaan om automatisch het juiste pakket voor de ESP-borden te installeren. Daarna is de “LOLIN(WEMOS) D1 R2 & mini” beschikbaar in de selectie van het te gebruiken bord. De volgende instellingen werden gebruikt voor het hier besproken voorbeeld:

Nu de eigenlijke programmacode:
Eerst moet de ESP8266-bibliotheek worden toegevoegd. Bovendien moet het te gebruiken W-LAN samen met het wachtwoord worden gedefinieerd. Hetzelfde geldt voor de gebruikte poort (standaard 80).
#include <ESP8266WiFi.h>
const char* ssid = "NAME W-LAN-NETZ";
const char* password = "IHR W-LAN-NETZ PASSWORT";
WiFiServer server(80);
IPAddress ip(10, 0, 0, 99);
IPAddress gateway(10, 0, 0, 1);
IPAddress subnet(255, 255, 255, 0);
int Mess = 0;
int Status = 0;
U kunt ook vaste IP-adressen toewijzen (indien gratis): Hier kunt u parameters invoeren die bekend zijn uit de netwerktechnologie, zoals IP, gateway en subnet. De variabele Value wordt gebruikt om de voedingsspanning van de elektronica te meten. De variabele Status wordt later gebruikt voor de te programmeren webpagina. Daarna worden de volgende definities in de void setup () geïmplementeerd:
void setup() {
pinMode(D1, OUTPUT);
pinMode(A0, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(D1, LOW);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(9600);
delay(10);
Serial.print("Aufbau der Verbindung zu : ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status () != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(" ");
Serial.println("mit ");
Serial.print(ssid);
Serial.print(" verbunden");
server.begin();
Serial.println(" ");
Serial.println("Server gestartet");
Serial.println(" ");
Serial.print("Adresse: http://");
Serial.print(WiFi.localIP());
Serial.println("/");
for (int z=0; z<5; z++)
{
digitalWrite(LED_BUILTIN, LOW);
delay(300);
digitalWrite(LED_BUILTIN, HIGH);
delay(300);
}
}
D1 wordt gedefinieerd aan de digitale uitgang en A0 aan de analoge ingang. De in de D1 mini ingebouwde LED is als uitgang gedefinieerd. Tegelijkertijd worden de digitale uitgangen in het begin op LOW gezet.
Voor het debuggen via de USB interface activeren we de seriële interface met 9600 Baud. Met WiFi.begin onze D1 mini logs in het W-LAN netwerk en geeft de status door via de seriële interface (WiFi.status commando’s). Als het inloggen klaar is, starten we de serverwerking van onze D1 Mini met server.start(). Als alles goed is gegaan, laten we de ingebouwde LED knipperen over de for-lus.
De loop void loop () wordt als volgt uitgevoerd:
void loop()
{
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(D1, LOW);
Status = 0;
WiFiClient client = server.available();
if (!client)
{
return;
}
Serial.println("Neuer Client verbunden");
while (!client.available())
{
delay(1);
}
delay(1);
String request = client.readStringUntil('r');
Serial.println(request);
client.flush();
if (request.indexOf("OFFNEN") != -1)
{
for (int z=0; z<3; z++)
{
digitalWrite(D1, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
digitalWrite(LED_BUILTIN, LOW);
delay(250);
Status = 1;
}
}
if (request.indexOf("MESSUNG") !=-1)
{
digitalWrite(D1, LOW);
Status = 2;
Mess = analogRead(A0);
}
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println ("");
client.println ("<! DOCTYPE HTML>");
client.println ("<html>");
client.print("Schluesselbox");
client.println("<br><br><br>");
client.print("STATUS: ");
if (Status == 1)
{
client.print("OFFEN");
}
if (Status == 2)
{
client.print("Batteriemessung");
client.print("<br>");
client.print(Mess);
client.print(" 1024 = Voll");
}
else
{
client.print("GESCHLOSSEN");
}
client.println("<br>");
client.println ("<br><br><br>");
client.println ("<a href="/OFFNEN"> OEFFNEN DER SCHLUESSELBOX </a><br><br><br>");
client.println ("<a href="/MESSUNG"> SPANNUNG DER ELEKTRONIK MESSEN </a><br><br><br>");
client.println ("</html>");
delay(1);
Serial.println ("client disconnected");
Serial.println ("");
}
In het hoofdprogramma void loop () controleert onze server nu of een client, d.w.z. gebruiker, is ingelogd. Indien dit het geval is, wordt via de seriële interface (‘New client connected’) een overeenkomstige informatie verzonden. Vervolgens starten we de query wat de klant wil door een string ‘request’ te definiëren als invoer via het internet.
In de volgende, logische gevallen over of er lussen worden gemaakt:
Als de aanvraag “OPEN” is, dan wordt digitale poort 1 (dus het relais met FG-actor) en de ingebouwde LED geactiveerd. De variabele ‘Status’ is ingesteld op 1. Om het wat mooier te maken kan de uitvoering als for-loop 3 keer worden gedaan zoals in de getoonde code. Daarna kunt u de aandrijving 1,5 s inschakelen en de LED snel laten knipperen.
Als het verzoek “MEASUREMENT” wordt gevraagd, wordt de gehele waarde (tussen 0 en 1023) gelezen op poort A0. De huidige waarde van de acculading wordt dus opgeslagen in de variabele ‘Value’.
Nu is de internetpagina op onze server geprogrammeerd. In principe wordt alle informatie ingevoerd via de opdracht ‘Client.print’, vergelijkbaar met de opdracht ‘Serial.print’. Wie misschien nog HTML kent, heeft het op dit moment gemakkelijk. In de korte versie moet u het volgende doen:
De definities van HTML kunnen worden overgenomen; ze zijn universeel.
Dan beginnen we met de eenvoudige HTML-pagina en schrijven we “Key safe box” als titel. Het teken
komt overeen met de regeleinde in de HTML-taal.
Ten eerste laten we de status van ons systeem via het internet zien aan de hand van twee verschillende if-clausules. Als beide clausules niet van toepassing zijn, wordt de status = closed weergegeven.
Verderop op de webpagina zijn twee links geprogrammeerd. Met ‘
De systeemtest
Nadat alles geprogrammeerd en geassembleerd is, kunt u de software compileren en uploaden via Arduino IDE met de USB interface aangesloten. Daarna kunt u het aansluitingsproces op het W-LAN-netwerk in de seriële monitor bekijken. Als u niet heeft besloten om een vast IP-adres toe te wijzen, zal de seriële monitor dit weergeven als de verbinding succesvol is.
Daarna kunt u het IP-adres in de browser invoeren. De eenvoudige webpagina verschijnt waar u de status van de keybox en de spanning van de 3,6 V-accu kunt aflezen. Hier kunt u de gehele waarde omrekenen en weergeven in volt of procent. Als u op de link ‘Open the key safe box’ klikt, wordt het relais gedurende 1,5 s geactiveerd en maakt onze ontgrendelingsactor de verbinding vrij. U kunt dan het deksel optillen en bij de sleutels komen.
