CATracker: Ein LoRaWAN GPS-Tracker

Der CATracker ist ein kleiner batteriebetriebener GPS-Tracker. Durch sein leichtes Gewicht von unter 30g eignet er sich hervorragend für das Aufzeichnen der Bewegungsmustern von Hunden und Katzen.

Der CATRacker ist ein Projekt, dass sowohl im Bereich der Hardware als auch der Software offen zur Verfügung steht. Dabei sind alle Informationen verfügbar und stehen unter diesen Lizenzen:

Selber Bauen

Platine: Gerber Daten

Bauelemente: Mouser

Batterie: Aliexpress (LiPo 23x23x3mm)

Zusammenbauen

Die Bauelemente aus der Mouser Bestellliste müssen auf der Platine verlötet werden. Die hier abgelegte Infoseite zeigt, wo welches Bauteil eingelötet werden muss. Bereits gelötete Platinen sind auf Anfrage (einfach ein Kommentar hinterlassen) erhältlich.

Anschließend ist die Batterie und das GPS Modul anzulöten. Alles kommt dann in das Gehäuse und wird verschraubt. Das Halsband kann nun durch die Ösen im Gehäuse gezogen werden und der Tracker ist fertig. Das initiale Aufladen des Akkus sollte mindestens eine Stunde dauern. In dieser Zeit wird der Akku komplett geladen.

Elektromagnetische Verträglichkeit von Ethernet

Wir haben in unserem neuen Produkt eine Ethernet Verbindung in die Außenwelt. Dort wird über eine RJ45 Buchse 100Mbit Ethernet von der Außenwelt ins Innere weitergegeben.

Ethernet im Normalfall

Normalerweise ist Ethernet eine Point-2-Point Verbindung zweier Geräte über ein Kabel. Das Kabel überträgt die Daten dabei galvanisch getrennt zu den Gerätespannungen. Daher könnne die Geräte in unterschiedlichen Stromnetzen betrieben werden und müssen kein gemeinsames Potential besitzen. Eine „normale“ Ethernet Schnittstelle ist unten abgebildet

Schaltplan eines RCM6700 MiniCore Ethernet Interfaces

Anforderungen

Die Signale des Netzwerks müssen in unserem Gerät zu den elektrisch leitfähigen Komponenten mit 1500V Spannungsfestigkeit isoliert werden. Die Netzwerkschnittstelle im Inneren des Geräts besitzt noch sechs Meter bewegte Leitung bis zur RJ45 Buchse an der Schnittstelle zur Außenwelt. Daher muss hier eine Lösung gefunden werden, die diese Isolierstärke entweder über die sechs Meter gewährlisten kann, oder die Isolierung muss bereits an der Stelle des RJ45 Steckers erfolgen.

Als zweite Herausforderung kommt hinzu, dass das Netzwerksignal zusätzlich zu anderen Signalen gemeinsam auf einer Leitung übertragen werden muss. Es liegt eine Leitung von der Anschlussstelle zur Netzwerkschnittstelle. Dazwischen befinden sich mehrere Trennstellen, an denen Komponenten des Geräts bei der Installation vor Ort zusammen gesteckt werden.

Das Kabel ist ein bewegtes Kabel und hat somit neben der elektrischen Anforderung auch noch eine mechanische Belastungen. Das von uns gewählte Kabel hat 12 Adern, von denen jeweils 2 als verdrillte Pärchen geführt sind und alle zusammen von einem Schirm umschlossen werden. Wir nutzen 4 der Leiter für 100Mbit Ethernet.

Igus chainflex® CF211 Datenleitung

Die Herausforderung in der elektromagnetischen Verträglichkeit ist hier nicht die Funktion unter Störeinflüssen. Die werden dank der differenziellen Signalstruktur des Ethernets wenig gestört. Das Problem sind die abgestrahlten elektromagnetischen Wellen.

Wie oben bereits beschrieben sind die Ethernet-Signale galvanisch getrennt vom System und liegen somit schwebend in der Leitung. Umgeben sind sie dort von Signalen, die einen Bezug zu GND haben. Diese Sigtnale haben also eine elektrische Verbindung in das System hinein. Hier ist ein Aufnahme des abgestrahlten Spektrums mit aktivem Netzwerk Link.

Signalstärke über das Frequenzspektrum von 30MHz bis 1GHz

Klar zu sehen ist, dass bei allen drei Messverfahren (Peak, Average, Q-Peak) die Granzwerte bei verschiedenen Frequenzen überschritten werden. Die kritischen Überschreitungen sind allerdings im unten Frequenzbereich. Hier können einige Maßnahmen durchgeführt werden um die Abstrahlung von EM-Wellen zu verringern.

Die schnelle, aber hier leider unwirksame Abhilfe würde ein Klapp-Ferrit schaffen. Dieser würde die Gleichtakt-Fehlerströme begrenzen, also Ströme, die entlang der Leitung in eine Richtung fließen. In unserem Fall hatte aber der Ferrit keinen Einfluss auf die abgestrahlte Störung. Es handelt sich wohl nicht um eine Gleichtakt-Störung. Ein weiterer Platz für Feritte ist innerhalb der Leitung um eine Gegentakt-Störung zu beseitigen. Hier wird eine Induktivität in jede Leitung eingebracht. Im unten gezeigten Schaltbild sind das die Bauelemente L906 – L909. Diese verschleifen die Schaltflanke der Signale und reduzieren dadurch die auftretenden Oberwellen des Signals.

Anbindung der Ethernet Signale an die interne Schaltung

Wie oben zu sehen ist, sind die Mittenabgriffe der beiden differenziellen Übertragungsleitungen NET_RD und NET_TD mit je einem Abschlusswiderstand (R903 und R904) verbunden und werden kapazitiv an den Leitungsschirm angebunden. Eine Verbindung von GND_ISO und GND ist vorgesehen, aber nicht bestückt.

Die Gegenstelle sieht wie folgt aus und besitzt ebenfalls einen Ethernet-Übertrager Baustein. Die Signale LAN_RX und NET_RX sowie LAN_TX und NET_TX sind über die sechs Metzer lange Leitung miteinander verbunden. Diese Leitung hat auf dem Weg drei Steckstellen an denen das Signal über eine Leiterplatte geführt wird.

Ausgangsseitige LAN Schnittstelle mit RJ45 Verbinder

Die TX+/- und RX+/- Signale gehen dann auf ein Ethernet PHY. Diese Art von Schaltung haben wir in unserer Anlage versucht nachzustellen. Es wurden die Abschlusswiderstände, die im RJ45-Stecker gezeigt sind auf der Baugruppe platziert und wie in dem Beispiel verschaltet. Dabei gehen die Mittelabgriffe der Transformatoren gegen den Abschlusswiderstand und gemeinsam über einen Kondensator gegen Schirm Potential. Die ungenutzten Verbindungen werden kurzsgeschlossen und ebenfalls über 75Ohm an das Schirm Potential gebracht.

Auf der Innenseite zeigt sich ein Ähnliches Bild, hier sind wir etwas anders vorgegenagen und haben die Abschlusswiderstände kurzgeschlossen, wie sie im ‚eingangsseitigen‘ Teil der Refernzschaltung zu sehen ist. Dieses Vorgehen hat allerdings zu den oben gezeigten Abstrahlverhalten geführt.

Lösung

Eine bessere Signalqualität und Elektromangetische Abstrahlung haben wir erreicht, indem die innen liegende Seite der Netzwerkschnittstellen hinter dem ersten Übertrager (nach der RJ45 Buchse) am Mittenabgriff komplett offen gelassen wurde. Das heißt die Widerstände R243 und R244 sind nicht bestückt, es gibt keine Verbindung zum Schirm der Leitung. Auf der anderen Seite des inneren Kabels ist die Schlatung ebenfalls ohne Abschlusswiderstand und nicht mit Schirm verbunden.

Neue Verschaltung mit offenen Leitungen in der Übertragungsleitung

Diese Verschaltung ergab dann folgenden Messchrieb, ebenfalls mit aktivem Netzwerk:

Messergebnis nach EMV-Maßnahme 30-300MHz

Die blauen Rauten sind die endgültigen Q-Peak Messwerte, nach denen die Norm verlangt. Wir liegen also untehalb der in der Norm gewünschten Grenze von 30dBµV/m und das System ist bereit für die Zulassung. Eine Messung mit einem dedizierten LAN Kabel ergibt zwar ein komplett anderes Bild mit wesentlich weniger Abstrahlung. Aber wir haben leider kein Platz um ein eigenes Kabel zu legen. Für den aufmerksamen Leser ist hier noch anzumerken, dass die Nadel bei 93MHz nicht zum LAN gehört und auch bei gezogener Leitung bestehen bleibt. Das ist Baustelle Nummer zwei.

Pick and Place: Aktueller Status und Ausblick

Es ist jetzt einige Zeit her, dass wir von unserem Betückautomaten Projekt berichtet haben. Daher hier ein Update zum Aktuellen Stand der Dinge.

Ziemlich zerlegt, kurz vor dem Wiederaufbau.

Wir haben die Adapterplatine erfolgreich an Stelle des 286er PC gesetzt. Das bedeutet, die Maschine lässt sich vollständig über eine USB-Verbindung von einem modernen PC steuern. Die Adapterplatine mit dem Namen STM286 hat einen Mikrocontroller (STM32F407), der die komplette Ansteuerung übernimmt. Neben der Ansteuerung der Schrittmotoren, Ventile und Auswertung der Sensoren auch noch eine Kommunikation mit dem PC über einen so genannten G-Code möglich. Dieser wird genutzt um Computer gesteuerte Maschinen wie Dreh- oder Fräsmaschinen zu steuern. Also ganz ähnlich wie das, was wir hier machen wollen.

Software Update

Kamera Bild des Bestückkopfes fährt entlang der X-Achse

Als G-Code Interpreter wurde eine Software mit dem Namen grbl so weit angepasst, dass sie mit dem Mikrocontroller lauffähig ist und die angeschlossenen Signale korrekt auslesen, bzw. schalten kann. Dabei sind einige Hindernisse zu nehmen. Nicht zu letzt, weil grbl für einen kleinen AVR Cotroller entwicklet wurde. Das zeigt sich unter Anderem in der RAM- und Flashauslastung auf dem wesentlich leitstungsfähigeren STM32. Im Gegensatz dazu wurden aus dem AVR einge Programmteile herausgenommen um Platz zu sparen. Auf dem STM32 ist die Ressourcenauslastung mit einem vollständigen Debug Build bei weit unter 10%. Auf der STM286er Baugruppe ist noch ein Ethernet Anschluss vorgesehen. Um diesen zum Einsazt zu bringen, z.B. für Websockets, sind also noch einige Bytes verfügbar.

Bestückkopf

Der von uns als Basis erworbene Bestückautomat Zevatech Placemat 460 ist in der Lage gewesen ein Bauteil zu greifen und bei Bedarf um 90° zu drehen. Unser Ziel ist es zwei Bauteile auf einmal aufnehmen zu können und diese in beliebigem Winkel zu bestücken. Dazu benötigen wir neben zwei Saugdüsen auch noch zwei zusätzliche Motoren. Diese sind zum Glück bereits als Modulsteckplätze auf der Adapterplatine vorgesehen. Ein Motor steuert die Rotation und der zweite die Höhe der Saugdüse. Die beiden Düsen können über den Wippenarm von einem Motor entlang der Z-Achse bewegt werden.

Doppelt BEstückkopf. Jede Düse lässt sich einzeln drehen und hoch/runter fahren.

Dieser Bestückkopf wird als Ersatz für den alten eingesetzt. Somit verfügt der Automat dann über 2 Vakuum Düsen, die in einer Auflösung von 1,8° bei vollen Schritten drehen können. Zwischen die beiden Düsen werden wir eiene Kamera platzieren, die die Arbeitsfläche betrachten kann. Eine zweite Kamera kann dann die Bauteile von unten betrachten. So ist die Maschine vollständig optisch steuerbar.

Motorsteuerung

Die original verbauten Motoren der Placemat Maschine sind 5-Phasen Schrittmotoren. Sie werden angesteuert über Treibermodule, die von den 100VAC Eingangsspannugn versorgt werden. Die Treibermodule haben neben der Versorgungsspannung noch einen Schrittsignal Eingang für entweder Schritte im Uhrzeiger sinn und gegen den Uhrzeigersinn. Für die Ansteuerung der Bestückdüsen haben wir noch zwei zusätzliche Schrittmotor Treiber im Polulu-Stil auf unserer Ansteuerplatine vorgesehen. Diese werden mit Schritt- und einem Richtungspin angesteuert. Diese Art der Ansteuerung ist in grbl die vorgesehene und daher muss für die verfügbaren Motoren die Ansteuerung angepasst werden. Das lässt sich aber ohne Probleme in der Funktion einbauen, die die Pins ansteuert. Denn anstatt den Schritt- und den Richtungspin zu setzten, werden wir abhänging von der gewählten Richtung einen der beiden Ansteuerpins setzen. Eine Timer-Interrupt-Routine sorgt dafür, dass die Pins danach wieder zurückgesetzt werden.

Mit dieser Ansteuerung lässt sich der Kopf in X- und Y-Richtung verfahren. Die Schrittmotoren sind nicht in der Lage zu erkennen, an welcher Stelle der linearen Führung der Kopf sich befindet. Daher wird die Mechanik zu jedem Start in einen bekannten Ausgangszustand gesetzt. Das nennt man den Home-Zyklus.

Home Zyklus

Die Zevatec Placemat Maschine hat an den X- und Y-Achsen mehrere Sensoren angebracht, die helfen, eine Home-Positionierung zu erhalten. Auf der von uns als Null festgelegten Seite besitzt sie zwei Gabellichtschranken. An der gegenüberliegenden Seite ist eine weitere Lichtschranke angebracht. Zu guter Letzt besitzt die Achse des Antriebmotors noch eine Lichtschranke, die einmal pro Umdrehung geöffnet wird. Dieses Signal wird im IO-Board in die unten gezeigte Schaltung gegeben. Y-CNP ist die zweite Lichtschranke am Null-Punkt, Y-TIM ist die Lichtschranke an der Motor Achse. Beide geben ein High-Signal, wenn sie nicht betätigt sind.

Schaltung der Home-Impuls Schaltung

In der regulären Betriebsart, also wenn dich der Kopf im Bewegungsraum auf der Achse befindet und bewegt, wird die Lichtschranke Y-TIM kontinuierlich eine kurzen High-Puls liefern. Dieser geht über U14 an den Timer 555. U14 sorgt dafür, dass die kontinuierlichen Pulse von Y-TIM in einen konstantes High-Signal übergehen, wenn die Lichtschranke ausgelöst ist. Der 555 macht daraus über den 100kOhm und die 0.1uF ein 100ms Puls.

Lichtschranken am Null-Ende der Y-Achse

So erhält man über das Signal Y-HM ein deutliches „Home-Position angefahren“ Signal. Für die aktuelle Umsetzung habe ich allerdings auf dieses Signal verzichtet und nutze die fallende Flanke der zweiten Lichtschranke an Position Null. grbl ignoriert beim Homen die Endschalter, stoppt aber die Bewegung, wenn ein Endschalter erreicht wurde. Der Kopf wird am Schluss des Zyklus um einen Millimeter aus der Lichtschranke gefahren. Das muss gemacht werden, da mit ’schraf‘ geschalteten Endschaltern das System in einen Alarm Zustand geht, wenn einer der Endschalter im Betrieb auslöst. Dieses Sicherheitsfeature möchte ich nicht umgehen und daher müssen wir nach Feststellung der Null-Position den Kopf aus der ‚Gefahrenzone‘ fahren. Die eigentliche 0/0 Koordinate ist dann je einen Milimeter weiter im Inneren des Arbeitsbereichs.

Vakuum-System

Um die Bauteile aufzunehmen, benötigt der Automat ein Vakuum. Da für die automatische Bereitstellung der Bauelemente in den Feedern Druckluft benötigt wird, bietet es sich an, den benötigten Unterdruck anhand eine Venturi-Düse zu erzeugen. Diese wird über ein Magnetventil mit Druckluft versorgt. Um das erfolgreiche Aufbauen des Unterdrucks zu messen, wird ähnlich einer Kelvin-Messung ein zweiter Luftschlauch zurück zum Unterdrucksensor geführt. Dieser hat entweder Umgebungsdruck, oder bei geschlossener Düse (Bauteil erfolgreich aufgenommen) den Unterdruck des Systems.

Um bei diesen Bauteilen zu sparen gibt es nur einen Sensor, den sich die beiden Köpfe teilen müssen. Dazu wird das zu messende Vakuum mit einem Magnetventil an den Sensor geschaltet. Diese Situation ist nicht optimal und in Zukunft sollten wir einen zweiten Unterdruck Sensor einbauen. Dann können wir über den kompletten Verfahrweg festellen, ob das Bauteil noch an der Düse hängt.

Ein Vakuum Sensor für zwei Vakuum Quellen

Versorgungsspannung

Die Maschine kommt Ursprünglich aus Japan und hat daher eine 100VAC Stromversorgung. Für den europäischen Markt ist ein Netztraffo eingebaut. Der wiegt einige Kilogramm, besteht aus einer großen Spule und setzt die hier vorhandenen 230VAC auf 100VAC herab. Dabei wird er handwarm. Das ist also kein so guter Wirkungsgrad und wir schauen, dass wir dieses Teil so schnell wie möglich los werden können. Dazu beötigen wir aber erst noch zwei Motortreiber für die X- und Y-Achse. Denn wie oben schon beschrieben, laufen die mit 100VAC.

Nachbessern einer Lötstelle am 144-pin STM32F407

Steuerungssoftware

Die Steuerungssoftware openpnp ist bereits vorbereitet und beinhaltet schon einige Konfigurationen. Im Video oben ist zu sehen, wie der Kopf entlang der X-Achse verfahren kann. Gesteuert wurde das ganze von openpnp aus. Auch habe ich angefangen die Festrüstung der Maschine in der Bauteiledatenbank für openpnp einzutragen. Dazu werde ich aber einen eigenen Artikel verfassen.

„fest“ gerüstete Bauteile. Die bleiben so lange drin, bis entweder die Rolle leer ist, oder andere dringender benötigt werden.

Bauteil-Feeder

Bei der von uns erworbenen Maschine waren einige pneumatisch betätigte Feeder dabei. Sie rollen das Baueteileband so weit ab, wie nötig um das nächste Bauteil frei zu legen. Mit einem Stößel drückt der Bestückkopf auf ein Drucklufttaster um den Mechanismus zu betätigen.

PCBowTie: Das „Geheime Projekt“

Ich habe im Oktober geheiratet und der werte Herr Brutzler war mein Trauzeuge. Als Elektronik Nerd darf natürlich auch ein subtiler Hinweis darauf nicht fehlen. Daher habe ich die PCBowTie, oder auch Blinkefliege entwickelt. Dieser wunderschöne Halsschmuck kann anstelle einer regulären Fliege oder Krawatte getragen werden. Im Gegensatz zur gewöhnlichen Stoff-Variante kommt sie allerdings mit einem Akku und WLAN daher.

Der Akku ermöglicht ein unauffällig auffälliges Blinken und das WLAN sorgt für die notwendige Updatefähigkeit. Wie jedes Projekt wurde der Funktionsumfang zu Beginn der Planungsphase festgelegt. Ziel des Projektes war:

  • Eine Fliegenförmiges PCB mit 1-wire RGB-LEDS
  • Akku-Versorgung aus kleinem LiPo (Eine Zelle, 3,7V)
  • Embedded Python Interpreter für die Applikation
  • WLAN Synchronisation aller Fliegen in Reichweite
  • Farb und Musterspiel abhängig der Lautstärke/Spektrum

Mit diesen Zielen ging es dann los. Um die WLAN Funktion zu unterstützen, habe ich auf die altbewährten ESP8266 Module zurückgegriffen. Aus einem anderen Projcket habe ich noch APA106 8mm RGB LEDS mit THT Technologie übrig. Diese sind dann also zur Beleuchtung eingesetzt worden. Micro Python wurde in diesem Blog bereits mehrfach erwähnt und kommt bereits mit allen notwendigen Funktionen für den ESP8266. Also schnell noch ein Mikrophon dazu und etwas, dass die Akku Spannung auf 5V hochsetzt um die LEDs adequat zu versorgen.

Für die Versorgungsspannung kam ein TPS61022 von TI zum Einsatz. Dieser kleine aber schlagkräftige DC/DC Konverter kann aus der Batterie die notwendige Energie für die Versorgung der LEDs und den ESP zur Verfügung stellen. Um den ESP8266 zu versorgen benötigen wir noch zusätzlich 3,3V. Die stellt uns ein TLV70033 zur Verfügung. Mit einem NPN-Doppeltransistor wie dem BC846BS kann die automatische Resetschaltung für den Firmwaredownload über UART aufgebaut werden. Eine Hand voll (35 Stück) Kondensatoren mit 100nF und 1µF Kapazität und die Schaltung ist vollständig.

Schaltlplan der PCBowTie E1

Das Layout wurde von der Fliegenform vorgegeben. Die genauen Abmaße haben sich aus der Größe der LEDs ergeben. Die Kaskade der LEDs war 5-4-3-2-2-3-4-5 und wurde im 10mm Raster platziert. Somit ergab sich für die Höhe der Leiterplatte 48,5mm. Das Funkmodul mit dem ESP wurde in der Mitte platziert und daraus ergab sich eine Länge von 104mm für die Leiterplatte. An der schmalsten Stelle ist die Fliege 20mm breit und kann somit das Funkmodul aufnehmen, das ist nämlich nur 16mm breit. Die Schaltung für die 5V Spannungserzeugung wird auf der Rückseite zwischen die LEDs gesetzt. Ich habe mich für ein 4-Lagen Layout entschieden. Außen sind die Signale und Innen die Versorgung (5V und GND) Für das Mikrophon habe ich eine Pfostenleiste vorgesehen, 3,3V GND und Signal. Diese Spannung wurde dann mit einem Spannungsteiler auf 1V limitiert. 1V entspricht 1024 oder 10 bit im ADC des ESP8266.

Layout der PCBowTie E1

Die restliche Beschaltung wurde auf die Gegenüberliegende Seite des Funkmoduls gesetzt, ebenso wie der Programmieranschluss für den Firmwaredownload über UART.

Mit schwarzem Lötstopplack und weißem Siebdruck war auch die Leiterplatte hübsch anzuschauen. Mit Hilfe alter Leiterplatten habe ich eine Halterung für die Lötpastendruck aufgebaut. Hier konnten alle 5 Leiterplatten mit Lötpaste versehen werden ohne jedes mal aufwändig die Schablone neu zu positionieren. Danach habe ich händisch die SMD Bauteile gesetzt und im Reflowofen verlötet. Die LEDs wurde ebenfalls händisch abgelängt, bestückt und verlötet. Zeitaufwand pro Fliege ca. 2 Stunden.

Bereit für die SMT-Bauteile

Um das Einlöten der LEDs so leicht wie möglich zu gestalten habe ich von dem Kollegen von cncprint eine Vorrichtung gefräst bekommen. Darin ließ sich die Fliege mit allen bestückten LEDs super umdrehen und verlöten.

Eingebettet in die LED-Bestück-Vorrichtung.

Wie es bei einem Projekt vorkommt, wenn zu wenig Zeit vorhanden ist und zu wenig Reviews stattfinden, hat sich auch diesmal ein Fehler eingeschlichen. Wenn man den DRC beachtet und die Fehler genauer anschaut, dann hätte einem auffallen können, dass die Versorgungsspannung nicht mit dem DC/DC Konverter verbungen ist. Hier muss also bei jeder Baugruppe ein ‚Aktivierungsdraht‘ angelötet werden.

Pin 5 und 7 sind nicht verbunden. Hier fehlt ein ‚Aktivierungsdraht‘

Für die von mir ausgewählten Akkus gab es leider keine SMT-Buchsen und so musste ich jedem Akku einen neuen Stecker verpassen. Die von mir gewählten Stecker (ich hatte dafür Gehäuse, Kontakte und eine Crimpzange) waren aus der JST PH Serie. Leider sind die Gehäuse hinten nicht für so dicke Leitungen ausgelegt, wie sie am LiPo verdendet wurden und so haben die Kontakte ganz leicht hinten rausgeschaut, obwohl die Rastnase vorn eingerastet ist. Das ist bei einem Stationären Gerät nicht so schlimm, wie bei einem Portablen, das zusätzlich noch von einem LiPo versorgt wird. Und der LiPo ist auch noch in Kopfnähe, bzw. direkt am Hals. Also habe ich die Kontakte mit Silikon verklebt. Das hat auch beim Entfernen des Akkus geholfen, da man relativ fest an den Leitungen ziehen muss um sie aus der Buchse zu bekommen.

Die Hardware stand und es ging darum die Software zu entwickeln. Bei dem gewählten Pyhton Interpreter ist beriets eine große Menge an Bibliotheken verfügbar gewesen und somit sind war der benötigte Code für eine Initiale Funktion recht übersichtlich. Mit der NeoPixel Bibliothek konnten die LEDs angesteuert und mit WLAN konnten die Scripte über Funk erneuert werden. Mit drei verschiedenen Mustern, die alle in der gleichen Farbe abliefen ist die erste Version der Blinkfliege fertiggestellt worden. Darrauf folgte eine zweite Version, die dann bereits mir Coroutinen arbeitete. Eine für das Samplen des ADC, eine für die Ansteuerung der LEDs und eine für die Debugausgabe. Hier habe ich dann begonnen ein WLAN Broadcast System zu erstellen, dass auf Basis einer Master-Fliege die Animationsframes vorgibt und sie allen anderen zur Verfügung stellt. Das hat aber nicht unbedingt zuverlässig funktioniert (UDP und WLAN ist nicht für seine zuverlässige Datenübertragung bekannt).

Fertige Fliege mit Funktion.

Ich habe dann zusammen mit Raphael gearbeitet, um zumindest eine Funktionsfähige Version für die Hochzeit zu bekommen. Also haben wir versucht auf MQTT umzusteigen. Ein Mobiltelefon mit MQTT-Broker und die Fliegen als Clients. Da kam es aber initial zu einigen Problemen und wir haben nicht gesehen, dass es innerhalb einiger Stunden zu einem Ergebnis kommen kann. Gleiches ist uns auch beim Sound passiert. Das von mir ausgewählte Mikrophon hat komische Signale geliefert (alle 100ms vollausschlag für 1ms) und war deshalb nicht ohne Vorverarbeitung einsatzfähig. Diese hätte aber einiges an Rechenzeit des ESP gekostet und noch viel mehr an Programmierarbeit bedeutet.

Auf Grund des relativ engen Zeitplans (zwei Tage vor der Hochzeit) habe ich mich entschieden den ganzen WLAN Teil sowie Sound vorerst aufzugeben und die verschiedenen Animationen mir zufälligen Farben auf jeder Fliege unabhängig abzuspielen. Damit war eine Funktion gegeben und die Fliege konnte auf der Hochzeit zum Einsatz kommen. Der Battereilaufzeit hat das auch gut getan. Die lag bei ca. 7 Stunden mit einem 350mAh Akku.

Hier noch eine kleine Vorschau auf einige der Patterns, die im Moment unterstützt werden. Wenn es Interesse an einer neuen Version in einer höheren Auflage gibt, dann werde ich mich den Themen WLAN und Sound nocheinmal annehmen.

Schmartwatch [16]: Probleme mit DHL

Ich habe vor meinem Urlaub im Oktober bereits im September eine weitere Runde Leiterplatten für das Schmartwatch Projekt bestellt. PCBWay hat mir 10 Flex-Leiterplatten mit FR4 Stiffner und schwarzem Stoplack produziert. Diese sind seit Anfang Oktober beim Verzollen verschwunden gegangen. Der letze Tracking Eintrag zeigt, dass die Sendung in Frankfurt zur Verzollung gegangen ist und seit dem… nichts.

Mittlerweile habe ich die Niedertemperaturlot Paste erhalten und auch das Mikroskop der Reworkstation ist einsatzbereit. Um die Heißluftfunktion der Reworkstation nutzen zu können, muss ich noch Druckluft im Keller installieren, aber das sollte auch erst mal mit dem Handfön funktionieren.

Ich hoffe, dass ich in den nächsten Tagen von der DHL höre und meine Sendung zugestellt bekomme. Denn eigentlich sollte die letzte Oktoberwoche zum Aufbau und Inbetriebnahme genutz werden. So sind nur ein paar neue Alexa Skills entstanden: Escape Games und Kid or Kitten

Neuer Alexa Skill

Ich habe heute einen neuen Alexa Skill veröffentlicht. Unter dem Namen Projekt Genesis findet ihr ein Spiel in dem ihr in die Rolle einer Schiffs-KI schlüpft um zu bewerten, ob der gefundene Planet geeignet ist um als neue Heimat für die Menschheit zu dienen.

Ich habe im Februar bereits darüber geschrieben:
Spielen mit Amazon Alexa – Das Projekt Genesis

Alle Mann und Frau an Board, wir fliegen ab mit:

Alexa, starte Projekt Genesis

Werbung

Schmartwatch [15]: Python Support

Vor einigen Jahren wurde Python auf Mikrocontrollern portiert. Damit ist die Programmierung von embedded Applikationen wesentlich einfacher und schneller möglich. Applikationslogik kann auf dem PC getestet werden, bevor sie auf das Target gespielt wird. Testen ist auf dem PC auch wesentlich einfacher und schneller als auf der echten Hardware. Somit spricht eigentlich nichts dagegen, Python auch für die Schmartwatch zu bauen.

Eine funktionierende Schmartwatch mit flexibler Leiterplatte ist leider immer noch nicht komplett bestückt. Das liegt einerseits daran, dass auf den flexiblen Leiterplatten der DCDC Konverter, (6 Bällchen, 2×3 mm) sehr schlecht bestückbar ist, andererseits aber auch daran, dass ich auf noch keiner manuell gelöteten Platte das Funkmodul ansprechen konnte. Diese Tatsache verzögert alles auf eine ungewisse Zeit, bis ich den Prozess der Lötung unter Kontrolle habe. Genügend Bauteile habe ich, es fehlt lediglich die Zeit für langwierige Versuche. In der Zwischenzeit habe ich mich mit einem anderen Aspekt des Projekts beschäftigt. Wir versuche also diesmal den Python Interpreter in der Micropython nRF52 Variante auf der Schmartwatch zu installieren.

Code downloaden

Dazu Klonen wir das Projekt aus dem Github Repository, laden die Module und starten den Prozess.

$ git clone https://github.com/micropython/micropython.git micropython
$ cd micropython
$ git submodule update --init
$ make -C mpy-cross

Jetzt baut das Projekt einmal komplett durch, das dauert einige Zeit. Wenn das Grundsystem steht, wechseln wir in den Pfad mit der nRF Portierung.

$ cd ports/nrf/
$ make

Wenn es hier zu einem Fehler kommt, ist wahrscheinlich der arm-gcc nicht installiert. Wie das geht kann man zum Beispiel hier nachlesen.

Standartmäßig wird die Portierung für das PCA10040 Board gebaut, darauf befindet sich ein nRF52832, also genau der Chip, der auch auf der Schmartwatch das Sagen hat. Somit ist eigentlich schon alles erledigt und mit einem simplen flash Befehl kann der Chip programmiert werden.

$ make flash

Code anpassen

Die Platformspezifischen Konfigurationen befinden sich in dem Ordner boards/pca10040, also kopieren wir diesen

$ cd boards
$ cp pca10040 schmartwatch -r

Hier kann die Modulauswahl und Pinbelegung angepasst werden. Dazu bearbeiten wir die mpconfigboard.h entsprechend der Schmartwatch Konfiguration

#define MICROPY_HW_BOARD_NAME       "Schmartwatch"
#define MICROPY_HW_MCU_NAME         "NRF52832"
#define MICROPY_PY_SYS_PLATFORM     "nrf52-DK"
#define MICROPY_PY_MACHINE_UART     (0)
#define MICROPY_PY_MACHINE_HW_PWM   (1)
#define MICROPY_PY_MACHINE_HW_SPI   (1)
#define MICROPY_PY_MACHINE_TIMER    (1)
#define MICROPY_PY_MACHINE_RTCOUNTER (1)
#define MICROPY_PY_MACHINE_I2C      (1)
#define MICROPY_PY_MACHINE_ADC      (1)
#define MICROPY_PY_MACHINE_TEMP     (1)
#define MICROPY_PY_RANDOM_HW_RNG    (1)
#define MICROPY_HW_HAS_LED          (1)
#define MICROPY_HW_LED_COUNT        (1)
#define MICROPY_HW_LED_PULLUP       (0)
#define MICROPY_HW_LED1             (8) // Frontlight LED
// SPI0 config
#define MICROPY_HW_SPI0_NAME        "SPI0"
#define MICROPY_HW_SPI0_SCK         (27)
#define MICROPY_HW_SPI0_MOSI        (25)
#define MICROPY_HW_PWM0_NAME        "PWM0"
#define MICROPY_HW_PWM1_NAME        "PWM1"
#define HELP_TEXT_BOARD_LED         "1"

Somit haben wir die Bedingungen geschaffen, die Basisfunktionen der Schmartwach nutzen zu können. Jetzt müssen wir den Kompiliervorgang noch für unsere Hardware durchführen, das geht auch wieder mit make.

$ make BOARD=schmartwatch

Das nächste mal betrachten wir, wie der Code dann auf der Schmartwatch sinnvoll einsetzbar ist, denn es gibt zum Beispiel keine UART, die über die Schmartwatch nach außen geschaltet ist. Wir müssen also das Projekt so bearbeiten, dass es die REPL anstatt über die UART Peripherie über Semihosting ausgibt.

Jetzt wird’s bunt

Am Prime Day diesen Jahres habe ich mir eine neue Beleuchtung für den Schreibtisch und die Terrasse gegönnt.

Für den Schreibtisch wollte ich eine indirekte Beleuchtung der Tastatur und Umgebung, das habe ich mit Hilfe der Phillips Hue Ambient* Lichter erreicht. Diese stehen hinter den Monitoren und strahlen an die Wand. Dadurch entsteht ein dimmbares und in der Farbe anpassbares Licht, dass sich mit Hilfe der Hue App, oder von Home Assistant einstellen lässt.

Für die Terrasse habe ich einen wasserdichten RGB LED Streifen* gekauft, dieser wird über WLAN angebunden und kann auch von Home Assistant gesteuert werden. Ähnlich der Schreibtischbeleuchtung ist der Leuchtstreifen in der Farbe anpassbar. Somit kann im Garten eine stimmungsvolle Beleuchtung erreicht werden, ohne zu viele verschiedene Apps zu verwenden.

Home Assistant Konfiguration

Die Konfiguration für Home Assistant zur Unterstützung von Hue ist denkbar einfach. Im Integrationsmenü muss lediglich die Adresse der Hue Bridge im lokalen Netzwerk ausgewählt werden und schon stehen alle Geräte, die normalerweise über die Hue App gesteuert werden müssen auch in Home Assistant zur Verfügung.

Ähnlich ist es mit der Aktivierung des RGB LED Streifens. Die kleine Box, die die Ansteuerung übernimmt, und die von vielen asiatischen Anbietern in unterschiedlicher Ausführung verkauft wird, ist als Flux LED unterstützt. Um die Komponente zu aktivieren, muss in der configuration.yaml diese Zeilen in der light Kategorie hinzugefügt werden:

# Example configuration.yaml entry
light:
  - platform: flux_led
    automatic_add: true

Anschließend Home Assistant neu starten und die Lampen sind als Elemente für die Oberfläche verfügbar.

* alle Produkte sind Amazon Affiliate Links

Neuer Anstrich für den Kurzschluss Blog

Ich habe den Kurzschluss Blog nach vielen Jahren von der Blogger Plattform zu WordPress.com umgezogen. Ich hoffe ich hab alle Umzugsproblemchen beheben können, wenn euch noch ein Fehler auffällt, dann lasst es mich bitte wissen.

Es fehlen noch ein paar Kleinigkeiten, die auf der Blogger Webseite vorhanden waren, aber alles in allem bin ich mit dem Umzug zufrieden. Auch sind wir dabei mehr Inhalt für den Blog zu erstellen. Bei den Kurzschluss Junkies geht es weiter und es ist etwas neues in Planung. Mehr dazu in einigen Wochen. Es wird sich aber weiterhin um die gleichen Themen drehen, die ihr hier bereits lesen könnt.

NAGCL [I]

In dem Eingangsartikel zu meinem Software-Projekt NAGCL (das habe ich jetzt als Interimsnamen auserkoren) bin ich kurz auf die angedachten Features des Programms eingegangen, sowie auf die Historie und Motivation dazu.
In diesem Artikel möchte ich ein kurzes Update zum aktuellen Stand des Projekts geben, sowie ein paar Implementierungsdetails vorstellen.

Für die wichtigsten Elemente des Programms bestehen mittlerweile erweiterbare Gerüste. Das trifft vor allem auf die Benutzung im Shell-Modus und auf die Übergabe von Parametern beim Programmaufruf zu.
Ebenfalls kann bereits eine Textdatei mit Pfaden zu git-Repositories eingelesen werden. Diese Pfade werden auf Existenz, Zugriffsrechte und ob diese auf ein gültiges git-Repository zeigen geprüft.

Um alle Einträge der Textdatei verwalten zu können, werden diese in einer einfach verlinkten Liste (Linked List) abgelegt. Diese Liste wird bei jedem Programmaufruf bzw. -start neu angelegt.
Im Shell-Modus bzw. als Parameter beim Programmaufruf können Elemente der Liste hinzugefügt oder entfernt werden. Ob die Liste verändert wurde, wird beim Beenden des Programms dem Nutzer gemeldet. Als letzter Schritt wird die Textdatei – sofern eine Änderung der Liste vorgenommen wurde – aktualisiert, d.h. Pfade von Repositories werden hinzugefügt oder entfernt. Die Implementierung einer einfach verlinkten Liste war notwendig um einen dynamischen Datentyp zur Verwaltung der Repositories zur Laufzeit zu erhalten. Die Implementierung ist allerdings bei Weitem nicht so elegant wie die von Linus Torvalds‘ Liste in der Kernel-Implementierung. Eine derart generische Implementierung einer Liste wird an dieser Stelle von mir aber auch nicht benötigt.

Aktuell arbeite ich daran, den Log (entspricht dem Befehl git log) eines git-Repositories auszugeben sowie den ersten Versuchen einer GUI-Implementierung. Die Implementierung der git-Funktion erfolgt mit der API libgit2, die Implementierung der GUI-Funktionen mittels der Bibliothek ncurses.

Die größte Veränderung für mich selbst war die Umstellung von Makefile zu cmake als Build-Setup.
Der Hauptgrund für den Wechsel des Build-Setups war, mich mit cmake auseinander zu setzen und einzuarbeiten. Aktuell kann das Projekt mit allen benötigten Bibliotheken gebaut und verlinkt werden, wenngleich das Setup im Moment unübersichtlich ist und noch nicht dem gewünschten Stand entspricht.
Im endgültigen Stand sollen alle benötigten Bibliotheken heruntergeladen und mitkompiliert werden. Zudem soll die Erstellung der Dokumentation mittels Doxygen unterstützt werden, sowie Testcases zur Überprüfung der korrekten Ausführen der Software bei der Installation.
Als Editor benutzte ich vim zusammen mit cscope und dem Plugin Conque-GDB zum graphischen Debuggen des Programms.

Zuletzt möchte ich erwähnen, dass ich noch offen bin für Namensvorschläge und wie immer gilt:
Schreibt, kommentiert, diskutiert und abonniert den Podcast!