Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Donnerstag
19
Januar 2017
Klaus Moser
Klaus Moser

Login Pad mit Arduino Pro Micro

Das Login Pad ist aus einer Not heraus entstanden. Da ich beruflich viel mit zugriffsgeschützten Webseiten zu tun habe ich mich das ständige neu Anmelden genervt hat, hatte ich die nicht sicherheitskritischen Anmeldedaten auf die G-Tasten meiner Logitech Tastatur gelegt um mich mit einem Knopfdruck an einer Website anmelden zu können. Auch Snippets die man beim Programmieren häufiger braucht habe ich auf diesen Tasten abgelegt. Das spart beim Entwickeln einiges an Zeit.

Leider ist die Unstertützung der Logitech G-Tastaturen unter Linux nicht gerade die Beste und mit Ubuntu 16.04 lief dann der Daemon für die Tastatur nicht mehr. Der Schritt zurück zu KeePass und manueller Eingabe war für mich kein Zustand der auf Dauer bleiben konnte.

Habe mir anfangs mit xbindkey und xmacroplay beholfen, aber da ich keine Sets mehr umschalten konnte war ich nun auf die physisch vorhandenen 12 bzw. 18 Tasten beschränkt.

Ich erinnerte mich, dass ich irgendwann einmal einen Arduino Leonardo bestellt hatte, da dieser sich als USB-HID Device wie z.B. eine Maus oder Tastatur verwenden lassen könnte. Mangels Projektidee fristete er sein Dasein bisher allerdings in einer Schublade. Warum also nicht einfach ein paar Buttons dran hängen und deren Ausgabe dann frei programmieren. Erste Experimente mit einem einzelnen Button waren vielversprechend.

Bei AliExpress habe ich noch ein Keypad gefunden welches über 10 numerische Tasten für die Login-Informationen, 4 Tasten mit Buchstaben mit denen ich die Sets umschalten kann sowie noch zwei Sondertasten die man mit speziellen Funktionen belegen könnte. Damit wären 4 Sets  á 10 Tasten, also 40 Tasten belegbar. Das sollte für den Anfang reichen ;-)

Erste Versuche waren erfolgreich und die Software war auch nicht sonderlich kompliziert. Nicht zuletzt deshalb weil es ja für fast alles schon fertige Libraries gibt.

Eine Sache die sich als echt praktisch herausgestellt hat ist die Tatsache, dass der Arduino für das Betriebssystem eine ganz normale Tastatur ist. Damit funktioniert die Ausgabe der Tastendrücke auch wenn man sich gerade innerhalb einer VirtualBox befindet. Das ging mit meinen G-Tasten der Logitech-Tastatur nicht.

Der Leonardo den ich zum Testen verwendet habe, sollte später durch den Pro Micro ersetzt werden, da dieser auch den ATmega32u8 verwendet und klein genug ist auf die Rückseite des Keypads zu passen.

Die Projektidee war geboren...

Materialliste

Typ Menge Notizen Link Einzelpreis Gesamtpreis
4x4 Keypad 1   <a href="https://www.aliexpress.com/item/4x4-Matrix-Keyboard-Keypad-Use-Key-PIC-AVR-Stamp-Sml/1072484015.html">AliExpress</a> 2,40 &euro; 2,40 &euro;
Arduino Pro Micro 1 ATmega32u4 5V/16MHz <a href="https://www.aliexpress.com/item/Mini-Leonardo-Pro-Micro-ATmega32U4-5V-16MHz-Module-For-Best-Quality/32649731723.html">AliExpress</a> 4,38 &euro; 4,38 &euro;
LEDs 4   <a href="https://www.aliexpress.com/item/500pcs-5mm-LED-diode-Light-Assorted-Kit-DIY-LEDs-Set-White-Yellow-Red-Green-Blue-free/32689453280.html">AliExpress</a> 4,76 &euro; 0,20 &euro;
Vorwiderstände 4 z.B. 470 Ohm je nach Intensität <a href="https://www.aliexpress.com/item/Free-shipping-500pcs-RES-ORIGINAL-SMD-Resistor-1-0805-470R-470-OHMS-chip-resistor-1-8W/32267609535.html">AliExpress</a> 0,41 &euro; 0,02 &euro;
Pin Header female 90° 1 8 Pins <a href="https://www.aliexpress.com/item/Free-shipping-10pcs-40-Pin-1x40-2-54-Pin-Header-Single-Row-Male-Female-Header-Strip/32307037263.html">AliExpress</a> 4,38 $ 0,10 &euro;
Pin Header male 90° 1 8, 3, 4 Pins <a href="https://www.aliexpress.com/item/Free-shipping-10pcs-40-Pin-1x40-2-54-Pin-Header-Single-Row-Male-Header-Strip-New/32360282588.html">AliExpress</a> 1,54 &euro; 0,06 &euro;
Micro B USB Kabel 90° links 1 z.B. OTG Kabel <a href="http://www.ebay.de/itm/201147850295">EBay</a> 3,14 &euro; 3,14 &euro;
Micro B Breakout Board 1   <a href="https://www.aliexpress.com/item/USB-Micro-B-Breakout-Board-Power-Charging-Converter-Module/32429622089.html?spm=2114.01010208.3.9.9sacNI&ws_ab_test=searchweb0_0,searchweb201602_1_116_10065_117_10068_114_115_113_10084_10083_10080_10082_10081_10060_10061_10062_10056_10055_10037_10054_10033_10059_10032_10099_10078_10079_10077_426_10073_10102_10096_10052_425_10050_10051,searchweb201603_9&btsid=cfe84a48-23e2-44cb-8b2a-70eaee3151e2">AliExpress</a> 5,70 &euro; 0,57 &euro;
Blechschrauben 2 M 2,2 X 6,5 <a href="http://www.ebay.de/itm/231985967248">eBay</a> 2,50 &euro 0,10 &euro;
Schrauben für Kunststoffe 2 Ø3mm x 8mm <a href="http://www.ebay.de/itm/PT-Schrauben-fur-Kunststoffe-Linsenkopf-Edelstahl-A2-3mm-verschiedene-Langen-/400582240634">eBay</a> 3,99 &euro; 0,16 &euro;
Schrauben für Kunststoffe 2 Ø3mm x 10mm <a href="http://www.ebay.de/itm/PT-Schrauben-fur-Kunststoffe-Linsenkopf-Edelstahl-A2-3mm-verschiedene-Langen-/400582240634">eBay</a> 3,99 &euro; 0,16 &euro;

Die Kosten belaufen sich also etwa auf 11,29 €. Dazu kommt noch das Filament welches für den Druck des Gehäuses benötigt wird.

Software

Die Software für das Projekt habe ich auf GitHub gestellt.

Zum kompilieren des Sketches muss zuerst die Datei ext_def.h angelegt werden. Dazu am besten die Datei ext_def-example.h im Sketch Verzeichnis kopieren und als ext_def.h einfügen.

Der PIN mit dem einer Login Pad entsperrt werden kann wird mit folgender Zeile definiert:

#define PIN "123456"

Die Zeichensequenzen für die Tastendrücke müssen als Hexcode in die char arrays values0_0 bis values3_9 eingetragen werden. Das Set A verwendet values0_*, das Set B values1_*, usw. Die Sache mit den Hexcodes habe ich gemacht um auch Sonder- und Steuerzeichen senden zu können. Ein Tab ist z.B. 0xB3, ein Enter 0xB0. Die Zuweisung:

const PROGMEM char values0_1[] = {0x54,0x65,0x73,0x74,0x00};

Würde bei einem Tastendruck der Taste 1 bei aktiviertem Set A die Zeichenkette "Test" gefolgt von einem Enter ausgeben.

Etwas problematisch ist dass die Arduino Tastatur einen englischen Zeichensatz verwendet und ich noch keine Möglichkeit gefunden habe das zu ändern. Daher ist im Sketch eine Art "Konvertierung" von Zeichen eingebaut um den Hex Code von Tasten mit einem deutschen Tastaturlayout in die englische Entsprechung umzusetzen so dass im Endeffekt die richtige Taste gedrückt wird. Dieser Part hat im Sketch noch keine große Beachtung gefunden da ich mit dem Status Quo gut auskomme. Solltet ihr Zeichen benötigen die dem Pad einfach nicht zu entlocken sind schreibt einfach ein Kommentar auf der Seite oder nutzt das Kontaktformular.

Funktionsweise

Wenn das Pad fertig aufgebaut und mit dem Sketch gefüttert ist, funktioniert das Login Pad so:

Alle 4 LEDs leuchten. Das bedeutet das Pad ist neu gestartet und wartet auf die Eingabe des Pin Codes. Sobald man eine Taste drückt und sich im String-Puffer für die Passwort Eingabe Zeichen befinden leuchten die LEDs 2 und 4.

Hat man sich vertippt kann man mit der * Taste die Eingabe löschen und von vorne beginnen. Ist die Eingabe gelöscht leuchten die LEDs 3 und 4.

Hat man seinen Pin eingegeben bestätigt man diesen mit der Raute (#) Taste. Ist der Pin falsch, dann leuchten alle 4 LED 3x kurz nacheinander auf und man kommt wieder zur PIN Eingabe. Ist der Pin richtig leuchten alle vier LEDs gleichzeitig auf und das Set 1 wird aktiviert. Das Login Pad ist bereit.

Drückt man nun eine der Numerntasten werden die hinterlegten Tastensequenzen ausgegeben. Muss man seinen Arbeitsplatz verlassen kann man die * Taste drücken um das Pad wieder zu sperren. Dann ist eine erneute Eingabe des Pins nötig um das Pad wieder zu aktivieren.

Aufbau

Die Verdrahtung des Pad ist ziemlich simpel und im folgenden Bild zu sehen:

Für den Zusammenbau kommen in 8 Pins der 10 Pins des 4x4 Keypad eine gewinkelte, männliche Stiftleiste und zwar so dass rechts und links jeweils ein Pin leer bleibt. Diese werden nicht benötigt.

Achtung: Es gibt unterschiedliche Pinleisten!! Der Unterschied besteht in der Positionierung des Abstandshalters aus Kunststoff. Bei manchen ist er auf der kurzen, bei manchen auf der lagen Seite. Je nachdem welche man hat muss man am Arduino die Leisten ggf. anders einlöten.

In den Arduino wird in Pin 2 bis 9 die weibliche 8-Pin Buchsenleiste eingelötet und zwar so dass man den Arduino später bündig hinten auf das Keypad aufschieben kann. Unbedingt vor dem Löten testen ob die Leiste oben oder unten am Arduino eingelötet werden muss.

An die Pins 10,14,15,16 sowie an GND kommt je eine Stiftleiste. Dabei wieder vor dem Einlöten testen wie es am besten passt. VCC und RST braucht man eigentlich nicht, hatte sie aber mal herausgeführt damit die Pin-Leiste etwas stablier sitzt und, falls ich mal den Sketch mit den falschen Board Einstellungen flashen sollte, den Bootloader via ISP wieder neu schreiben kann. War eine weise Voraussicht, ist mir inzwischen schon einmal passiert :-)

Gehäuse

Als Gehäuse schwebte mir etwas vor das ähnlich wie eine richtige Tastatur eine gewissen Steigung nach hinten hat. Die LEDs sollten neben den Tasten A-D platziert werden um den Status des aktiven Sets anzuzeigen. Außerdem soll eine Micro-USB Buchse nach hinten geführt werden. Herausgekommen ist dabei das:

Das Gehäuse kann man sich auf Thingiverse herunterladen. Ich habe auch die OpenSCAD Dateien beigelegt, damit man das Gehäuse ggf. noch anpassen kann.

LEDs

Jetzt kann man die LEDs für die Anzeige des gewählten Sets sowie den Fehler- bzw. Erfolgsmeldungen bei der PIN Eingabe einbauen.

Bei mir haben die LEDs genau gepasst so dass sie noch einen leichten Widerstand beim hineindrücken hatten und so ohne Kleber halten. Sollten die LEDs nicht halten, entweder etwas Kleber dran oder den Durchmesser der LEDs um 0.1 mm kleiner machen, dann sollten sie wieder halten.

Die Anschlusspins der Kathode an der LED sind ausreichend lang so dass man sie umbiegen kann und sie bis zur nächsten LED reichen. Dort lötet man sie einfach an die Kathode der nächsten LED.

An die Anoden kommt später ein Draht der zu der Platine mit den Vorwiderständen geht. Mit den Drähten warten wir aber noch bis wir das Modul mit den Vorwiderständen fertig haben. Dann lassen sich die Drähte etwas besser ablängen. Die Drähte sind nachher zwischen 6 und 7 cm lang.

Modul mit Vorwiderständen

Das Modul mit den Vorwiderständen ist einfach nur ein Stück Lochrasterplatine mit je einer 4poligen Stift- und Buchstenleiste und enthält je einen Vorwiderstand für jeder unserer LEDs.

Mit den Widerstandswerten muss man ein bisschen herumprobieren bis man eine Helligkeit gefunden hat die einem zusagt. Die gängigen LEDs kann man mit einem 180Ω Widerstand an 5V betreiben, was die LEDs aber viel zu hell macht. Die blauen LEDs die ich verwendet habe, habe ich über je einen 470Ω Widerstand angeschlossen und die Helligkeit finde ich so ganz angenehm.

Hier kommt jetzt übrigens das Thema mit den Abstandshaltern an den gebogenen Stiftleisten, was ich eingangs erwähnt habe, zum tragen. Je nachdem welche Stiftleisten man hat bekommt man jetzt Probleme wenn man normale 1/4 Watt Widerstände verwenden will. Bei meinem zweiten Pad, welches ich gebaut habe, habe ich die Stiftleisten erwischt, die meinen Arduino weiter nach oben verschoben haben und damit die Platine mit den Anschlußpins nicht mehr in das Gehäuse gepasst haben. Deshalb bin ich bei diesem Pad dann auf die SMD Widerstände ausgewichen. Damit konnte ich ein Streifenraster einsparen und es hat wieder alles ins Gehäuse gepasst.

Hier mal beide Varianten zum Vergleich. Links die Variante mit den normalen 1/4W Widerständen und rechts die Variante bei der der Arduino zu weit nach oben kommt und damit die SMD Widerstände nötig wurden:

Auf den Bilder sieht man auch dass man je nach Art der Stiftleiste die Buchsenleisten am Arduino anders einlöten muss.

Jetzt kann man die Kabel von den LEDs zu den Vorwiderständen anbringen. Dazu 6-7cm lange Kabelstücke auf der einen Seite mit der Anode der LED verlöten und mit einem Schrumpfschlauch vor Kurzschlüssen sichern. Auf der anderen Seite einen weiblichen Dupont Steckverbinder aufcrimpen. Die vier Steckverbinden kann, wenn man hat, in einen 4fach Steckschuh stecken, dann kann man die LEDs ohne viel Gefummel mit den Vorwiderständen verbinden.

Die gemeinsamen Kathoden der LEDs verbindet man mit einem GND Pin am Arduino.

Bodenplatte

Als letztes kommt die Bodenplatte mit der Verlängerung und Durchführung des USB-Ports des Arduinos. Damit das Gehäuse möglichst klein bleibt benutzt man ein USB Kabel mit  einem 90° nach links abgewinkelten USB Stecker.

Das günstigste Kabel das ich gefunden habe war ein OTG Kabel, welches normalerweise dazu verwendet wird USB-Geräte an Tablets und Handys anzuschließen. An diesen einfach die Kupplung abschneiden und das Kabel und die Drähte abisolieren. Das Kabel ist leider etwas sehr kurz was zu etwas Zug am Kabel beim Zusammenschrauben führt. Bislang macht es keine Probleme aber wenn das Kabel eine etwas größere "Schlaufe" machen würde wäre es sicher besser.

Es werden die vier Anschlüsse VCC, GND, D+ und D- benötigt. Den ID-Pin braucht man nicht und kann entweder abgeschnitten oder einfach nach hinten weggebogen und später hinter dem Schrupfschlauch versteckt werden.

Bei dem USB Port habe ich die mitgelieferte, gerade Stiftleiste gegen eine um 90° abgewinkelte ausgetauscht.

Der USB Port wird anschließend mit zwei kleinen Schrauben an der Bodenplatte verschraubt. Habe dafür Blechschrauben genommen, da ich keine so kleinen Schrauben für Kunststoff gefunden habe. Hält auch...

Innerhalb des Gehäuses wird das USB-Kabel wie auf den beiden folgenden Bildern angeschlossen.

Alles verschrauben

Wenn nach einem Test alles funktioniert, kann man alles verschrauben.

Das Keypad wird mit zwei kleinen Schrauben im Deckel befestigt. Dazu einfach das Keypad in den Deckel eindrücken und mit einem 1.5 mm Bohrer vier kleine Löcher in die Innenseite des Deckels bohren. Darauf achten nicht durch zu bohren. Dann das Keypad mit 4 Schrauben und ggf. jeweils einer Unterlegscheibe am Deckel befestigen.

Wenn noch nicht geschehen den USB-Port auf der Bodenplatte verschrauben und ggf. die LEDs mit etwas Heißkleber vor verrutschen sichern.

Beide Gehäuseteile aufeinanderlegen und diese mit den vier Schrauben miteinander verschrauben.

Beim Eindrehen der Schrauben in das Gehäuse drauf achten dass man nicht zu fest schraubt um das Gehäuse nicht zu beschädigen.

Schlussendlich sollte es dann etwa so aussehen:

Da bei mir keine zwei Webseiten das gleiche Passwort haben ist das ein echt hilfreiches kleines Helferlein das ich nicht mehr missen möchte.

Arduino "de-bricken"

Wenn man es einmal geschafft hat, versehentlich den falschen Board-Typ auszuwählen und eine so kompilierte Firmware flased, kann es passieren dass der Pro Micro nicht mehr ansprechbar ist.

So ist es mir passiert. Habe zuvor ein MySensors-Sensors auf Nano Basis geflasht, schnell ein neues Passwort in den Loginpad Sketch eingetragen, den Port ausgewählt und ohne den Board-Typ umzustellen den Sketch geflashed. Damit war der Arduino vorübergehend hinüber.

Um den Arduino wieder zum laufen zu bekommen muss wieder der richtige Bootloader gebrannt werden. Wie man das macht wird auf der Arduino Seite erklärt. Man kann mit einem zweiten Arduino den Bootloader über SPI auf den zweiten Arduino übertragen.

Dazu wird ein Sketch auf den Arduino übertragen den man als ISP verwenden möchte und dann jeweils die Pins für MISO,MOSI und SCK miteinander verbunden sowie der Reset-Pin des zu flashenden Arduinos mit einem IO-Pin des ISP Arduinos. Außerdem versorgt man den zu flasheden Arduino über die 5V/GND Pins des ISP Arduinos. Dann wählt man in der IDE den Board-Typ des Arduinos aus den man debricken möchte, in diesem Fall Arduino / Genuino Micro und führt unter Werkzeuge > Bootloader brennen aus.

Danach kann man den LoginPad-Sketch wieder flashen.

Freitag
18
November 2016
Klaus Moser
Klaus Moser

Power Manager IoT

Mit diesem Beitrag möchte ich euch mein erstes, richtiges Arduino-Projekt vorstellen. Der Powermanager tut jetzt schon fast ein Jahr zuverlässig seine Arbeit und es gab bislang noch keinen Ausfall oder sonstige Probleme mit dem Gerät. Bisher habe ich mich nicht getraut das Projekt vorzustellen, da ich ja ein absolut blutiger Neuling auf dem Gebiet bin und dementsprechend natürlich gewisse Selbstzweifel habe. Der Powermanager macht hier aber so einen guten Job dass es egoistisch wäre ihn für mich zu behalten. Ich hoffe dass ich damit der Community wieder ein bisschen etwas zurück geben kann.

Der verwendete Code ist auf GitHub zu finden.

WARNUNG

Arbeiten am 230V Stromnetz ist Laien nicht erlaubt und sollten generell von einem Fachmann durchgeführt werden. Zwar drohen keinem Handwerker Strafen aber man muss damit rechnen dass im Falle eines Schadens die Versicherung die Schadensregulierung verweigert. Ich übernehme keinerlei Haftung für Schäden jeglicher Art die durch den Nachbau dieses Projektes entstehen. Dieses Projekt ist als reines Lern-Projekt für mich gedacht gewesen und sollte von einem Laien nicht nachgebaut werden. Bei unsachgemäßen Umgang besteht LEBENSGEFAHR!!

Warum das Ganze

Nachdem ich vor Weihnachten 2015 das Glück hatte den IoT Adventskalender von Conrad zu erstehen hat mich das Arduino Fieber erwischt. Nach ersten Experimenten mit LEDs und Steuerung der selben über das LAN habe ich mir ein Set aus allen möglichen Modulen für den Arduino sowie ein paar Arduino Nanos bestellt. Bei den Modulen war unter anderem auch ein Relais-Modul mit einem schaltbaren Strom von 10A und ein Ethernet Modul dabei. Die Idee einen 230V Verbraucher über LAN und damit ggf. auch über Internet zu steuern fand ich irgendwie reizvoll.

Erste Versuche mit dem Relais und dem Ethernet-Modul waren erfolgreich. Habe dann ein 8-fach Relais Modul entdeckt und die Erweiterung von einem auf acht Relais war dann nur noch eine Kleinigkeit.

Was mich an vielen Funksteckdosen massiv stört ist, dass sie keinen Knopf haben um sie manuell zu schalten. Diesen Fehler wollte ich natürlich nicht machen und damit mussten noch 8 Buttons her. Eine Led, die den jeweiligen Schaltzustand anzeigt wäre natürlich auch noch nett und schon lag die Menge der IO-Pins, die ich für mein Bastelprojekt benötigen würde mit mindestens 30 IO-Pins (6 braucht das ENC28J60 LAN-Modul) weit über dem was der Arduino Nano an IO-Pins bereitstellt.

Habe einiges mit I2C Expandern wie dem PCF8574 und dem SparkFun SX1509 herum experimentiert, was auch ziemlich gut funktioniert hat. Irgendwann habe ich dann den Arduino Mega entdeckt, der für die Anwendung von Hause aus genügend IO-Pins zur Verfügung stellt. Durch die Masse an IO-Pins wurden noch zusätzliche Dinge möglich wie z.B. das Auslesen von Sensoren, in diesem Fall eines Temperatursensors für die Überwachung der Innentemperatur des Gehäuses.

Versuchsaufbau

Der Aufbau sieht wie folgt aus:

Die Widerstände an den LEDs werden nur für den Versuchsaufbau benötigt. Die beleuchteten Taster die später zum Einsatz kommen werden benötigen diese nicht. Auch die 3.3V Versorgung habe ich später über ein fertiges AMS1117 Modul realisiert (habe nur kein Fritzing-Part für das Modul gefunden).

So sah einer der ersten Versuchsaufbauten für das 8-fach Relaismodul dann aus. War ein ziemlicher Kabelsalat.

In diesem Staduim sollte man noch keine Experiemente mit dem öffentlichen Stromnetz machen, es sei denn man weiß wirklich genau was man tut. Hier liegen die Kontakte auf der Unterseite des Relais-Modules frei und eine Berührung kann böse Folgen haben.

Fhem

Parallel zu diesem Versuchsaufbau habe ich mich mit der Home Automation Software FHEM beschäftigt und festgestellt, dass es möglich ist Aktoren, welche über das LAN erreichbar sind, per Web-Command zu steuern. Also eigentlich genau das was ich da zum rumprobieren zusammengesteckt habe. Wirklich schwer war das nicht, insbesondere dank der guten Doku die es zu FHEM gibt. Für jedes Relais habe ich einen Dummy erstellt und jeweils einen Notify erstellt der das Relais per GET-Request schaltet.

define PM01_Sw_01 dummy
attr PM01_Sw_01 devStateIcon on:black_Steckdose.on off:black_Steckdose.off
attr PM01_Sw_01 group Schalter
attr PM01_Sw_01 room Arduino
attr PM01_Sw_01 setList on off
attr PM01_Sw_01 webCmd on:off
define PM01_Sw_01_notify_on notify PM01_Sw_01:on { GetHttpFile("192.168.0.201","/?on=0")}
attr PM01_Sw_01_notify_on room Arduino
define PM01_Sw_01_notify_off notify PM01_Sw_01:off { GetHttpFile("192.168.0.201","/?off=0")}
attr PM01_Sw_01_notify_off room Arduino

Das geht bestimmt noch besser, vor allem da nicht geprüft wird ob das Relais wirklich geschalten wurde oder nicht obwohl der Powermanager ja einen Status über den aktuellen Schaltzustand zurück gibt. Mein Fhem/Perl Kenntnisse reichen im Moment allerdings noch nicht für mehr. Im Moment reicht es aber, da bisher noch kein Schalt-Event nicht ausgefürt wurde.

Drückt man einen Taster am Powermanager, so sendet dieser einen GET Request an den Fhem  Server welcher dann den Status des zugehörigen Dummies setzt.

http://myserver/fhem/?cmd=setstate PM01_Sw_01 on

Die Library EtherCard bietet die Möglichkeit Request-Header zu setzen womit man den Basic Auth für Fhem hinbekommt.

Die ganze Konstruktion lag dann eine ganze Weile im Keller rum da andere Pflichten gerufen haben. Ich hatte zum Testen ein paar Verbraucher wie z.B. meinen Baustellenstrahler und ein Ladegerät angeschlossen die ich über die Fhem App schalten konnte. Nach einiger Zeit der Nutzung war ich echt überrascht wie zuverlässig das funktioniert. Diese Experimentier-Konstruktion hatte was von einer Funksteckdose nur mit dem Unterschied dass ich 8 Steckdosen auf einmal schalten konnte.

Das Projekt

Nachdem das Ganze so gut funktioniert hat habe ich beschlossen dem Ganzen ein Gehäuse zu spendieren und weiter damit zu experimentieren.

Bei meiner Suche nach einem potenziellen Gehäuse für die Konstruktion bin ich auf den PowerManager von Conrad Elektronik gestoßen. Bietet genüg Platz, das Metallgehäuse lässt sich schön erden und die Schalter lassen sich dank Standard-Maß leicht gegen Taster austauschen. Einziges Manko, nur 7 Steckdosen. Ein Relais ist also tot.

Ein paar passende beleuchtete Edelstahl Drucktaster habe ich in der Bucht gefunden. Diese haben einen Einbaudurchmesser von 19 mm und sind außerdem noch beleuchtet. Damit ist der Schaltzustand einer Steckdose direkt am Taster erkennbar. Bei der Spannung der LEDs hatte ich etwas Sorge, da diese 12 V beträgt. Hatte mir extra einen ULN2803 besorgt um mit den 5V von Arduino die 12 V schalten zu können. Es hat sich aber herausgestellt dass die LEDs mit 12 V viel zu hell sind und mit den 5 V eine optimale Helligkeit haben.

Hab das Darlington Array trotzdem drin gelassen, damit die IO-Pins des Arduino nur schalten und die Taster nicht mit Strom versorgen müssen. Für die Relais braucht man keinen da man hier nur die Optokoppler schalten muss.

Die Gesamtkosten des Projekts liegen etwa bei 130-150 Euro.

Materialliste

Typ Menge Notizen Link Einzelpreis Gesamtpreis
Power Manager 1 Power Manager BOOS RC7 <a href="https://www.conrad.de/de/power-manager-boos-rc7-steckdosenanzahl-7-998662.html">Link</a> 44,99 &euro; 44,99 &euro;
Arduino Mega 1 MEGA 2560 R3 Board <a href="https://de.aliexpress.com/wholesale?SearchText=arduino+mega">Link</a> 5,38 &euro; 5,38 &euro;
Arduino Prototype Shield 1 Prototype Shield ProtoShield V3 <a href="https://de.aliexpress.com/wholesale?SearchText=arduino+MEGA+Proto+Schild">Link</a> 1,90 &euro; 1,90 &euro;
Relais Modul 1 8 Kanal Relay 5V <a href="https://de.aliexpress.com/wholesale?SearchText=8+channel+relay">Link</a> 5,63 &euro; 7,95 &euro;
Netzwerkmodul 1 ENC28J60 Netzwerkmodul <a href="https://de.aliexpress.com/wholesale?SearchText=ENC28J60">Link</a> 2,04 &euro; 4,95 &euro;
Drahtbrücke 2 polig 14 (2 Pkg) 10x 2-polig Buchse Buchse Drahtbrücke 70cm Dupont-Kabel <a href="https://de.aliexpress.com/wholesale?SearchText=dupont+2+pin+70+cm">Link</a> 2,20 &euro; 4,40 &euro;
Drucktaster 7 Drucktaster Edelstahl IP67 19 mm <a href="http://www.ebay.de/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0.TRC0.H0.XDrucktaster+Edelstahl+IP67+19+mm+LED+Ring+Gr%C3%BCn.TRS0&_nkw=Drucktaster+Edelstahl+IP67+19+mm+LED+Ring+Gr%C3%BCn&_sacat=0">Link</a> 6,69 &euro; 46,83 &euro;
Steckernetzteil Micro USB 1 Dünnes Netzteil bevorzugen <a href="https://de.aliexpress.com/wholesale?SearchText=Steckernetzteil+Micro+USB">Link</a> 2,57 &euro; 2,57 &euro;
Spannungswandler 3,3V 1 Spannungsregler AMS1117 3,3 V <a href="https://de.aliexpress.com/wholesale?SearchText=AMS1117+DC-DC+3.3V">Link</a> 0,30 &euro; 0,30 &euro;
8 fach Darlington Array 1 ULN 2803A <a href="https://de.aliexpress.com/wholesale?SearchText=ULN2803A">Link</a> 1,26 &euro; / 10 Stück 0,13 &euro;
USB-Schalttafeleinbaukabel 1 Ungewinkelt billiger <a href="https://de.aliexpress.com/item/30cm-Blcak-Right-Angle-USB-2-0-B-Female-to-USB-B-Male-Printer-90-Degree/32287213362.html">Link</a> 4,85 &euro; 4,85 &euro;
LM35 1 Temperaturfühler (optional) <a href="https://de.aliexpress.com/wholesale?SearchText=lm35">Link</a> 0,70 &euro; 0,70 &euro;
M3x6 Schraube schwarz 2x        
M3 Mutter 2x        

Überspannungsschutz

Man kann auch (wie ich) den Powermanager mit integriertem Überspannungsschutz nehmen, allerdings benötigt man dann ein weiteres Teil aus dem 3D Drucker um sich einen neuen Halter für die Überspannungsschutz-Komponente zu drucken, da das Bauteil an einer sehr ungünstigen Position sitzt. Einen passenden Halter habe ich konstruiert und kann hier heruntergeladen werden.

Zerlegen

Der Inhalt des Powermanagers ist recht überschaubar. Die Schalter im Frontpanel kommen raus da diese später durch Taster ersetzt werden. Am besten entfernt man erst mal alles aus dem Metallgehäuse, da noch Löcher für LAN und USB am Gehäuse gemacht werden müssen und sämtliche montierten Teile dabei nur stören. Die Komponente für den Überspannungsschutz muss auch erst mal weg, da dieser Platz später benötigt wird. Diesen erst mal zur Seite legen, der kommt später wieder rein.

Die Niete für die Masse-Leitungen muss aufgebohrt werden und wird später durch eine Schraube ersetzt.

Die Flachsteckhülsen von den Kabeln zu den Steckdosen schneidet man ab und crimpt stattdessen Adernendhülsen drauf, die wir später in die Relais schrauben können.

Position der Elektronik

Das Relaismodul wird im Gehäuse vorne links Platz finden, der Arduino Mega rechts davon. Die beiden Module sind von der Länge her so, dass sie ganz gut Platz im Powermanager haben wenn sie längs eingebaut werden. Die beiden Platinen bekommen noch je eine Trägerplatte aus dem 3D Drucker auf denen die beiden Module dann am Boden fixiert werden können.

Die 3D-Dateien für die Trägerplatten gibt es hier zum Download. Hat man einen Drucker der groß genug ist könnte man die beiden Module sogar auf einen Träger montieren.

LAN-Anschluss

Den LAN-Anschluß habe ich gewählt weil das Gehäuse aus Metall ist und damit bei Funkverbindungen die Gefahr besteht, dass die Verbindung nicht zuverlässig funktioniert.

Da auf der Rückseite recht wenig Platz ist, habe ich die LAN-Buchse recht weit hinten, seitlich am Gehäuse platziert. Für die Befestigung des Halters am Gehäuse habe ich ein kleinen Halter konstruiert den es hier zum Download gibt. Das geht mit Sicherheit noch besser, habe aber auch mit dem Thema 3D Druck gerade erst angefangen.

Die Größe und Position des Lochs habe ich mir auf einen kleinen Zettel aufgezeichnet, das Loch ausgeschnitten und mit ein paar Streifen Tesa auf der Seitenwand des Gehäuses fixiert. Dann mir der Bohrmaschine und einen kleinen Bohrer das Loch grob ausgebohrt und anschließend mit einem Dremel nachbearbeitet. Die Feinarbeit bis der RJ45 Port dann durch das Loch gepasst hat habe ich mit einer Eisenfeile gemacht.

Reset Button

Dieser ist eigentlich nicht nötig und ich habe ihn auch noch nie gebraucht, aber ich fand ihn irgendwie sexy :-) Unterhalb der Durchführung des Stromkabels aus dem Powermanager ein Loch bohren, so dass der Taster durch passt. Das Kabel so lang machen dass es bis zum Arduino Mega reicht. Lieber ein bisschen zu lang als zu kurz ;-).

Frontpanel

Aus dem Frontpanel müssen alle Schalter entfernt werden und gegen die neuen Edelstahl-Taster ersetzt werden. Die Pinbelegung meiner Taster ist auf dem Bild vermerkt und kann ggf. von anderen Taster abweichen. Wenn der Taster, wie meiner aus der Abbildung, sowohl einen Öffner- als auch einen Schließerkontakt hat muss man aufpassen dass man nicht versehentlich den falschen erwischt. Das könnte sonst zu unerwarteten Ergebnissen führen :-)

An die Taster werden die langen 2poligen Dupont Kabel angelötet. Dazu die Kabel in der Mitte halbieren und die Hälften jeweils an den Schaltkontakt (Schließer) und an die LED löten.

Wenn man es etwas schöner haben möchte dann halbiert man die Kabel nicht, sondern passt sie später beim Einbau der Länge nach so an dass sie nachher genau auf den Arduino passen.

Damit man die beiden Leitungen auseinanderhalten kann, habe ich um einen der beiden Leitungen ein Stück farbigen Schrupfschlauch gelegt. Die äußeren Kabel sind etwas länger die inneren, die näher am Arduino sind, sind etwas kürzer.

Temperatursensor

Ich habe vier Temperatursensoren ausprobiert. Den DHT11 und den DHT22, den Dallas DS18B20 und den LM35DZ. Sehr interessant war dass alle Sensoren eine ziemliche Abweichung bei Messen der Temperatur hatten. Alle Sensoren meldeten andere Temperaturen obwohl sie direkt nebeneinander lagen. Da ich aber hauptsächlich wissen wollte wie warm es im Inneren des Gehäuses wird und es im Betrieb zu einer Überhitzung kommt war dieser Umstand nicht so tragisch. Alles über 50°C ist einfach mal suspekt...

Da die Sensoren DHTxx und der DS18B20 serielle Kommunikationsprotokolle zur Datenübertragung verwenden, entsteht bei jeder Abfrage eine kleine Verzögerung in der der Powermanager auf Antwort des Sensors wartet und sich damit nicht um den Webserver kümmern kann.

Da ich befürchtet habe dass sich das evtl. negativ auf die Reaktionsgeschwindigkeit des Powermanagers auswirkt habe ich mich für den LM35DZ entschieden. Dieser liefert eine analoge Spannung zwischen 0 und 1 V mit einer Temperaturempfindlichkeit von 10mV/K. Der Arduino arbeitet standardmäßig mit 5V am analogen Eingang. Da der LM35DZ aber nur Spannungen bis maximal 1V ausgibt, würde man so etwa 80% an Genauigkeit verlieren. Um die Werte zu verbessern setzt man die AREF Spannung für die analogen Ports auf 1.1V. Teilt man 1.1V durch 1024 ergibt sich 0.001075V = 1.0742 mV pro Messschritt. Da laut Datenblatt 1 Grad 10 mV entsprechen ändert sich die Grad-Anzeige alle 10 mV / 1.0742 mV = 9.31 Messschritte um 1 Grad.

