Archiv der Kategorie: Allgemein

Wie heiss ist mein Hotbed? – Hotbed isolieren und besser an die Oberfläche koppeln

Wie schon in einem anderen Beitrag beschrieben, betreibe ich als 3D Drucker eine Prusa I3 Variante. In dem entsprechenden Bausatz sind übliche Komponenten mit einer Standardkonstruktion: Hotbed MK2a + Aluplatte + federnde Lagerung an den 4 Ecken.
MK2a_Hotbed
Mit einer Versorgungsspannung von 12,8V konnte ich laut Display Werte von bis über 120 Grad erreichen. Aber sollte auf einem 120 Grad heißen Hotbed ein Wassertropfen nicht zwischend verdampfen? – Mit kam der starke Verdacht, dass die Anzeige arg optimistisch ist. Der Grund war schnell ausgemacht. Das Hotbed – also die Platine, die heiss wird – ist eigentlich nur an den Ecken mit der Druckoberfläche aus Aluminium verbunden. Es ist also durchaus möglich, dass das Hotbed und der daran befestigte NTC die 120 Grad erreichen. Mit der Temperatur der Druckoberfläche hat das aber nicht viel zu tun.

Deshalb habe ich versucht, die Konstruktion zu verbessern:
1. Hotbed von unten isolieren, um den Wärmeverlust nach unten zu minimieren.
2. Ankopplung des Hotbeds an die Druckoberfläche verbessern.
Danach habe ich mit einem IR Thermometer nachgemessen, wie warm das Hotbed wirklich ist.

Hotbed isolieren:
Auf der Suche nach eiem geeigneten Material, bin ich durch die lokalen Baumärkte gelaufen. Man liest in diesem Zusammenhang von Korkplatten im Netz. Nachdem ich nichts fand, was stabil genug und nicht zu dick ist, habe ich nach Alternativen geschaut. Dabei bin ich auf das Material Klimatec Thermovlies Basic der Firma Erfurt gestoßen.
Netterweise gab es Materialproben im Maß 20cm x 10cm kostenlos neben den großen Rollen. Also habe ich zwei Proben mitgenommen und zu Hause bei 250Grad an den Lötkolben gehalten. Das Material hat den Test bestanden.
Ich habe die Klimatec Streifen zugeschnitten und zunächst mit normalem doppelseitigen Klebeband auf die Hotbed Unterseite geklebt. Das war keine gute Idee und am Ende eine große Schweinerei. Der Kleber löste sich bei ca. 80 Grad auf, die Streifen gingen ab und das Hotbed war nur recht aufwändig mit Terpentinersatz sauber zu bekommen.
Mangels Kapton habe ich dann die Streifen einfach mit 3M 2090 Bluetape aufgeklebt. Bisher hält es auch bei ABS (100 Grad).
Und so sieht das ganze nun von unten aus:
Hotbed_insulated
Die Isolierwirkung scheint mir ausreichend. Wenn ich auch nach längerem Hotbed Betrieb um 100 Grad einen Finger von unten an die Isolierung halte, ist das problemlos auszuhalten.

Hotbed besser and die Druckoberfläche ankoppeln:
Auch hier bin ich wohl nicht der Erste auf der Suche nach einer Lösung, wie Google zeigt. Das MK2a Hotbed hat auch ein zentrales Loch. Damit könnte man die Druckoberfläche in der Mitte mit der Aluplatte verschrauben. Diese Idee gefiel mir aber nicht, weil ich dann mitten auf dem Hotbed eine Senkkopfschraube hätte. Den Effekt sähe man vermutlich in jedem Ausdruck. Die Lösung war am Ende einfach, eine Feder zu nehmen. Die Unterkonstruktion des Drucktisches meines Druckers hat zentral eine Acrlystruktur. Hier ist der Zahnriemen für den Antrieb der y-Achse befestigt. In der Hotbed Mitte stehen deshalb unterhalb zwei Schraubenköpfe heraus. Die Feder habe ich einfach über den hinteren Schraubenkopf als Fixierung gestellt. Dann habe ich geprüft, dass eine Feder an dieser Stelle nicht auf den NTC drückt.
Die entsprechende Druckfeder sollte nicht zu stark sein. Ein Druck von 2N ist sicherlich ausreichend. Hier ist ein Foto, das die montierte Feder zeigt.
Hotbed_Coupling_Spring

Praktische Erfahrungen mit Isolation & Feder:
Das Hotbed erreicht nun auch nach langem Aufheizen keine 120 Grad mehr. Nominal komme ich knapp über 100 Grad. Gefühlt ist da Hotbed aber deutlich heißer als zuvor.

Wie heiß wird das Hotbed denn nun wirklich?
Dazu habe ich mehrere Messungen mit einem IR Thermometer durchgeführt. Diese Messungen habe ich ca. 15 Minuten nach dem Erreichen der Zieltemperatur auf der Anzeige durchgeführt. Das Hotbed war dabei mit Bluetape beklebt. Die Messungen zeigen, dass die Druckoberfläche noch nicht im thermischen Gleichgewicht angekommen ist, wenn das LCD beginnt, die Zieltemperatur anzuzeigen. Einige spätere Messungen haben wiederum gezeigt, dass man mit 15 Minuten zusätzlicher Wartezeit ganz gut zu liegen scheint.
Konkret habe ich bei 60 Grad und bei 95 Grad nomineller Temperatur gemessen. Bei 60 Grad ergab sich eine zentrale Hotbed Temperatur von ca. 55 Grad. An den Rändern ungefähr 3-4 Grad weniger. Bei 95 Grad lag die zentrale Temperatur bei 89 Grad. An den Rändern fällt die Temperatur bis auf 84 Grad ab.

Fazit:
Isolation und bessere Ankopplung sind empfehlenswert. Die Messwerte der Temperatur der Druckoberfläche sind auch mit diesen Maßnahmen nicht genau. Für das Zentrum muss man von bis zu 5 Grad weniger ausgehen. An den Rändern bis zu 10 Grad.

Über 100 Grad kommt man mit einem MK2 Hotbed bei 12V in den Realität nicht. Dazu müßte man die Spannung erhöhen. Dies sollte wegen des quadratischen Zusammenhangs zwischen Leistung und Spannung bei einem ohmschen Widerstand (P=U^2/R) mit einigen Volt zu erreichen sein. Ob eine generelle Erhöhung der Versorgungsspannung für die restliche Elektronik des Druckers in Ordnung ist, hängt von der konkreten Elektronik ab. Es ist es kein Problem, wenn alle Logikbauteile mit Spannungsreglern versehen sind. Die überlichen Nema17 Motoren und die A4988 Schrittmotortreiber halten ein paar Volt mehr problemlos aus.

3D Druck: Extruder für Ninjaflex optimieren

Es gibt für 3D Drucker ein sehr spannendes Filament namens Ninjaflex von der Firma Fenner Drives. Mit diesem Filament kann man gummiartige Strukturen drucken. Das Material ist wohl Polyurethan.Es zeigt zudem geringes Warping und braucht keine hohen Temperaturen. Ganz billig ist das Filament nicht. Es kostet ca. das Doppelte von PLA/ABS.

Gesehen, gekauft und dann kam das Problem: Das Filament druckt sich anfangs prima. Da es aber so schön flexibel ist, kommen irgendwann Filamentspiralen seitlich am Extruder heraus. Die Ursache ist schnell ausgemacht: Der Extruder schiebt das Filament in das Hotend-Rohr. Zwischen dem Rändelrad und dem Rohr ist aber etwas Platz, so dass das Filament seitlich „ausweichen“ kann.

Die Lösung (danke an Martin für den Tipp): Das Hotendrohr möglichst nahe an das Rändelrad bringen. Damit langt dann die Flexibilität des Filaments nicht mehr, um seitliche Schlaufen zu bilden. Im Folgenden ist der Umbau eines Geeetech MK8 Extruders beschrieben; bei anderen Extrudern geht das ähnlich. Weiterhin habe ich die Kabel in einer Zugentlastung fixiert und die Kabel mit Spiralschlauch umwickelt. Also zeige ich eine Umbauvariante, bei der man nicht alles auseinander bauen muss.

1. Lüfter und Kühlköper demontieren:
Zunächst werden Lüfter und Kühlkörper demontiert. Dazu einfach die beiden Schrauben am Lüfter lösen:
1_MK8_original

2. Spannhebel und Führungsrolle demontieren:
Um Spannhebel und Führungsrolle zu demontieren, die folgende Schraube entfernen:
2_MK8_orig_wo_cooler
Die Teile nach vorne abnehmen und zur Seite legen:
3_MK8_Fuehrungsrolle_ab

3. Motor vom Extruderhalter abschrauben:
Den Motor kann man nach hinten abziehen, wenn man die folgende Schraube löst:
4_MK8_Fuehrung_ab
5_MK8_Motor_ab

4. Extruderhalter abschrauben:
Der Extruder Halter ist an den Acrylteilen mit zwei Schrauben von unten fixiert. Diese Schrauben lösen.

5. Hotend Rohr justieren:
Man kann nun das Gewinderöhrchen weiter ins Innere des Extruders schrauben, in dem man den Halter um das Hotend (hängt ja noch an Kabeln) dreht.
6_MK8_Hotendhalter

6. Kontrolle der Position:
Das Ziel ist es nun, eine das Röhrchen so weit in den Extruder zu schrauben, dass es gerade so nicht an der Führungsrolle oder dem Rändelrad anstößt. Dazu muss man Motor und Führungsrolle wieder anschrauben und die Freigängigkeit kontrollieren.
7_MK8_Distanz_neu

Wenn alles stimmt, den Extruder wieder in umgekehrter Reihenfolge zusammenschrauben und fixieren. Durch den Umbau verringert sich die Distanz zwischen Hotend und den Acrylteilen. Bisher konnte ich keine negativen Auswirkungen feststellen. Durch die veränderte Lage der Düse muss nun der Tisch und der z-Endanschlag neu justiert werden.
8_MK8_opti
Mit dem Umbau funktioniert der Extruder mit Ninjaflex prima. Die anderen Filamente funktionieren natürlich weiterhin.

Ein 3D Drucker: Geeetech Prusa I3 X Pro

Ich hatte ja schon öfters mal überlegt und ein Freund hat mich dann am Ende überzeugt: Wir haben einen 3D Drucker. Ich habe mich für einen Selbstbausatz auf Basis des Openhardware Projekts Prusa I3 entschieden. Man kann sich dazu alle Komponenten selbst beschaffen. Sinnvoller erschien mir ein Komplettkit zu kaufen und dieses zu optimieren. Man bekommt hier einen Komplettbausatz zu Preisen, die man schwer in Einzelkäufen erreichen kann.
PrusaI3XPro
Ich habe mich für einen Geeetech Prusa I3 Pro X entschieden und diesen für 265€ bei ebay erstanden (Verkäufer isecsv110 = Geeetech). Der Vorteil des Kits sind die m.E. relativ anständigen Komponenten. Weiterhin werden in diesem Set keine gedruckten Teile für den Drucker verwendet. Diese haben in vielen Kits eine eher miese Qualität. Geeetechs Konstruktion ist ziemlich stabil.
Mit Zoll und Gebühren war das Paket per DHL für ca. 334€ eine Woche später da. Ich will hier keine Werbung für die Firma Geeetech machen. Es gibt viele gute Bausätze. Hier sind meine Ergänzungen & Änderungen zur offiziellen Anleitung mit diesem Kit. Einiges dürfte auf ähnliche Modelle übertragbar sein. Erwähnen möchte ich jedoch, dass Geeetech bei fehlerhaften Teilen problemlos Ersatz schickt und auch einen sinnvollen technischen Support und ein Forum anbietet.
Generell gilt hier aber wie auch bei vielen anderen Kits: Bau es so auf, wie es die Anleitung zeigt und es klappt garantiert nicht. Im Zweifelsfall hilft Intuition und technisches Verständnis weiter.

Metallstangen kontrollieren, richten oder Ersatz besorgen:
Direkt am Anfang sollte man die Metallstangen kontrollieren. Dazu rollt man die Stangen auf einem Tisch mit gerader Oberfläche. Sind die Stangen schief, muss man sie richten oder man braucht Ersatz. Wichtig sind vor allem die M8 Gewindestangen (die dünneren). Die glatten Stangen sollten natürlich auch gerade sein. Eine Abweichung ist hier aber nicht ganz so schlimm. Relativ egal sind Abweichungen bei den dicken Gewindestangen.

Unterlegscheiben verwenden:
Jede Schraube, die mit dem Acryl in Kontakt kommt, bekommt auch eine Unterlegscheibe. Das steht so zwar nicht in der Anleitung, es sind aber genug Scheiben dabei. Die Scheiben sind wichtig, um den Druck breiter zu verteilen. Acryl kann reißen, wenn man die Schrauben zu sehr anzieht.
Unterlegscheiben

Zahnriemen in Y-Richtung (Tisch vor/zurück):
Baut man den Riemen so wie beschrieben ein, so läuft er schräg. Gerade in der Endposition kann das eigentlich nicht gut gehen. Die Lösung ist einfach: Die Zahnriemenscheibe (Pulley) herumdrehen. Dann läuft der Riemen gerade.
Zahnriemenscheibe

Verschraubungen der großen Gewindestangen / Basis:
In der Anleitung und den Videos werden hier mal kurz die Muttern angezogen. Man muss hier aufpassen, dass man keine unnötige mechanische Spannung erzeugt. Am besten mit einem Metallwinkel prüfen, dass alles im Lot ist und die Schrauben so fixieren, dass die Winkel passen.
Verschraubung_Basis

Schlitten der z-Achse (auf/ab)
Hier besteht der größte Optimierungsbedarf und auch die größte Fehlerquelle für nachfolgende Probleme mit der Druckqualität. Die z-Achse ist der Schwachpunkt der Prusa Konstruktion. Auch kleine mechanische Spannungen koppeln von den Gewindestangen auf den Extruder-Schlitten ein. Und das erzeugt dann unschöne Ringe & Abweichungen im Ausdruck.

a) Position der z-Nuss
In der Geeetech Variante ist es unglücklich gelöst, dass die z-Nuss des Schlittens unten montiert ist. Die Alukoppler an den Schrittmotoren sollen Abweichungen in x/y Richtung bei der Drehung der Gewindestangen ausgleichen. Wenn der Extruderschlitten aber ganz nach unten gefahren ist, so ist die z-Nuss ganz nahe bei den Alu-Kopplern und jegliche Abweichung wirkt maximal. Deshalb habe ich die Konstruktion verändert und die z-Nüsse nach oben verlagert.
Dazu muss man die 4 Bohrungen auf der linken Seite im oberen Acrylteil selbst bohren. Links sind die Bohrungen oben wie unten vorhanden.
z-Schlitten

b) Durchführungen für die glatten Stangen vergrößern
Wenn man die Linearlager in die z-Schlitten montiert, laufen die glatten Stangen schwergängig. Der Grund ist schnell gefunden: Die Stangen schleifen oben/unten am Acryl des Schlittens. Also haben ich die Löcher auf M10 aufgebohrt. Es macht keinen Sinn, dass die Löcher im Acryl ebenso wie die Stangen 8mm sind.
Bohrung_M8Stangen

c) Rechtwinkligkeit / Parallelität von Gewindestange und glatter Stange
Der Ausrichtung der glatten Stangen wird durch das Linearlager definiert. Die Ausrichtung der Gewindestangen orientiert sich an den z-Nüssen, die mit dem zum Linearlager senkrechten Acrylteil verschraubt sind. Aufgrund von Fertigungstoleranzen an den Acrylteilen ist der z-Schlitten aber ganz und gar nicht rechtwinklig. Deshalb habe ich die Teile mit einer Metallfeile so nachbearbeitet, dass die beide Stangen parallel laufen. Dies prüft man am besten, bevor man die Schlitten montiert.

d) Leichtgängigkeit der Gewindestangen
Für eine gute Leichtgängigkeit habe ich die Stangen mit Silikonspray eingesprüht. Weiterhin war etwas Silikonspray am oberen Acryllager der Gewindestangen nötig.

Alukoppler richtig nutzen
In der Anleitung werden die Gewindestangen mal kurz in die Alukoppler der Schrittmotoren eingeführt und festgeschraubt. Dabei wird der eigentlich Trick aber nicht erklärt. Die Gewindestangen dürfen nur im oberen Teil der Koppler sein; so weit, dass man sie mit der Madenschraube fixieren kann. Dadurch werden Abweichungen in x/y Richtung am besten entkoppelt.
Setzt hingegen die Gewindestange auf der Achse des Schrittmotors auf, so kann der Koppler seine Aufgabe nicht erfüllen.
AluKoppler

z-Schlitten einmessen
Mit einer Schieblehre sollte man beide Schlitten nach der kompletten Montage sehr genau einmessen. Dazu nimmt am am besten zwei Holzklötze, die exakt identisch sind. Damit kann man durch Drehen der Gewindestangen die Schlitten so absenken, dass die glatten Stangen der x-Achse auf den Holzklötzen aufliegen.

LCD/SD richtig anschließen
LC und SD müssen richtig zwischen dem GT2560 Board und dem Display verkabelt werden. Diverse Anleitungen von Geeetech sind fehlerhaft. Das steht auch in vielen Foren. Es gibt auch korrigierte Anleitungen. Da man aber nicht weiß, ob man eine korrigierte Anleitung hat, ist man trotz Forumskommentaren wieder unschlüssig. Da beide Stecker identisch sind, bekommt man auch daraus keinen Hinweis. Schaut man genauer hin, so kann man erkennen, welche Leiterbahnen am LCD zum Display und welche zur SD laufen. Die richtige Beschaltung zeigt das folgende Foto:
LCD_SD_Anschluss
Die Bezeichnungen für LCD und SD auf dem GT2560 Board sind korrekt.

Ein Motor dreht falsch rum?
Nach dem ersten Einschalten und dem Auswahl von „AutoHome“ im Menü fuhr bei mir die x-Achse in die falsche Richtung und erreichte so natürlich nie den Endschalter. Man könnte nun den Zahnriemen entgegen der Anleitung herumdrehen. Alternativ kann man das Motorkabel umpinnen. Dazu nimmt man eine Nadel und hebt die kleinen Plastikzungen im motorseitigen Stecker an während man vorsichtig am Kabel zieht. Die Verkabelung wird so gespiegelt und schon dreht der Motor anders herum.
Motor_Anschluss

12V Spannung einstellen
Nach den ersten Tests sollte man die Spannung prüfen, die das Schaltnetzteil erzeugt. Mit dem kleinen Poti neben den Stromanschlussklemmen kann man die Spannung einstellen. Dazu löst man am besten erst einmal den Stromversorgungsstecker am GT2560 Logik Board, damit beim Einstellen nichts schief gehen kann. Ich habe zunächst eine Spannnung von 12,8V gewählt. Das stellt einen ersten Kompromiss zwischen Spannung für das Logikboard und genug Spannung für Motoren und Hotbed dar.

Zugentlastung am Extruderschlitten
Es ist sinnvoll am Extruderschlitten eine Zugentlastung vorzusehen, so dass die permanenten Bewegungen des Schlittens keine mechanische Belastung für die Stecker am Extruder erzeugen. Das kann beispielsweise mit Kabelbindern realisiert werden.
Extruder_Zugentlastung

Hotbed optimieren & Drehknopf am LCD geht falsch herum?
–> Dazu schreibe ich eigene Einträge.

Mit den oben genannten Optimierungen sind Ausdrucke wie das gezeigte Gears Objekt problemlos möglich (P Gears auf Thingiverse).

Es geht doch: Schrittmotor 28BYJ-48 mit der Original Arduino Stepper Library

Ich habe günstig zwei Schrittmotoren des Typs 28BYJ-48 inkl. einem Treiberboard auf Basis des ULN2003 erstanden. Hier folgt eine Anleitung, wie man diesen Motor problemlos mit der Arduino Stepper Library betreiben kann. An vielen Stellen im Netz liest man, dass das nicht geht und findet diverse hangestrickte Codes, umgebaute Libs etc. Der ganze Aufwand ist aber gar nicht nötig. Es langt 3 Zahlen im Code zu ändern oder zwei Kabel zu tauschen.
Stepper_28BYJ-48
Anfangs habe ich einfach alles so verkabelt, wie es im Arduino Tutorial für Schrittmotoren beschrieben ist und das Beispiel „Stepper Motor Control – one revolution“ auf einen Arduino Nano gespielt. Statt abwechselnd eine volle Drehung nach links und dann wieder nach rechts auszuführen, drehte der Schrittmotor immer wieder ca 30 Grad nach links. Eine Umkehr der Drehrichtung erfolgte nicht und besonders rund lief der Motor auch nicht.

