Holger war von meinen Nixieuhren sehr angetan, er wollte ebenfalls eine haben - so entstand Version IV. Die vierte Version der Nixieuhr basiert auf der dritten. Allerdings werkelt diesmal ein Raspberry Zero W und die Transistorplatine mit den Hochspannungstransistoren ist auch kleiner geworden. Die Software zur Ansteuerung der Uhr ist aber unverändert die gleiche wie bei Version III. Wie immer bei Linux ist es nicht ratsam den Raspberry einfach auszuschalten. Im schlimmsten Fall könnte die SD-Karte Schaden nehmen. Darum habe ich eine Webserver basierte Lösung fürs Ausschalten und Neustarten eingebaut. Damit kann er übers Handy die Uhr herunterfahren und benötigt keine SSH-Software. Darfür muss zunächst ein geeigneter Webserver installieirt werden. Da ich die Website mit PHP programmiere, muss auch PHP installiert werden. Das alles beschreibe ich im Folgenden.
Webserver installieren und Linux anpassen
Raspian ist die Linuxdistribution, die auf allen meinen Raspberrys läuft, auch auf dem Zero. Der Zero ist nicht übermäßig leistungsstark, darum habe ich mich für den Webserver lighttpd entschieden, weil er gegenüber Apache viel weniger Ressourcen benötigt.
Lighttp installieren
$ sudo apt-get install lighttpd
PHP installieren
$ sudo apt-get install php7.0-fpm php-cgi
Oftmals sind unter Linux Programme ziemlich geschwätzig und schreiben häufig in Log-Dateien. Diese finden sich unter /var/log. Für lighthttp findet sich dort der Ordner lighthttpd. Bei meiner Installation wollte ich die Zugriffe auf die SD-Karte minimal halten und habe darum die Logdatei in eine Ramdisk verschoben. Da die Inhalte einer Ramdisk jedesmal beim Ausschalten verloren gehen, fehlt nach einem Neustart der lighthttpd-Order wieder. Problematisch dabei ist, dass lighthttp nicht startet, wenn der Ordner fehlt.
Dem kann abgehofen werden. Einfach dem System sagen, welche Verzeichnisse im temporären Log-Verzeichnis beim Neustart angelegt werden müssen. Diese Information steht in var.conf, diese muss nur angepasst werden:
$ sudo nano /usr/lib/tmpfiles.d/var.conf
am Ende von var.conf die Zeile
d /var/log/lighttpd 755 www-data www-data -
anfügen. d bedeutet "Temporäres Verzeichnis /var/log/lighttpd anlegen" für user www-data, group www-data. Bitte den abschließenden Bindestrich nicht vergessen!
Shutdown-Script als Website erstellen
die Sites des Webservers befinden sich unter /var/www/html. Das Verzeichnis /www gehört dem Superuser root. Mit
$ sudo chown www-data:www-data /var/www
übergibt der Superuser dem Webserver-user www-data den Besitz am Verzeichnis. Danach ermöglichen wir, dass die www-data-Gruppe in das Verzeichnis schreiben darf:
$sudo chmod 775 /var/www
am Schluss nehmen wir den Standardnutzer pi in die www-data-Gruppe auf:
$ sudo usermod -a -G www-data pi
damit das alles wirksam wird, muss der Rasperry neu gestartet werden:
$ sudo reboot
Als Nächstes wird die Website zum Rebooten erstellt:
$ pico /var/www/html/reboot.php
dort hinein schreiben wir
<?php exec("sudo /sbin/shutdown -r now"); ?>
und zum Herunterfahren
$ pico /var/www/html/halt.php
<?php exec("sudo /sbin/shutdown -h now"); ?>
Noch wird das nicht klappen, denn der user www-data hat keine Rechte um Superuser - also "root" zu werden. Deshalb wird das System ihm Befehle verweigern, die Superuserrechte benötigen, wie z.B. shutdown. Um www-data Superuserrechte zu geben und auf den Befehl shutdown zu beschränken, muss die Datei /etc/sudoers angepasst werden. Aber Vorsicht! Wenn hier ein Fehler passiert, ist es wahrscheinlich, dass das System unzugänglich wird. Aus diesem Grund gibt es den Befehl "visudo". Visudo ist ein Editor, der die /etc/sudoers lädt und Eingaben auf korrekte Syntax prüft:
$ sudo visudo
Der Eintrag hier lautet gem. der Syntax "[wer] darf auf [welchem Rechner]=[Als welcher user] [ohne Passwort]: [Welchen Befehl ausführen]":
www-data ALL=(ALL) NOPASSWD: /sbin/shutdown
So kann man pi zum Superuser machen, der alles darf, auch das System zerstören: "pi ALL=(ALL) NOPASSWD: ALL". Davon rate ich ab! Es geht besser und sicherer mit einem "sudo su".
Jetzt müsste das Herunterfahren bzw. Rebooten per Browser klappen. Im Browser die Seite
http://[IP oder Hostname]/halt.php
bzw.
http://[IP oder Hostname]/reboot.php
aufrufen. Bei mir ist das "http://zeropi.fritz.box/reboot.php" bzw. "http://192.168.134.65/reboot.php"
Schaltplan und weitere Infos
Interessant ist die Hochspannungserzeugung 180V aus 5V (im Schaltplan stehen 12V - aber es funktioniert auch mit 5V). Nachfolgend findet ihr den Schaltplan aus der Nixieuhr 2, der auch in allen anderen Nixieuhren verwendet wurde (bei IV ohne die 5V-Auskopplung). Wichtig dabei: Die Drain-Source-Spannung des MOSFET muss größer sein, als die maximale Ausgangsspannung. In dieser Schaltung werden mindestens 170V DS-Spannung nötig sein. Der IRF840 hat 500V DS-Spannung, die meisten Allerwelts-Typen unter 50V. Daher der IRF840. Leider hat er einen relativ hohen DS-On-Widerstand von fast 1 Ohm (0,85 Ohm laut Datenblatt). Da die geschalteten Ströme aber klein sind, spielt das in dieser Anwendung eine untergeordnete Rolle.
Die Diode D1 im Schaltplan ist ein falscher Typ. Da ist mir ein Fehler passiert. Bis der Schaltplan angepasst ist - die richtige Diode ist eine Avalanche-Diode vom Typ BYT56M. Sie hat 1000V Reverse-Spannung, die BAV21 nur 250V. Sie würde wahrscheinlich auch funktionieren, aber ich habe es nicht ausprobiert.
Nixieuhr 3 und 4 verwenden die gleiche Software. Ihr findet sie im Link Nixieuhr 3.
Die Hochspannungserzeugung mit dem Raspberry Zero W und der Transistorplatine benötigen 5V/0,4A =2 Watt Energie.
Der Schaltplan zur Ansteuerung der einzelnen Glimmziffern der Nixieröhre (0-9 und "." = 11 Ziffern). Auf dem Schaltplan ist nur eine gezeichnet, stellvertretend für alle 11. Der MPSA42 übrigens hat eine sehr hohe Collector-Emitter-Spannung von 300V. Er hält die hohe Nixie-Spannung von rund 200V aus. Der sehr oft verwendete BC547B hat dagegen nur 47V CE-Spannung und würde durchbrechen. Dafür hat der BC547B eine Stromverstärkung von rund 400, wogegen der MPSA42 nur rund 30 schafft. So hat ein Vorteil eben an anderer Stelle auch Nachteile. Ihr müsst unbedingt einen Transistor nehmen, der die 170V zwischen Collector und Emitter aushalten kann. Für T2 braucht es den aber nicht unbedingt. Da genügt ein Allerwelts-Typ.
Impressionen
Die Uhr ist zwar elektronisch fertig, Holger muss sie aber noch irgendwo einbauen, aber da ist seine Sache. Hier einige Bilder und ein Video:
Über die 5V GPIOs kann der Raspberry ohne Micro-SD-Stecker mit 5V versorgt werden. Ich habe aber vergessen, die 5V-Versorgung des Raspberrys auf der Platine zu berücksichtigen. Darum musste ich am Rasperry-Stecker der Hochspannungstransitorenplatine Plus an Pin 2 und Minus-Pole an PIN 6 anlöten. Den Steckeradapter Micro-USB im Hintergrund hatte ich bei Amazon schon früher für ein anderes Projekt gekauft. Über ihn werden parallel der Raspberry und die Hochspannungserzeugung versorgt. Das rote Kabel ist Plus, das schwarze Masse: