Zelf een slimme deurbel maken  

Zelf een slimme deurbel maken

Vaak is een deurbel moeilijk te horen, bijvoorbeeld in de kelder, met een hoofdtelefoon op of bij luide muziek. Zou het niet mooi zijn als er een simpele draagbare oplossing zou zijn, die ook nog eens perfect in de bestaande infrastructuur kan worden geïntegreerd?

Het project

Geschikt voor: geavanceerd

Benodigde tijd: ongeveer 2 uur

Wat u nodig hebt: NodeMCU ESP8266 Wi-Fi module, optocoupler, schakeldiodemetaaloxideweerstand 560 ohm-weerstand, insteekpaneel, ingebouwde koppeling om de bel te testen/ simuleren

Budget: ongeveer 14 euro

De onderdelen

Wij gebruiken de populaire ESP8266-microcontroller en een Fritz!Box om van DECT-handsets draagbare deurbellen te maken.

Door de bijzonderheden van de ESP8266 is deze een perfecte basis voor dit project: de controller beschikt over WLAN, verbruikt in de Deep-Sleep-Modus minder dan een mW en is eenvoudig te programmeren.

Daarom is er ook een grote community van ontwikkelaars die voor veel ondersteunende tools en resources zorgt.

De module voor ontwikkelaars die wij gebruiken, kan worden geprogrammeerd via een gangbare micro-USB-kabel die tijdens het programmeren ook als voedingskabel fungeert.

Wie een bijzonder handzame deurbelschakeling wil, kan zeer compacte modules zoals de ESP-12F (DEBO ESP8266-12F) gebruiken. Daarnaast heeft u voor het ontwikkelen nog een USB-TTL-UART-convertor nodig.

Voor het programmeren gebruiken wij Arduino-IDE.

De elektronica

De testschakeling

Voor het ontwikkelen hebben wij naast de ESP alleen nog wat kabel nodig. Om de deurbel te activeren hoeven slechts Reset (RST) en Ground (GND) van de ESP met elkaar worden verbonden.

De deurbelschakeling

Voor gebruik aan de echte deurbel zijn slechts weinig componenten nodig: Een optische koppelaar scheidt de stroomkringen van de deurbeltransformator en de ESP. Als de optische koppelaar onder stroom komt te staan, worden Reset (RST) en Ground (GND) van de ESP met elkaar verbonden. De microcontroller komt uit de diepeslaapstand en start het deurbelprogramma.

deurbelschakeling

Conventionele deurbeltransformators leveren een wisselspanning tussen 8 en 24 V. De weerstand R1 zorgt ervoor dat de optische koppelaar een spanning van 1,2 V krijgt en moet dus op de deurbelspanning worden afgestemd. De diode zorgt ervoor dat de wisselspanning van de deurbel wordt omgezet in gelijkspanningsimpulsen voor de optische koppelaar. Zolang het programma bezig is, maakt het niet uit of de reset meerdere keren wordt geactiveerd.

Voor een voeding met batterijen (3-3,6 V) moet de batterijhouder aan de pennen 3 V en GND worden aangesloten.Heim

R1-waarden voor gangbare deurbelspanningen:

DeurbelspanningR1
8 V330 Ohm
12 V560 Ohm
24 V1,2 kOhm

Fritz!Box voorbereiden