Ein Blick ins Datenblatt liefert, dass für den Motor ein 8-schrittiges Halbschritt Verfahren vorgesehen ist. Die Arduino Bibliothek realisiert vier Vollschritte. Dieser Unterschied ist der Grund für die vielen Spezialimplementierungen. Der Motor läuft aber auch perfekt mit 4 Vollschritten, wenn man ihn richtig anschließt. Da der Motor mit 500 bzw 1000 Hz angesteuert wird, macht das Schrittverfahren auch keinen großen Unterschied. Aber auch bei sehr langsamen Schrittfolgen geht alles robust mit 4 Vollschritten.

Hier die Schrittfolge gemäß Datenblatt des 28BYJ-48 Schrittmotors in 8 Halbschritten (Drähte nach unten, Schritte nach rechts):
__________Steps_____________
Wire__1__2__3__4__5__6__7__8
1____________________x__x__x
2______________x__x__x______
3________x__x__x____________
4_____x__x_________________x

Wir nutzen nur die geraden Schritte / die Vollschritte:
_______Steps____
Wire__2__4__6__8
__1_________x__x
__2______x__x___
__3___x__x______
__4___x________x

Ein Blick in den Code der Stepper Bibliothek liefert die dort implementierte Schrittfolge:
_______Steps____
Wire__1__2__3__4
__1_________x__x
__2___x__x______
__3______x__x___
__4___x________x

Ein genauer Blick liefert die Erkenntnis: Man muss nur die Drähte 2 und 3 vertauschen, damit es stimmt.
Man kann natürlich die Drähte vertauschen. Das ist aber gar nicht nötig. Wir können den Tausch auch im Konstruktor der stepper Bibliothek vornehmen:
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
Mit dieser Änderung läuft der Motor schon mal rund und in beide Richtungen. Die Verkabelung bleibt dann: D8->IN1, D9->IN2, D10->IN3, D11->IN4.

Ein weiterer Blick in das Datenblatt verrät, dass der Motor bei 64 (Halb!-)Schritten 5,625 Grad dreht. Macht 4096 Halbschritte oder 2048 Vollschritte für eine volle Drehung um 360 Grad. Ergo:
const int stepsPerRevolution = 2048;

Jetzt passt auch der Titel des Codebeispiels „one revolution“. Last but not least stellen wir die Frequenz zur Ansteuerung richtig ein. Das geschieht bei der stepper Bibliothek durch die Angabe der Umdrehungen pro Minute (RPM). Im Datenblatt findet sich ein empfohlener Frequenzbereich von 600-1000Hz bezogen auf Halbschritte.
1000Hz / 4096 Schritte = 0,244Hz
Also 4 Sekunden für eine Umdrehung oder 15 RPM.
myStepper.setSpeed(15);

Nun läuft der 28BYJ-48 Schrittmotor wunderbar rund und in beide Richtungen.
Hier gibt es nochmal den Code mit allen Änderungen: stepper_28bj-48

Ferngesteuerter Audio Sample Player (aka Pupsmaschine)

Warnung: Dieses Projekt kann den Familienfrieden gefährden.

Als ich im Keller einen alten Anrufbeantworter und eine 433MHz Fernbedienung gefunden habe, entstand die Idee, den Kindern einen ferngesteuerten Audio Sample Player zu bauen. Das klingt zunächst nicht nach eine Kinderprojekt. Wenn man als Samples Flatulenzgeräusche aus dem Netz lädt, ist es eines 🙂 .
flatulenz_maschine

Die Hardware:
Ein Arduino Nano (Pro Mini, Uno etc gehen natürlich auch) dient als Kern. Ein Standard-SD Karten Leser für den Arduino kommt zum Einsatz. Ich habe ein Modell mit 3.3V Spannungsregler aber ohne Pegelwandler verwendet; bisher problemlos. Die Schaltung sollte aber genauso mit einem Leser mit Pegelwandler funktionieren. Ein 433MHz Empfänger (z.B. RXB12 oder XY-MK-5V) dient zum Empfang der Signale einer alten 433MHz Fernbedienung für Funksteckdosen. Zur Verstärkung habe ich einen kleinen 3W Audioverstärker mit PAM8403 Class-D Verstärker eingesetzt. Zwei Hinweise zu diesem Verstärker:

  1. Die beiden Audioausgänge keinesfalls parallelschalten.
  2. Der PAM8403 kann maximal mit 5V betrieben werden. Bei 3W Leitung ist das zuviel für den Festspannungsregler eines Nano/Uno etc. Je nach Spannungsversorgung also bitte einen eigenen Festspannungsregler für diesen Verstärker nehmen.

PAM8403
Das Gehäuse eines alten Anrufbeantworters mit 9V Batteriefach und Lautsprecher dient als zu Hause.
Die Audio Ausgabe erfolgt mit einem PWM Pin. Daher muss man mit einem Kondensator und einem Widerstand das Signal glätten, bevor es in den Audio Verstärker geht. Ein Elko entfernt die Gleichstromkomponente.

Alles zusammen ergibt folgendes Schaltbild:
FartMachineCircuit

Die Software:
Den Kern der Software bildet die tmrpcm Bibliothek. Diese muss zur Arduino IDE hinzugefügt werden: https://github.com/TMRh20/TMRpcm/wiki
Mit dieser Bibliothek kann man Samples im WAV PCM Format (16kHz, 8Bit, Mono) wiedergeben. Entsprechende Formate kann man mit diversen Audioprogrammen schreiben. Alternativ gibt es hier einen Online Konverter: http://audio.online-convert.com/convert-to-wav
Die WAV Dateien werden dann in das Hauptverzeichnis der SD Karte gelegt:

  • an.wav –> wird beim Einschalten abgespielt
  • aus.wav –> wird alle 5 Minuten abgespielt, damit die Kinder nicht vergessen, den Apparat wieder auszuschalten
  • 1.wav, 2.wav … –> die Geräusche, die bei Tastendruck abgespielt werden sollen 😉

Der Empfang der 433MHz Signale erfolgt mittels der RCSwitch Bibliothek. Auch diese muss zur Arduino IDE hinzugefügt werden: https://github.com/sui77/rc-switch
Mit den beiden Libraries sollte der Code kompilierbar sein. Dann einfach betreiben und im seriellen Monitor auf die Ausgaben schauen. Wenn man jetzt die Tasten der 433MHz Fernbedienung drückt, werden die empfangenen Codes ausgegeben. Diese kann man dann im Sourcecode (–> ENTER YOUR RF CODES HERE) einsetzen, um die entsprechende WAV Datei auszugeben.
Die SD Library ist bei der Arduino IDE dabei und sollte out-of-the-box laufen.
Und hier ist der Code: Pupsmaschine
Viel Erfolg & Spass!

Genaue Strommessung mit dem Arduino und dem ACS712 Hall-Sensor mittels Oversampling

