Dieses Blog durchsuchen

Der Wetterfrosch 2.0 oder Umweltdatenlogger

Vor ein paar Jahren habe ich ein Projekt vorgestellt, in dem ein Raspberry Pi als Datenlogger arbeitete. An diesen Raspberry waren ein paar Sensoren angeschlossen, die Umweltdaten, wie Lufttemperatur, relative Luftfeuchte, den Luftdruck und auch die aktuelle GPS Position aufzeichneten. Die Sensoren bestanden größtenteils aus fertigen Breakoutboards, die über die diversen Busse (I²C, Serial, SPI...) an den RaspberryPi angeschlossen waren. Am PI selber liefen Python Skripten, die das Auslesen der Sensoren übernahmen, die Daten zusammenfassten und auf einen USB-Flashspeicher ablegten. Dieses Sammelsurium an Komponenten hatte ich dann in eine Kunststoffbox mit einer Größe von 150x80x50mm eingebaut.

Doch es geht auch um einiges kleiner. Im Rahmen eines kleinen Projektes war es die Aufgabe, diesen Sensor/Datenlogger zu verkleinern. Mein Ansatz, das zu realisieren, war ganz einfach: "Alles neu". So habe ich das Konzept folgendermaßen geändert:

  • der RaspberryPi wird durch einen Microcontroller ersetzt
  • es wird eine Platine erstellt, auf der sämtliche Komponenten untergebracht sind
  • die erfassten Daten werden auf einer MicroSD Karte gespeichert
  • das Board ist auf die wesentlichsten Komponenten reduziert. Die Sensorelektronik und der SD-Card Reader wird direkt auf dem Board platziert
  • ein GPS-Empfänger (in Form eines Breakoutboards) soll optional aufgesteckt werden können
  • die Programmierung des Controllers wird durch eine ISP Schnittstelle durchgeführt
  • die Spannungsversorgung beträgt 5V DC

Daraus habe ich folgendes Blockschaltbild erstellt: 

Blockschaltbild

Das zentrale Element ist, wie so oft, der Microcontroller Atmega328. Er benötigt als externe Beschaltung lediglich einen Quarz als Taktstabilisierung. (genauer gesagt bietet er aber auch die Optionen interne Oszillatoren zu benutzen...) Der Microcontroller kommuniziert über den I²C Bus mit den Sensoren HYT939 und BME280. Über die ausgeklügelte bidirektionale Levelshifter Schaltung mittels BSS138 Mosfet mit integrierter Body Diode wird die Anpassung der Pegel von 5V auf der Controller Seite zu den 3,3V auf der Sensorseite realisiert. Diese Schaltung wird sowohl für die SCL- (Serial Clock), als auch für die SDA-Leitung (Serial Data) angewendet.

Die Datenspeicherung findet auf einer MicroSD-Karte statt. Dafür wird ein Card Slot verbaut, der per SPI (Serial Peripheral Interface) mit dem Controller kommuniziert. Auch hier ist eine Anpassung der Signalamplituden notwendig. Das übernimmt dieses Mal jedoch der Chip TXB0108 von Texas Instruments. Das ist ein 8Bit Bidirektionaler Levelshifter.

Ein Taster wird die Datenaufzeichnung starten und stoppen und eine LED soll diverse Statusmeldungen durch Blinkfolgen darstellen.

Das optional aufsteckbare GPS Modul arbeitet mit 5V Spannungsversorgung und die Pegel der seriellen Datenkommunikation (RS232) sind ebenfalls 5V kompatibel.

Zu guter letzt ist natürlich auch die Spannungsversorgung zu planen. Hier soll lediglich eine externe, stabilisierte 5VDC Quelle angeschlossen werden, um den Logger zu versorgen. Die für die Sensoren und SD-Card benötigten 3,3VDC werden am Board mittels einem LDO (Low Drop Out) Regler erzeugt.

Sind alle Komponenten und deren Zusammenspiel definiert, dann wird daraus der Schaltplan gezeichnet. Für meine Bastelprojekte verwende ich hauptsächlich den Schaltplan- und Layout Editor "Eagle".  Aus dem Blockschaltbild ergibt sich die unten abgebildete Schaltung.


Aus dem Schaltplan habe ich ein Layout mit zwei Layern erstellt, dessen Grundriss die Abmessungen 55x25mm hat. Bis auf die Steckverbinder befinden ausschließlich SMD Komponenten auf dem Board.

Im Layout Tool gibt es die Funktion, eine optische Vorschau der gefertigten Platine zu betrachten. So kann man vorab überprüfen, ob die Platine den Vorstellungen entspricht und gegebenenfalls die Lage der Bauteile optimieren. Ist das erledigt, wird aus dem Design ein Paket mit Produktionsfiles (Gerberdateien) erzeugt und das dann dem Platinen Hersteller seines Vertrauens gesendet. Da der auch sehr, sehr weit weg angesiedelt ist, dauert die Produktion auch ein paar Tage. Aber schlussendlich kommen die Platinen an und können sich auch sehen lassen.


Die beiden Bilder oben zeigen die Platine von der TOP und der BOTTOM Seite. Der nächste Schritt besteht darin, die Komponenten entsprechend der Planung zu bestellen und danach zu bestücken.

 
 

Die Bestückung erledige ich per Hand mit einem, für die SMD-Komponenten geeigneten Lötkolben mit entsprechend kleiner Spitze. Für die ganz kleinen Teile, wie den BME280 Sensor, kommt auch noch ein Mikroskop, bzw. eine Mikroskop Kamera zum Einsatz.



Wie die Platine nach der Bestückung aussieht, zeigen die beiden Bilder oben. Das folgende Foto zeigt den Größenunterschied des fertigen Loggers mit dem aufgesteckten GPS Modul im Vergleich zum alten "Wetterfrosch"



Nach der Fertigstellung der Hardware, geht es nun an die Software. Die habe ich praktischer Weise mit dem Arduino IDE Tool gebastelt und per AVRISP mk2 über ISP auf den Controller geflashed. Um den AVRISP auf einem Windows 10 Rechner zum Laufen zu bekommen, muss ein geeigneter Treiber installiert sein. (hier hilft libusb-win32-1.2.6.0) 

Programmcode mit der ArduinoIDE erstellt

Controller mit AVRISPmkII geflashed

Auf der SD-Karte wird nach Anlegen der Versorgungsspannung und nach Betätigen des Tasters die Datenaufzeichnung gestartet. Die Messwerte werden im Sekundentakt geschrieben. Wenn, wie in diesem Beispiel der GPS-Sensor gesteckt ist, so werden auch die GPS Daten mit aufgezeichnet. Die Software zeichnet auch auf, wenn der GPS Sensor noch keinen "fix" hat. (Da in dem Beispiellog unten noch kein GPS-Fix vorhanden war, sind auch keine gültigen GPS Daten enthalten.)

Beispiel des Datenlogs:

Luftdruck962.41
Luftfeuchte37.05
Temperatur26.96
-----------------------------
$PGACK,103*40
$PGACK,105*46
$PMTK011,MTKGPS*08
$PMTK010,001*$GPGGA,235947.799,,,,,0,00,,,M,,M,,*71
$GPGLL,,,,,235947.799,V,N*73
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,1,1,00*79
$GPRMC,235947.799,V,,,,,0.00,0.00,050180,,,N*48
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
$GPGGA,235948.799,,,,,0,00,,,M,,M

-----------------------------
Luftdruck962.39
Luftfeuchte36.72
Temperatur26.95
-----------------------------
Luftdruck962.43
Luftfeuchte36.66
Temperatur26.97
-----------------------------

 

CO2-Messung mit SCD30, Arduino und Matlab

Dieses Projekt - eigentlich Miniprojekt - könnte vielleicht auch für den einen oder anderen interessant sein. Es handelt sich um den mittlerweile bekannten und häufig verwendeten Kohlendioxid Sensor SCD30 (CO2-Sensor) des Herstellers Sensirion. Es gibt etliche Projekte die man dazu im Netz findet. Im Rahmen eines schnellen Testaufbaues habe ich versucht, die Daten des Sensors mithilfe eines Arduino Uno Boards auszulesen, um sie dann mit der Software Matlab in einem Plot darzustellen. Die Datenübertragung erfolgt über die Serielle Schnittstelle bzw. über serielles Protokoll des USB-UART.

Um den SCD30 am Arduino anzuschließen, benötigt man die Spannungsversorgung und den I²C Datenbus - also in Summe gerade einmal vier Drähte. Damit ist die minimale Konfiguration erfüllt und die Daten können ausgelesen werden.

Der Sensor selbst arbeitet nach dem Prinzip der NDIR Technologie.  (NDIR = non-dispersive-infrared). Das bedeutet, der Sensor ist also ein kleines Spektrometer. Hierbei wird das zu untersuchende Medium in eine Probenkammer geleitet. Die Probenkammer wird von einer Infrarotquelle durchleuchtet und das IR-Licht durchstrahlt das Medium und einen sehr schmalbandigen Wellenlängenfilter und trifft dann auf den IR-Detektor auf. Die Wellenlänge des Filters ist dabei so ausgelegt, dass genau diejenigen Wellenlängen durchgelassen werden, die von den Molekülen des Mediums (Gases) absorbiert werden. Je nach Anzahl der Moleküle, oder Dichte des Gases, werden entsprechend weniger Lichtstrahlen vom Detektor erkannt.  Eine zweite Messkammer, die mit einem Referenzgas gefüllt ist, dient dabei als Referenz. Ein Controller am Sensor wertet diese Informationen aus und gibt sie in Form von ppm über die I²C (oder umschaltbar auch MOD-Bus) Schnittstelle weiter. Zusätzlich befindet sich auch ein Temperatur und Luftfeuchtesensor am Board, deren Daten ebenso über den Bus ausgelesen werden können. Die voreingestellte I²C Adresse des SCD30 ist 0x61. Die genauen Informationen zum Datenprotokoll sind in den Dokumentationen der Firma Sensirion zu finden.

Idealerweise gibt es, wie fast immer, schon eine fertige, studententaugliche Library für die diversen Microcontroller. So braucht man sich keine Gedanken mehr zu machen und kann die Daten des angeschlossenen Sensors direkt auslesen. Die Beispielprogramme findet man unter den Examples der Libraries.


 

Für die Versorgungsspannung des Sensors kann der Arduino mit 3.3V oder 5V dienen. Vorsicht ist jedoch geboten, wenn man den I²C Bus, verwendet: Hier ist der Input High-Level mit 1,75-3.0V festgelegt und der Output High Level mit max. 2.4V. An einem Arduino sind die Pegel aber 5V!! Also muss hier ein Levelshifter eingebaut werden - oder zumindest, für einen schnellen Test geeignete Widerstände.

Der hier angeführte Programmcode stammt im Wesentlichen aus dem Beispiel der Library von Nathan Seidle von SparkFun Electronics:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
By: Nathan Seidle SparkFun Electronics  
Library: http://librarymanager/All#SparkFun_SCD30  
*/

#include <Wire.h>
#include "SparkFun_SCD30_Arduino_Library.h" 
SCD30 airSensor;

void setup()  
{
  Wire.begin();
  Serial.begin(9600);
  //Serial.println("SCD30 Example");
  airSensor.begin(); //This will cause readings to occur every two seconds
}

void loop()  
{
  if (airSensor.dataAvailable())
  {
   // Serial.print("co2(ppm):");
   
    Serial.print(airSensor.getCO2());

    //Serial.print(" temp(C):");
    Serial.print(",");
    Serial.print(airSensor.getTemperature(), 1);

   // Serial.print(" humidity(%):");
    Serial.print(",");
    Serial.print(airSensor.getHumidity(), 1);

    Serial.println();
  }
  else
    //Serial.println("No data");

  delay(500);
}
 

 

 

Der hier angeführte Programmcode stammt im Wesentlichen aus dem Beispiel der Library von Nathan Seidle von SparkFun Electronics:

Mit diesen Codezeilen im Arduino Uno und der korrekten Verdrahtung (SDA -> an Arduino A4 und SCL -> an Arduino A5 über einen geeigneten Pegelwandler) geht's dann mit Matlab weiter. Der Arduino sollte jetzt in einem seriellen Terminal folgende Zeilen ausgeben: (Beispiel)

473,28.5,12.9
473,28.5,13.0
470,28.5,13.1
469,28.5,12.9
466,28.5,12.9
465,28.5,12.7
465,28.5,12.5
463,28.6,12.6
461,28.6,12.5
463,28.5,12.4 ... und so weiter

Diese gilt es nun in Matlab einzulesen und über einen definierbaren Zeitraum aufzuzeichnen und gleichzeitig in einem Plot darzustellen. Das Matlabskript hier macht es möglich... (pn falls es jemand benötigt)


 

Als Ergebnis erhält man dann einen Plot, der den CO2 Verlauf im Raum (in dem Fall am Schreibtisch meines Büros) darstellt.

 



 

 

Amiga - Genlock Kabel

 

Vor einiger Zeit habe ich über das Amiga Genlock "VESONE" einen Beitrag verfasst. Der ist unter dem Titel "Amiga und Genlock" zu finden. (link)

Es gibt anscheinend doch noch einige Leute, die ein solches Gerät besitzen und es wieder in Betrieb nehmen möchten. Da aber, so wie auch bei mir, die notwendigen Kabel, Software etc, nicht unbedingt dort gelagert sind, wo auch das Gerät ist, kann es schwierig werden. Ich dachte mir zwar, dass es keine Rolle spielt, denn wofür gibt es denn das Internet - doch weit gefehlt. Man findet nichts. Das habe ich jetzt gemerkt als mich ein Blogbesucher nach dem Pinout des RGB zu Genlock Kabel gefragt hat. Ich habe nichts im Netz gefunden. Doch tief in den Schachteln im Keller in diversen Kabelkisten hatte ich Glück. Das Kabel tauchte auf. Um die Steckerbelegung nun auch mit andrern Retrofans zu teilen habe ich die Pinbelegung heraus gezeichnet und stelle sie hier online.

Hier also die Bilder und das Pinout (Amiga_VESGenlock_Cable)

 








 

Das zweite Buch zum Blog

 

Nach dem großen Erfolg meines ersten Buches zum Retroblog, habe ich mich nun durchgerungen und ein zweites Buch verfasst - NEIN SPASS - es gab gar keinen Erfolg. Das Buch habe ich damals verfasst, um für mich selber ein in Papier gedrucktes Werk meiner (Un)taten dieser Website in Händen zu halten. Denn erstens ist es wesentlich praktischer, einmal schnell was nachsehen zu können - ohne immer ein Internet zu Verfügung zu haben und zweitens: was wenn der/die Server nicht mehr erreichbar sind, oder gelöscht werden, oder gar abbrennen? Oder noch schlimmer, wenn jemand das Internet löscht... :D

Ich dachte mir damals zwar, es über eine "Druck on Demand" Option aufzulegen, aber wer weiß ob das irgendjemanden interessiert und ob ich das überhaupt so einfach darf. Und wer würde dafür auch so viel Geld ausgeben. Denn die Einzeldrucke sind auch ganz schon kostenintensiv. Also sind die hier Vorgestellten, gedruckten Exemplare quasi Unikate. Und ich bin auch ein bisschen stolz darauf, denn es steckt doch einiges an Arbeit drinnen.


Also nun gibt es das Retrobuch Nr.2 mit der Fortsetzung der Blogeinträge vom Ende der ersten Version bis zum Eintrag "Schukosteckdose mit USB (reparieren)" vom 19.Dezember 2020 und das sind immerhin wieder 96 "Geschichten" die diesmal 498 Seiten belegen. Auch für diesen Druck habe ich wieder "epubli" gewählt und dort bestellt. Das hat den Vorteil, dass ich, sollte ich noch einen Druck eines der bestehenden Bücher haben wollen, einfach nur wieder auf "bestellen" klicken muss, da ja alle Produktionsdaten bereits vorhanden sind.

Ich habe auch einiges dazu gelernt, was die Formatierung der Texte, Fonts, Schrittgrößen und Verzeichnisse betrifft. Die Bilder sind jetzt mit einer höheren Auflösung gedruckt und es sieht alles in allem besser aus.

So bleibe ich dran und werde in ein paar Jahren, wenn wieder genug Content verfasst ist, wieder an einer Ausgabe basteln.

Tomy Racing Cockpit - die elektrische Verkabelung

Aufgrund einiger Anfragen betreffend der elektrischen Verkabelung des Tomy-Racing-Cockpit, habe ich mich mal dazu gesetzt und die Verdrahtung herausgezeichnet. Es gibt scheinbar doch viele Altersgenossen, die in ihren Kellern, Dachböden etc. noch Spielzeug aus den 80iger finden und es wieder reparieren. Bei dem Tomy Cockpit kommt es immer wieder vor, dass die dünnen Drähte schon beim Zerlegen abbrechen oder die Lötstellen nicht mehr halten, oft haben sich auch vergessene Zellen im Batteriefach aufgelöst und die Kontakte und Lötstellen sind daraufhin korrodiert.

Eine Skizze der Verdrahtung habe ich in der folgenden Abbildung dargestellt.


 

Ich verwende übrigens nur zwei 1.5V Zellen, da die in dem Batteriefach vorgesehene Parallelschaltung von je zwei Zellen ein Nonsens ist, da die Zellen garantiert unterschiedliche Innenwiderstände haben und sich so auch bei Nichtverwendung gemütlich gegenseitig entladen.

Um meine in der Skizze dargestellten Komponenten auch im Racing Cockpit identifizieren zu können, habe ich sie auch fotografiert.


 

Das ist die Rückseite des "Schalters" der das Zündschloss des Cockpits darstellt und mit dem das System eingeschaltet wird.


 

Dieses Teil habe ich "Unterbrecher" genannt, da es ein Öffnerkontakt ist, der von einem kleinen "Zahnrad" ausgelöst wird und dadurch ein Blinken der Trommelbeleuchtung bewirkt. Das passiert, wenn man die "Straße" verlässt.


 

