Wenn „Alle Jahre wieder“ erklingt, ist Weihnachten nicht weit, auch wenn das festliche Beisammensein immer noch von COVID-19 geprägt ist. Wer nun an ein kleines Elektronikprojekt denkt, wird sich sicherlich noch an den einen oder anderen Christbaum aus vergangenen Jahren erinnern. Da es auf Dauer aber sehr repetitiv ist, jedes Jahr einen Tannenbaum mit LEDs zu präsentieren, soll es dieses Jahr etwas anders werden. Letztes Jahr hatte mein Kollege Luc Lemmens schon eine elektronische Kerze vorgestellt, die man „Anzünden“ und Auspusten konnte.

Etwas das mit Weihnachten und der eigentlich kalten Jahreszeit verbunden ist, sind die Abende vor dem Kamin an einem lodernden und wärmenden Feuer. Nicht jeder hat einen Kamin zur Hand oder möchte die Umwelt mit einem solchen belasten, auch wenn die Gemütlichkeit eines solchen Kamins nicht von der Hand zu weisen ist. Daher ist das Weihnachtsprojekt dieses Jahr ein miniaturisierter Kamin, mit einer LED-Matrix als Feuer und einem Raspberry Pico für die Ansteuerung.

In diesem Video sieht man das Ganze in Aktion!
 


Doch wie und woraus baut man das Gehäuse eines solchen Kamins? Und gab es Dinge, die bei der Entwicklung nicht nach Plan gelaufen sind?

Ist schon wieder Weihnachten?!

Wie bei jedem Weihnachtsprojekt kam auch bei diesem Weihnachten sehr überraschend - wer kann auch am Anfang des Jahres ahnen, dass am 24.12 wieder Weihnachten ist? Einige Teile des Projektes sind noch nicht komplett rund; wie bei dem einen oder anderen Geschenk zu Weihnachten ist hier die funktionale Fertigstellung wieder in letzter Minute erfolgt, für den finalen Feinschliff im Sinne eines kompletten Elektor-Projektes fehlt leider noch der eine oder andere Pinselstrich. Dennoch hoffe ich, Sie haben Freude an der Lektüre des Projektes und den Dingen, die nicht ganz nach Plan gelaufen sind (so wie halt jedes Weihnachten).

3D-Modellierung mit FreeCAD

In Bild 1 ist eine grobe Skizze des ersten Entwurfs zu erkennen.
 
Bild 1: Skizze des ersten Entwurfs.

Man bekommt eine Idee von den Proportionen und der späteren Form, mit Seitenteilen, Sims und angedeutetem Schornstein. Doch diese Idee musste in ein 3D-Modell mit Parametern überführt werden und damit später in den Dimensionen änderbar sein. Neben kommerziellen Tools wie Inventor, SolidWorks oder Fusion 365 oder OpenSCAD gibt es FreeCAD. Auch wenn die Versionsnummer mit 0.19 sicher weit entfernt von einem 1.0 ist, so sollte man sich nicht täuschen lassen: Mit FreeCAD lässt sich sehr wohl arbeiten. Wer mit FreeCAD anfangen möchte, dem seien die Tutorials ans Herz gelegt, diese erklären recht gut Schritt für Schritt die Funktionen des Programms und erlauben später das Gestalten der ersten Objekte. Bild 2 zeigt einen ersten Rohentwurf des Kamins.
 
Bild 2: Noch recht grobes Modell als FreeCAD Projekt.

Bei der Konstruktion des Kamines wurde in FreeCAD schon daran gedacht, dass alle Teile später als Platine fertigbar sind, sprich wir haben mit einer Wandstärke von 1,6 mm gearbeitet, was der Dicke einer normalen Platine entspricht. Der Kamin besteht aus mehreren Teilen, der Rückseite, zwei Seitenteilen, zwei Dachteilen, einer Front, einer Ablage und den zwei Seiten, auf der die diese Ablage ruht. Das Schöne an FreeCAD ist, dass man das Modell zuerst mit einem 3D-Drucker drucken lassen kann, um eventuelle Anpassungen an den Abmessungen vorzunehmen. Bild 3 zeigt den ersten Versuch, der leider etwas klein für den Schreibtisch geraten ist und eher Eignung für ein Puppenhaus hat.
 
Bild 3: Der Kamin ist etwas zu klein, eine SD-Karte daneben als Größenvergleich.

Bild 4  zeigt das das Basismodell als gedruckte Variante, mit passenden Proportionen.
 
Bild 4: Kamin in passender Größe.

Vom 3D-Modell zur 2D-Platine

Der erste Schritt ist der Druck des 3D-Modells als Einzelteile, so lässt sich prüfen, ob sich später auch alles zusammensetzen lässt. Bild 5 zeigt ein paar der Bauteile für den Kamin; werden diese dann mit etwas transparenten Klebeband zusammengehalten, bekommt man ein Modell und kann testen, ob sich später überhaupt alle Teile für den Zusammenau eignen würden.
 
Bild 5: Spätere Platinenumrisse als 3D-Druck.

Damit lässt sich also ein Modell aus einzelnen Teilen mit 1,6 mm Stärke zusammensetzen. Doch es sind noch immer alle Teile als 3D-Modell im FreeCAD angelegt, und ein direkter Import in KiCad als Platine ist so nicht möglich. KiCad kann mit PCBNEW, dem Platinen Layout-Tool, Platinen-Umrisse im DXF-Format importieren, und das ist der Weg, der bei diesem Projekt eingeschlagen wurde. Aus FreeCAD lassen sich so alle Teile als 2D-Zeichnung im DXF-Format exportieren und im KiCad wieder für die Platinenumrisse importieren. Der Kamin wurde ab hier dann in mehrere KiCad-Projekte aufgeteilt, so dass die Arbeit in KiCad beginnen konnte.
 

Einfache Schaltung, schwierige Bauteilauswahl

Der Kamin soll eine Lagerfeueranimation bekommen, die durch eine LED-Matrix erzeugt wird. Das bedeutet eine Schaltung, die schon in etlichen Büchern behandelt wurde, und auch für die Elektor Bedroom-Clock im Einsatz ist. Ein ULN2308A und ein 74HCT245 mit passenden Vorwiderständen sowie 64 LEDs würden ausreichen, sowie ein einfaches Mikrocontroller-Board, wie ein STM32-BluePill (Bild 6).
 
Bild 6: STM32 BluePill
Es wäre auch denkbar, einfach eine fertige LED-Matrix mit MAX7219 zu nehmen, wie sie Elektor im Shop angeboten wird (Bild 7). Leider waren diese Module beim Erstellen des Schaltpans aber gerade nicht lieferbar.
 
Bild 7: LED-Matrix im Elektor Shop.


Boards mit einem Mikrocontroller zu bekommen ist leider nicht mehr so einfach wie noch vor 24 Monaten. Auch andere Halbleiter wie der ULN2308A sind zeitweise nicht zu beschaffen, oder nur zu sehr stark gestiegenen Preisen. Das bedeutet ein langes Suchen in den Onlinekatalogen der Distributoren, um Bauteile zu finden, die aktuell und auch zu Weihnachten noch lagernd sein könnten, und den Schaltplan dann daran anzupassen. Was ist es am Ende geworden? Die Auswahl der Bauteile hat länger gedauert als das Zeichnen des Schaltplans in KiCad, und erzwang auch das Anpassen des Schaltplans.

Schaltung

Für die Ansteuerung von LEDs, vor allem wenn es mehr als acht sind, empfiehlt sich das Multiplexverfahren. Dabei werden nicht alle LEDs zur gleichen Zeit angesteuert, sondern jeweils nur eine Zeile oder eine Spalte für einen kurzen Augenblick. So können hier 64 LEDs mit nur 16 Pins angesteuert werden. (Der MAX7219 treibt die LED-Matrix nach dem gleichen Prinzip, nur das hier noch etwas RAM und eine Helligkeitssteuerung schon im IC integriert sind und neue Daten einfach per SPI übertragen werden; jedoch ist aufgrund des Preises ein MAX7219 aktuell keine Option.)

Zum Ansteuern der LEDs wird ein RP2040 auf einem Raspberry Pi Pico Board verwendet, da dieses aktuell beschaffbar ist, und preislich momentan auch noch attraktiv ist. Zur Ansteuerung des LEDs werden 16 FETs verwendet, für die Zeilen und Spalten. Auch werden diese als Levelshifter eingesetzt, da die LEDs direkt aus den 5 V des USB-Port versorgt werden sollen, um den DC/DC-Konverter auf dem Raspberry Pi Pico nicht ungewollt zu strapazieren. Mit den momentan verfügbaren Bauteilen ergibt sich so die Schaltung in Bild 8.
 
Bild 8: Schaltplan für den Kamin.
Damit muss die Schaltung nun „nur noch“ als 3D-Puzzle aufbereitet werden, was kann da schon Schlimmes passieren?

Wähle einen PCB-Fertiger und kenne seine Fähigkeiten

Beim Erstellen einer Platine sollten die Vorgaben des später angedachten Fertigers berücksichtigt werden, sonst wird es entweder teuer, dauert unnötig lange oder passt am Ende nicht. Auch ein Blick auf den Standort des Fertigers ist nicht zu vernachlässigen. Sollte die Platine im EU-Ausland bestellt und in die EU geliefert werden fallen Steuern und Abgaben an. Wenn der Paketbote dann die Platinen abliefert und noch Geld möchte ist das eher lästig. Auch sind manchmal die Lieferzeiten aus dem EU-Ausland nicht immer die kürzesten. 

Da neben den Platinen auch noch Bauteile bestellt werden mussten, wären etliche kleine Lieferungen nötig, was zu einer Menge Porto und vielen Paketen führt, für die man zuhause sein muss. Und da die Platinen mit KiCad erstellt wurden, ist es natürlich umso einfacher, wenn man das Boardfile aus KiCad direkt an den Fertiger übergeben kann, das spart den Export als Gerber-Datensatz. 

Ich habe mich daher für den Dienstleister Aisler entschieden. Aisler sitzt innerhalb der EU, also ist Zoll kein Problem. Bei der Herstellung der Platinen wird darauf geachtet, dass diese nach hier geltenden Umweltrichtlinien produziert werden, ab 2022 sogar CO2 neutral. Zusätzlich können alle Bauteile, die für die Platine benötigt werden, bei Aisler mitbestellt werden. Die Parameter, die für das Platinen-Layout beachten werden müssen, sind auf der Seite von Aisler gut beschrieben (Bild 9).

 
Bild 9: Spezifikationen für die Platine.
Das Hochladen des KiCad-Boardfiles kann schnell per Drag-and-Drop im Browser erfolgen (Bild 10).
 
Bild 10: Upload per Drag and Drop im Browser bei Aisler.
 
Bild 11: Vorschau des PCB bei Aisler.net
Danach sieht man ein Rendering der Platinen (Bild 11). Die Seite bietet auch eine integrierte Versionsverwaltung der hochgeladenen Platinen an. Das bedeutet, man muss nur bestellen und warten bis alle Teile in einem Paket ankommen (Bild 12). Und sollte man einmal mehr als eine Platine bestellen, so können diese in ein einziges Paket zusammengefasst werden, wenn man es denn möchte.  
 
Bild 12: Platinen und Bauteile in einem Paket
 

Was kann nun noch schief gehen?

Wie bei jedem Projekt kann es sein, dass manche Dinge nicht so laufen, wie man es erwartet hatte. Und auch bei diesem Projekt gab es einige Fallstricke. Das betrifft zuerst das 3D-Puzzle sollte: In der ersten Version, die zusammengesetzt wurde, war schnell zu sehen, dass die Platine mit der LED-Matrix (Bild 13) leider zu jeder Seite um 2,54 mm zu breit war. Es wurde bei der Entwicklung schlicht vergessen, den Platz für die Konnektoren vorzusehen. Erschwerend kam hinzu, dass sich auf der Platine der LED-Matrix bei den ersten Versuchen auf dem Labortisch keine Funktion zeigte. Doch warum, laut Schaltplan sollte doch alles okay sein? T1 bis T8, die BS170 Feldeffekttransistoren, taten nicht das, war eigentlich zu erwarten war. Des Rätsels Lösung liegt im Footprint. Source, Drain und Gate waren physikalisch anders angeordnet als es der generische SOT-23 Footprint in KiCad vorgesehen hatte. Also, prüfe immer mehrfach ob die Pins auch physikalisch passend sind, wenn der Footprint nicht selbst erstellt wurde! Das waren die ersten zwei Dinge, die nicht nach Plan gelaufen waren.
 
Bild 13: Die Matrix ist links und rechts 2,54mm zu breit.


Und wichtig bei einer Konstruktion mit Platinen: Fräser sind rund und auch nicht unendlich klein. Aisler zeigt beim Hochladen der Platinen auch, wie die Kontur nach dem Fräsen aussehen wird. Hier kann man erkennen, dass unsere 90-Grad-Ecken etwas runder werden als gedacht (Bild 14).
 
Bild 14: Runde Ecken durch den Fräser

Dieses wurde schon beim Design der Platinen berücksichtigt, leider war die Aussparung dennoch zu klein. Dies lässt sich mit einer Feile beheben, was jedoch nicht Sinn der Sache ist. Daher wurden die Platinen noch einmal dahingehend angepasst, dass sie sich später ohne Feile zusammensetzen lassen. Also Zeit für Runde Zwei und den Test der Blitz-Bestellung bei Aisler: Zwei Tage Fertigungszeit plus 2 Tage Posttransport bis ins Homeoffice für die Platinen, also Montag früh (5 Uhr morgens) bestellt, Donnerstagnachmittag geliefert. Die Bauteile für den Aufbau einer zweiten LED-Matrix waren in weiser Voraussicht bei der ersten Platine schon ausreichend mit bestellt worden, ein paar Komponenten ließen sich auch von dieser Platine weiterverwenden. Schließlich konnte dann die Front mit der LED-Matrix (Bild 15) zusammengesetzt werden.
 
Bild 15: Front und Matix zusammengesetzt.

Virtueller Zusammenbau

Und hier wird das Zusammenspiel zwischen FreeCAD und KiCAD sehr hilfreich. Für FreeCAD gibt es einen KiCAD-Workbench. Damit lassen sich Platinen aus KiCAD direkt in FreeCAD importieren, mit allen 3D-Modellen, Leiterbahnen und Beschriftungen. 
 
Bild 16: Virtueller Zusammenbau mit den finalen Platinen
Bild 17: Virtueller Zusammenbau, diesmal sollte alles passen.


Bild 16 und Bild 17 zeigen alle importierten Platinen korrekt positioniert. So kann nun das 3D-Puzzle frei gedreht und gewendet werden. Auch Abmessungen lassen sich nehmen und einzelne Teile ausblenden. Und es wäre auch praktisch gewesen, vor der Bestellung der ersten LED-Matrix schon einmal alles virtuell zusammenzusetzen. Das hätte dann schon gezeigt das die Platine nicht passen wird.

Plop?!

Dies ist eines der Geräusche das man nicht hören möchte, wenn man eine Schaltung in Betrieb nimmt. Immerhin hatten sich keine Rauchzeichen entwickelt und alle Bauteile waren noch an Ort und Stelle. Ein Einzeltest der LED-Matrix und des Raspberry Pi Pico zeigten keine erkennbaren Defekte, doch was war passiert?

Bei dem 3D-Puzzle werden die Pins des Raspberry Pi Pico von der Platine der Rückwand über die Seiten und das Dach zur Vorderseite geführt. Jede dieser Platinen ist als einzelnes KiCad-Projekt angelegt worden, mit einem eigenen Schaltplan. Rückseite und Seitenteile wiesen auch keine Probleme auf, nur die Front, dort waren mehrere Dinge nicht so wie sie sein sollten. Bild 18 ließ schon erahnen was passiert ist, K1 und K2 auf der Platine der Front sind vertauscht. Nicht nur das, auch die Orientierung von K1 ist um 180 Grad verdreht. Also wurde beim Erstellen des Puzzles nicht gut genug aufgepasst.
 
Bild 18: K1 und K2 sind vertauscht.
Die fehlerhafte Verbindung zwischen K1 und K2 ließ sich mit ein paar Drähten provisorisch beheben, so dass ein Testlauf des Kamins erfolgen konnte (Bild 19).
 
Bild 19: Bugfix mit Drähten

Wie schon bei der LED-Matrix bedeutete dies, die Fehler beheben und neue Platinen zu bestellen. Auch hier wieder als Blitz-Order, da das Ende des Jahres völlig überraschend (wie jedes Jahr) naht. Der fertige Aufbau mit dem Gehäuse komplett aus PCBs ist in Bild 20 zu sehen. 

 
Bild 20: Fertiger Aufbau.

Ein Gehäuse aus Platinen ist nicht günstig

Wer nun den Kamin nachbauen möchte kann dieses gerne, jedoch liegen die Kosten für Material und Platinen schnell bei über 70 Euro. Es kam, wie sollte es auch anders sein, die Frage der Kollegen, ob das nicht auch preiswerter geht. Immerhin gibt es einen 3D-druckbaren Prototypen, und in den Labnotes von November  wurde doch schon eine 3D-druckbare Variante geteasert?
 
Bild 21: 3D Variante für ein TFT.

Es gibt eine 3D-druckbare Variante (Bild 21), die jedoch nicht direkt für eine LED-Matrix gedacht war. Ein paar Modifikationen in FreeCAD (Bild 22) waren nötig, und nun lässt sich (virtuell) auch die LED-Matrix einsetzen.

 
Bild 22: 3D Variante für LED Matrix.
Fertig geduckt und zusammengesetzt ergibt sich dann der Kamin aus (Bild 23) der aus zwei Teilen (Bild 24) besteht. Die FreeCAD Dateien sowie die passend exportierten STEP-Dateien für den 3D-Druck stehen im GitHub Repository des Projektes bereit.  
 
Bild 23: 3D gedruckte Variante noch mit eine Platine für die Ablage.
Bild 24: Die zwei Teile der 3D gedruckten Variante noch ohne Ablage
Der Zusammenbau dieser Variante benötigt nur einen Raspberry Pi Pico (bei dem auch Pinheader installiert sein können), die LED-Matrix mit Bauteilen und ein paar Drähte. Damit lassen sich die Kosten erheblich verringern, wenn schon ein 3D-Drucker vorhanden ist. Und sollte noch keiner vorhanden sein so ist dieses Projekt eventuell ein Anstoß, sich mit einem 3D-CAD-Programm der Wahl und einem 3D-Drucker auseinanderzusetzen.

Die Feueranimation

Die Animation des Kaminfeuers basiert auf dem Code von Mark Kriegsman und den Beispielen der FastLED Bibliothek mit einigen Modifikationen. Die Animation wird alle 333 ms aufgerufen (3 Bilder pro Sekunde); sie berechnet für jede Position der 8x8-Matrix einen passenden Wert an Wärme, der angezeigt werden soll. Diese Wärmewerte werde in vier Helligkeitsstufen umgerechnet und in ein Array abgelegt.

Die Multiplexansteuerung durch den Raspberry Pi Pico erfolgt durch einen Interrupt, der alle 8 µs (alle 1000 CPU-Zyklen bei 125 MHz) ausgelöst wird. Die daraus resultierenden 125 kHz teilen sich auf 8 Zeilen auf, so dass jede Zeile pro Sekunde 15625 Mal aktualisiert wird. Doch warum diese Frequenzen? Würde man die LED nur ein und aus schalten wollen wäre diese Ansteuerung weit schneller als sie sein müsste. Per Software wird eine 7-Bit-PWM für jede Zeile erzeugt, so dass aus den 15625 Aktualisierungen pro Zeile und Sekunde dann nur noch 123 pro Zeile und Sekunde werden. Damit lassen sich für das Auge vier unterschiedliche Helligkeitsstufen erzeugen. Der Code zu dem Projekt kann auf der GitHub Seite des Projekts heruntergeladen werden, wie man mit GitHub arbeitet, das zeigt das Video meines Kollegen Clemens Valens.

Zusammenbau der PCB-Variante

Beim Zusammenbau sollte mit der LED-Matrix (Bild 25) angefangen werden. Hier kommen 3-mm-LEDs und ein paar SMD-Bauteile zum Einsatz, einmal als SOT-23 für die Feldeffekttransistoren und Widerstände in 0805. Vor den SMD-Bauteilen sollte man keine Angst haben, eine ruhige Hand und eine Pinzette helfen bei der Bestückung.
 
Bild 25: Zusammenbau der LED Matrix
Das Einlöten der LEDs ist reine Fleißarbeit, wobei man auf die richtige Polarität der LEDs achten sollte, sonst werden diese später nicht leuchten. Da der Platz im Inneren des Kamins eng bemessen ist, werden die Stiftleisten J2 und J3 von hinten durch die Platine gesteckt. Dazu eignen sich am besten Stiftleisten mit einer Länge des Pins zwischen Spitze und Plastikummantelung von 8 mm oder 8,08 mm (Bild 26 und Bild 27).
 
Bild 26: Einbau der Stiftleiste der LED-Matrix.
Bild 27: Stiftleisten in der Matrix.

Sind die Stiftleiste und Matrix miteinander verbunden, so ist der schwerste Teil auch schon geschafft. Nun gilt es noch die Konnektoren der anderen Platinen und die USB-B Buchse zu bestücken (Bild 28).
 
Bild 28: Bestückte Platinen und ein 3D Puzzle

Am Ende wird noch ein Raspberry Pi Pico mit Pin-Header und der Software vorbereitet, so dass es dann an den Zusammenbau gehen kann. Die Software liegt als fertiges U2F File auch im GitHub-Repository des Projektes.

Ab hier ist es ein 3D-Puzzle mit Elektronik. Seitenteile, Dach, Boden, Front und Rückwand werden nun zusammengefügt, so dass das Gebilde aus Bild 29 entsteht. Ist alles richtig zusammengebaut, sollte der Kamin anfangen, die Feueranimation zu zeigen. 
 
Bild 29: Fertiger Kamin.


Zusammenbau mit 3D-gedruckten Teilen

Zuerst sollte der Druck der 3D-Teile gestartet werden, da dies, je nach Drucker, über eine Stunde dauern kann. Sobald der 3D Druck gestartet ist, geht es mit der LED-Matrix weiter. Hier können dann um 90 Grad gewinkelte Stiftleisten verwendet werden, die in die Position J2 und J3 gesetzt werden. An den Raspberry Pi Pico werden dann direkt Jumper-Wire angelötet und passend mit der LED-Matrix verbunden (Bild 30).
 
Bild 30: Drähte zwischen Raspberry Pi Pico und LED-Matrix
 

Und die Variante mit TFT-Display?

Die Teile für den 3D.Druck und auch der Schaltplan wären soweit fertig. Jedoch ist die Software nocht nicht einsatzbereit, die auf dem Raspbberry Pi Pico läuft. Daher wird sich die Vorstellung dieser Variante leider etwas verzögern (Bild 31). 
 
Bild 31: Prototyp mit TFT.
 

Zusammenfassung

Dieses Projekt hat noch ein paar Ecken und Kanten und ist sicherlich nicht perfekt. Auch wenn das Design des Kamins nicht optimal ausgefallen sein mag, er erfüllt seinen Zweck und demonstriert, dass sich mit Platinen auch dreidimensionale Objekte erschaffen lassen. Das Zusammenspiel zwischen FreeCAD und KiCAD für die Konstruktion ist sehr erfreulich, vor allem wenn man die Konstruktion schon einmal als 3D-Druck in Händen halten kann. Das 3D-Puzzle zu erstellen hat eine Menge an Erfahrungen jenseits der Elektronik mit sich gebracht. Die Platinen und auch die 3D-Konstruktion für FreeCAD lassen sich für dieses Projekt auf GitHub finden. Was das Bestellen bei Aisler angeht, so wird es sicher nicht das letzte Mal gewesen sein, dass ich dort Platinen und Bauteile bestellt habe. Für Prototypen und kleinere Aufbauten ist es eine bequeme und preiswerte Lösung.

Auch wenn das Projekt nicht fertig ist, Weihnachten wird wieder kommen, und bis zum nächsten Jahr sollten auch alle Ecken und Kanten beseitigt sein (bis dahin sind ja noch 12 Monate hin). Kommen Sie gut durch die Festtagszeit und bleiben Sie gesund!