Archiv der Kategorie: Allgemein

SDR – Software Defined Radio

Wer schon immer einmal auf kostengünstigste Weise eine Spektralanalyse im Frequenzband bis knapp 1GHz durchführen will, oder einfach sehen möchte, welche Trägersignale vorhanden sind, der kann sich des SDR (SoftwareDefinedRadio) bedienen. Die günstigste Variante einen entsprechenden Empfänger zu bekommen, ist es, einen DVB-T Stick auf Basis des Realtek Chip RTL2832 zu erstehen. Diese Sticks sind im Internet für wenige Euros zu erstehen.

Die technischen Facts des Sticks und die darin verwendeten IC´s:

Zum einen kommt hier der RTL2832U von Realtek zum Einsatz. Das ist ein quadratischer 6mm Chip (QFN-Package) mit zwölf Pins pro Seite. Er wird mit einer Spannung von 3.3V versorgt und mit einem Takt von 28.8 MHz betrieben. Der IC ist ein DVB-T COFDM Demodulator. (Coded Orthogonal Frequency-Division Multiplexing). Das „U“ in der Bezeichnung definiert das Interface des Chip, das ein USB 2.0 Interface ist. Hier wird im Datenblatt angegeben, den RTL2832U unbedingt über ein USB-Verlängerungskabel anzuschliessen, um die Empfindlichkeit des Empfängers nicht durch die Störaussendungen des Computers zu beeinträchtigen. Weiters besitzt der RTL2832U auch acht GPIO Ports sowie einen Infrarot remote control Port.

Der mit dem RTL2832U meist verwendete Tuner-Chip ist der R820T von Rafael Micro. Der Tuner hat einen Frequenzbereich von 42-1002MHz, die Noise figure liegt bei 3.5dB @ RFin. Die Stromaufnahme liegt bei kleiner 178mA bei 3.3V. Der Eingang darf mit einer Leistung von maximal +10dBm beaufschlagt werden. 

Ein anderer Tunerchip, der auch oft in den DVB-T Sticks zum Einsatz kommt ist der E4000 von Elonics. Er hat im Vergleich zum R820T einen Frequenzbereich von 64MHz bis 1.7GHz.

Der RTL2832U besitzt einen 8Bit ADC und einen DSP. Er beherrscht Digitale Down Conversation (DDC) von IF zum Basisband via I/Q Mixern, digitales Low-pass Filtering, I/Q resampling und sendet die 8Bit I/Q Daten über den USB Port. Ein weiteres Feature des RTL2832U ist  die FFT (FastFourierTransformation), sowie der COFDM Demodulator, der per Software gesteuert werden kann und in den SDR-Applikationen zu Einsatz kommt.

RTL2832U Blockschaltbild (Quelle: Herstellerdatenblatt)

 

Die Software um den DVB-T Sticks SDR-Radio zu entlocken:

Hier gibt es mittlerweile eine riesige Community und ebenso für fast alle Systeme Lösungen um SDR zu betreiben. Eine Ausnahme ist hier  Apple mit seinen iPhones und iPads.

Für den Mac ist hier die Applikation GQRX die erste Wahl. Unter dem folgenden Link: http://gqrx.dk/download ist auch eine Version für den RaspberryPI2 und 3 und für Ubuntu Linux zu finden.

Screenshot von GQRX

Die Software ermöglicht die Darstellung des Frequenzbandes in einstellbarer Bandbreite. Es zeigt die Träger auf der y-Achse in dBuV an. Ebenso kann ein Averaging eingestellt werden. Per einstellbarem Wasserfalldiagramm können auch nur kurzzeitig auftretende Trägersignale sichtbar gemacht werden. Etliche Parameter, wie Sampletrate, FFT-Size, Demodulation, etc. sind konfigurierbar.

Natürlich sind auch für Windows-Systeme geeignete Tools verfügbar: Hier beispielsweise die freie Software SDR# (SDR sharp) von Airspy. Sie bietet dieselben Features wie die GQRX Version für den MAC.

Screenshot von SDRsharp

Wem jetzt auch noch die portable Version fehlt, der kann sein Tablet oder Smartphone mit Android Betriebssystem als „mobiles Messsystem“ aufbauen. Hierzu wird lediglich eine Treibersoftware und das Analyzertool benötigt. Im APP-Store muß hierzu folgendes heruntergeladen werden:

