Archiv der Kategorie: Elektronikbastler

Beiträge über Bastelprojekte zum Thema Elektronik
zum Beispiel: Ein Radio mit Arduino, Geigerzähler…

3.2″ TFT Display an Raspberry PI

306 total views

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 Datalogger Betrieb 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 Buchsen Leiste direkt auf die GPIO-Pinheader Leiste des Raspberry gesteckt. Weitere Verbindungen sind nicht notwendig. Das Display hat dieselben 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, Raspberry PI und Schalten von Netzspannung

162 total views

dsc_2916Heute stelle ich kurz ein Miniprojekt, das aus gegebenem Anlass entstanden 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 Webkamera Ü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 Arbeitsplatz 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 Schuko Steckdosen 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.B. Python-Skripten, oder einfach nur bash Kommandos 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äte Bezeichnung ist mir „Ultimaker Schuko Controller“ 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 Schuko Controller“ 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

19 total views

 

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

222 total views

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 außen zur Verfügung. An diese Buchse können dann die Sensoren angeschlossen werden.   Will man die Sensorik nun ändern, bzw. erweitern, so können einfach weitere I²C Bus – Sensoren angeschlossen werden. Es muss lediglich noch die Software (in diesem Fall Python Skripten) 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 muss man einfach dafür sorgen, dass der neue Sensor, der beispielsweise analoge Spannungen ausgibt, diese an eine, nennen wir sie Black Box 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 Skript ist eine Funktion „dtostrf“ zu sehen. Sie wandelt den Inhalt einer Variablen des Datentyps „floating point“ in ein Charakter Array um. Infos sind hier zu sehen. Im Python Interpreter 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-Skript 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 Interpreter 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.

Geigerzähler – die Software

49 total views

DSC_2266Wie vor längerer Zeit im Blog angekündigt, soll der Geigerzähler nun eine Software bekommen, die nicht nur die Pulse des Zählrohres zählt, sondern sie auch auf eine Einheit bezieht. Hierzu waren aber noch kleine Änderungen an der Hardware notwendig. (genauer gesagt habe ich andere Pins des Arduino verwendet – was bedeutet: Leiterbahnen durchtrennen und mit Schaltlitzen neu verlegen). Hier eine Liste der Änderungen:

 

  • die Leitung von Pin4 Arduino zu Pin D7 vom LCD unterbrechen
  • die Leitung von Pin5 Arduino zu Pin D6 vom LCD unterbrechen
  • D7 vom LCD an Pin12 vom Arduino verbinden
  • D6 vom LCD an Pin13 vom Arduino verbinden
  • der Zählimpuls wird von TP3 auf Arduino Pin4 geschaltet
  • die Verbindung TP3 zu Arduino Pin23 wird getrennt

Daraus ergibt sich folgende I/O Port/Pin Belegung:

LCD Display:

RS – Ardunio PIN18 – Arduino  I12
EN – Arduino PIN17 – Arduino  I11
D4 – Arduino PIN11 – Arduino  I5
D5 – Arduino PIN6  – Arduino  I4
D6 – Arduino PIN13 – Arduino I7
D7 – Arduino PIN12 – Arduino  I6

Weitere Pins:

COUNT – Arduino PIN4 – Arduino I2
BUZZ – Arduino PIN14 – Arduino I9
STATUS – Arduino PIN3 – Arduino I1
SET – Arduino PIN2 – Arduino I1

Hier der Arduino Code:

/*Geiger Vx.1 geändertes pinning
* Pinzuordnungen allgemein für LCD
* RS to IO12 (pin18)
* EN to IO11 (pin17)
* D4 to IO5  (pin11)
* D5 to IO4  (pin6)
* D6 to IO7  (pin13)
* D7 to IO6  (pin12)
* R/W to ground
* VSS to ground
* Pinzuordnungen für Counter
* count to IO2 (ic pin4) = INT0
* buzzer to IO9 (ic pin15)
*/

// include libraries
#include <LiquidCrystal.h>

// interfacepins initialisieren
LiquidCrystal lcd(12,11,5,4,7,6);

// Dosiskobersionsfaktor - CPM to uSV/h
#define dconv 0.007  //(ca Umrechnung aus Diagramm Datenblatt des ZP1400 Zählrohrs)

// Konstanten Hardware I/Os
const int buzzerpin = 9;
const int geiger_input = 2;
const int keystat = 0;
const int keyset = 1;

// Variablen
long count = 0;
long countPerMinute = 0;
long timePrevious = 0;
long timePreviousMeassure = 0;
long time = 0;
long countPrevious = 0;
float radiationValue = 0.0;

void setup(){
pinMode(geiger_input, INPUT);
Serial.begin(19200);

//setup LCD und Begruessungsanzeige
lcd.begin(8, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Geiger ");
lcd.setCursor(0,1);
lcd.print("Counter ");
delay(1000);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V0.0 beta");
delay(1000);

lcd.clear();
lcd.setCursor(0,1);
lcd.print("ibiretro");
delay(500);
for (int i=0;i<8;i++){
delay(200);
tone(buzzerpin,i*100,100);
lcd.scrollDisplayLeft();
}

delay(500);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(6*count);
lcd.setCursor(0,1);
lcd.print(radiationValue);

attachInterrupt(0,countPulse,RISING);

}

void loop(){
if (millis()-timePreviousMeassure > 10000){
countPerMinute = 6*count;
radiationValue = countPerMinute*dkonv;
timePreviousMeassure = millis();

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(countPerMinute);
lcd.setCursor(0,1);
lcd.print(radiationValue,4);
lcd.setCursor(6,1);
lcd.print(" uSv/h");
/* zum debuggen 
Serial.print("cpm=");Serial.print(countPerMinute,DEC);
Serial.print("uSph=");Serial.println(radiationValue,4);
*/
count = 0;

}

}

void countPulse(){
detachInterrupt(0);
count++;
tone(buzzerpin,1000,10);
while(digitalRead(2)==1){
}
attachInterrupt(0,countPulse,RISING);
}

VFD – Uhrenbausatz

282 total views , 4 views today

dsc_2772

Uhren und Zeitmessgeräte, auch die nicht-mechanischen, gehören zu meinen Interessengebieten. Vor allem, wenn die Uhrzeit  mit optisch schönen Anzeigen dargestellt wird, bin ich Feuer und Flamme. Dazu zählen Nixie-Anzeigeröhren und auch die VFD-Röhren. Über letztere handelt dieser Blogeintrag. Hier hat Herr Günter Rother (www.grother.de) einen sehr schönen Bausatz zusammengestellt, der schnell und einfach zusammen zu setzen ist. Es sind alle zum Aufbau benötigten Teile enthalten und man kann gleich loslegen.

dsc_2766

Auf einer zweiseitigen, gelayouteten und mit Lötstoplack versehenen Platine mit den Abmessungen 100×50 mm findet die Uhrenschaltung Platz, bei der als Anzeige für jede Ziffer je eine 7-Segment VFD-Röhre verwendet wird. VFD bedeutet hier Vakuum-Fluoreszenz-Display. Die Funktionsweise ist hier nicht wie bei Nixieröhren eine Glimmentladung, sondern wie bei Elektronenröhren, eine, von einer direktbeheizten Kathode emittierte Elektronenwolke, die auf einer Leuchtschicht – Anode (Phosphor) auftrifft.dsc_2773 Die Spannung zwischen Kathode und Anode liegt hier üblicherweise zwischen 20V und 50V. Mit einem Steuergitter vor den Segmenten können die Elektronen gezielt gebremst werden. Somit ist eine Ansteuerung einzelner Segmente möglich.

Treiberbaustein für die IV-3 VFD-Röhre ist ein LB1240 Display Tube Driver IC, der acht voneinander unabhängige Darlingtonstufen beinhaltet. Jeder Ausgang ist in der Lage 30mA bei maximal 55V zu treiben. Die Eingänge des LB1240 werden über einen Atmel AT89C2051-12PU angesteuert und mittels vier Transistoren wird jede Röhre per Multiplexing geschaltet. Getaktet wird der Atmel mit 11.0592Mhz. Ein DS18B20 Temperatursensor ist ebenfalls in den Bausatz integriert, um auch die Temperatur anzeigen zu können. Der DS18B20 ist ein 1-Draht Digital-Temperatursensor, einstellbar  in 9 bis 12 Bit-Auflösung   an 5V Spannungsversorgung und mit einer Ansprechzeit von 94ms bis 750ms, je nach Auflösung. Der Mikrocontroller ist bereits mit der Firmware für die Uhr geflashed und direkt einsatzbereit. Die IC´s sind gesockelt, 1/25W Kohleschichtwiderstände auf Band und sogar alle Schrauben, Abstandhalter und vorgefertigte Acrylglasplatten für ein finales Gehäuse sind vorhanden.

Die gesamte Schaltung wird mit einem 50Hz Steckernetzteil mit konventionellem Eisenkerntransformator versorgt. Die Spannungen an Board werden mit einem 7905 Linearregler für die 5V und einem fertigen DC/DC Convertermodul (Step-UP-Wandler) für die ca.30V Anodenspannung erzeugt. Bedient wird die Uhr über zwei Mikrotaster, mit denen Stunden und Minuten eingestellt werden können.

Ein kurzes Video über den Zusammenbau und die fertige Uhr kann hier angesehen werden:

 

Guter Ton mit Raspberry PI

115 total views

Nach schon einigen Projekten und Versuchen mit dem Raspberry PI, bin ich immer wieder einmal auf die Problematik mit der schlechten, verrauschten Tonqualität des Raspi-Audioausgangs gestoßen. Der analoge Ton besteht ja nur aus einem einfachen PWM (PulseWidthModulation) Signal, das über ein paar Filtercaps direkt an die Klinkenbuchse des Raspberry geschaltet ist. Für viele Anwendungen reicht das sicherlich, wenn man nur eben einmal ein paar Töne ausgeben will. Soll´s aber Musik sein, oder wie in meinem Fall ein vernünftiger Ton bei der Retro-Gamestation, die mit „retropie und der EmulationStation“ läuft, so reicht die Qualität einfach nicht aus.

DSC_2748Hier sollte man dem Raspberry PI einen richtigen Soundchip, also Soundkarte verpassen. Im Internet wird man schnell fündig und so habe ich mir bei einem Onlineshop um gerade einmal 2,90 Euro eine USB – Soundkarte bestellt. Die Karte, oder besser, der USB Dongle besitzt zwei 3,5mm Klinkenbuchsen. (einen Audio-Ausgang und einen Mikrofon-Eingang)

 

Die Installation ist schnell durchgeführt. Will man ein bestehendes System umrüsten, so ist einfach der Klinkenstecker der Lautsprecherzuleitung vom Raspberry abzuziehen und in den Audioausgang des Raspberry einzustöpseln. Der USB Stecker kommt in einen freien Port des Raspberry.

DSC_2751

Der Hardwareteil ist somit erledigt und es kann mit dem Anpassen der Software begonnen werden. Nach dem Booten der Retropi-Maschine und dem Einloggen in die Konsole kann man überprüfen, welche Geräte am USB-Bus erkannt wurden. Nach der Eingabe von:

pi@retropie:~ $ lsusb

werden alle am USB-Bus angeschlossenen Geräte gelistet:

Bus 001 Device 007: ID 1516:1603 CompUSA Flash Drive
Bus 001 Device 006: ID 03f0:034a Hewlett-Packard
Bus 001 Device 005: ID 16c0:05e1 Van Ooijen Technische Informatica Free shared USB VID/PID pair for CDC devices
Bus 001 Device 004: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

In diesem Fall ist der C-Media Electronics, Inc. CM108 Audio Controller unsere USB – Soundkarte. Als nächsten Schritt überprüft man die Reihenfolge (Priorität) der geladenen Soundmodule.

pi@retropie:~ $ cat /proc/asound/modules

Als Ergebnis kommt:

0 snd_bcm2835
1 snd_usb_audio

Das bedeutet die Soundausgabe des BCM2835 ist als erstes gelistet. Wir wollen jedoch alle Tonausgaben über den USB-Ausgang hören. Dazu muss die Datei „alsa-base.conf“ wie folgt angelegt werden. (auf einigen Systemen ist sie bereits vorhanden – hier sind dann nur die Prioritäten anzupassen)

pi@retropie:~ $ sudo nano /etc/modprobe.d/alsa-base.conf

Falls jetzt ein leeres Script öffnet, hat die .conf-Datei noch nicht existiert und man muss die folgenden Zeilen eingeben:

options snd_usb_audio index=0
options snd_bcm2835 index=1
options snd slots=snd-usb-audio,snd-bcm2835

Mit „control+O“ wird gespeichert und mit „control+X“ kann der Editor beendet werden. Jetzt ist das System zu rebooten. Nach dem Neustart kann in der Konsole nochmals mit:

pi@retropie:~ $ cat /proc/asound/modules

die Reihenfolge der Module überprüft werden. Die sollte jetzt so aussehen:

0 snd_usb_audio
1 snd_bcm2835

Jetzt sollten in der Emulationstation wieder Töne zu hören sein. Diesmal aber ohne Rauschen und kristallklar 😀

 

Motorradnavi „zumo“ Smartrepair

31 total views

DSC_2421Ein bekanntes, schon nicht mehr ganz aktuelles Navigationsgerät für Motorräder, ist das „zumo 550“ von Garmin.  Ein 3,5 Zoll Touchdisplay und fünf seitlich angeordnete Gummitasten dienen zur Bedienung des Gerätes.

Eine der am häufigsten betätigten Tasten ist die „Power“-Taste an der rechten Seite. Und hier entsteht schnell ein Problem. Die Gummimembrane, die den Gummiknopf im Rahmen hält, reißt ein. Das hat zur Folge, dass das Gerät seine Wasserdichtheit verliert und in weiterer Folge reißt die Membrane dann komplett ab und der Knopf fällt heraus. Dadurch ist eine Bedienbarkeit des Gerätes nicht mehr gegeben. Dieses Problem ist wohl sehr bekannt und wird in diversen Internetforen auch diskutiert. Es wäre hier eine ganz einfache Reparatur möglich, wenn man die komplette Gummimatte einfach erneuert. Doch leider ist von Garmin hier kein Support mehr zu erhalten, da das Gerät schon obsolete ist. In der Bucht findet man vereinzelt noch diese Gummiteile, jedoch zu horenden Preisen. Die Verkäufer wissen natürlich wie gefragt diese Teile unter den Navibesitzern sind.

DSC_2416Es geht aber auch anders. Zwar nicht professionell, aber doch funktionell. Links im Bild ist das Loch mit dem fehlenden Knopf zu sehen. Und das gehört wieder ausgefüllt. Auf der Suche nach einem geeigneten Material bin ich in der Sammlung alter IR-Fernbedienungen fündig geworden. Hier sind ja viele auch mit einer Gummitastatur ausgestattet. Und bei einer war ein vom Durchmesser her, passender Knopf dabei.

 

DSC_2417

Also wird diese Fernbedienung geopfert. Das Gehäuse ist schnell geöffnet und die Gummitastatur entnommen. Der geeignete Knopf wird herausgeschnitten. Es ist nur darauf zu achten, dass noch genügend Gummirand überbleibt, um ihn dann auch noch gut im Frontdeckel des zumo verkleben zu können.

 

DSC_2419
Knopf wird mit ausreichend Rand ausgeschnitten

 

DSC_2420DSC_2423Jetzt kann der Knopf im zumo-Deckel angebracht und verklebt werden. Als Kleber habe ich einen dauerelastischen Montagekleber verwendet. (hatte ich gerade zuhause). Der Kleber hält ziemlich gut am Gummi und dichtet auch ab. Da der Hub der Taste am Zumo-Print und somit auch des Knopfes sehr gering ist, dürfte das auch längere Zeit halten.

Das fertige Ergebnis ist im rechten Bild zu sehen.

 

 

 

 

 

 

Impuls aus Dauerphase

201 total views

Eine schnelle Lösung suchte ich für folgendes elektrotechnisches Problem: Ein Grenzwertschalter eines Anemometers liefert als Ausgang ein, von der Winddauer des Sensors abhängiges Signal. Das Signal ist eine geschaltete Netzphase, die, für die Dauer der erfassten Windschwelle plus einer Nachlaufzeit von 3-120 Sekunden, am Ausgang ansteht.

Dieses Signal soll nun aber als Eingang für einen Homematic Schaltaktor verwendet werden, der ebenfalls eine Netzphase als Schalteingang benötigt. Das ansich passt ja schon perfekt. Man muss nur für beide Geräte die gleiche Phase klemmen. ABER: Der homematic Aktor unterscheidet am Eingang unterschiedliche Modi: Einen kurzen „Tastendruck“ z.B. 0.1 < 0.9s, einen langen „Tastendruck“ zB 1 – 2s und einen Tastendruck >4s.  Der letzte Modus versetzt den Homematic-Aktor in den „Anlernmodus“ in dem er mit einer CCU oder Sensor verbunden werden kann. Das macht man üblicherweise nur einmal beim Einrichten der Anlage.

Nach Möglichkeit sollte also ein Anliegen der Schaltphase am Homematic-Aktor Eingang für eine bestimmte Zeit erfolgen, die die vier Sekunden nicht überschreiten darf. Das jedoch wird dem Wind, der über den Grenzwertschalter erfasst wird, ziemlich egal sein… Der bläst einfach solange er will 😀

DSC_2444Also benötige ich eine kleine Schaltung, die mir nach Anlegen einer Netzspannung unbekannter Dauer einen Ausgangsimpuls mit einer bestimmten Pulsdauer (zB. 0.5s) erzeugt. Das soll die Skizze darstellen. L ist hierbei das Ausgangssignal des Grenzwertschalters und L´ ist der gewünschte Impuls am Homematic-Aktor Eingang.

 

 

impulsFolgende Schaltung soll das Problem lösen: Ein frequenzabhängiger Widerstand (Z) in Reihe mit einer Zenerdiode… Also ein Kondensator in Reihe zu einer 12V Z-Diode dient als Spannungsteiler, der mir eine 12V Versorgung aus der Netzspannung erzeugt. Die 1N4007 zusammen mit dem 100uF Kondensator richtet gleich und glättet die Spannung. An dieser Quelle hängt jetzt ein weiterer Kondensator in Reihe mit der Relaisspule. Wird die Spannung jetzt angelegt und ist der 470uF Elko nicht geladen, so fließt durch ihn und die Spule für kurze Zeit ein Strom, und die Spule zieht an. Sobald der Elko geladen ist (5Tau), fließt kein Strom mehr und die Spule fällt wieder ab. -> und genau das wollen wir ja. Die Zeitkonstante wird durch die Kapazität des Kondensators und des Spulenwiderstandes der Relaisspule bestimmt. Die parallel zu den Kondensatoren geschalteten Widerstände dienen zum Entladen der Kondensatoren im spannungsfreien Zustand. Die hier dargestellte Anordnung erzeugt einen Schaltimpuls von in etwa 500ms und ist nach 10s wieder bereit…

Hier ist die auf einer Lochrasterplatine schnell aufgebaute Schaltung dargestellt:

DSC_2445

DSC_2446

 

Geigerzähler – die Nächste

157 total views

Das Thema „Radioaktive Strahlung“ bzw. deren Messung, beschäftigt mich auch immer wieder. In einem alten Weblogeintrag habe ich bereits einmal einen Geigerzähler geplant und ihn als Ausbildungsprojekt mit dem damaligen Elektroniker-Lehrling gebaut. Als Zählrohr kam ein Philips-Rohr ZP1400 aus meinen alten Lagerbeständen zum Einsatz. Die benötigte Betriebsspannung für das Zählrohr generierte ein, über einen 555er angesteuerter Transformator/Wandler mit nachgeschalteter Greinacherkaskade. Diese Schaltung hat den Nachteil, dass sie relativ viele und große Komponenten benötigt und somit auch einen unhandlichen Aufbau nach sich zieht.  Die Schaltung hat die Impulse lediglich auch nur hörbar gemacht. Einen Zähler, oder Integrator hat die Schaltung nicht mehr bekommen. -> man konnte ja optional ein Mikrocontroller Board (Arduino UNO , PIC, etc.) anschliessen…

geiger (16)Auf jeden Fall wollte ich noch einen anderen Detektor bauen. Irgendwann habe ich bei Neuhold-Elektronik günstig ein weiteres Zählrohr gefunden und auch gleich bestellt. Dabei handelt es sich um eine Geiger-Müller Röhre RFT VA-Z-114 (70014NR) aus DDR Beständen. Also warum damit nicht noch einen weiteren Geiger-Müller Zähler basteln. Diesmal sollte die Elektronik jedoch um einiges kleiner ausfallen. Als Grundlage für den neuen Zähler diente das Konzept eines Bausatzes von Pollin, der schon lange nicht mehr lieferbar ist, jedoch noch immer auf der Webseite publiziert wird. Teile dieses Schaltungskonzeptes habe ich nun für dieses Projekt herangezogen. Hier wird die Hochspannung mit einem Boostconverter – IC MC34063 der über einen FET eine 330uH Induktivität schaltet, erzeugt. Die Impulse der Röhre werden über Schmitt-Trigger und Filter aufbereitet und die Software in einem ATTINY2313 übernimmt das Zählen.

schematicDie Spannungserzeugung habe ich hier übernommen. Für die Auswertung kommt jedoch der Atmega328 zum Einsatz. Ein kleines LC-Display (mit 8×2 Zeichen) wird die Impulse anzeigen. Ein paar andere Funktionen, wie Batteriespannung etc. sollen auch noch implementiert werden, da der Atmega ja auch A/D- Converter Eingänge hat und mit 10Bit auch eine genügend hohe Auflösung. Die ganze Schaltung sollte dann so groß werden, dass sie in einem 15x8x5cm großen Gehäuse Platz findet. Als Energiequelle wird eine 9V Blockbatterie zum Einsatz kommen.

Der Schaltplan ist schnell gezeichnet und daraus ein Layout erstellt.

 

layout

Das ist das Platinenlayout in der ersten Version. Eine einseitig gelayoutete Platine mit ausschließlich bedrahteten Bauteilen wird hier völlig ausreichend sein und kann die geplante Größe einfach erreichen. Nach den folgenden drei Fertigungsschritten: (auch hier zu sehen)

geiger (8)

Bohrplotten

geiger (9)Belichten und Entwickeln

geiger (10)

und abschließend Ätzen,

ist die Platine soweit fertig, dass sie bestückt werden kann. Vorher wird auf die Kupferseite noch eine Schicht Lötlack aufgetragen, um hässliche Korrosionen der Kupferschicht zu vermeiden und eine gute Lötoberfläche zu erhalten.

geiger (14)

geiger (12)Das ist die Platine in der bestückten Ausführung. Hier fehlen noch der Mikrocontroller, das LC-Display und natürlich das Zählrohr. Doch zuerst habe ich begonnen, das Gehäuse vorzubereiten und eine Alu-Frontplatte zu erstellen, die dem ganzen Konstrukt ein etwas schöneres Aussehen verleiht. Ein Layout hierfür kann mit allen möglichen Konstruktionstools erstellt werden, die die Möglichkeit bieten, die Zeichnung beispielsweise im „dxf“-Format zu exportieren. Die vhf-Fräsbohrplotter müssen jedenfalls mit den Exportformaten umgehen können und sie idealerweise auch maßstabsgetreu auf den Rohling übertragen können.

geiger (4)

Das Ergebnis der Fräsarbeiten, sind diese beiden Platten, die dann miteinander verschraubt werden, das Display, die Schalter und Taster halten sollen. Damit die eingefrästen Vertiefungen in der Aluminiumplatte schlussendlich auch schön kontrastreich zu sehen sind, werden sie mit schwarzem Acryllack gefüllt.

geiger (6)

So sieht die fertige Frontplatte aus.

DSC_2264

Jetzt wird die Elektronik im Gehäuse untergebracht. Wie hier gut zu erkennen ist, hat wieder das ZP1400 Zählrohr von Philips seinen Platz gefunden. Leider war dem Neuhold – DDR Zählrohr trotz vieler Experimente kein einziger Impuls zu entlocken. Ich vermute, das Rohr hat im Laufe der vielen Lagerjahre Luft gezogen und ist einfach defekt.

DSC_2267

Alle Komponenten haben ihren Platz gefunden. Die „Trennkammern“ sind kupferbeschichtete FR4 Platten, die einerseits die Röhre in Position halten und andererseits eine Kammer für die 9 Volt Blockbatterie darstellen.

DSC_2266

Hier ist nun alles zusammengebaut. Als Testsoftware werden die Impulse vorerst lediglich nur über einen IRQ Eingang gezählt und über den kleinen Lautsprecher hörbar gemacht. Wenn das Programm dann einmal fertig ist, werde ich es hier wieder veröffentlichen…