Prototyping Board

Es folgt das Herzstück des Powermanagers, der Arduino Mega mit Prototyping Board. Leider habe ich kein Fritzing Part für das Proto Board gefunden, sonst gäbe es an der Stelle noch eine Zeichnung. So gibt es nur zwei Bilder von der Festig bestückten Platine und einem Versuch die einzelnen Module zu kennzeichnen. Ich werde mal versuchen das Prototype Board in Fritzing selbst zu erstellen, allerdings kann das noch ein bisschen dauern...

Funktionsgruppe Beschreibung
1 Anschlusspins LAN-Port
2 Anschlusspins Relais Module
3 LM35 Temperatur Sensor
4 3.3V Spannungsregler für LAN-Modul. Das Spannungsregler-Modul ist einfach kopfüber in zwei 2pin Buchsenleisten gesteckt. Den Elko hätte ich mir vermutlich sparen können, da auf der Modulplatine schon Kondensatoren sind.
5 Anschlusspins für Taster je 1x GND und 1x IO
6 Darlington-Array und Anschlusspins für Tasterbeleuchtung. Der einzeln stehende PIN ist für die Stromversorgung der LEDs gedacht und kann je nach gewünschter Helligkeit und Tastern variieren. Ich habe sie bei mir mit einem Dupont-Kabel auf 5V gelegt.
7 Anschlusspins für Reset und LAN-Connected LEDs
8 Anschlußpin für Reset-Taster
9 Stromanschluss 5V

Zusammenbau

Nachdem man jetzt alles mal provisorisch zusammengesteckt hat und die Funktion überprüft hat kann man alles in das Gehäuse einbauen.

Der Arduino mit dem Proto Schield sowie das Relais-Modul kommen auf ihre jeweiligen Träger und werden an das Bodenblech geschraubt.

Für die Stromversorgung des Arduinos und des Relais habe ich ein normales Steckernetzteil verwendet, welches über eine Eurokupplung mit der Netzteilung hinter dem Hauptschalter und den Überspannungsschutz verbunden wird.

Das Netzteil sollte mindestens 1,5 A, besser 2 A liefern können. Die 8 Relais ziehen in angezogenem Zustand jeweils etwa 70 mA, der Arduino maximal 500 mA, das LAN-Modul max. 250 mA und die LEDs der Taster nochmal jeweils 10 mA. Damit sind wir bei 1380 mA plus noch etwas Reserve sollten mindestens 1,5 A schon sein. Da der Preisunterschied zwischen 1,5 A und 2 A sehr gering ist kann man auch gleich ein 2 A Netzteil nehmen dann ist man auch bissle weiter vom Limit entfernt. Der Powermanager IoT soll ja schließlich ne Weile halten ;-)

Die 230V habe ich über Wago-Klemmen an die Relais verteilt. Da die Relais maximal 10A vertragen habe ich flexible Adern mit 1,5mm2 Querschnitt genommen auf deren Enden ich Adernendhülsen aufgecrimpt habe. Laut Belastbarkeitstabelle bin ich bei 40 °C Umgebungstemperatur (sollte für Deutschland reichen...) noch bei einer Belastbarbeit von 14 A und damit (hoffentlich) auf der sicheren Seite. Die Wago Klemmen vertragen einen Strom von 32 A und sind damit auch mehr als ausreichend.

Theoretisch müsste die Ader vom Netz zum Wago-Verteiler einen größeren Querschnitt haben, aber ich habe einfach die Ader genommen die sowieso schon werksseitig verbaut war. Die 14 A gelten ja eh nur bei einer Umgebungstemperatur von über 40 °C und die Verbraucher die ich anschließen werde werden diese Last niemals ziehen. Außerdem fliegt bei 16 A sowieso der LSS und von daher sollte das so passen.

Nicht vergessen die Erdung wieder am Gehäuse zu befestigen, die kann im Zweifelsfall Leben retten. Habe die Erdung mit einer kleinen M3 Schraube, einer Mutter und einer Zahnscheibe, welche ein selbstständiges Lösen verhindern soll, wieder angebracht.

Fertig

Ist alles eingebaut, dann sieht der Powermanager IoT etwa so aus:

Im Nachhinein betrachtet hätte ich anstatt dem ENC28J60 Netzwerkmodul lieber ein W5100 Ethernet Modul verwenden sollen, das muss wohl etwas einfacher zu verwenden sein. Leider war mir das damals noch nicht bekannt.

Im Moment experimentiere ich auch gerade ein bisschen mit dem MQTT Protokoll was für diesen Zweck auch ziemlich gut geeignet sein dürfte. Der nächste Powermanager bekommt auf jeden Fall eine Anbindung an MQTT.

Montag
31
Oktober 2016
Klaus Moser
Klaus Moser

PPA hinzufügen / entfernen

PPA installieren

sudo add-apt-repository ppa:some-fancy-ppa/coolstuff
sudo apt-get update
sudo apt-get install coolstuff

PPA entfernen

sudo apt-get install ppa-purge
sudo ppa-purge ppa:some-fancy-ppa/coolstuff
Blog

Kmoser's Tech-Blog