RTL-sdr-driver von Martin Marinov (es ist kein root für das Android Betriebssystem notwendig)
RF-Analyzer oder SDR-TOUCH

Screenshot RF-Analyzer Android

Zusammenfassend noch einmal die Linksammlung:

MAC, Linux und Raspberry:  GQRX
Windows: SDRsharp
Android: RF-Analyzer, RTL-SDR-Driver

 

Schweben mit Ultraschall – Der Tractor Beam

Schwebendes Kügelchen

Ein cooles Projekt hat auf  instructables.com vorgestellt. Es handelt sich dabei um eine Anordnung von Ultraschalltransducern, deren Schallwellen so ausgerichtet sind, dass sich Schallkeulen ausbilden, in denen ein leichter Körper (zum Beispiel ein Styroporkügelchen) schwebend gehalten werden kann. Da das Projekt auf http://www.instructables.com/id/Acoustic-Tractor-Beam/ sehr ausführlich beschrieben ist und wir (Mario, Bernd und ich) smarte Jungs sind 🙂 haben wir und gedacht, wir bauen das nach.

Die Elektronik  besteht aus einem H-Brückenmodul, einem Arduino Nano sowie einem China DC/DC – Converter.  Das Zusammenschrauben der Module funktioniert prinzipiell ganz gut, aber als Elektroniker macht man natürlich eine eigene Platine, auf der alles nötige drauf ist. Also habe schnell ein geeignetes Layout erstellt und per nasschemischer Fertigung hergestellt. Es mag zwar immer Leute geben, die Platinen gerne in einen Fräsbohrplotter einspannen und die Maschine per spanendem Verfahren Material abtragen lassen, aber wenn es schnell gehen und auch schön werden soll, dann wird natürlich geätzt. So sind auch dünnste Leiterbahnen problemlos möglich. Und der ganze Prozess (egal wie groß die Platine ist) dauert gerade einmal 30 Minuten.

Also wie üblich die Schaltung auf Basis Asier Marzos Projektangaben gezeichnet und einwenig optimiert und in den Schematic-Editor eingegeben, ein Layout geroutet und die Belichtungsfolien erstellt.

Die unterschiedlichen Bohrlöcher für die THT Bauteile macht auch hier die Maschine.

Danach werden in einem Bad gleich mehrere Platinen in einem „Ruck“ geätzt.

Jetzt wird bestückt und gelötet.

Die fertige Platine mit aufgestecktem Arduino Nano

Der Träger für die Ultraschalltransducer wird im 3D-Drucker aus ABS gedruckt. Das Stereolithographie-File kann auf der „instructables“ Website heruntergeladen werden.

Wir haben hier unterschiedliche Druckverfahren getestet. Mit Polyvinylalcohol als Support-Material und auch ohne Support…

Das Supportmaterial kann nach dem Druck im warmen Wasser herausgelöst werden. Das dauert in diesem Fall aber einige Stunden.

Nach dem Lösen des Supportmaterials sieht der Ultraschallträger dann so aus.

Mario und Bernd konstruieren zwischenzeitlich eine Halterung für Platine und Akku, auf die der Schallkopf schlussendlich aufgeschraubt werden soll.

Grate entfernen und Feinarbeiten werden mit dem Dremel gemacht.

Jetzt werden alle Ultraschallgeber (Transducer) auf Polarität und Gleichphasigkeit geprüft und bei Abweichungen entsprechend sortiert. Da in der Halbschale insgesamt vier Arrays aus Transducern verschaltet und getrennt angesteuert werden, ist es besonders wichtig, dass alle Transducer innerhalb eines Arrays die selbe Phasenlage erzeugen.

Jetzt kann ich alle Schallgeber in die Halbschale einbauen und entsprechend verdrahten.

Das fertige Werk wird nun an die Platine angeschlossen und der Arduino Microcontroller mit Programmcode versehen.

Nach dem Einschalten und den ersten Messungen, ob alle Spannungen vorhanden sind und die Transducerarrays phasengleich angesteuert werden, kann über einem Wasserbad die Ausbildung der Schallkeulen überprüft werden.

Der Erfolg zeigt sich, wenn ein Styroporkügelchen schwebend gehalten wird …

Ein kurzes Video, das den Aufbau und Test des Tractor-Beam Projektes zeigt, ist hier zu sehen:

 

 

 

 

 

 

 

Raspberry Pi – mechanische Beanspruchung extrem

Der Raspberry Pi ist als universell einsetzbarer Einplatinencomputer in vielen Hobby- und Heimanwendungen zu finden. Ob als Webserver, TV- oder Radio-Streamingserver, Spielekonsolenemulator oder Steuerungen im Bereich Robotik und Automation, der Raspberry PI kann diese Aufgaben erfüllen. Auch als mobiler Datenlogger lässt er sich aufgrund der kompakten Bauform und geringen Stromaufnahme ideal nutzen. In einem früheren Blogbeitrag habe ich ein Beispiel mit Wetterdatensensoren, angeschlossen an einen batterieversorgten Raspberry Pi, aufgebaut. Der „Logger“ zeichnete die Daten der Sensoren auf einer Speicherkarte auf. So ein Logging-System lässt sich auch wunderbar in ferngesteuerte  Fahr- oder Flugmodelle einbauen. 

Was jedoch passiert wenn so ein Flug- oder Fahrmodell von seiner Momentangeschwindigkeit in einem sehr kurzen Moment auf Geschwindigkeit Null verzögert wird, kann man sich vorstellen. Wie jedoch das Logging-System darin dann aussieht, vielleicht nicht. Aber ich kann hier mit Bildmaterial helfen.

Hier war einst die CPU

Die USB-Buchsen sind noch vorhanden. Der LAN-Anschluß fehlt.

Die Zweiteilung des Raspberry Boards haben die ihn überholenden, schwereren Komponenten (Batterien), die hinter ihm angeordnet waren verursacht. 

Selbst der Mini-USB Stick verformte sich so stark, dass der Speicherchip in zwei Teile zerbrach. Ein Auslesen der Daten war somit auch nicht mehr möglich.

Diktaphon Olympus Pearlcorder L200


Der Olympus Pearlcorder L200 ist ein analoges Diktiergerät mit Microcassette als Aufzeichnungsmedium. Das Modell stammt aus dem Jahr 1983 und wurde von der japanischen Firma Olympus hergestellt. Das ansprechende Design und die Vielzahl an technischen Raffinessen bescherten dem Modell einen derartigen Erfolg, sodass es heute, über 30 Jahre später, bei vielen Besitzern noch immer im Einsatz ist. Der kleine Recorder  kann das Band mit zwei Geschwindigkeiten betreiben, 1.2 und 2.4 cm/s. Das ermöglicht Aufzeichnungszeiten von 120 min bei 1.2cm/s mit einer MC60 Microcassette. Das Laufwerk besitzt eine Auto-Stop-Funktion, es kann im Play Modus vor- und rückgespult werden. Eine CUE-Mark Taste zeichnet einen Markierungston auf das Band auf, sodass diese Positionen am Band beim Spulen der Kassette automatisch angefahren werden können. Die Aufzeichnung kann per „voice-activation“ erfolgen (VCVA). Das bedeutet, das Gerät befindet sich im Pause Modus und wird durch  Überschreiten eines einstellbaren Schallpegels gestartet. Ein kleines Bandzählwerk ist ebenfalls an Board. Die Energieversorgung kommt aus zwei „AAA“ Batterien. Es gibt aber auch eine Netzteilbuchse für den Anschluß externer Energiequellen.  

 

Technische Daten:

  • Tonband: Microcassette
  • Tonspur: 2 Spuren, 1 Kanal monophonisch
  • Antriebssystem: Capstan
  • Bandgeschwindigkeit: 2,4cm/s, 1.2cm/s
  • Schnellwiedergabe: In der F.PLAY Betriebsart läuft das Band etwa 30% schneller als normal
  • Programmwahl: Mittels CUE MARK Signal
  • Sprachaktivierung: Kontinuierlich einstellbar mittels VOLUME-Regler in VCVA-Aufnahmebetriebsart
  • Lautsprecher: 28mm dynamisch
  • Stromversorgung: Speisespannung 3V Gleichstrom (2.2 bis 3.5V)
  • Batterien: 2×1,5V „AAA“
  • Netzadapter: 3V Gleichstom
  • Praktisch Max Ausgangsleistung: 220mW (2.4cm/s)
  • Ohrhörerbuchse 2,5mm 2kOhm
  • Frequenzbereich: 400-6000Hz (2.4cm/s)
  • Abmessungen: 107.4×51.4×13.9 mm
  • Gewicht: 125g mit Batterien

Die Mikrokassette (auch MC) ist eine kleine Version der Compact Kassette ( auch bekannt aus Audiokassette). Sie wurde von Olympus entwickelt und erstmals 1969 vorgestellt. Durch die langsameren Bandgeschwindigkeit von  1,2 und 2.4 cm/s gegenüber 4,75 cm/s bei normalen Audiokassetten ergeben sich schlechtere Klangeigenschaften. Die obere Frequenzgrenze liegt bei  Microcassetten bei ca. 6-7kHz. Daher Werdern sie hauptsächlich zur Aufnahme von Sprache verwendet. Anrufbeantworter und Diktiergeräte sind die typischen Anwendungen. Bei Kassetten der Größe MC60 beträgt die Kapazität 30 Minuten pro Seite bei 2,4 cm/s.  Die Größen MC15, MC30 und MC90 waren ebenso erhältlich.

 

 

 

 

Ansicht des Pearlcorders bei entferntem Gehäusedeckel.

Alle elektronischen Komponenten sind auf einer sehr dünnen, schon fast flexiblen Printplatte untergebracht. Ein Service oder eine Reparatur erfordert hier schon ein wenig Geschick um nichts zu beschädigen. Nach den vielen Jahren ist ein Service allerdings schon fast unumgänglich, da zumindest die Antriebsriemen spröde und brüchig sind, da die Weichmacher des Kunststoffs das Weite gesucht haben. Auch Staub und Verunreinigungen an der Antriebseinheit, Tonwelle etc. sollten entfernt werden.

Nahaufnahme des Tonkopfes und der Andruckrolle.

Die Oberseite des Pearlcorders beherbergt den Lautstärkeregler, Pausetaste, Mikrofon- und Ohrhöreranschluß, die CUE-MARK Taste und den Betriebsmodusschalter. Rechts oben ist das eingebaute Mikrofon zu erkennen.

Seitlich sind die Bedientasten für das Bandlaufwerk angeordnet. 

Die Anzahl der Erweitungsmöglichkeiten sind auf dieser Zeichnung dargestellt.

 

X-Mas 2016

Frohe Weihnachten an die Besucher des Blogs!

Jetzt sind es doch schon zwei Jahre, in denen ich den  „Technik- und Retroblog“ mit Beiträgen füttere. Wer hätte das gedacht…

Es haben sich mittlerweile auch schon ein paar Leser hier her verirrt und angefragt, ob ich das eine odere andere Gerät hier vorstellen könne. Wenn es mir möglich ist, werde ich natürlich versuchen es zu realisieren. Die Rubrik mit den Computern der 80er ist leider immer noch leer. Hier fehlt mir noch der „Faden“, wie ich das ganze aufbereiten soll – es schwebt mir auch zu jedem Gerät ein kleines Video vor, in dem die Geräte im lebendigen Zustand gezeigt werden sollen. Wenn dazu jemand Ideen hat, … gerne.

Ein großes Dankeschön möchte ich meinem Kollegen Mario Wehr aussprechen, der mir die WordPress – Umgebung zur Verfügung stellt und so excellent serviciert!

In diesem Sinn:

Frohe Weihnachten und schöne Feiertage!

 

 

3.2″ TFT Display an Raspberry PI

dsc_2944Der Raspberry Pi in seiner Anwendungsvielfalt wurde bisher immer als kleiner Server, oder Datenlogger, oder auch als TV-Frontend betrieben. Dabei wurde er über seinen HDMI-Ausgang an einen TV oder Monitor angeschlossen. Im Server- bzw. im Dataloggerbetrieb war kein externer Monitor notwendig. Sämtliche Einstellungen sind über die Konsole über das Netzwerk durchführbar. Will man den Raspberry aber einmal als – beispielsweise – mobiles, Akku betriebenes Gerät aufbauen, so gibt es eine Vielzahl an Anzeigenelementen und Displays. Von einfachen LC-Displays, die mehrzeilig Zeichen darstellen können, über monochrome Dot-Displays bis hin zu TFT-Farbdisplays in unterschiedlichen Größen ist hier alles erhältlich.

Ich stelle hier das 3,2 Zoll TFT 65k Farbdisplay von „joy-it.net“ vor. Das Display ist mit einem Touchscreen ausgestattet und wird über eine 26-polige Buchsenleiste direkt auf die GPIO-Pinheaderleiste des Raspberry gesteckt. Weitere Verbindungen sind nicht notwendig. Das Display hat die selben Abmessungen wie das Raspberry Pi Board und bildet so ein kompaktes, handliches PI-Paket…

dsc_2946Ist das Display aufgesteckt, und auf der SD-Karte ein Raspbian-Image mit graphischer Oberfläche installiert, dann kann es losgehen. Zur Einrichtung des Displays sind noch ein paar Schritte durchzuführen. Nach dem Einschalten wird erst einmal nur die Hintergrundbeleuchtung des Displays hell. Mehr passiert vorerst nicht. Darum verbindet man den Raspberry vorher noch einmal mit einem Monitor über HDMI oder über das Netzwerk mit einem Terminal. Hat man nun Zugriff so wird folgende Datei bearbeitet:

sudo nano /boot/config.txt

Hier sind die folgenden Zeilen am Ende einzufügen:

dtparam=spi=on
dtoverlay=waveshare32b:rotate=270

Dann die Datei speichern und den Editor wieder schließen. Jetzt die cmdline.txt bearbeiten:
sudo nano /boot/cmdline.txt

An das Ende der Zeile ist folgendes anzufügen:

fbcon=map:10

Und die Datei wieder speichern. Jetzt wird eine neue Datei erstellt:
sudo nano /usr/share/X11/xorg.conf.d/99-calibration.conf

Hier die folgenden Zeilen eintippen und die Datei wieder speichern:

Section „InputClass“
Identifier „calibration“
MatchProduct „ADS7846 Touchscreen“
Option „Calibration“ „160 3723 3896 181“ Option „SwapAxes“ „1“
EndSection

Jetzt ist noch die 99-fbturbo.conf zu editieren:

sudo nano /usr/share/X11/xorg.conf.d/99-fbturbo.conf

Hier ist in der Zeile:
Option „fbdev“ „/dev/fb0“  das fb0 in fb1 zu ändern. Das soll dann so aussehen:
Option „fbdev“ „/dev/fb1“  Und wieder speichern.

Jetzt in den tmp Ordner wechseln (cd /tmp) und folgende Datei herunterladen:
wget http://www.joy-it.net/anleitungen/rpi/tft32b/waveshare32b-overlay.dtb
und nach
sudo cp waveshare32b-overlay.dtb /boot/overlays/waveshare32b.dtbo
kopieren.

Das war´s dann schon. Mit sudo reboot und angestecktem Display dann neu starten.

dsc_2948Wenn alles geklappt hat, so sollte das Display jetzt arbeiten und der Touchscreen funktionieren.

3D-Druck: ein schneller Test und gleichzeitig praktisch

dsc_2935Einfach praktisch ist er schon, der 3D-Drucker. Ein Kunststoff-Filament bis zum flüssigen Zustand erwärmen und mit einem Drei – Achsen – Positionierer den Kunststoff schichtweise auftragen. Das ist ganz das grob beschriebene Prinzip eines 3D-Druckers.  Und mit genau so einem Drucker habe ich schlussendlich das hier beschriebene Objekt ausgedruckt. Bei dem verwendeten Drucker handelt es sich um einen Ultimaker 2+, der mit ABS-Filament mit 2.85mm Durchmesser als Druckmedium befüllt ist.

Doch vor dem Ausdrucken muss erst einmal ein Druckmodell her. Hier gibt es im Netz eine Vielfalt an fertigen herunterladbaren Modellen, die direkt gedruckt werden können. Eine Website ist hier zum Beispiel  thingiverse. Hier können die Community – Mitglieder ihre Designs und Objekte veröffentlichen und frei zugänglich machen. Doch ich wollte kein fertiges Modell nehmen, sondern den gesamten Designflow einmal von Beginn an durchmachen und testen, ob die, hier bei uns in der Arbeit verwendeten Tools auch zuverlässig funktionieren. Für dieses Testobjekt, einen Telefonaufsteller – oder „Handyhalter“ habe ich folgende Tools verwendet:

acadmodelDie 3D – Konstruktion habe ich mit AutoCad 2013 von Autodesk gezeichnet. Hier kamen einfach nur 3D Körper wie Quader und Zylinder zum Einsatz, die durch Addition, Subtraktion und extrudieren von Objekten das gewünschete Ergebnis liefern. Das fertige Objekt wird dann als Stereo-Lithografie-Datei (.stl) exportiert.

Jetzt kommt die sogenannte Slicer – Software zum Einsatz. Slicer bedeutet sinngemäß soviel wie zerscheneiden, aufscheiden. Und nichts anderes macht diese Software. Das dort geladene Druckmodell wird in Schichten zerlegt, so wie sie der Drucker später auch als Kunststoffebene schichtenweise auftägt. Auch hier gibt es einiges an open-source und freeware Software. Ich habe Cura verwendet. Dieses Slicer-Tool wird auch von Ultimaker angeboten und kann auch direkt mit deren Hardware arbeiten. Im Slicer werden dann einige Parameter festegelegt, die für den Druck dann wichtig sind. Das sind die Temperatur auf die das Filament erwärmt wird, die Plate Temperatur, die Materialvorschubgeschwindigkeit (ist abhängig von der Druckdüse und dem Material selbst), die Druckgeschwindigkeit usw. Hier sind etliche Dinge zu beachten und definieren, die schlussendlich erhebliche Auswirkung auf die Qualität, den Materialverbrauch und die Druckzeit haben…

dsc_2933
Der Ultimaker bei der Arbeit
curabild
Das Modell im Cura-Slicer

 

dsc_2937
Frisch aus dem Drucker

 

3D-Druck, Raspberry PI und Schalten von Netzspannung

dsc_2916Heute stelle ich kurz ein Miniprojekt, das aus gegebenem Anlass enstanden ist, vor.  Zum Thema 3D-Druck mit dem Ultimaker 2 Drucker gibt es ja mittlerweile schon tonnenweise Informationen im Web. Auch die Steuerung über einen Webserver (octoprint) samt Webcameraüberwachung ist sehr gut dokumentiert und einfach zu realisieren. So haben es viele selbsternannte 3D-Drucker-Experten einfach, und können auf das umfangreiche Wissen aus dem Web zurückgreifen. An meinem Abeitsplatz im Labor ist seit kurzem auch ein Ultimaker 2+ Drucker im Einsatz und wird, da ja viele Druckaufträge oft mehrere Stunden bis zur Vollendung benötigen, per Webcam überwacht. Jetzt könnte man den Drucker unbeaufsichtigt drucken lassen und den Raum oder das Gebäude verlassen und den Fortschritt remote überwachen. Doch wenn jetzt etwas nicht nach Plan verläuft und der Druckkopf beispielsweise mit dem Druckobjekt kollidiert oder das Druckobjekt selbst nicht so gedruckt wird, wie es der Slicer vorsieht, dann kann der Drucker nicht per Remote not-abgeschaltet werden.

Da der Octoprint – Server nun aber auf einem Raspberry PI läuft, dessen GPIO Port – Pins einfach ungenutzt herumstehen 🙂 , bieten sich diese an, ein Interface zu bauen, das im Falle des Falles die Stromversorgung des Druckers abschalten kann. Eine, in ein kleines Kunststoffgehäuse eingebaute Relaisplatine soll an die GPIOs angeschlossen werden. Die Relaiskontakte werden dann daran angeschlossene Schukosteckdosen schalten. Ich habe die Relaisplatine für vier Kanäle dimensioniert, um nicht nur den Drucker notabschalten zu können, sondern zukünftig auch ein Abluftventilator etc. damit zu schalten. Die Schaltbefehle werden dann direkt am Raspberry, über z.Bsp. Python-Scripten, oder einfach nur bash commandos ausgeführt.

Hier ist die supereinfache Schaltung für den Aufbau der Relaiskarte dargestellt:

schematicgpio

Vom Papier zur fertigen Platine und diese dann in ein Gehäuse eingebaut und per 40poliger Stiftleiste und Flachbandkabel an den Raspberry PI angesteckt, ist im folgenden Bild zu sehen. Als Gerätebezeichung ist mir „Ultimaker Schukocontroller“ eingefallen. Da die Aluminium-Frontplatte des Gehäuses wegen der Aussparung für das Flachbandkabel ohnehin in den Fräsbohrplotter musste, habe ich den Schriftzug „Ultimaker Schukocontroller“ auch gleich dort verewigt.

dsc_2918

Die Hardware ist nun fertig und mit dem Raspberry verbunden. Als GPIO Pins habe ich, wie im Schaltplan zu erkennen, die GPIOs 08, 23, 24 und 25 verwendet. Als einfachen Test kann man die Relais jetzt über das Terminalfenster des Raspberry (entweder lokal, oder über einen Putty) ganz einfach ansteuern. Als Beispiel ist hier GPIO Pin8 angegeben:

sudo echo „8“ > /sys/class/gpio/export
sudo echo „out“ > /sys/class/gpio/gpio8/direction

Relais einschalten:
sudo echo „1“ > /sys/class/gpio/gpio8/value

Relais ausschalten:
sudo echo „0“ > /sys/class/gpio/gpio8/value

 

 

Aus der Nixie Ära, noch mehr VFD

 

img_6297In einem früheren Blogeintrag habe ich einen Uhrenbausatz vorgestellt, dessen Anzeigenelemente mit VFD-Röhren aufgebaut sind. Diese Vakuum-Fluoreszenz-Display Röhren stammen, wie auch die Nixieröhren, aus den 60iger, 70iger Jahren und wurden dann von den LED 7-Segment Anzeigen abgelöst. Doch der Reiz der glimmenden, in Glaskolben verpackten Leuchtziffern erobert heute wieder so manches Wohnzimmerregal. Über den damaligen Beitrag über den VFD – Uhrenbausatz von gr-projects, bin ich mit dem Konstrukteur und Hersteller dieses Bausatzes, Herrn Rother in Kontakt gekommen.  Herr Rother hat mir weitere Uhrenmodelle zur Verfügung gestellt, deren Auf- und Zusammenbau ich in Form kurzer Filme aufbereitet und dokumentiert habe. Die verwendeten Anzeigeröhren sind russische Röhren der Typen IV-11, IV-6 und IV-3.

Hier die Infos zu den Röhren:

IV-11:

  •  Glaskolben mit einer Höhe von 55mm und einem Durchmesser von 22mm.
  • Anzeigehöhe 20x13mm (HxB)
  • Heizspannung 1,5V bei einem Strom von 50-70mA
  • Gitterspannung ca 25-30V
  • Lebensdauer ca. 5000h

IV-6:

  • Glaskolben mit einer Höhe von 40mm und einem Durchmesser von 12mm.
  • Anzeigehöhe 11x5mm (HxB)
  • Heizspannung 0.85-1.15V bei einem Strom von 50mA
  • Gitterspannung ca 25-30V
  • Lebensdauer ca. 5000

Hier nun die Aufbauvideos zu den Uhrenmodellen:

 

 

Raspberry als Datenlogger – Teil.3 Arduino nano als I²C Converter

DSC_4790
Raspberry PI als Datenlogger

 

Im letzten Teil des Projektes „Raspberry Pi als Datenlogger“ habe ich einen Raspberry Pi als Datenlogger für unterschiedliche Sensoren konfiguriert. Als Schnittstelle dient der I²C Bus und die RS232 Leitungen, an denen die Sensoren angeschlossen sind. Die Sensoren waren ein HYT939 (Luftfeuchtigkeit und Temperatur), ein BME280 (Luftdruck, Luftfeuchte und Temperatur) sowie ein Ultimate GPS Board an der seriellen Schnittstelle. Der Raspberry Pi ist dabei in eine Box eingebaut, wird mit einer Powerbank, die sich ebenfalls in der Box befindet, versorgt und stellt als Schnittstelle eine 8 polige RJ45 Buchse mit I²C und RS232 nach aussen zur Verfügung. An diese Buchse können dann die Sensoren angeschlossen werden.   Will man die Sensorik nun änderen, bzw. erweitern, so können einfach weitere I²C Bus – Sensoren angeschlossen werden. Es muß lediglich noch die Software (in diesem Fall Pythonscripten) angepasst werden und schon können die Daten des neuen Sensors empfangen und aufgezeichnet werden. Wie aber geht das System um, wenn der Sensor nicht über I²C spricht? Wenn zum Beispiel ein analoger Wert eingelesen werden soll? Ganz einfach: Soll die Hardware des Datenloggers nun nicht mehr modifiziert werden, so muß man einfach dafür sorgen, dass der neue Sensor, der beispielsweise analoge Spannungen ausgibt, diese an eine, nennen wir sie BlackBox weitergibt, die wiederum an ihrem Ausgang ein I²C Bussignal bereit stellt. Das kann dann wieder in das bestehende System integriert werden.

dsc_2872
Arduino Nano als I²C Converter

 

Und genau diese Aufgabe erfüllt ein Microcontroller. Praktischer Weise habe ich diesmal einen Arduino Nano dazu verwendet. Der Arduino Nano mit dem Atmega 328 besitzt ja mehrere analoge und Digitale Eingänge, sowie zwei Interrupts. Über entsprechende Libraries ist einfach das I²C Bus Protokoll zu realisieren. Somit ist das geeignete Black-Box Gerät gefunden.

 

Der folgende Arduino Code stellt einen einfachen I²C Bus Slave dar. Die Busadresse soll beispielsweise 0x08 sein, von einer Messung haben wir den Messwert 1.3321 erhalten. Dieser Wert soll bei Anfrage an diese Busadresse gesendet werden. Das Beispiel sieht wie folgt aus:


// I2C Slave
#include
int address = 8;           //i2c busaddresse
float wert = 1.3321;       // testwert .... kommt zb aus sensorberechnung

char tmp[6];
void setup() {

Wire.begin(address);           // i2c adresse 0x08
Wire.onRequest(requestEvent);  // register event
}

void loop() {}

void requestEvent() {
dtostrf(wert,1,3,tmp);      // float "wert" in char array umwandeln
Wire.write(tmp);            // char array senden
}

Im script ist eine Funktion „dtostrf“ zu sehen. Sie  wandelt den Inhalt einer Variable des Datentyps „floating point“ in ein charakter Array um. Infos sind hier zu sehen. Im Python Interpretor des Raspberry können wir nun überprüfen, ob die Daten ankommen. Doch zuvor soll der gesamte Aufbau einmal schematisch dargestellt werden.

blockschaltbild
Schematische Darstellung des Systems

Sind alle Sensoren inklusive des Arduino angeschlossen, so kann das folgende Python-Script aus der Linux Konsole des Raspberry aufgerufen werden:

 

# Reading data from arduino as sensor slave
# V0.1 by bihlo 09/2016

import smbus, time

bus = smbus.SMBus(1)    # Raspberry Rev. 2
address = 0x08          # Fixed default address of Arduino

# Initialize sensor to acquire measurements
#def MeasurementRequest():
# void = bus.write_quick(address)
#time.sleep(0.1)

# Read from bus
def ReadMeasurement():
void= bus.write_quick(address)

time.sleep(0.1)
# Acquire 6 byte from sensor
Readout = bus.read_i2c_block_data(address,0,6)

out=''.join(chr(i) for i in Readout) #byte array von ascii in string wandeln

print "Antwort vom Arduino: ", Readout, " ."
print "Antwort als String:  ", out

ReadMeasurement()

Wenn der Python Interpretor jetzt keinen Fehler meldet und der Inhalt der Variable „wert“ des Arduino in Ascii und im Klartext dargestellt wird, dann kann jetzt mit einem „richtigen“ Messwert eines Sensors weiter gearbeitet werden.

dsc_2873
Partikeldetektor

Als Sensor soll an an den Arduino ein DSM501 Dust Sensor Module angeschlossen werden. Der DSM501A ist ein Staubsensor, der mit 5V bei einer Stromaufnahme von 90mA betrieben wird. Er erkennt Partikel ab einer durchschnittlichen Größe von 1µm bei einer Konzentration von 0 bis ca. 1.4mg pro Kubikmeter Raumluft. Laut Datenblatt und Herstellerinformationen wird die Luft im Bereich der Messkammer erhitzt, sodass eine Luftzirkulation entsteht. Die sich ständig bewegende Luft wird mit einem getakteten Lichtstrahl beleuchtet. Ein in einem Winkel zur Lichtquelle angebrachter Fotodetektor empfängt nun, im Falle dass sich Partikel im Licht befinden, dessen Streulicht. Die Intensität des Streulichtes ist von der Anzahl und Größe der Partikel abhängig und kann so erfasst werden. Als Ausgangssignal erzeugt der Sensor ein Puls/Pausensignal mit einer Periode von 100ms. Das Verhältnis von High- zu Lowtime stellt nun die Grundlage für die Berechnung der Partikelanzahl bzw. -dichte dar. Über einen Countereingang des Arduino werden die Impulse gemessen und der korrespondierende Partikelwert errechnet. Dieser Wert wird nun wie oben beschrieben als Busdatum für den I2C Bus herangezogen und bei Auslösen des Bus Events übertragen. Somit hat der Arduino die Aufgabe eines einfachen Protokollkonverters übernommen. Mit dieser Methode lassen sich alle möglichen Messwerte so aufbereiten, dass der Raspberry mit einer Schnittstelle damit umgehen kann.

Wie das im Detail funktioniert und wie der Code dazu aussieht, werde ich vielleicht später einmal posten.