Für ein Projekt habe ich einen ACS712 Hall-Effekt Stromsensor an einen Arduino angeschlossen, um den Strom und die Scheinleistung an einer Steckdose zu messen. Der ACS712 sorgt für eine Isolation zwischen 230V Netz und Arduino. Die Schaltung an sich ist trivial. Der ACS712 wird vom Arduino mit 5V versorgt. Der Ausgang des ACS712 geht an den A0 Pin des Arduino. Ich habe die 20A Version des ACS712 genommen, um den kompletten Bereich einer Steckdose abdecken zu können. Das Ganze habe ich zum Testen in das Gehäuse einer ausgeschlachteten Funksteckdose gepackt:
ACS712-Aufbau
Da der ACS712 an Wechselstrom angeschlossen ist, wird der Strom in eine Wechselspannung umgesetzt. Der Mittelwert der Wechselspannung ist die halbe Versorgungsspannung, also 2.5V. Die Amplitude der Wechselspannnung ist linear zum Strom durch den ACS712; bei der 20A Version 100mV/A. Bei Wechselstrom muss man das Ausgangssignal des ACS712 abtasten und den effektiven Strom berechnen:
Ieff^2 = Sum(I(t)^2)
Zunächst habe ich diese Abtastung per analogread realisiert. Die Abtastdauer habe ich auf 100ms gelegt. Das ist die kürzeste Dauer, die ein ganzahliges Vielfaches der Periodendauer für 50Hz und 60Hz Wechselstrom darstellt. Das Ganze hat funktioniert, war aber nicht wirklich genau.

Die Gründe:
1. Der ADC des ATmega 328P hat 10Bit Auflösung. Bei der 20A Version des ACS712 ergibt sich bei 100mV/A eine Genauigkeit der Einzelmessung von 49mA was bei 235V ca. 11 Watt entspricht.
2. Der Nullpunkt der Spannung liegt nicht exakt auf 512. Er liegt auch nicht exakt auf einem der Diskretisierungswerte.

Die Lösung:
1. Oversampling
Man kann durch eine geeignete Mittelung von Messwerten des ADC die Auflösung deutlich über die 10Bit erhöhen. Die Details dazu hat Atmel in der Application Note AVR121 beschrieben:
http://www.atmel.com/Images/doc8003.pdf
Kurz gesagt steht da: wenn man einen Wert mehrfach misst, kann man die Auflösung erhöhen. Die Wurzel der Zahl der Messungen gibt den Faktor der Erhöhung der Auflösung an. Das funktioniert zunächst einmal nur bei einem konstanten analogen Signal. Das liegt hier nicht vor. Wir wissen aber, wir wir die Einzelwerte zu summieren haben. Und wir wissen, dass die Summe der Einzelwerte über eine oder mehrere komplette Perioden Null ist.
Um dies Ausnutzen zu können bin ich von der Benutzung von analogread() weggegangen und habe das Sampling durch eine direkte Programmierung der ADC Register realisiert. Damit ist die Programmierung für den ATmega 328P bei 16MHz CPU Takt ausgelegt (Arduino Nano, Uno, MiniPro etc). Für andere Mikrocontroller sind ggf Codeänderungen nötig.
Im Datenblatt des ATmega328 steht, dass der ADC-Takt für optimale Genauigkeit auf 100-200kHz eingestellt werden soll. Deshalb wird im Code über das ADCSRA Register ein Faktor 1/128 zwischen CPU und ADC Takt eingestellt. Weiterhin braucht eine ADC Wandlung 13 ADC-Takte. Theoretisch ergibt sich so eine Samplerate von 9600 Abtastungen pro Sekunde. Praktisch erreicht der Code 812 Abtastungen in 100ms; es wird ja auch noch ein wenig gerechnet und der Loop ist auch nicht umsonst. Theoretisch ergibt sich damit eine Genauigkeit zwischen 14 und 15 Bit. 14 Bit entspricht ca. 0,6mA oder 0,15W. In der Realität ist aber die Diskretisierung nicht ideal und Rauschen spielt auch eine Rolle.

2. Behandlung des ADC-Offset / Nullpunkts
Der Code versucht den Nullpunkt des gesampleten Signals zu schätzen. Das geht, weil die Summe der Einzelwerte über eine oder mehrere komplette Perioden hinweg Null sein sollte. Dies kann man zweimal Ausnutzen:
a) Nach jeder Sampleperiode wird der Mittelwert bestimmt und als ADC-Offset für die nächste Sampleperiode eingestellt. Damit werden unnötig große Zahlen in der quadratischen Summe vermieden. Allerdings wirkt diese Korrekur nur auf die nächste Sampleperiode und die Korrektur wirkt nur „ganzzahlig“.
b) Der ADC-Offset liegt typischerweise nicht exakt auf einem Diskretisierungswert sondern z.B. bei 509,24. Damit bleibt der Effekt von 0,24 unberücksichtigt; in diesem Beispiel 2,6W. Da wir aber wissen, dass die Summe der Abtastwerte Null ist, können wir den ADC-Offset berechnen und nachträglich korrigieren. Dazu wird in der Sampleschleife neben der Quadratsumme auch die Summe der Messwerte berechnet. Es gilt dann:
Sum((I(t)+offset)^2) = Sum(I(t)^2) + 2*offset*Sum(I(t)) + offset^2*NumSamples

Mit diesen Ideen habe ich folgenden Code programmiert. Die Code gibt die Scheinleistung in Watt aus.
ACS712_AC_20A

Praktische Anwendung – Test 1 : Lastfrei
Ohne angeschlossene Last sollten wir 0 Watt messen. Das klappt auch prima – Mittelwertbildung und Offset-Korrektur funktionieren:
Precise AC Current Measurement with ACS712 - Stefan Thesen 09/2016
0.00
0.00
0.00
0.00
0.00
0.00

Praktische Anwendung – Test 2 : 40W Glühbirne
Mit einer 40Watt Glühbirne habe ich folgende Messwerte erhalten:
38,83
38,60
38,65
38,06
38,17
38,53
38,42
38,64
38,59
38,26
38,86
38,64
38,25
38,71
38,27
38,60
38,68

Anhand der Messwerte bestätigt sich eine Reproduzierbarkeit, die grob in die Richtung der theoretisch vorausgesagte Genauigkeit geht. Der Mittelwert dieser Werte ist 38,52W. Mein Energiemessgerät zeigt 38,6W an:
Energiemessgeraet
Ich möchte aber klar darauf hinweisen, dass ich hier keine ernsthafte Eichung oder Validierung der Messwerte durchgeführt habe. Der ACS712 führt auch noch eine Ungenauigkeit ein. Auf 2-3 Watt sollte es stimmen. Bitte auch beachten, dass wir hier die Scheinleistung sehen; eine Phasenverschiebung zwischen Strom und Spannung wird nicht gemessen.

Ergänzung (02.10.15):
Die Stromversorgung des Arduino muss sehr stabil sein, damit die o.g. Genauigkeiten erreicht werden. Wenn das Netzteil „brummt“, wirkt sich das spürbar aus.

433MHz Empfänger für Arduino & Co: RXB12 vs. XY-MK-5V

In diesem Eintrag möchte ich einige Erfahrungen mit dem Einsatz von zwei verschiedenen 433MHz Empfängern in Mikrocontrollerprojekten teilen.

Lange Zeit habe ich in meinen Bastelprojekten immer den sehr weit verbreiteten XY-MK-5V Empfänger eingesetzt. Dieser bietet sich für die üblichen Projekte um Funksteckdosen und einfache Heimautomatisierungslösungen an. Man findet den Empfänger auch in vielen kommerziellen Produkten wie z.B. in Elro Funksteckdosen. Der XY-MK-5V ist für ein sogenannten OOK (on-off keying) verwendbar. Das heißt der Datenpin ist high, wenn ein 433MHz Träger empfangen wird.
Der Empfänger selbst ist sehr einfach aufgebaut. Es handelt sich im Wesentlichen um einen LC Schwingkreis der an einen LM358 Universal-Operationsverstärker angeschlossen ist. Wird ein Träger empfangen, geht der LM358 in die Sättigung.
Die Einfachheit der Konstruktion hat einen entscheidenden Nachteil. Der Empfänger ist nicht sehr trennscharf und auch durch dielektrische Materialen in der direkten Umgebung beeinflussbar. Montiert man einen XY-MK-5V in der direkten Nähe eines großen Kondensators, so ist der Empfang schnell gestört. Ebenso ist ein Betrieb in der Nähe eines WiFi Senders praktisch unmöglich. Obwohl das WiFi auf 2.4GHz sendet und der Empfänger auf 433MHz abgestimmt ist, koppelt auch bei 20cm Abstand zuviel WiFi Signal ein. Praktisch musste ich diese Erfahrung in meinem Projekt zur Markisensteuerung sammeln. Und auch die Empfangsleistung ist nicht ideal, weil über die Breite viel Rauschen eingefangen wird. Dennoch kann man mit dem XY-MK-5V gute Ergebnisse erzielen, wenn die Umgebung die entsprechenden Randbedingungen erfüllt.

Vor einigen Wochen habe ich dann einen 433MHz Empfänger mit der Bezeichnung RXB12 entdeckt, der auf einem Baustein namens SYN470R basiert. Die elektrischen Anschlüsse sind identisch zum XY-MK-5V; auch dieser Empfänger ist für OOK gedacht. Von der Theorie her sollte der RXB12 deutlich überlegen sein. Da dieser Empfänger für 1.50€ bei ebay zu haben ist, stellt sich auch keine Kostenfrage. Es handelt sich um einen Syperheterodyn-Empfänger mit einer Zwischenfrequenz von 6.75MHz. Die Zwischenfrequenz wird über einen Quarz erzeugt. Damit sind für Frequenzstabilität und Filterung deutlich bessere Ausgangsvoraussetzungen vorhanden als bei dem doch arg einfach aufgebauten XY-MK-5V.
433MHz Receivers
Ein Vergleich auf Datenblatt-Niveau ist schwierig. Für den SYN470R / RXB12 gibt es ein Datenblatt von Synoxo. Für den XY-MK-5V konnte ich bisher nichts außer unbestätigter Claims in Foren finden. Der praktische Vergleich spricht allerdings klar für den RXB12. Ich habe den Empfänger in einige Designs 1:1 eingesetzt. Jedes Mal war der RXB überlegen:

  • Reichweite im Haus: RXB12 keine Probleme – auch nicht vom Keller in den ersten Stock. Bei maximaler Distanz wird die Übertragung mit dem XY-MK-5V unstabil.
  • Empfang direkt neben einem ESP8266 Mikrocontroller (Distanz <10cm) mit gemeinsamer Masse: RXB12 empfängt problemlos Signale eines Senders irgendwo im Haus. Beim XY-MK-5V muss der Sender auf unter 20cm herankommen, damit der Empfang robust ist.
  • Empfang in der direkter Nachbarschaft eines Kondensators in einem Kondensatornetzteil: Der RXB empfängt – der XY-MK-5V ist „taub“.

Fazit: Ich nehme ab jetzt nur noch den RXB12 / SYN470R.

ESP8266 mit dem ADXL345 Beschleunigungssensor verbinden

Für ein Projekt habe ich versucht einen ADXL345 3-Achsen Beschleunigungssensor mit einem ESP8266 Mikrocontroller zu koppeln. Das ist ziemlich „straight forward“. Es gibt aber ein paar kleinere Stoplersteine und da ich keine konkreten Erfahrungen, Code oder Beschaltung im Netz finden konnte, poste ich hier meinen Ansatz.

Der ADXL345 hat eine I2C Schnittstelle und es gibt viele Beispiele für die Kopplung mit einem Arduino. Der Anspruch hier ist, den ESP8266-01 zu verwenden, der nur zwei GPIOs hat. Da der ADXL wie der ESP mit 3.3V läuft, hat man schon mal keine Probleme mit Spannungspegeln. Der Schaltplan ist dann eigentlich trivial. Der SCA Anschluss des ADXL I2C-Busses geht an GPIO0, SCL an GPIO2. Die Pullups im ESP scheinen zu langen; es sind keine weiteren Widerstände nötg. Der CS (Chip Select) Anschluss geht dauerhaft auf 3.3V. Die Schaltung funktioniert problemlos, weil der I2C Bus des ADXL hochohmig ist und den ESP beim Start nicht ungewollt in den Programmiermodus bringt (siehe hier). Die gesamte Schaltung ist somit:
esp8266_adxl345_schema
Ich habe das ganze zum Testen als fliegende Schaltung mit einem adaptierten Programmierboard aufgebaut. Auf diesem adaptierten Programmierboard sind die GPIOs des ESP herausgeführt. Dem ADXL macht es nicht aus, wenn man GPIO2 des ESP und damit den SCL-Pin des ADXL kurzzeitig auf Masse zieht, um in den Programmiermodus des ESP zu kommen.

Fallstricke im Code:
Die gute Nachricht vorneweg. Die notwendige Wire-Bibliothek ist in der ESP/Arduino IDE in der aktuellen Version enthalten. Damit ist das größte Problem schon für uns gelöst worden.
Wenn man Beispielcodes für den ADXL mit dem Arduino ansieht, so nutzen diese häufig den CS Pin um den ADXL ein- und auszuschalten. Diese Möglichkeit haben wir mit dem ESP8266-01 nicht (mit dem ESP8266-12 wäre es möglich). Somit habe ich einen Beispielcode um die CS Schalterei bereinigt.
Die zweite potentielle Falle liegt in der Initialisierung des I2C Busses. In den meisten Codebeispielen werden die I2C Pins nicht explizit festgelegt; beim Arduino werden standardmäßig D4&5 benutzt. Wir wollen GPIO0 & 2 und deshalb muss der Konstruktor angepasst werden.
Die dritte Falle liegt im Auslesen / Konvertieren des Messdaten. Dazu werden in den Arduino Codebeispielen Bitshift Operationen auf dem int-Datentyp ausgeführt. Der Datentyp int ist auf dem Arduino 16-Bit breit und auf dem ESP 32-Bit breit. Deshalb muss man int an den relevanten Stellen durch short ersetzten. Der Datentyp short ist auf Arduino und ESP 16-Bit breit und man hat einen Code, der auf beiden Plattformen läuft.

Damit bekommt man folgenden Code, der sich ganz stark an einem Beispiel von sparkfun.com anlehnt:
esp_adxl345

