21.November 2024    
   homeProjekteHardwareRaspberry-I2C-Relaisplatine

 

Hobby 234x60
reichelt elektronik – Elektronik und PC-Technik
Seite zuletzt geändert: 07.11.2012 11:48

Raspberry-I2C-Relaisplatine

Bei diesem Projekt geht es um die Änderung des bereits vor längerer Zeit realisierten IP-Reset-Controllers (siehe hier). Nicht erst während des laufenden Betriebs zeigten sich folgende Schwächen des alten Systems:

  • sehr wenig Speicherplatz vor allem für Programmcode in den AVR-Prozessoren
  • dadurch keine Realisierung einer "richtigen" (nur rudimentären) Web-Oberfläche möglich, nur einer Telnet-Schnittstelle
  • durch zu wenig Speicher und zu wenig Performance kein SSL-Schutz der Telnet-Schnittstelle möglich
  • keine anderweitigen Firewall-Funktionen möglich

Aufgrund dieser Einschränkungen lief das System nur per Telnet-Zugriff im internen Netzwerk. Für einen Einsatz im offenen Internet erschien die Sicherheitsproblematik als zu heikel.

Mit der Verfügbarkeit des Raspberry Pi stand jetzt ein System zur Verfügung, welches viele der oben genannten Probleme eliminieren kann:

  • kleine Abmessungen (sogar noch kleiner als die lochraster.org-Platine)
  • 256MB Speicher
  • schneller Prozessor
  • Anschluss von USB-Geräten wie z.B. externen Festplatten
  • vollwertiges Linux mit allen notwendigen Paketen:

    • frei konfigurierbare Netzwerkschnittstelle mit Firewall
    • Webserver mit SSL-Funktionalität
    • ssh- und telnets-Schnittstelle
    • Logging

Zusätzlich ergibt sich noch die Möglichkeit, weitere Software auf diesem Rechner zum Einsatz zu bringen, z.B. Nagios zur Überwachung anderer Netzwerkgeräte.

Nachteilig ist nur der erhöhte Strombedarf, der zu vermehrter Abwärme führt, die dann abgeführt werden muss.

Auf Basis des Raspberry Pi ist eine modifizierte Version der Relais-Platine entstanden.

Der Raspberry Pi verfügt nur über eine begrenzte Zahl an Signalbits am GPIO-Interface. Dafür steht aber am GPIO ein voll funktionsfähiges I2C-Interface zur Verfügung. Da hierfür nur zwei Signalbit-Leitungen erforderlich sind und die Geschwindigkeit des Raspberry-I2C-Interfaces für die Relais-Funktionalität völlig ausreicht, bietet es sich für die Realisierung der Datenübertragung an.

Die Schaltung im Folgenden ist nicht auf den Raspberry Pi beschränkt. Es wird zwar über den 26pin-Connector des Raspberry Pi gearbeitet, man kann diesen aber auch weglassen und die Platine an einem anderen I2C-Bus betreiben. Die Platine arbeitet mit 3,3V vom Raspberry Pi, damit werden die ICs betrieben. Mit wahlweise 5V vom Raspberry oder von einer externen Quelle an K12 (wenn die externe Quelle nicht 5V zur Verfügung stellt, dann darf der Jumper an K11 nicht gesetzt werden).

Für die Kommunikation mit dem I2C-Bus dient der IC PCF8574 (oder, bei anderen Busadressen, der PCF8574A). Dessen Busadresse kann über die 3 Jumper des Jumperfelds K2 definiert werden.

Nachteil des PCF8574 ist, dass seine Ausgangspins nach dem Einschalten auf H-Pegel liegen bzw. über eine 100µA-Stromquelle auf H-Pegel gelegt werden. Für eine direkte Ansteuerung folgender Transistoren ist der PCF8574 nicht geeignet, hierfür reicht die 100µA-Stromquelle nicht aus. Werden Darlington-Transistoren am Ausgang benutzt, so steuern diese beim Einschalten durch, so dass beim Einschalten alle Relais anziehen - für eine Reset-Schaltung doch etwas unpraktisch.