Om onze microcontroller met de Fritz!Box te laten communiceren is toegang via het TR-064-protocol vereist. Daarvoor moet in het administratiemenu van de Fritz!Box (http//fritz.box) bij ”Thuis” → “Thuisnetwerkoverzicht” → “Netwerkinstellingen” een haakje staan bij “Toegang voor applicaties toestaan”.

De software

Arduino-IDE inrichten

De ESP8266 wordt bij onze ontwikkelaarskaart geprogrammeerd via een USB-kabel, die tijdens het ontwikkelen tegelijkertijd als stroomkabel fungeert.

Wij gebruiken Arduino-IDE om de software te compileren en de microcontroller te programmeren.

Standaard zijn in Arduino-IDE alleen kaarten uit de Arduino-familie leverbaar. De ESP8266-ontwikkelaars stellen daarvoor geschikte kaartconfiguraties beschikbaar:

  1. Voer bij de instellingen van de Arduino-IDE (“data” -> “wijzig voorkeuren”) in het veld “additionele boardadministrator URLs” de URL voor ESP8266-kaarten in: http://arduino.esp8266.com/stable/package_esp8266com_index.json
  2. Installeer de kaartconfiguratie met de juiste tools via de “kaartadministrator” (“tools” -> “kaart: Arduino/Genuino Uno” -> “kaartadministrator”). Geef simpelweg als doeldirectory ESP8266 aan en kies de meest actuele versie. De downloadgrootte is ca. 150 MB omdat voor ESP8266-systemen eigen compilers, bibliotheken en tools nodig zijn.

Nadat de installatie is voltooid, kunnen ook ESP8266-kaarten worden geselecteerd, in ons geval “NodeMCU 1.0 (ESP-12E Module)”.

De volledige documentatie vindt u hier.

De TR-064-bibliotheek installeren

Voor de communicatie met de Fritz!Box wordt het TR-064-protocol gebruikt. Een geschikte bibliotheek vindt u hier.

Om te installeren schuift u simpelweg de map “TR-064-SOAP-Library” in de directory voor Arduino-bibliotheken in de homedirectory (Arduino/libraries onder Linux resp. Documenten/Arduino/libraries bij Windows).

Het programma

Met dit korte programma roept de ESP8266-kaart elke aangesloten handset vier seconden op als de bel wordt ingedrukt. Daarna keert het systeem weer terug naar de Deep-Sleep-Modus:

#include
#include
#include
#include

const char WIFI_SSID[] = "WLANNAME(SSID)"; // <-- andere
const char WIFI_PASSWORD[] = "WLANWACHTWOORD"; // <-- andere
const char USER[] = "admin";
const char PASSWORD[] = "wachtwoord"; // <-- andere
const char FRITZBOX_IP[] = "192.168.178.1";
const int FRITZBOX_PORT = 49000;

TR064 tr064_connection(FRITZBOX_PORT, FRITZBOX_IP, USER, PASSWORD);

const IPAddress STATIC_IP(192, 168, 178, 230);
const IPAddress GATEWAY(192, 168, 178, 1);
const IPAddress SUBNET(255, 255, 255, 0);
const IPAddress DNS(GATEWAY);
const char DEVICE_NAME[] = "ESP-Deurbel";

void setup() {
WiFi.hostname(DEVICE_NAME);
WiFi.config(STATIC_IP, SUBNET, GATEWAY, DNS);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
WiFi.mode(WIFI_STA);

while (WiFi.status() != WL_CONNECTED) {
delay(50);
}

tr064_connection.init();

String tr064_service = "urn:dslforum-org:service:X_VoIP:1";

// Het telefoonnummer **9 is de Fritzbox-uitzending.
String call_params[][2] = {{"NewX_AVM-DE_PhoneNumber", "**9"}};
tr064_connection.action(tr064_service, "X_AVM-DE_DialNumber", call_params, 1);

// Wacht vier seconden tot ophangen
delay(4000);
tr064_connection.action(tr064_service, "X_AVM-DE_DialHangup");

ESP.deepSleep(0);
}

void loop( ) { }

Definieer eerst de noodzakelijke parameters waarmee de ESP8266 zich met het netwerk kan verbinden en de TR-064-interface kan oproepen.

Voor het aanmelden op de Fritz!Box en authentiseren op de TR-064-interface zijn een gebruikersnaam en wachtwoord nodig (af fabriek is de gebruikersnaam “admin”). Bovendien wordt een instantie van de TR-064 API-client gemaakt.

Opdat de microcontroller de meeste tijd in de energiebesparende diepeslaapmodus kan staan, meldt deze zich bij elke oproep opnieuw aan op het netwerk. Om de reactietijd tussen het indrukken van de bel en het oproepen bij de handsets kort te houden, gebruiken wij een vast IP-adres en zien wij af van een langzamere, dynamische toewijzing per DHCP.

Het valt ervaren Arduino-ontwikkelaars onmiddellijk op dat de complete programmalogica in setup en niet in loop staat. Dat ligt aan de werking van de ESP8266, die in de diepeslaapmodus alle componenten inclusief de CPU uitschakelt, behalve de echttijdklok. Zo kan loop in deze toestand niet worden uitgevoerd. Setup wordt telkens uitgevoerd als de microcontroller wakker wordt gemaakt.

De laatste stap

Eerst wordt de wifi-verbinding tot stand gebracht, daarna de verbinding met de TR-064-interface. Bel via deze interface eerst alle aangesloten handsets op en verbreek de verbinding weer na vier seconden. Wie wil kan in de plaats daarvan ook een bepaald verkort nummer van een handset gebruiken.

Om het programma te uploaden moet nog een poort worden geselecteerd (ook als er doorgaans maar één is, ga naar “Werktuig”“Poort”“COM3” onder Windows resp. “ttyUSB0” onder Linux). Klik vervolgens simpelweg op de knop met de pijl. Het programma wordt na het uploaden onmiddellijk voor het eerst uitgevoerd en de handsets rinkelen kort. Om het programma opnieuw uit te voeren hoeven alleen maar GND en RST aan de microcontroller worden kortgesloten.

Veel plezier!

Titelafbeelding: Adobe Stock, 161405299, terovesalainen

 

Wat vind jij van dit onderwerp? Geef een reactive:

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *