Archiv der Kategorie: Elektronikbastler

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

Homematic Zählersensor an S0-Ausgang

Loading

Update 06/2020: Die übrig gebliebenen Platinen sind verteilt – ich habe jetzt keine mehr.

Info 05/2020: Da ich weitere Zähler an die HomeMatic angebunden habe, musste ich auch wieder Platinen fertigen. Dieses Mal habe ich testweise auf einen fernöstlichen Leiterplattenhersteller zurückgegriffen. Da die Platine sehr klein ist und ich eine Mindestgröße bestellen musste, wurden auch mehrere Boards hergestellt. Also habe ich auch wieder ein paar Platinen übrig…

 

Mit dem von HomeMatic angebotenen Energiezähler-Erfassungssystem kann man mit Hilfe unterschiedlicher Zählersensoren die Anzeigen- bzw. Zähleinheiten der Energieversorger ablesen und für eigene Datenerfassungssysteme aufbereiten. Dies geschieht auf unterschiedliche Weise. Es kann die Drehscheibe (Ferraris Scheibe) eines Wirbelstromzählers abgetastet werden, oder der Led-Blinkimpuls von modernen elektronischen Zählern, sowie auch mittels Reedkontakt die Zählimpulse der mechanischen Gaszähler. Dies kann alles mit dem HomeMatic Funk-Zähler Erfassungssystem HM-ES-TX-WM bewerkstelligt werden. Für die unterschiedlichen Zählertypen sind unterschiedliche Sensoren erhältlich, die alle über eine 6polige Western-Modular-Steckverbindung angeschlossen werden können. Die Sensortype wird dabei vom Funksender automatisch erkannt und stellt in seinen Softwareeinstellungen die entsprechenden Umrechnungsoptionen (Impulse/kWh, Umdrehungen/kWh, m³/kWh) dar.

Hat man jetzt zum Beispiel einen eigenen elektronischen Subzähler verbaut, so kann natürlich auch mit dem LED-Sensor die Impuls LED abgefragt werden, um so zu den Daten des Zählers zu gelangen. Die meisten elektronischen Hutschienenzähler haben aber auch einen sogenannten S0-Ausgang, der einen potentialfreien (open-collector) Ausgang über Schraubklemmen zur Verfügung stellt. Wenn man die Schaltung des LED-Sensors ein wenig geändert neu aufbaut, so kann der S0-Ausgang des Hutschienenzählers anstelle der Fotodiode angeschlossen werden. Der Sensortyp wird dann weiterhin korrekt erkannt und am Funk-Zähler Erfassungssystem angezeigt.Mit dieser Schaltung erkennt der HM-Sender den LED-Sensor. Anstelle der Fotodiode wird die Kollektor-Emitter-Strecke des Hutschienenzählers angeschlossen.

Die ganze Schaltung wird auf eine kleine Platine gebracht, diese dann geätzt und bestückt. Die Bauteile sind Standard SMD-Teile der Größe 0805. Der Transistor ist ein BC848 und die Spule L1 ist eine Würth Induktivität mit 680nH (Würth Nr. WE7447604)

Mehrere Platinen direkt aus dem Ätzbad… Danach erfolgt der Zuschnitt und das Beschichten mit Lötlack.

Die Platinen sind nun zugeschnitten, lackiert und können jetzt bestückt werden.

Mit Bauteilen versehen, fehlen jetzt nur mehr die Zuleitungen.

Es sind nun alle Leitungen angelötet. Zum Schutz vor Kurzschlüssen wird die Platine mit einem Schrumpfschlauch überzogen. Jetzt kann alles angeschlossen und eingebaut werden.

An den S0-Ausgang des Hutschienenzählers angeschlossen, kann es dann gleich losgehen. Im Homematic-Funksender oder in den Geräteeinstellungen der CCU2 muss nur mehr die dem Zähler entsprechende Impulsanzahl pro kWh eingestellt werden. Diese Information sind in den Datenblättern des Zählers zu finden. Sie sind aber auch fast immer direkt auf den Zählern zu finden. In diesem Fall erzeugt der Zähler 1600 Impulse/kWh.

Die Zeichnung oben stellt den Schaltplan des Aufbaus dar. Mit dem Spannungsteiler aus R1 und R2 weiss das Homematicmodul welche Art Sensor angeschlossen ist. Der Transistor schaltet dann die Impulse die vom S0 Ausgang kommen zum Homematic Modul durch.
Ich hatte den Schaltplan aus dem Beitrag herausgenommen, da er nicht allgemeingültig ist und ein paar User den Nachbau nicht zum Laufen brachten. Da viele Hutschienenzähler unterschiedliche Optokopplerausgänge haben (Transitorausgang, FETausgang etc., kann es durchaus möglich sein die Schaltung anzupassen. Ziel ist es jedenfalls, dass der Transistor sauber aus- und eingeschaltet wird, wenn der Schaltimpuls ausgelöst wird…

 

Edit  07/2019: Nach einigen Anfragen stelle ich eine Skizze der Belegung des RJ12 Stecker (6pol) online.

Edit 02/2021:das Foto mit der Steckerbelegung war seitenverkehrt. Dank des Hinweises von Guido hier nun die korrigierte Skizze:

Funktionstest der Platine:

1. die fertig bestückte Platine über den 6pol RJ Stecker am Homematic-Sensor anstecken

2. Batterien in den Homematic Sensor einlegen.

3. Jetzt muss im Display des Homematic Sensor „LED“ angezeigt werden.  (Durch den Spannungsteiler an pin4 wird der Homematic-Sensor in den Modus LED geschaltet)

(Ist der RJ Stecker nicht gesteckt, so muss der HM-Sensor nach dem Batterie einlegen „Err“ anzeigen

4. Durch wiederholtes Überbrücken der Pins TP8 und TP9 (Impulseingang) mit Drahtbrücke etc. können Zählerimpulse simuliert werden – der HM-Sensor muss jetzt auch entsprechend der simulierten Impulse zählen. Diese Aufgabe übernimmt dann der Impulsausgang des Zählers.( Meist ein Transistor oder FET eines Optokopplers)

3.2″ TFT Display an Raspberry PI

Loading

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

Loading

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

Loading

 

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

Loading

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

Loading

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

Loading

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

Loading

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

Loading

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

Loading

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