Dieses Blog durchsuchen

Röhrenradio Eigenbau - Der Anfang

Ein Projekt, das schon seit einigen Jahren in der Werkstatt herumliegt und bei dem ich mich nie zum Weitermachen motivieren konnte, ist ein selbstgebastelter UKW Radioempfänger mit einer Röhrenendstufe. Da ich aus Kindertagen noch einiges an gesammelten Elektronenröhren aufbewahrt habe, ist mir irgendwann einmal in den Sinn gekommen mit diesen Röhren etwas zu basteln. So habe ich vor nun schon fast 15 Jahren begonnen, aus 2 Stück Endpentoden EL84 und einer Doppeltriode ECC83, einen AB Verstärker aufzubauen. Als Grundplatte habe ich ein Stück Pertinaxplatte zugeschnitten, darauf die drei Röhrensockel montiert und auf der Unterseite alles fliegend verlötet.


Die Verschaltung der Komponenten habe ich nach folgendem Schaltplan aufgebaut. Der Schaltplan ist mit der freien Schaltungssimulationssoftware LT-Spice erstellt worden.
 
LT-Spice Schaltplan des Verstärkers

Die Verschaltung der Komponenten habe ich nach folgendem Schaltplan aufgebaut. Der Schaltplan ist mit der freien Schaltungssimulationssoftware LT-Spice erstellt worden.Um die hohe Anodenspannung von 250 bis 300V bei knapp 48mA an den Lautsprecher zu bringen, bedient man sich eines Impedanzwandlers in Form eines Transformators. Es gibt Berechnungstabellen, nach denen man einfach einen Transformator dimensionieren und wickeln kann. Während meiner Schulausbildung habe ich die Berechnung und Dimensionierung von Übertragern und Transformatoren einmal ziemlich ausführlich erlernt, doch mangels Anwendungsbedarf auch wieder ziemlich schnell verlernt oder vergessen.(oder doch ein Problem des Alterns??) So hat sich der Griff zu den Dimensionierungstabellen und -rechnern als sehr praktisch und zielführend erwiesen... In meinem Fall habe ich einen EI78 Kern mit 2x0,5mm Luftspalt ermittelt und mit knapp 6000Windungen bei 0,2mm Cu auf der Primärseite und knapp 200 Windungen bei 0,7mm auf der Sekundärseite gewickelt.
Dann ging´s an den Zusammenbau der Komponenten: Zuerst habe ich die Pertinax-Platte zugeschnitten und Löcher für die Röhrensockel gebohrt.
Jetzt können die Röhrensockel eingebaut werden. Die großen Siebelkos habe ich auch durch die Grundplatte gesteckt und auf der Rückseite mit einem "Drahthaken" verankert, um sie später einfach anlöten zu können. Der Brückengleichrichter soll die Anodenspannung gleichrichten...
Das Drahtgewirr im folgenden Bild zeigt die fertig verlöteten und mit Bauteilen bestückten Sockel der Trägerplatte. 





Von der anderen Seite sieht das ganze schon einwenig aufgeräumter aus... Hier ist die Trägerplatte und der Impedanzwandler schon in ein formschönes, handgefertigtes Holzgehäuse (an dieser Stelle vielen Dank an Patrick und seinen Onkel für das Bauen des Holzgehäuses) eingebaut.
Nun konnte ein erster Funktionstest des Verstärkers stattfinden. Jetzt musste ich provisorisch die Spannungsversorgungen für das Röhrensystem herstellen. Für die 6.3V Heizspannung der Röhren war ein DC Labornetzgerät ausreichend. Die Anodenspannung erzeugte ich mit dem einstellbaren Trenntransformator, den ich für den ersten Versuch auf ca 170VACeff einstellte. Das ergibt eine Gleichspannung von ca 240VDC an den Anoden. Ein kleiner 8Ohm Lautsprecher an der Sekundärseite des Impedanzwandlers sollte dann für den Hörgenuss sorgen... Die Audioquelle war einfach der Kopfhörerausgang des Mobiltelefons... Und siehe da, es tönte aus dem Lautsprecher und sogar gar nicht so schlecht...
Jetzt, oder zumindest wenn die Zeit es wieder erlaubt, sind folgende Punkte zu lösen bzw. zu bauen:
  • Stromversorgung (Anode und Heizung) ... habe hier noch keine andere Lösung als selbst wieder einen Trafo zu wickeln, der zwei Sekundärwicklungen hat ... (wird aber viel Kupfer)
  • Das Empfängermodul (hier habe ich geplant mit dem TDA7000 IC und einer Schaltung mit Kapazitätsdiode im Parallelschwingkreis die Senderabstimmung zu machen, um mit einem Poti die Sender einzustellen. Danke an Matthias für die Spende der TDA7000er
  • Eine Anzeigeeinheit für die Frequenz (hier stelle ich mir ein Punktearray aus Leds vor ... )

Frohe Weihnachten an alle Besucher des Blogs!
Ein Jahr ist nun vergangen seit ich mit dem "Technik- und Retroblog" begonnen habe und es sind doch einige Beiträge entstanden.
Der eine oder andere hat sich auch hierher verirrt und vielleicht auch einen interessanten Beitrag entdeckt. Auf jeden Fall wird es mit dem Bloggen weitergehen und wenn es die Zeit erlaubt auch eine weitere Rubrik mit und über  Computer aus den 80er Jahren aus der 8 Bit Zeit.
In diesem Sinn:
Frohe Weihnachten und schöne Feiertage!

Singbox - UKW Radio aus Fernost

Ein nettes kleines Teil für gerade einmal dreizehn Euro ist mir diesmal untergekommen.Es nennt sich "SINGBOX" und ist ein UKW-Radioempfänger der in Fernost verkauft wird  und auch über online-shops hier zu bekommen ist. Das Teil hat die Abmessungen von 12 x 7 x 3 cm und wiegt knapp 220 Gramm. Eine kleine Teleskopantenne mit drei Segmenten sorgt für einen vernünftigen UKW - Empfang. Das Gerät ist aber nicht nur ein Radioempfänger, nein - es kann auch MP3. Ein seitlich eingebauter Micro-SD Kartenslot kann MicroSD Karten bis 16GB Kapazität lesen und darauf befindliche MP3-Dateien abspielen. Der kleine Lautsprecher kann mit seinen 2Watt ordentlich Lärm machen. Die Energie bezieht der Empfänger aus einer LiIon Batterie mit 3.7V/800mAh die sehr stark an die in Chinahandys verbauten Akkus erinnert. Die Batterie kann über die eingebaute Mini USB-Buchse geladen werden.

Im Bild ist die 3.7V / 0.8Ah Batterie zu sehen. Sie kann, wie auch bei vielen Handys aus China üblich, einfach entnommen und getauscht werden.


Singbox mit eingelegter Batterie

Auf der Frontseite des Gerätes befindet sich ein LC-Display, das Rot beleuchtet ist und an die 7-Segment Led-Anzeigen aus früheren Zeiten erinnert. Das Display zeigt die UKW-Frequenz, Play/Pause von MP3 und den Batterieladezustand an.

Über die sechs Tasten, können die Sender gesucht, bzw. weitergeschaltet werden. Die Betriebsmodi (Radio/Player) werden über "Mode" umgeschaltet . Play/Pause ist selbsterklärend.

Seitlich findet man einen AUS/EIN Schiebeschalter, der den Batteriestromkreis vollständig trennt. Die Lautstärke wird über ein klassisches Drehpotentiometer eingestellt. An die3.5mm Klinkenbuchse kann ein Kopfhörer angeschlossen werden. Die USB-Buchse dient zum Laden des Akku und der MicroSD-Slot nimmt Datenträger mit MP3 files auf (die SD-Karte muss FAT oder FAT32 formatiert sein).

Die technischen Daten:
HerstellerSingbox
ModelSV-936
TypePortable
FarbeRot
MaterialABS
Interner Speicher
keiner
Speichersystem
MicroSD
Max. Speicherkapazität
16GB
Media FormatMP3
Maximale Leistung
2W
Impedanz4ohm
Signal to Noise Ratio(SNR)80dB
Interface3.5mm jack / 1 x Mini USB / 1 x TF card slot
RadioFM Radio
FM Frequenz70~108MHz
BatterieExternal 800mAh
Die Verarbeitung ist von mäßiger Qualität, der ABS-Kunststoff wirkt billig. Das Gehäuseteile sind nicht sehr präzise gefertigt, sodass das Gerät schnell umkippt. Technisch jedoch funktioniert es aber anstandslos und kann vor allem im Outdoorbereich am See, oder beim Lagerfeuergrill als Hintergrunduntermalung genutzt werden. Mehr kann man sich für 13 Euro ja auch nicht erwarten.


Basteln am Auto - Audi A4 und die Tankdeckelverriegelung

Aus gegebenem Anlass berichte ich heute von einer kleinen Reparatur aus dem Bereich KFZ. Genauer gesagt um ein Problem, das beim Audi (A4 8K) aufgetreten ist. Es betrifft die Verriegelung des Tankdeckels. Es soll eigentlich so sein, dass beim Verschließen des Autos auch das Öffnen des Tankdeckels unterbunden sein soll. Erst wenn die Zentralverriegelung die Schlösser wieder freigibt, ist es auch möglich den Tankdeckel zu öffnen. So der Sollzustand. In meinem Fall habe ich aber festgestellt, dass, obwohl das Auto verschlossen war, der Tankdeckel aufging. Nach kurzer Recherche im Netz wurde mir gleich klar das dieses Problem durchaus bekannt ist. Einige Leute hatten auch den Fall, dass der Verriegelungsmechanismus im versperrten Zustand verharrte und der Deckel sich nur mehr mit der Notverriegelung vom Kofferraum aus öffnen lies. Also ein lästiges Problem, vor allem wenn man mit leerem Tank an der Zapfsäule steht und nicht rankommt.
Das Problem liegt hier an einem kleinen Aktor, der im wesentlichen aus einem kleinen Elektromotor besteht, an dessen Welle eine Schnecke einen Schieber antreibt. Dieser Schieber blockiert dann einfach den "Pin", der den Deckel nach einem kurzen Druck nach aussen hebt. (So wie das Ein- und Ausknipsen einer Kugelschreibermine). Dieser Motor scheint hier gerne stecken zu bleiben. Die Werkstatt tauscht hier den Aktor und alles funktioniert wieder. Ich hatte hier aber absolut keine Lust, dafür wieder in die Tasche zu greifen und habe mich am Abend einer angenehm kühlen Vorwinternacht ans Werk gemacht und den Aktor ausgebaut. Die nachfolgenden Bilder sollen diese Arbeit dokumentieren. Vielleicht hilft es ja jemandem...


 Zuerst ist die Torxschraube unter dem Auswurfpin (Links im Bild) zu entfernen. Der Rahmen wird von vier Kunststoffhaken in der Karosserie gehalten. Durch Eindrücken der vier kleinen Vertiefungen im Kunstoff (zwei oben und zwei unten) erreicht man die Haken und kann sie mit einem kleinen Flachschraubendreher (oder kärntnerisch Schraubenziaga) bei gleichzeitigem leichten Ziehen am Kunststoffrahmen nach unten drücken (die oberen Haken). Die beiden unteren Haken müssen nach oben weggedrückt werden. Dann kann der Rahmen vorsichtig aus dem Blech gelöst werden.


 Hier wird der Kunststoffrahmen herausgenommen.


 Die Ansicht von oben zeigt die beiden Haken, die den Frame im festhalten.


Den Rahmen kann man nun ablegen und man kommt ganz einfach an den Aktor heran. Der ist nur mehr in den Ausschnitt im Blech hineingeschoben und kann ganz leicht herausgenommen werden. Die rote Kunststoffschnur, ist die "Reissleine" für die Notentriegelung und muß auch aus der Nase am Aktor ausgehangen werden. Jetzt ist noch der zweipolige Stecker vom Aktor zu lösen und er ist frei...


Hier ist er, der Aktor für die Tankdeckelverriegelung.  8K0.862.153.B ist die Typennummer des Bauteils. Der Aktor selbst besteht wieder aus einem Gehäuse an dessen Oberseite ein Deckel mit Rastnasen festgehalten wird. Diese Rastnasen sind vorsichtig zu lösen. Dabei sollten beide Teile immer festgehalten werden, da eine lange Feder den "Auswurfpin" drückt.

 Hier ist der gelöste Deckel des Aktors und die Feder zu sehen. Jetzt kann der Deckel vorsichtig abgenommen werden.

 Ein Blick in das Gehäuse zeigt den Motor (links), darüber ein schwarzer Kunststoffschieber. Die Schnecke ist direkt darunter zu erkennen. Sie bewegt den Schieber hin und her. Jetzt geht´s eigentlich nur darum, die Schnecke vorsichtig gängig zu machen. Ich habe sie einfach mit den Fingern ein paar mal hin und her gedreht und danach die kompletten Kunststoffteile mit Teflonfett eingefettet. Zur Probe habe ich den Motor ans Labornetzteil angeschlossen und immer ganz kurz mit 12VDC versorgt. Dabei wurde natürlich die Polarität ständig umgedreht um den Schieber einige Male hin- und herzubewegen und das Fett gut zu verteilen. Das funktionierte anstandslos.
Jetzt konnte der Aktor wieder zusammengesteckt und alles eingebaut werden.  Ein abschliessender Funktionstest zeigte den Erfolg der Arbeit. Der Verschluss funktionierte wieder einwandfrei. Der Zeitaufwand war gerade mal 2o Minuten.





Dimmen ohne Triac

Als klassische Variante, einen ohm'schen Netzverbraucher (z.Bsp. Glühlampen) in ihrer Helligkeit zu steuern, wird üblicherweise ein Triac in einer Phasenanschnitt- oder Phasenabschnittsteuerung verwendet. Diese Schaltung ist einfach aufzubauen, kostet wenig und man kann durch Änderung der Zeitkonstante eines RC-Gliedes (durch Ändern des Widerstandes mit Hilfe eines Potentiometers) die Spannungsform an der Last beeinflussen. Dies geschieht durch "An- oder Abschneiden" der "Sinuswelle" zu einem gewünschten Zeitpunkt. Die daraus resultierende, verbleibende "Wellenform" versorgt die Last mit Energie. Da die "Sinuswelle" nun jedoch nicht mehr "vollständig" ist, ist auch die effektiv übertragene Energie zur Last kleiner. Das bedeutet weniger Spannung liegt an der Lampe an. Somit sinkt auch die Lampenhelligkeit. Hierzu findet man reichlich Informationen im Netz. Will man eine solche Phasenanschnittsteuerung nun jedoch nicht mit einem Potentiometer steuern, sondern mit einem Microcontroller oder einer externen analogen Spannung von zum Beispiel 0-5V, so ist hier ein erweiterter Schaltungsaufwand notwendig.
Auf eine ganz andere Weise ist die hier dargestellte Schaltung aufgebaut. Hier wird nicht mit einem Triac die negative bzw. positive Halbwelle angeschnitten, sondern mit einem FET der Pfad in einem Brückengleichricher durchgeschaltet. Der FET selbst wird per PWM (PulsWeitenModulation) angesteueuert. Die PWM wiederum erzeugt der Einfachheit halber ein Atmega Microcontroller. Durch die frei wählbaren PWM Grundfrequenzen sind hier sehr schnelle und somit auch flackerfreie Schaltvorgänge realisierbar.

Die Skizze soll die simple Funktionsweise veranschaulichen: Im Bild ist der Stromkreis dargestellt. Der Verbraucher liegt in Serie mit dem Brückengleichrichter an der Phase L und dem Neutralleiter N. Im Querpfad des Brückengleichrichters befindet sich ein Schalter (in der realen Anwendung ein angesteuerter Mosfet). Wird der Schalter S nun nicht betätigt, bleibt also offen, kann durch die Dioden kein Strom fliessen. Weder die positive noch die negative Halbwelle finden einen geschlossenen Stromkreis.  Anders sieht es jedoch aus wenn der Schalter S geschlossen wird. Dies ist in der rechten Skizze dargestellt. Der Strompfad einer Halbwelle ist in rot, der der anderen Halbwelle in blau dargestellt. Der Strom fliesst und die Lampe leuchtet. Das besondere daran ist es nun, verfolgt man die Stromrichtung beider Halbwellen durch den Schalter, so kann man erkennen, dass bei beiden Halbwellen die selbe Stromrichtung vorliegt. Damit ist es nun möglich mit einem Transistor oder FET, eine Wechselpannungsquelle zu schalten. Das Ein/Aus Verhältnis (also PWM) des Schaltsignals, kann somit wieder die effektive Spannung an der Last beeinflussen.

Und genau eine solche Schaltung habe ich hier aufgebaut. Der Atmega-Microcontroller erzeugt ein PWM Signal, das über einen Optokoppler den Mosfet ansteuert. Somit sind ganz einfach per Software alle möglichen Schalt- und Dimmszenarien realisierbar. (z.Bsp. Steuerung der Lampenhelligkeit über eine Analogspannung am ADC des µC ...)



Im Bild links ist ein Testaufbau des Dimmers (Laststellers) dargestellt. Die Versorgungsspannung des µC wird hier noch durch einen AC/DC Converter realisiert, um eingangsseitig eine galvanische Trennung vom Netz herzustellen.

Raspberry als Datenlogger Teil2...Die Sensoren und Python

Raspberry PI samt Powerbank im Gehäuse
In Teil1 dieses Projektes haben wir dem Raspberry ein Betriebssystem verpasst und das ein wenig für die Anwendung aufbereitet. Wir wollen ja an den PI mehrere Sensoren anschließen und diese dann zyklisch auslesen und die Daten in einer Datei auf einem USB-Stick speichern. Die Aufzeichnung soll so lange laufen, bis ein Taster gedrückt wird, der den Prozess beendet. Die einzige Anzeige des PI sind zwei Leuchtdioden, die, sowie auch der Taster, an die GPIOs des PI angeschlossen sind. Darum haben wir folgende Punkte bereits erledigt:
  • Die PI Platine gemeinsam mit einer USB Powerbank in ein Gehäuse eingebaut
  • Anschlüsse wie Ethernet, USB, HDMI durch Ausschnitte im Gehäuse nach aussen geführt
  • Zwei Leuchtdioden und einen Taster ins Gehäuse eingebaut und auf die GPIOs geschaltet
  • Den I²C Bus des PI auf eine Buchse im Gehäuse geführt
  • Eine MicroSD Karte mit einem Raspi-Wheezy Image bespielt
  • Einen USB-Stick mit FAT32 formatiert
  • Das Betriebssystem soweit konfiguriert, dass das Filesystem für den Stick, alle Module für den I²C-Bus, sowie Python geladen werden

Raspberry PI im Plastikgehäuse
Der Pi sieht fertig zusammengebaut nun so aus (siehe Bild rechts). Nun können die Sensoren angeschlossen werden. In diesem Fall handelt es sich um Luftfeuchtigkeits-/Temperatursensoren mit der Bezeichnung HYT939 des Herstellers Hygrochip. Hier ein Auszug der technischen Daten aus dem Datenblatt des Herstellers:
Ausführung: Feuchtesensor im TO39 Gehäuse, druckfest, mit Edelstahl-Sinterfilter
Genauigkeit:
Feuchte ±1,8% rF, Temperatur ±0,2 °C
Genauigkeit 0...10% rF (0 ... 50°C): ±(0,1% rF + 17% aw)
Messbereich: Feuchte 0 ... 100% r.F. (max. dp = +80 °C), Temperatur - 40 ... +125 °C
Abmessungen: 5,2 x 9 mm
Anschlüsse: TO 39 Footprint
Auflösung Feuchte: 0,02% rF
Hysterese bei 50% rF: < ±1% rF
Linearitätsfehler: < ±1% rF
Ansprechzeit t63: < 10 sec (Mit Edelstahl-Sinterfilter)
Auflösung Temperatur: 0,015 °C
Digitale Schnittstelle: I2C, Adresse 0x28 oder Alternativadresse
Betriebsspannung: 2,7 … 5,5 V
Stromaufnahme (typ): < 1µA in Bereitschaft < 22µA bei 1Hz Messrate 850 µA maximal

HYT939 Sensor
Eine kleine Platine dient als "Sensorboard". Hier besteht die Möglichkeit, vier HYT´s anzustecken. Natürlich müssen auch die Addressen der Sensoren unterschliedlich sein. Der HYT939 ist per default auf hex 0x28 eingestellt. Will man diese Deviceaddresse ändern, so muss der der HYT in den Command-Mode versetzt werden, um dann die Konfigurationsdaten empfangen und in sein EEprom schreiben zu können. Dazu muß der Sensor innerhalb der ersten 10ms nach seinem PowerUp in den Command-Mode gebootet werden. Das lässt sich am einfachsten mit einem ArduinoUno bewerkstelligen... Dabei wird der Powerpin des HYT über einen Digital Out Pin des Arduino versorgt. So ist es möglich, das Timing genau einzuhalten und den Command Mode zu erreichen.
Nachdem der Sensor nun an den Raspberry angeschlossen ist, fehlt nur mehr ein Programm um ihn oder auch mehrere anzusteuern und auszulesen. Hier verwende ich den Python Interpreter. Damit lassen sich auf einfache Weise die Daten auslesen und auch auf Datenträgern speichern. Das "Programm" besteht aus zwei Teilen:
  • Hauptscript: beinhaltet nur eine Endlosschleife, die die LEDs steuert, den Taster abfragt, die Sensorfunktion aufruft, deren ausgelesene Werte übergibt, aufbereitet und auf den Stick speichert.
  • Funktion Sensor auslesen: adressiert den I²C Bus, liest die Sensordaten aus, rechnet sie in lesbare Werte um und übergibt den Output an die Funktion
# /usr/bin/python
# License: GPL 2.0
# edited by Ingmar B. Aug.2015

import os
from time import *
import time
import threading
import hyt939o 
import RPi.GPIO as GPIO

# Setup LED Ports (pin12 = LED rot, pin18 = LED gruen)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(16, GPIO.IN)

# LED Gruen einschalten sobald das Script gestartet ist
GPIO.output(18, GPIO.HIGH)

#gpsd = None #seting the global variable
address = [0x2a, 0x29] 
#hyt939 = [0, 0]
hum = [0, 0]
temphyt = [0, 0]
loopon = True         #set variable for loop
i=1             #counter for address selection
os.system('clear')     #clear the terminal (optional)
 
while loopon:
        # bei beginn des auslesens aller daten die rote Led einschalten
    GPIO.output(12, GPIO.HIGH)
    if GPIO.input(16)== GPIO.HIGH:
      loopon = False
        os.system('clear')
         
      # Variablen fuer Sensor HYT 939 uebergeben 
    for i in range(2):
                
        hyt939=hyt939o.ReadMeasurement(address[i])            
        time.sleep(0.1)
        hum[i]=hyt939[0]
        temphyt[i]=hyt939[1]
      
                print '--------------------------------------- '
            print 'SENSORS reading Sensor Nr.:' , i
            print
            print 'humidity    hyt939         ' , hum[i]
            print 'temperature hyt939         ' , temphyt[i]
            print '--------------------------------------- '
            print
    print 'data to write:' , str(hum[0]), str(temphyt[0]), str(hum[1]), str(temphyt[1])
    print ("date :" + time.strftime("%x"))         
        print ("time :" + time.strftime("%X"))
    print
    date = time.strftime("%x")
    zeit = time.strftime("%X")
    
      ## write all data to usbstick
      
        fileout = open("/media/usbstick/wetterfrosch.txt", "a")

    time.sleep(0.1)

        fileout.write(date+";"+zeit+";"+str(hum[0])+";"+str(temphyt[0])+";"+str(hum[1])+";"+str(temphyt[1])+"\n") 
    
        time.sleep(0.1)
        fileout.close()
        time.sleep(0.1)

      # nach schreiben bzw auslesen der daten rote LED wieder abschalten
        GPIO.output(12, GPIO.LOW)
        time.sleep(0.8) #set to whatever

GPIO.output(18, GPIO.LOW) # gruene Led ausschalten

print "Ende"
 
 

Das folgende Listing liest den Sensor aus:

# Reading mesaurements from HYT 939 humidity and temperature sensor
# First Version by Caerandir May 2014 modified by i.bihlo 2015
import smbus, time
bus = smbus.SMBus(1)    # Raspberry Rev. 2
address = 0x28          # Fixed default address of HYT 939
# Initialize sensor to acquire measurements
def MeasurementRequest():
        void = bus.write_quick(address)
    time.sleep(0.1)
# Read Humidiy and Temperature to 14 bit accuracy
def ReadMeasurement():
    void= bus.write_quick(address)
    time.sleep(0.1)    
        # Acquire 4 byte from sensor
        #time.sleep(0.1)
    Readout = bus.read_i2c_block_data(address,0,4)
    # Calculiere die relLF in % aus den vier Bytes in "Readout"
    RelHum = Readout[0]<<8 | Readout[1]
    RelHum = RelHum & 0x3FFF
    RelativeHumidity = 100*RelHum/(2**14)
    # Calculiere die Temperatur vom Sensor
    Readout[3] = Readout[3] & 0x3F
    temp = Readout[2]<<6 | Readout[3]
    Temperature = 165.0*temp/(2**14)-40
       
        print "Hrel: ", RelativeHumidity, " %"
        print "T: ", Temperature, " C"
        return RelativeHumidity, Temperature
MeasurementRequest()
time.sleep(0.2)
ReadMeasurement()

Eine Versuchsmessung über einen Tag und eine Nacht mit drei Sensoren hat folgendes Ergebnis geliefert. In diesem Fall wurden die Temperaturdaten aufgezeichnet. (Die Daten vom USB-Stick wurden mit Matlab importiert und daraus ein Plot erstellt.)



Raspberry als Datenlogger Teil1...Das Betiebssystem einrichten

Der Raspberry Pi ist ja mittlerweile ein bekannter und beliebter Scheckkartenplatinen-Computer mit dem sich allerlei anstellen lässt. Vom TV-Frontend mit Kodi, über Spielekonsolenemulatoren mit Retropi, bis hin zum Bürorechner, ist damit fast alles möglich. In diesem Projekt möchte ich vorstellen, wie mit Hilfe des Raspberry Pi Model2 physikalische Größen, wie Temperatur und Luftfeuchtigkeit gemessen und auf einem Speichermedium geloggt werden. Und zwar mit einem Feuchtesensor der Type HYT939 der am I²C Bus angeschlossen wird, genauer gesagt: mehrere I²C Feuchtesensoren am Bus...

Raspberry PI2 mit Powerbank im Plastikgehäuse
Wir beginnen zuallererst mit der Versorgung des Raspberry PI. Im Bild ist ein Pi2 in ein einfaches Kunststoffgehäuse eingebaut und an eine 2Ah USB-Powerbank von RS-Components angeschlossen. Der Ladeanschluss der Powerbank ist vom Gehäuse nach aussen geführt. So kann der Pi wahlweise über die Powerbank (mit einer nicht rechenintensiven Anwendung bis zu 3h) oder über eine externe USB-Versorgung (z.Bsp. einem Handyladeadapter) betrieben werden. Der I²C Bus des PI (Pin 3 SDA und Pin 5 SCL sowie Pin 2,4 +5V und GND an Pin 6,14...) sind auf einen Stecker im Gehäuse ausgeführt. Um später irgendwelche Statusmeldungen ausgeben zu können, sind zwei LEDs an die GPIOs 24 und 18 (an Pin18 und Pin12) angeschlossen. Ein weiterer GPIO wird über einen 22k Pulldown-Widerstand an einen Taster an 5V geschaltet. (GPIO23 an Pin16).
Für die USB Anschlüsse, Ethernet und HDMI wurden im Gehäuse passende Ausschnitte gemacht, an eine USB Schnittstelle ein Keyboard und an den HDMI Port ein Monitor angeschlossen. Die LAN Verbindung mit Internetzugang sollte auch hergestellt sein, um nach der Ersteinrichtung die benötigten Module und Updates laden zu können.
Jetzt fehlt nur noch das Speichermedium mit Betriebssystem. Der PI2 ist mit einem Micro-SD Slot ausgestattet. Ich habe hier eine 4GB Micro SD mit einem raspian-wheezy image bespielt. Um das Imagefile auf einfache Weise auf die SD-Karte zu bekommen, empfiehlt es sich, das Tool win32diskimager zu verwenden. Ist die Speicherkarte dann fertiggestellt, kann man beginnen.
Der Raspberry zeigt nach dem Einschalten kurz seinen Farbverlauf und dann beginnt auch schon der Bootprozess. Ist der dann beendet, so startet das OS am PI erstmal eine Setup Routine.
Hier sind nun folgende Schritte durchzuführen:
  • im Menu internationalisation options unter I1 die entsprechenden locals einstellen -> DE_UTF_8
  • in advanced options unter A2... einen Hostname vergeben z.Bsp.:"raspisensor", in A4... SSH enablen, in A7 ...I²C enablen und load per default und in A8 ... serial enable und login shell aktivieren
  • dann noch expand  filesystem wählen damit der Speicherplatz der gesamten SD-Karte genutzt wird
  • jetzt noch mit finish -> reboot neu starten
Jetzt fährt der PI wieder hoch und bleibt beim Login-Prompt stehen. Mit login: pi und dem passwort: raspberry loggt man sich nun ein. Mit den folgenden Kommandos werden Updates und benötigte Module installiert:
sudo apt-get update
sudo apt-get install python-smbus    
(installiert den system management bus)
sudo modprobe i2c_bcm2708             (kernelmodule für I²C von Hand laden)
sudo modprobe i2c_dev
lsmod                                                         (geladene Module listen)
sudo i2cdetect -y 1                                  (I²C ports scannen)
Es empfiehlt sich, die Kernelmodule per Autostart zu laden. Das geht wie folgt:
sudo nano /etc/modules    (mit dem Nano-Editor die Datei modules öffnen ...)
dann folgende Zeilen hinzufügen:
i2c_bcm2708
i2c_dev
dann mit STRG+X den Editor beenden und bei Speichern JA wählen.
danach mit:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
überprüfen, ob hier bereits ein Eintrag "blacklist i2c-bcm 2708" existiert.
Falls ja, ist der auszukommentieren oder zu löschen.
jetzt wieder neustarten mit:
sudo shutdown -r now
danach wieder einloggen und mit
lsmod
überprüfen ob die gewünschten Module korrekt geladen sind.
Da wir später die Daten von den Sensoren in eine Datei loggen wollen und diese Datei auf einem USB-Stick gespeichert werden soll, sind folgende Schritte notwendig:
  • einen USB-Sick mit FAT32 Filesystem auf einem Windowsrechner formatieren
  • auf dem PI das Filesystem FAT32 installieren
  • den Stick in den PI stecken und die Mountlist um den Stick erweitern
Zuerst laden und installieren wir das Filesystem:
sudo apt-get -y install ntfs-3g hfsutils hfsprogs exfat-fuse
dann legen wir folgendes Verzeichnis an:
sudo mkdir /media/usbstick
sudo blkid -o list -w /dev/null
(listet die IDs der Datenträger auf -> unser Stick sollte in der Liste als vfat mit einer ID in dem Format XXXX-XXXX erscheinen)
sudo mount -t vfat -o utf8,uid=pi,gid=pi,noatime /dev/sda /media/usbstick
nun öffnen wir folgende Datei mit dem Editor:
sudo nano -w /etc/fstab
die ID des USB-Sticks von vorher tragen wir nun samt folgender Zeile ein und speichern dann wieder ab:
UUID=XXXX-XXXX /media/usbstick/ vfat utf8,uid=pi,gid=pi,noatime 0
weiter gehts mit der Einrichtung der GPIOs und den Python libraries:
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio
Noch ein paar allgemeine Einstellungen:
sudo nano /etc/networks/interfaces  (Wir wollen eine fixe IP Adresse vergeben, um später einfach per SSH auf den PI zugreifen zu können)
folgende Zeile ersetzen:
iface eth0 inet dhcp
durch:
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask yyy.yyy.yyy.yyy
gateway zzz.zzz.zzz.zzz
und wieder speichern:
Das zu Anfang gestartete Setup Script lässt sich immer über folgenden Befehl aufrufen:
sudo raspi-config
Die Systemzeit des Raspi (für meine Anwendung benötige ich auch einen Zeitstempel) lässt sich mit folgendem Befehl stellen:
sudo date "MMTThhmmJJ"

Das war´s für den Anfang. Im zweiten Teil beschreibe ich dann die Sensorhardware und die Python-Scripts, die die Sensoren dann auslesen…

Casio VL-TONE

Ein spannendes Stück Technik aus meiner Jugendzeit ist mir diesmal beim Herumstöbern im Keller in die Hände gefallen: Der oder die CASIO VL-TONE. Es handelt sich dabei um ein Mini-Musikinstrument, ein Keyboard bzw. Synthesizer, der auch ein Taschenrechner ist. Man sollte die Bezeichnung "Taschenrechner" jedoch nicht ganz wörtlich nehmen. Vielleicht passt eher der Ausdruck "mit den Funktionen eines Taschenrechners ". Der VL-TONE oder VL-1 ist ein Miniatursynthesizer der japanischen Firma Casio, der von 1981 bis 1984 hergestellt und verkauft wurde.Der von einem der Casio Gründer entwickelte sehr kostengünstige LSI-Chip wurde zur Musikerzeugung genutzt. Ein Taschenrechnerchip erweiterte den mageren Funktionsumfang des LSI (LargeScaleIntegration) Chip und machte den VL1 verkaufstauglich.

Die 17 Vollton-Tasten (also zwei Oktaven) waren in drei Oktaven (LOW-MID-HIGH) umschaltbar. Das ergibt insgesamt vier Oktaven und eine große Terz. Der  VL1 ist mit nur einem Klangmodulatur ausgestattet. Das bedeutet es kann immer nur ein einziger Ton wiedergegeben werden. Polyphone Töne wie Akkorde sind nicht möglich. Die Vielfalt der vorprogrammierten Instrumente ist auch sehr überschaubar: Es gibt die Einstellungen : Piano, Fantasy, Violine, Flute, Guitar und ADSR. Wobei bei ADSR eine eigene Stimme (Klangbild) programmiert werden kann. Die besteht aus einer achtstelligen Zahl, die im Taschenrechnermodus eingegeben und im Speicher abgelegt wird. Aus dieser Zahl wird dann im Keyboard-Modus eine eigenes Klangbild moduliert. Jede dieser Acht Stellen ändert einen anderen Parameter des Modulators ...

Der VL-1 besitzt auch einen Rhythmuserzeuger der zehn vordefinierte Rhythmen enthält. Dazu gehören: March, Walt,4-Beat,Swing, Rock-1, Rock-2, Bossanova, Samba, Rhumba und Beguine. Den Kultstatus erhielt das Gerät insbesondere durch einen Hit der Popgruppe "TRIO", die während der Neuen Deutschen Welle 1982 bekannt wurde. Der Song "DA DA DA" wird sicher den älteren Generationen der Blogleser noch bekannt sein.
In den VL-1 hat man auch einen einfachen Sequenzer integriert, der ein Speichervermögen von 100 Noten hat. Diese konnten in Echtzeit eingegeben werden. Für Menschen wie mich steht auch eine Schritt für Schritt Eingabe zur Wahl, die es ermöglicht, jede Note samt Tempo händisch zu editieren. Ist das Werk dann vollendet, kann per "One Key Play" abgespielt werden...

 Die originale Umverpackung des "Instruments" besteht aus bunt bedrucktem Karton...

 Handgezeichnete Bildchen an der Umverpackung waren damals möglicherweise viel günstiger, als die Fotorechte von irgendwelchen Models zu erwerben.
 Mit zwei Styroporkörpern wurde die Casio in der Verpackung gehalten. Zum Lieferumfang gehörte neben der Bedienungsanleitung auch eine Schutzhülle aus Kunststoffleder.
 Das geöffnete Gehäuse zeigt zwei Platinen. Unten ist die Keyboardplatine und unter der weissen zylindrischen Abdeckung der kleine Lautsprecher zu erkennen. Und in der anderen Gehäusehälfte befindet sich die analoge Elektronik in diskreter Bauweise. Die Stromversorgung wurde entweder über vier Stück 1,5V AA Batterien oder optional auch mittels Netzteil hergestellt.
 Hier sieht man die Keyboardplatine mit dem Microchip und dem Flexiprint zum LC-Display. Die Tasten wurden mit leitfähig beschichteten Gummimatten, die direkt die Kontaktflächen auf der Platine überbrückten, realisiert.
Hier ist das Platinenlayout des Analogboards dargestellt. Großzügige Leiterbahnführung und satte Lötaugen garantieren auch noch nach über 30 Jahren eine tadellose Funktion ...

Neuer Webauftritt der Fachhochschule Kärnten

Studieren am Puls der Zeit ...
Ausschnitt: FH-Webauftritt NEU

Frisch, übersichtlich, benutzerfreundlich und informativ. Seit heute ist die neue Website der Fachhochschule Kärnten online. Die Fachhochschule Kärnten hat ihren Internetauftritt übersichtlicher, schneller und mobiler gemacht. Unter www.fh-kaernten.at ist nicht nur eine völlig neue Optik zu sehen. Auch unterwegs zeigt sich die Fachhochschule jetzt optimal auf dem Display. Egal ob IOS, Android oder Windows - das Design passt sich den mobilen Geräten an.

Der Aufbau basiert auf Bootstrap und ist dadurch auf allen gängigen Geräten mit den unterschiedlichsten Bildschirmformaten darstellbar. Das FH - aCTIons System ist durch eigene Typo3 Extensions in die Homepage integriert worden und ermöglicht daher eine perfekte Einbindung von z.B.Teamlisten, Kontaktwidgets, Publikationslisten, der Mitarbeitersuche bzw. -details.

Dank der engagierten und intensiven Arbeit der Webmaster bzw. - programmierer, Herrn Mario Wehr und Herrn Hannes Klingberg wurde es möglich, die neue Website pünktlich zum 20Jahr-Jubiläum der Fachhochschule ins Netz zu stellen. Ein immenser Vorteil der inHouse - Programmierung ist natürlich auch der Fokus auf die Möglichkeiten der strategischen Weiterentwicklung.

MiniSystem für NI-myDaq



myDAQ mit miniSystem
Ein neues Stichwort  in den FH Studiengängen Systems Engineering, Wirtschaftsingenieurwesen und Maschinenbau ist "Blended Learning".  Dabei stellte die Fachhochschule den Studierenden  kompakte, universelle Datenerfassungsgeräte von NI (National Instruments) zur Verfügung, die ihnen die eine praxisorientierte, effektive Lernmethode ermöglicht.  Bei den myDAQ (my DataAQuistion) Geräten handelt es sich um ein Gerät, das, an den USB-Port eines Rechners angeschlossen, eine Vielzahl von Möglichkeiten, Daten aufzunehmen bzw. auszugeben, bereitstellt.
Dies kann auf einfachste Weise mit der graphischen Programmier- und Entwicklungsumgebung LabView von National Instruments realisiert werden, aber auch in anspruchsvolleren Programmiersprachen wie C++, C#, etc. bis hin zu Assembler. Das myDaq-Kästchen stellt beispielsweise acht digitale IOs, zwei analoge Eingänge, zwei analoge Ausgänge, sowie eine symmetrische +/-15V Spannungsversorgung (die zumindest für die Versorgung von OP-Amps ausreicht) und eine +5V Spannungsversorgung zur Verfügung. Als besonderes Feature sind zwei 3,5mm Klinkenbuchsen vorhanden, die als Audio IN, bzw. Audio OUT zu den AD- bzw. DA- Chips geführt sind und für die Erzeugung und Aufzeichnung von Audiosignalen genutzt werden können. Weiters sind drei Messgerätebuchsen eingebaut, die über einen Isolationsverstärker (max 60V) das myDAQ auf einfache Weise zu einem Digitalmultimeter machen.
Die digitale und analoge IO-Section, sowie die Spannungsversorgung wird an das myDAQ über einen 20poligen Steckverbinder angeschlossen. Um den Studierenden nun eine Platform bieten zu können wurde ich beauftragt ein "miniSystem" zu entwickeln, dass zumindest aus jedem Bereich (Analog und Digital) eine praktische Anwendung bereitstellt. So sollen die Zustände der digitalen Ausgänge in Form von LEDs dargestellt werden, Analoge Spannungen von einem einstellbaren Spannungsteiler, bzw. einem Temperatursensor aufgenommen werden.
miniSystem fertig bestückt
Mit Hilfe des Layout Tools Eagle von CadSoft  habe ich die Schaltung erstellt und ein Layout gefertigt, das einfach an die myDAQ - Box angesteckt werden kann. Der Schaltplan kann hier eingesehen werden und das Boardlayout hier. Die Platine bietet auch die Möglichkeit an alle IOs über einen Pinheader eigene Schaltungen oder Experimente anzuschliessen.
Um die Analogausgabe darstellen zu können, habe ich ein Drehspulmesswerk gewählt.
Im folgenden Video ist zu sehen, wie das miniSystem nach der Bestückung im Testbetrieb auf Funktion geprüft wird.





Mechanisches Heimkino

EUMIG MARK S807
Ein technisches Produkt mit dem Label "Made in Austria" ist der Tonfilmprojektor Mark S807 der Firma EUMIG. 1919 wurde die "Elektrizitäts- und Metallwaren-Industrie Gesellschaft" (kurz: EUMIG) durch Herrn Handler und Herrn Vockenhuber gegründet. Zu Anfang fertigte das Unternehmen Patronenhülsen, Elektromaterial und Feuerzeuge. 1924 begann das Unternehmen mit der Entwicklung von Rundfunkempfangsgeräten und 1931 dann mit den ersten Filmprojektoren. (eumig P1 und eumig C2). Die Werke befanden sich in Wien Buchengasse und Micheldorf in Oberösterreich, sowie Fohnsdorf. EUMIG produzierte Neben Radios, Filmprojektoren auch Schmalfilmkameras und die Eumigetta, einen Fotoapparat. Im Jahr 1978 stieg der Mitarbeiterstand der Werke auf 7000. Im Jahr 1986 wurde EUMIG nach einem Konkursverfahren aus dem Handelsregister gelöscht.

Viele der EUMIG Geräte sind noch existent, da die Videotechnik für den Heimgebrauch in den 70er Jahren noch in den Kinderschuhen steckte und auch kaum leistbar war. So können sich sicherlich noch viele Kinder dieser Generationen and die surrenden Super8 Filmkameras erinnern, mit denen die Eltern damals alles mögliche mitgefilmt und auf die 3-Minuten Spule gebannt hatten. Waren dann über einige Zeit mehrere Spulen belichtet, konnten sie zur Entwicklung eingesandt werden. Nach ein bis zwei Wochen kamen die Entwickelten Filmröllchen dann per Post zurück und konnten dann per Schneid- und Klebetechnik zu einem Gesamtwerk zusammengefügt werden. Dieses Werk, meist nur ein Stummfilm (die Tonspur konnte man nachträglich laminieren lassen und dann per Magnetaufzeichnung bespielen), wurde dann im Rahmen einer Familienzusammenkunft feierlich im Wohnzimmer auf eine Leinwand projiziert.

Als Projektor stand in unserer Familie der Eumig MARK S807 zur Verfügung. Der S807 besitzt bereits eine Einfädelautomatik, die es ermöglicht, den Film vollautomatisch bis zum Kern der Wickelspule zu führen. Dies setzt jedoch folgende Bedingungen voraus: Die Zahnrollenklappen müssen geschlossen sein, die Klebestellen müssen einwandfrei sein und einen ca. 50 cm langen Vorspannstreifen besitzen. Eine Bedienungsanleitung ist hier zu finden.
Der Projektor dient noch heute dazu, die alten Super8 Filme per Projektionsspiegel eine Mattscheibe zu belichten und diese dann per neuer HD-Technik zu scannen und so zu digitalisieren und für die nächsten Jahre zu speichern...
Wie der Projektor zu bedienen ist, zeige ich im folgenden kurzen Video:


Basteln am Motorrad - Gasgriff optimieren

Der Sommer hält immer noch an und es wird nach wie vor viel Motorrad gefahren und natürlich auch geschraubt. Ein kleines Stück Folie aus Teflon soll dieses mal zwischen Gasgriff und Lenker geschoben werden, um das Spiel des Gasgriffes zu minimieren. Die Folie ermöglicht ein sauberes Gleiten des Griffes am Lenker und erspart den Schmierstoff.  Diese Teflongleitfolie ist für ein paar wenige Euro bei einem bekannten Motorrad-Zubehör-Händler mit dem Namen L***S erhältlich.

Kawasaki ER-6N

Den Einbau habe ich bei einer Kawasaki ER-6N vorgenommen und die Arbeitsschritte ein wenig mit der Kamera dokumentiert.
Insgesamt dreht sich der Gasgriff nun wesentlich sauberer und dies merkt man auch beim Lastwechselspiel bei niedrigen Drehzahlen ...





Arduino als USB-Joystick

Arduino als USB-Joystickinterface
Die große Welt der kleinen Microcontroller und vorallem der sehr günsigen Microcontroller und deren Vielfältigkeit, hat mich beim folgenden 'Projektchen' wieder motiviert sie zu verwenden. Für die eher weniger outdoorlastigen kalten Wintertage habe ich mir ein Projekt vorgenommen, dass das Thema Retrocomputer betrifft. Zum einen habe geplant, die Website um die Rubrik der alten Computer zu erweitern (zumindest sollen die paar wenigen aus meiner Sammlung vorgestellt und in Betrieb genommen werden...) und zum anderen will ich mir eine Arcade-Station bauen, deren Kern das neue RaspBerry2 Modell ist . Auf dem soll die Emulatorplatform Retropie aus dem gleichnamigen Projekt zu Einsatz kommen. Die ersten Versuche mit den Images aus dem Projekt sehen sehr gut aus. Die alten 8-Bit und 16-Bit Computer laufen in der Emulation ausgezeichnet (C64, Atari, Amiga usw...). Was die Anbindung von Eingabegeräten betrifft, kann man natürlich Maus und Keyboard vom PC an den Raspberry anschliessen und alles steuern. Die Jungs aus dem Projekt haben auch selbst einige Boards entwickelt, die die Anbindung von Joysticks und co an des Raspberry ermöglichen. (zB. den GPIO Adapter). Aber da ich ein paar Arduino Unos herumliegen habe, dachte ich mir, warum nicht diese verwenden. Da es beim Arduino möglich ist, den Mega 16U2 zu flashen (der Chip wird als Programmer für den Atmega 328 auf dem Uno - Board verwendet) und aus dem Uno-Board so zum Beispiel ein USB-HID (Human Interface Device) zu machen -sprich Keyboard, Mouse, was auch immer, bot sich der als ideale Platform an.
Tutorials, den Arduino zu einem HID-Interface zu flashen, gibt es mittlerweile schon sehr viele. Zum Beispiel findet man hier eine schöne Anleitung. Je nach dem welche Arduino-Uno Boardversion man hat, kann man sich den zusätzlichen Widerstand fürs DFU-Flashen sparen. (z.Bsp. bei meinen Boardversionen R3 ist der Widerstand nicht nötig.) Auf den neuen Boards ist auch nicht mehr der Atmega 8U2 verbaut, sondern der 16U2. Man muß einfach im Atmega Flash-Tool "ATMEL-FLIP" den entsprechenden Chip auswählen. Die enstprechenden Firmwarefiles findet man im Netz...
Arduino-keyboard-0.3.hex
Arduino-mouse-0.1.hex
Ist der Arduino dann geflasht, so wird er beim Anschluß an den PC eben als Keyboard oder Maus erkannt. Jetzt braucht man nur mehr den gewünschten Code in den Atmega328 zu schreiben und die Arduino UNO Eingänge führen z.Bsp. Tastaturbefehle aus. Um die Firmware jetzt nicht jedes Mal zwischen Programmer und USB-HID zu ändern, verwende ich einfach einen zweiten UNO der als Programmer dient und stecke einfach den geflashten Chip immer um (ist viel einfacher beim Testen).
Da das Interface jetzt soweit passt, habe ich mich mit dem HID-Codetable beschäftigt und die entsprechenden Tasten, die die Joystickbewegungen an den PC senden sollen herausgesucht.
Hier der sehr einfache Code der momentan die alten Commodore Joystickbewegungen umsetzt:)


   /* HID Joystickinterface für Arduino UNO im HID Modus Jun2015 by I.Bihlo  
   Die Tasten brauch i :) Taste/Hexcode/Dec-Code  
    KEY_LEFT_CTRL  0x01 //01  
    KEY_LEFT_SHIFT  0x02 //02  
    KEY_LEFT_ALT  0x04 //04  
    KEY_LEFT_GUI  0x08 //08  
    KEY_RIGHT_CTRL  0x10 //16  
    KEY_RIGHT_SHIFT 0x20 //32  
    KEY_RIGHT_ALT  0x40 //64  
    KEY_RIGHT_GUI  0x80 //128  
    KEY_RIGHT_ARROW 0x4F //79  
    KEY_LEFT_ARROW 0x50 //80  
    KEY_DOWN_ARROW 0x51 //81  
    KEY_UP_ARROW  0x52 //82  
    KEY_TAB     0x2B //43  
    KEY_ENTER    0x28 //40  
    KEY_SPC     0x2C //44 */  
     uint8_t keyNone[8] = { 0, 0, 0, 0, 0, 0, 0 };  
     uint8_t keyA[8] = { 0, 0, 4, 0, 0, 0, 0 }; //left  
     uint8_t keyD[8] = { 0, 0, 7, 0, 0, 0, 0 }; //right  
     uint8_t keyW[8] = { 0, 0, 26, 0, 0, 0, 0 }; //up  
     uint8_t keyS[8] = { 0, 0, 22, 0, 0, 0, 0 }; //down  
     uint8_t keySPACE[8] = { 0, 0, 44, 0, 0, 0, 0 }; //space  
     uint8_t keyLEFT[8] = { 0, 0, 80, 0, 0, 0, 0 }; //left  
     uint8_t keyRIGHT[8] = { 0, 0, 79, 0, 0, 0, 0 }; //right  
     uint8_t keyUP[8] = { 0, 0, 82, 0, 0, 0, 0 }; //up  
     uint8_t keyDOWN[8] = { 0, 0, 81, 0, 0, 0, 0 }; //down  
     uint8_t keyENTER[8] = { 0, 0, 40, 0, 0, 0, 0 }; //enter  
      // DEFINE inputs const int UPA = 12; const int DOWNA = 13; const int LEFTA = 2; const int RIGHTA = 3;  
   const int UPB = 4; const int DOWNB = 5; const int LEFTB = 6; const int RIGHTB = 7;  
   int out=0; //fürs Testen am Serial Monitor im Programmermodus  
   void setup() {  
    // Die Pins als Eingang definieren (Intern PullUP setzen - ist bei mir nötig da actice Low geschaltet wird  
    pinMode(UPA, INPUT_PULLUP); pinMode(DOWNA, INPUT_PULLUP); pinMode(LEFTA, INPUT_PULLUP); pinMode(RIGHTA, INPUT_PULLUP);  
    pinMode(A0, INPUT);  
    pinMode(UPB, INPUT_PULLUP); pinMode(DOWNB, INPUT_PULLUP); pinMode(LEFTB, INPUT_PULLUP); pinMode(RIGHTB, INPUT_PULLUP);  
    pinMode(A1, INPUT);    
    Serial.begin(9600);  
    }  
    void loop() {  
     // Joystickbewegungen abfragen und senden  
     // Da das Interface einen Invert-Schmitt Trigger verpasst bekommen hat, werden die Ausgänge auf active LOW abgefragt - wenn nix passiert sind alles Eingänge HIGH  
     if (digitalRead(UPA)==LOW) {out=120; Serial.write(keyW, 8);}   
     if (digitalRead(DOWNA)==LOW) {out=121; Serial.write(keyS, 8);}   
     if (digitalRead(LEFTA)==LOW) {out=122; Serial.write(keyA, 8);}  
     if (digitalRead(RIGHTA)==LOW) {out=123; Serial.write(keyD, 8);}  
     if (digitalRead(A0)==LOW) {out=124; Serial.write(keySPACE, 8);}  
     if (digitalRead(UPB)==LOW) {out=130; Serial.write(keyUP, 8);}  
     if (digitalRead(DOWNB)==LOW) {out=131; Serial.write(keyDOWN, 8);}  
     if (digitalRead(LEFTB)==LOW) {out=132; Serial.write(keyLEFT, 8);}  
     if (digitalRead(RIGHTB)==LOW) {out=133; Serial.write(keyRIGHT, 8);}  
     if (digitalRead(A1)==LOW) {out=134; Serial.write(keyENTER, 8);}  
    delay(20);   
    //Serial.println(out); //des is nur fürs debuggen im serial monitor  
    Serial.write(keyNone, 8); // den Tastendruck beenden  
   delay(20);  
    }  
Lochrasterplatine am Arduino
 Als nächstes habe ich ein Interfaceboard (eine einfache Lochrasterplatine) mit zwei 9-poligen SUB-D-Buchsen für den Anschluß der Joysticks gebastelt. Da der Arduino genügend Ports besitzt, habe ich auf ein Multiplexen oder Matrixverschalten der insgesamt zehn Steuerleitungen verzichtet und jeden Joystickkontakt direkt auf einen Port gelegt. Das funktioniert schon einmal ganz gut. Aber das Prellen der Federkontakte und Microtaster in den Joysticks muß natürlich softwaremäßig entfernt werden. Um jetzt nicht in jeder Softwareversion einen debounce-code mitzuführen entschloss ich mich das Entprellen in der Hardware zu machen. Einfach ein RC-Glied (10k - 1uF) an einen Schmitt-Trigger und gut ist´s. Also schnell ein Board gelayoutet (das geht schneller als am Lochrasterprint zu löten), geätzt und bestückt... und heraus kam das Board hier:
Board geätzt und gebohrt


Der Funktionstest verlief positiv. Die Bewegungen des Sticks werden sauber umgesetzt. Ein schneller Test mit WinVice ließ sofort das Zockergefühl von vor 30 Jahren aufkommen ;)







fertig bestückt am Arduino