Wenn man das so auf den ESP flasht, bekommt man folgende Ausgabe auf dem seriellen Port:
Init - S. Thesen ESP8266 & ADXL345 Demo
x: -0.05 y: -0.93 z: 0.24 Total: 0.96
x: -0.04 y: -0.93 z: 0.24 Total: 0.96
x: -0.05 y: -0.93 z: 0.25 Total: 0.96
x: -0.04 y: -0.93 z: 0.24 Total: 0.96
x: -0.05 y: -0.92 z: 0.25 Total: 0.96
x: -0.04 y: -0.92 z: 0.24 Total: 0.95
x: -0.04 y: -0.93 z: 0.24 Total: 0.96
x: -0.05 y: -0.93 z: 0.24 Total: 0.96
x: -0.04 y: -0.93 z: 0.24 Total: 0.96
x: -0.04 y: -0.93 z: 0.24 Total: 0.96
x: -0.04 y: -0.92 z: 0.25 Total: 0.96
x: -0.04 y: -0.93 z: 0.24 Total: 0.96
x: -0.04 y: -0.93 z: 0.24 Total: 0.96
x: -0.05 y: -0.93 z: 0.24 Total: 0.96
x: -0.04 y: -0.93 z: 0.25 Total: 0.96
x: -0.05 y: -0.93 z: 0.24 Total: 0.96

–> Funktioniert.
Wir haben jetzt die Basis für einen Beschleunigungs- und Lagesensor im WiFi. Gesamtkosten ca. 5€.

Teil 6: Schaltungsvarianten für das RFID Codeschloss für IQ+ und eQ-3: Relaisboard & WiFi

Ich habe hier einige Schaltungsvarianten und Aufbauten für das RFID Codeschloss (siehe Teil 1,Teil 2,Teil 3,Teil 4,Teil 5)zusammengestellt.

Verwendung eines typischen Relaisboards:
In den bisherigen Schaltplänen habe ich immer eine selbstgebaute Relaisstufe für die Klingel gezeigt. Man kann natürlich auch eines der typischen Arduino Relaisboard nehmen, die man für 2-3€ auf eBay bekommt. Da ist dann neben dem Treibertransistor und der Freilaufdiode auch häufig ein Optokoppler integriert. Die Schaltung muss man dann so abändern:
Codeschloss Arduino fuer Homematic eQ3 Arduino Relay Board
Man braucht aber auch noch eine SW Änderung. Die Relaisstufe im ursprünglichen Plan schaltet das Relais, wenn der Arduino Pin auf high geht. Fast alle kommerziell verfügbaren Relaisboards schalten aber bei Eingang low. Man muss also die Schaltlogik herumdrehen, wenn das Relais nicht 365 Tage im Jahr angezogen sein soll. Ab der Version 1.2 des Wiegand Controllers habe ich dazu in der HandleCodes.ino einen #define angelegt:
#define PINRINGACTIVE HIGH // HIGH for the schematics posted in blog; LOW for typical Arduino Relay Boards
Diesen #define auf LOW setzen, wenn man ein Relaisboard verwendet.
und der Vollständigkeit halber: Man erzeugt den Code für die eQ-3 Variante durch diesen #define:
#define EQ3LOCK 1 // enable this define for support of the new Keymatic eQ-3 lock
Mit diesen beiden #defines sollten alle Varianten bedienbar sein.

Codeschloss ins WiFi einbinden:
Nachdem das RFID Codeschloss und der Wiegand Controller nun seit 10 Monaten problemlos laufen, musste ich schon einige Male einen Code oder RFID Tag ändern. Bisher war das immer etwas nervig: Rechner zur Haustür bringen. Langes USB Kabel holen. USB Port freilegen usw.
In einem anderen Beitrag habe ich eine Telnet zu Seriell Brücke auf Basis des ESP8266 Mikrocontrollers vorgestellt. Und diese Brücke passt perfekt zum Codeschloss. Der Anschluss geht ganz einfach über die RX/TX Pins der Arduinos. Da der ESP8266 mit 3.3V Pegeln arbeitet, habe ich einen Spannungsteiler eingebaut. Man kann im Code der Brück festlegen, ob sich das Codeschloss ins Hausnetz einloggen soll oder als Access Point zugreifbar ist.
Da ich die Idee eines Codeschlosses im WLAN auf Dauer für problematisch halte, habe ich einen Reedkontakt als Schalter für das WLAN verbaut. Jetzt muss ich nur noch einen Magneten an die passende Stelle der Unterputzdose halten, in der der Controller sitzt. Das Schloss ist dann per telnet im Netzwerk erreichbar. Nach der Umkodierung nehme ich den Magnet einfach wieder weg.
Hier der Schaltplan zu der WiFi Variante:
Codeschloss Arduino fuer Homematic eQ3_WiFi
Man kann bestehende Controller auch recht leicht um die WiFi Funktionalität erweitern. Ich habe bei mir in die bestehende Schaltung für 4 Pins ein Stück Buchsenleiste eingelötet. Das WiFi steckt dann einfach als Huckepackplatine auf dem ursprünglichen Controller.
Es gibt auch einen weiteren Grund die Microcontroller in dem Aufbau zu sockeln: Schließt man den ESP an die serielle Schnittstelle an, funktioniert das Programmieren des Arduino per USB nicht mehr. Dazu muss man die RX/TX Leitungen zum ESP erst auftrennen.
Für die WiFi Brücke bitte die WiegandController ab Version 1.2 nutzen, da hier das Return-Verhalten (CR/LF) adaptiert wurde.

Hier als Beispiel ein komplettes Board mit Arduino Nano, ESP8266 für Wifi und einem kommerziellen Relaisboard für ein Keymatic eQ-3:
eQ3_SchaltungVorne
eQ3_SchaltungHinten

Als weiteres Aufbaubeispiel hier ein Foto eines Bekannten, der die Integration des Wiegand Controllers in eine Türklingel zeigt. Eine optisch sehr gelungene Lösung, die ohne eine Unterputzdose auskommt. Wer ausreichend Drähte zwischen Klingelschalter und Klingel hat, kann das so sehr elegant lösen.
Controller_Klingel

Hier nochmal der Code aus Teil 5 mit zwei unterschiedlichen Konfigurationen (effektiv sind nur die zwei #defines anders gesetzt):
Version 1.2 für den klassischen Torantrieb:
Wiegand_Controller_1.2_classic

Version 1.2 für den eQ-3 Antrieb & mit kommerziellem Relaisboard: Wiegand_Controller_1.2_EQ3_RelayBoard

Teil 5: RFID Codeschloss für den Keymatic eQ-3 Türschlossantrieb

Vor etwa 10 Monaten habe ich ein RFID Codeschloss Projekt für den alten Keymatic KM300 IQ+ / Abus CFA1000 Türschlossantrieb vorgestellt (Teil 1,Teil 2,Teil 3,Teil 4). Die Motivation war damals einen Ersatz für das Original Codeschloss zu finden. Dieses Codeschloss verschleißt schnell und ist am Markt nicht mehr erhältlich. Die Resonanz auf den Beitrag war deutlich über meinen Erwartungen.
Der Türschlossantrieb ist vor einiger Zeit in einer neuen Version namens Keymatic eQ-3 erschienen.
Keymatic_eQ-3
Für diesen gibt es meines Wissens kein sinnvolles Codeschloss auf den Markt**. Ein Freund wollte nun auch so ein Codeschloss wie wir es in Betrieb haben. Deshalb habe ich mich daran gesetzt, das RFID Codeschloss für die eQ-3 Version zu erweitern. Das Konzept des RFID Codeschlosses ist gleich geblieben und ist in den alten Blogeinträgen beschrieben. Deshalb werde ich hier auf die Unterschiede fokussieren. Weiterhin habe ich die Gelegenheit genutzt, das Codeschloss über WLAN programmierbar zu machen. Dies und weitere Schaltungsvarianten stelle ich in einem folgenden Teil vor.

Welches Codeschloss habe ich?
Auf der unteren Seite des Türschlossantriebs steht die Version. Hier ein Foto von der Keymatic eQ-3. Bei den alten Antrieben steht dort bei Abus CFA1000 oder KM300 IQ+ für die Keymatic Version.
eQ3_bottom

Unterschiede des alten IQ+ Antriebs zum neuen eQ-3 Modell
Der wesentliche Unterschied besteht in den neuen Funksendern und dem neuen Funkprotokoll. Die Sender laufen jetzt mit 1.5V und nutzen ein proprietäres, bidirektionales Protokoll namens Bidcos. Durch die bidirektionale Übertragung wird die Übertragung sicherer. Beim alten Codeschloss musste man die Tasten des Senders länger drücken, um sicherzustellen, dass die Türe schließt. Entsprechend verhält sich auch das Codeschloss. Bei den neuen Handsendern ist das nicht mehr nötig. Ein kurzer Puls langt, der Handsender beginnt sein Protokoll mit der positiven Flanke und schon schaltet das Schloss.

Für das neue eQ-3 Modell muss also:

  • die SW so geändert werden, dass nur kurze Pulse für Öffnen/Schließen erzeugt werden
  • die HW so geändert werden, dass sie mit den 1.5V Handsendern zusammenarbeitet
  • eine Methode gefunden werden, einen Handsender passend umzubauen

Es gibt noch einen verkraftbaren Nachteil des neuen eQ-3 Modells: Drückt man bei dem neuen Modell die Taste „Abschließen“ wenn das Schloss verriegelt ist (also der Riegel ausgefahren ist), so wird die Türe entriegelt. Um ein Missverständnis zu vermeiden: Die Türe wird nicht aufgeschlossen, aber der Riegel wird eingefahren.
Dieses Verhalten des eQ-3 Modells hat den Nachteil, dass man keinen öffentlich bekannten Code wie 0# zum Abschließen verwenden sollte. Man kann zwar nicht aufschließen, aber entriegeln. Bei dem alten Modell führt wiederholtes Abschließen nicht zu einer Entriegelung.

Umbau des Handsenders:
Den Handsender muss man zum Umbau öffnen. Dazu die Batterie entnehmen und dann die Haltelaschen ringsherum um das Gehäuse aushaken. Das ist nicht weiter schwer und mit etwas Fingerspitzengefühl machbar. Dreht man die Platine dann auf die Seite mit den Tastern, so lassen sich Testpunkte mit der Bezeichnung MPn (n=Zahl) finden.
eQ3_Umbau_Sender
Wir brauchen MP6 und MP5. An diese Punkte sowie an Plus- und Minuspol des Batteriefachs Kabel anlöten. Die Kabel vor dem Zusammenbau noch kurz markieren. Wenn man die Kabel so wie im Bild gezeigt verlegt, kann man den Handsender wieder zusammenbauen und auch noch mit einer Batterie und den eingebauten Tasten betreiben. Das Ergebnis sieht dann so aus:
eQ3_Sender_fertig
Warnung: Bitte keine Batterie einlegen, wenn der Handsender von der Codeschloss Schaltung mit Spannung versorgt wird! – Die Batterie würde gegen den Festspannungsregler „antreten“ …

Da die eQ-3 Handsender mit 1.5V laufen, brauchen wir eine entsprechende Versorgungsspannung. Prinzipiell könnte man den Handsender auch weiterhin mit einer Batterie betreiben. Aber wenn schon, dann richtig. Also habe ich die Schaltung um einen LM1117-1.5V Festspannungsregler und einen Stützelko ergänzt. Die Spannungsversorgung habe ich im Unterschied zum alten Sender permanent gestaltet. Die neuen Handsender beginnen nach dem Einlegen einer neuen Batterie einen Initiationsprozess. Den wollen wir nicht bei jeder Codeeingabe auslösen.

Um die Tasten über die Punkte MP5&6 ansprechen zu können, habe ich an die Arduino Pins für Öffnen und Schließen Spannungsteiler aus 100kOhm und 220kOhm angebaut. Damit entsteht zwischen den beiden Widerständen ein Punkt, an dem der Arduino nun eine Potentialdifferenz von 1.5V schalten kann. Der Strom durch diese Spannungsteiler ist im Mikroampere-Bereich und vernachlässigbar. Die Eingänge der Funkfernbedienung sind hochohmig und funktionieren mit diesem Konzept sehr gut.

Von der Hardware-seite her ist die Änderung damit abgeschlossen. Hier das entsprechende Schaltbild:
Codeschloss Arduino fuer Homematic eQ3

Änderung der Software:
Wie schon zuvor erwähnt, habe ich die Pulsdauer für Öffnen/Schießen verkürzt; konkret auf 100 Millisekunden. Das hat auch einige Einflüsse auf die Signale am Codeschloss (Buzz & LED). In den Code habe ich in der HandleCodes.ino einen #define eingebaut, mit dem man alle Codeänderungen zentral schalten kann:

So erzeugt man den Code für die eQ-3 Version:
#define EQ3LOCK 1 // enable this define for support of the new Keymatic eQ-3 lock

und mit // davor wird def Define auskommentiert und die IQ+ Version ist aktiv:
//#define EQ3LOCK 1 // enable this define for support of the new Keymatic eQ-3 lock

Hier ist der passende Code für den WiegandController V1.2; Benutzer bestehender Installationen können den Code einfach upgraden (defines beachten). Die Belegung des EEProms ist gleich geblieben. Wiegand_Controller_1.2_EQ3

Im Teil 6 stelle ich einige Schaltungsvarianten vor. Dort ist auch ein konkreter Aufbau zu sehen.

 


 

** Es gibt offenbar einen oder mehrere Drittanbieter, welche ein Bundle aus einem DK-2882 Codeschloss und eine HomeMatic Schnittstelle 76784 für 170-190€ verkaufen. Dieses Bundle ist m.E. zweifacher Unsinn:
1. Man bekommt Codeschloss und Schnittstelle für ingesamt unter 120€, wenn man sie bei Conrad oder ELV direkt kauft.
2. Die Konstruktion ist unsicher. Wenn man die Homematic Schnittstelle an dem Codeschloss anschließt, liegen die Anschlüsse zum Aufschließen vor der Haustüre! – Eine Sabotage ist extrem einfach. Man kann die Türe mit einem Stück Draht öffnen, wenn man an die Rückseite des Codeschlosses oder die Kabel dahinter gelangt.