Daher wird an den Ausgang des PCF8574 ein negierend wirkender 74HCT640 gelegt, der fix auf Weiterleitung des Signals vom Eingang auf den Ausgang geschalten ist. Dieser steuert seinerseits direkt entweder mit einer Transistor-Stufe oder mittels eines ULN2803 die Relais an.

Damit muss dann zwar dem PCF8574 am Ausgang ein "L" gegeben werden, damit ein Relais schalten kann, das ist programmtechnisch vielleicht etwas gewöhnungsbedürftig, muss aber dem Benutzer ja auch nicht mitgeteilt werden. Dafür bleiben die Relais beim Einschalten des Systems alle ruhig.

Die benutzten 6V-Omron-Relais arbeiteten bei 5V alle zuverlässig. Wem das zu unsicher ist, muss sie mit 6V betreiben und dafür die bereits oben erwähnte Brücke zur 5V-Leitung des Raspberry-GPIO weglassen.

Ich habe die Clamp-Dioden an den Relais bei der Übernahme der Schaltung von der Transistor-Variante (diese ist bei mir im Einsatz) auf die Version mit dem ULN2803 dringelassen. Der ULN2803 hat eigene Clamp-Dioden, diese sind auch mit angeschlossen worden. Von den Parametern her sollten sie ihre Aufgabe problemlos erfüllen, bei 50V Sperrspannung und 500mA Durchlassstrom sollten sie die Transistoren ohne weiteres schützen können.

Variante 1: mit Transistor-Steuerung der Relais

Schaltplan und Board-Layout im "Target 3001!"-Format

Schaltplan als PDF

 

Variante 2: mit Steuerung der Relais über Darlington-Array

Schaltplan und Board-Layout im "Target 3001!"-Format

Schaltplan als PDF

 

Software zur Ansteuerung

Für das Web-Interface ist eine Standard-Apache2-Installation auf dem Raspberry erforderlich.

Zusätzlich benötigen wir das wsgi-Modul für den Apache2. Bei Debian und damit auch bei raspbian ist dies das Paket libapache2-mod-wsgi.

In die Serverkonfiguration kommt dann der Eintrag

WSGIScriptAlias /wsgi/ /usr/local/www/wsgi-scripts/
<Directory /usr/local/www/wsgi-scripts>
Order allow,deny
Allow from all
AuthName "raspi"
AuthType Basic
AuthUserFile /usr/local/www/.htpasswd
AuthGroupFile /dev/null
require valid-user
</Directory>

hinein. Ich habe an dieser Stelle noch eine Passwort-Abfrage hineingesetzt, wer die nicht möchte, reduziert den Eintrag einfach auf:

WSGIScriptAlias /wsgi/ /usr/local/www/wsgi-scripts/
<Directory /usr/local/www/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>

Damit der Apache-Server und damit das Python-Script auf die i2c-Schnittstelle zugreifen kann, muss er das Recht auf die i2c-devices bekommen. Für diese hat aber nur der Benutzer root und die Gruppe i2c das Recht, schreibend zuzugreifen. Also muss der Apache-Benutzer www-data mit in die Gruppe i2c aufgenommen werden. Der Eintrag in der /etc/group sieht dann so aus:

i2c:x:109:www-data

Nach dem Eintrag von www-data in die Gruppe i2c muss der Apache-Server neu gestartet werden, da erst dann die Zuordnung des Benutzers zur Gruppe gültig wird.

In das Verzeichnis /usr/local/www/wsgi-scripts (es kann ein beliebiges anderes sein, nur die o.g. Konfiguration des Webservers muss dann geändert werden) kommt z.B. die Datei test.wsgi mit folgendem Inhalt:

test.wsgi

Beim Aufruf von der Seite <meinraspi>/wsgi/test.wsgi sollte dann ein Bild wie dieses erscheinen:

Und wenn man dann das "system0" auswählt und auf "Submit" klickt, sollte man kurz das Relais für System0 klicken hören und dann diese Ausschrift sehen:

Keine Kommentare
Kommentar hinzufügen

* - Pflichtfeld

*



*
Copyright © 2008-2017