Das sind die Anschlüsse des Batteriekasten. Ob die Farben der Drähte bei allen Ausführungen gleich sind, bezweifle ich. Denn bei den Geräten, die ich mittlerweile wiederbelebt habe, waren unterschiedlichste Drahtfarben verbaut.

Mit diesen Informationen sollte es nun etwas einfacher sein, die abgerissenen Drähte und Lötstellen wieder herzustellen.

 

Aufräumen und Archivieren

Hinter dem, in der Beitragsüberschrift genannten Titel versteckt sich meine Idee, in dem "ingmarsretro" Blog einmal etwas Ordnung zu machen und ein wenig aufzuräumen. Mit "Aufräumen" meine ich, die einzelnen Beiträge wieder mal auf Rechtschreibfehler zu prüfen, vielleicht auch den einen oder anderen Beitrag neu zu formatieren und ihn auch zu ergänzen. Darum wird es im Jänner 2021 auch keinen anderen Beitrag geben.

Es haben sich auch reichlich neue Beiträge angesammelt, die zwar digital auf dem Server gesichert sind, jedoch eine Papierform davon gibt es noch nicht. So will ich alle Posts, die seit der letzten Sicherung entstanden sind, wieder in Form eines Buches zu Papier bringen. Und das ist leider nicht ruck-zuck gemacht, sondern bedarf einiges an Arbeit. Der Beruf und die "Familienzeit" mit meinem kleinen Sohn erlauben es nur, meistens nachts an den Beiträgen zu arbeiten. Und zwischen den Beiträgen bastle ich ja auch an den Projekten (Projekt’chen), über die ich dann ja schreibe. Davon habe ich auch noch viele im Kopf, die vielleicht einmal realisiert werden. Und dann gibts noch einige, an denen ich arbeite und die noch fertiggestellt, oder zumindest daran weitergearbeitet werden soll.

So bastle ich seit den letzten Monaten an einer Nixie-Uhr, die ziemlich diskret aufgebaut werden soll. Die Uhr hat mittlerweile auch einen vernünftigen Status erreicht, so dass hier Platinen vom selber geätzten Prototyp bis zum vernünftigen, industriell gefertigten Zustand, entstanden sind.

 

der NixieUhr Prototyp
 

Auch der "Röhrenradioempfänger" mit dem ich vor einigen Jahren begonnen habe, wartet darauf, dass daran weitergebastelt wird.

Das Thema Retro Computer lässt mich natürlich auch nicht los. Hier sind ein paar Geräte noch zu restaurieren und warten darauf, wieder zum Leben erweckt zu werden. (Hier fällt mich gleich ein: ich suche eine RUN/STOP Taste für einen Commodore Plus 4 - würde mich freuen, wenn irgendein Leser da helfen könnte...)

 

auf der Suche nach einer RUN/STOP Taste

Das Projekt mit der MOS8501 CPU als Lattice - FPGA - Miniplatine steht auch in der "Weitermach-Warteschlange" hier gibts noch einiges zu tun (Die Levelshifter tun noch nicht so, wie sie sollen, der VHDL Code muss noch weiter angepasst werden, die Prototypen Platinen müssen auf ein Board zusammengefasst werden und dann auch noch miniaturisiert werden...) ist also auch noch genug zu tun.

Dann gibt´s auch noch alte Geräte, die ich hier im Blog vorstellen möchte und noch etliche Reparaturen, die mir immer wieder in die Hände fallen... Auch das eine oder andere HomeMatic-Gebastel steht noch an.

Auch habe ich mit dem Gedanken gespielt, Content hier aus dem Blog in Form von Videos auf YouTube zu veröffentlichen. Aber ich kann zum einen nicht abschätzen, ob das jemanden interessiert und ob ich mir das antun möchte, meine Visage vor der Kamera zu präsentieren. Wahrscheinlich wäre es sinnvoller, es mit einem didaktisch begabteren Menschen als Protagonisten zu machen. Und das natürlich für Lau, als Spaß an der Sache. Andererseits gibt es hier ja etliche Youtuber, die hier sehr erfahren (z. Bsp.: Dave Jones mit seinem EEVblog, NoelsRetroLab, Adrians Digital Basement, GreatScott, ZeroBrain, JanBeta, etc.)  sind und das schon lange betreiben. Auch nicht zu vernachlässigen ist der immense Aufwand, solche Filmchen zu Produzieren. Wenn ich hier meine Aufbauvideos betrachte: So geht fast ein Tag für das Aufnehmen des Rohmaterials beim Zusammenlöten des jeweiligen Bausatzes drauf und zusammengerechnet fast drei Tage für den Schnitt und Nachbearbeitung. Mal sehen ob daraus einmal etwas werden kann...