Relaisplatine - Lasten schalten mit dem RasPi

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Das Projekt läuft nun schon eine ganze Weile, aber nun gibt es endlich einen Prototypen. Ich habe versucht so viele Vorschläge wie möglich umzusetzen. An dieser Stelle ein großes Dankeschön an jar für seine Unterstützung im Thread und per PN.

    Folgende Funktionen wurden (teilweise von der ursprünglichen Planung abweichend) in in der V1.0 umgesetzt:

    - die Platine hat 8 Kanäle
    - die Aktivität der Kanäle wird durch eine LED pro Kanal signalisiert
    - jeder Kanal wird durch einen P-Kanal Mosfet geschaltet, wodurch pro Kanal etwa 5V - 30V mit bis zu 4A schaltbar sind (abhängig vom verwendeten Mosfet)
    - theoretisch können über zwei optionale Relais (Nennlast 1A/30V DC) auf Kanal 1 und 2 auch 230V geschaltet werden. Da ich aber kein Elektriker bin, kann ich nicht beurteilen, ob alle notwendig Sicherheitsvorgaben wie zum Beispiel Abstände eingehalten sind. Daher rate ich von hohen Spannungen ab.
    - eine Verdoppelung der Schaltleistung durch Parallelschaltung der zwei Ausgäng pro Relais wäre möglich, wird aber ebenfalls nicht empfohlen
    - eine galvanische Trennung zwischen den Kanälen ist nur durch die Nutzung der Relais möglich
    - die Platine wird per I²C gesteuert
    - der I²C Bus ist galvanisch vom RasPi getrennt, so dass der RasPi auch bei Schaltfehlern "sicher" ist
    - die Betriebsspannung der Schaltung (5V) ist ebenfalls galvanisch vom RasPi getrennt

    - die Platine wird von oben auf den RasPi gesteckt und hat die gleichen Maße wie der RasPi (ohne Lan und USB)
    - durch die verwendete Buchsenleiste sind weiterhin alle GPIO für weitere Anwendungen nutzbar
    - die Spannungsversorgung erfolgt je nach RasPi Modell entweder über den RasPi per GPIO-Leiste oder über die Micro-USB Buchse der Platine, über die dann auch der RasPi per GPIO versorgt wird
    - es ist eine selbst rückstellende Sicherung (2,6A) an der USB-Buchse verbaut, um eventuelle Kurzschlüsse abzusichern
    - es wurde eine I²C RTC mit Alarm-Ausgang verbaut, über den der RasPi aus dem Standby gebootet werden kann
    - die RTC ist über eine auswechselbare CR2032 Lithium Knopfzelle gepuffert
    - der Alarmausgang der RTC wurde über dem Reset-Pin des RasPi positioniert
    - ein I²C Eeprom ist vorhanden (verschiedene Speichergrößen sind möglich). Alternativ kann bei Bedarf FRAM verwendet werden, da die Bauteile pinkompatibel sind
    - die Adresse des I²C Portexpanders und des Eeproms können über Lötjumper frei konfiguriert werden
    - es wurde eine Buchsenleiste hinzu gefügt, über die eine weitere Platine "huckepack" montiert werden kann. Auf dieser werden weitere, leistungsfähigere Relais installiert sein. Diese Platine ist allerdings noch nicht fertig.

    Aktuell befindet sich ein Prototyp im Test. Die bisher aufgetauchten Probleme werden in den nächsten Versionen behoben. Dieser Beitrag wird auch künftig auf dem aktuellen Stand gehalten.

  • Ich nutze für meine Tests einen RasPi2 Mod. B mit einem frisch installierten Jessi mit allen Updates.

    Bedienung per Smartphone:

    Wer die Kanäle gerne per Smartphone schalten möchte, dem kann ich die App "GPIO Tool for Raspberry Pi" empfehlen. Sie kostet zwei Euro, ist es aber wert. Nach der Installation auf dem Smartphone werden zuerst die Netzwerkadresse, der Nutzername und das Passwort des RasPi eingegeben. Ist man erfolgreich verbunden, wird man aufgefordert, die notwendigen Programme zur Kommunikation per I²C zu installieren. Stimmt man dem zu, läuft der Installationsprozess durch. Danach sollte es nach einem Neustart möglich sein, die Adressen der am I²C Bus angeschlossenen Komponenten zu sehen.

    Bei mir hat zwar die Installation geklappt, aber trotzdem konnte ich die Adressen der Geräte nicht auslesen. Der auf dem Foto zu sehende Fehler wurde angezeigt. Daher habe ich manuell mit "sudo raspi-config" in "Advanced Options - I2C" eingeschaltet. Danach habe ich noch mit "sudo apt-get install i2c-tools" die notwendige Software installiert und einen Neustart durchgeführt. [color=#222222][font="arial,sans-serif"]Nach diesen Schritten konnte ich die Adressen der angeschlossenen Komponenten sehen. Im nächsten Schritt klickt man auf die Adresse des MCP23017 und wählt "Quick2Wire (Q2W) IO Expander" aus. Nun ist es möglich im Auswahlmenü den Portexpander auszuwählen. In der überschaubaren Übersicht sind dann alle 16 Kanäle sichtbar und lassen sich vom Smartphone aus bedienen.

    Bedienung per Konsole:
    Das hat dreamshader sehr ausführlich ewas weiter unten im Spoiler beschrieben.

  • Inzwischen ist die neue Version (V1.1) der Platine eingetroffen. Es wurden einige Fehler behoben, die sich in der ersten Version eingeschlichen haben.

    Da ich mit dem ULN2803 Probleme hatte, habe ich diesen durch Transistoren ersetzt, die jetzt die Ansteuerung der Relais und Mosfets übernehmen. Außerdem wurde die Funktion der Relais leicht verändert. Statt wie bisher 2xEIN pro Relais, habe ich es nun so gemacht, dass Relais1 2xEIN schaltet und Relais2 1xUM schalten kann. Für den Masseanschluß habe ich neben den Schraubklemmen einen 2x4 Block GND vorgesehen. Die Leiterbahnen zwischen den Schraubklemmen und den Relais habe ich so kurz und breit wie möglich ausgeführt, so dass theoretisch auch höhere Spannungen/Ströme geschaltet werden können.

    Um die Ausgänge 1 und 2 entweder mit Mosfets oder mit Relais nutzen zu können, wurden zwei Lötjumper hinzu gefügt. Sind sie geschlossen, wird ein Relais genutzt, sind sie offen, kann der Mosfet genutzt werden.

    Ein (Schnell)Test der ersten vier Kanäle verlief auf Anhieb erfolgreich. Ein ausführlicherer Test mit dann komplett bestückter Platine erfolgt in den nächsten Tagen.

    edit:
    Soweit ich das testen konnte, funktioniert alles so, wie es soll. Auch die Bedienung über einen RasPi Zero mit Wlan-Stick ist möglich.
    Nun geht die Platine auf die Reise, damit auch Eeprom und RTC auf Herz und Nieren getestet werden.

  • Hallo zusammen,
    ich habe da das Relaisboard von Neueinsteiger hier liegen und bin gerade dabei die Funktionen mal durchzutesten.
    Weiter oeben wurde ja zu dem Thema schon was geschrieben, trotzdem möchte ich das hier mal zusammenfassen.
    Im Moment beschäftige ich mich noch mit dem EEPROM des Boards, einem 24LC32. Das wird später für einige Gimmicks genutzt, aber dazu zu einem anderen Zeitpunkt mehr.

    Testplattform ist ein Raspberry Zero mit dem aktuellen Raspbian Jessie.
    Der Zero wurde zunächst mit den Default-Einstellungen installiert und lediglich der WLAN-Zugang eingerichtet und Sprache, TZ, ... über raspi-config angepasst.

    Rein optisch finde ich die Platine schon mal gelungen ... macht was her und nach den ersten Funktionstests sieht es nicht so aus, als müssten Korrekturen an der Hardware vorgenommen werden.
    Das Board umfasst derzeit einen 3231 Uhrenbaustein, ein 24LC32 EEPROM, zwei Relais und einen MCP23017 von dem die acht I/Os von Port A als Ausgang geschaltet sind und zur Ansteuerung der MOSFETs bzw. der beiden Relais genutzt werden können.
    Bei den Relais handelt es sich um eines vom Typ 1xUM und eines vom Typ 2xEIN. Die Anschlüsse sind auf Kabelklemmen herausgeführt.
    Ich denke mal, dass Neueinsteiger die Hardware, falls nötig, noch genauer beschreiben wird.

    Also ... los geht's ...
    Den RPi sauber herunterfahren, stromlos machen und das Board aufstecken. Booten und die Komponenten des Boards einrichten/testen.


    Der Uhrenbaustein funktioniert out of the box ... dazu kann man im Prinzip jede Anleitung für Jessie aus dem Netz als Vorlage verwenden:

    Spoiler anzeigen

    Zunächst mal die Repositories und den RPi auf den aktuellsten Stand bringen:

    Code
    pi@pi-zero:~ $ sudo apt-get update && sudo apt-get upgrade

    Dann das "I2C-Zubehör" installieren:

    Code
    pi@pi-zero:~ $ sudo apt-get install i2c-tools libi2c-dev python-smbus

    Anschliessend über raspi-config den I2C-Bus aktivieren:

    Code
    pi@pi-zero:~ $ sudo raspi-config
    -> Advanced Options -> I2C -> enable
    -> Finish

    Ein Reboot war bei mir nicht nötig. Die Komponenten der Platine melden sich mit den richtigen Adresssen:

    Jetzt noch die Uhr in der /boot/config.txt aktivieren. Dazu einfach an das Ende der Datei folgende Zeile anfügen:

    Code
    dtoverlay=i2c-rtc,ds3231

    Laut diversen Anleitungen im Netz ist das deaktivieren der fake-hwclock nicht notwendig. Ich hab's jetzt trotzdem gemacht.
    Dazu den service über systemctl stoppen:

    Code
    pi@pi-zero:~ $ sudo systemctl stop fake-hwclock.service

    und anschliessend ganz abschalten:

    Code
    pi@pi-zero:~ $ sudo systemctl disable fake-hwclock.service
    Synchronizing state for fake-hwclock.service with sysvinit using update-rc.d...
    Executing /usr/sbin/update-rc.d fake-hwclock defaults
    Executing /usr/sbin/update-rc.d fake-hwclock disable
    insserv: warning: current start runlevel(s) (empty) of script `fake-hwclock' overrides LSB defaults (S).
    insserv: warning: current stop runlevel(s) (0 1 6 S) of script `fake-hwclock' overrides LSB defaults (0 1 6).
    pi@pi-zero:~ $

    Vergewissert Euch jetzt, dass die aktuell eingestellte Uhrzeit eures RPi stimmt. Dann setzt ihr die Uhrzeit und das Datum der RTC mit:

    Code
    pi@pi-zero:~ $ sudo hwclock -w

    Bei mir kam beim ersten Versuch eine Fehlermeldung. Ich hab' das Kommando dann einfach noch mal ausgeführt und dann klappte das. Zur Kontrolle könnt ihr mit

    Code
    pi@pi-zero:~ $ sudo hwclock -r
    Mi 31 Aug 2016 19:57:24 CEST  -0.493173 seconds
    pi@pi-zero:~ $


    die Hardware-Uhr auslesen.
    Bei mir funktioniert das nur mit sudo davor. Rufe ich das Kommando als User pi auf, bekomme ich eine Fehlermeldung:

    Code
    pi@pi-zero:~ $ hwclock -r
    hwclock: Cannot access the Hardware Clock via any known method.
    hwclock: Use the --debug option to see the details of our search for an access method.
    pi@pi-zero:~ $

    Das war schon mal die Uhr ...

    Die Ausgänge und Relais haben mich erst mal eine Weile geärgert ... zum Schluß hat sich aber dann heraugestellt, dass das Problem, wie so oft, vor dem Bildschirm saß. Ich hatte mir da scheinbar eine Anleitung zur Ansteuerung eines MCP mit Bordmitteln ( i2cset, i2cget, ...) aus dem Netz gefischt, die so nicht funktionierte. Hätte ich gleich in's Datenblatt geschaut ...
    Nun, sei's drum.

    Wie Neueinsteiger bereits -> hier <- geschrieben hatte, funktioniert die GPIO-App tatsächlich ohne irgendwelche Mucken. Man muss halt die Premium-Version kaufen, um den Portexpander damit bedienen zu können. Nachdem das Teil auf einem Tablet installiert hatte, wurde noch eine android-Anwendung auf dem Zero installiert und das Ding lief.

    Der MCP hat per default die Adresse 0x20. Um die Ausgänge entsprechend zu schalten, werden Control-Bits - für jeden I/O eines - in das GPIOA-Register (0x12) geschrieben. Der erste Ausgang entspricht dabei 00000001, der zweite 00000010, der dritte 00000100 usw..
    Mit Bordmitteln heisst das:

    Code
    pi@pi-zero:~ $ i2cset -y 1 0x20 0x12 1
    pi@pi-zero:~ $ i2cset -y 1 0x20 0x12 2
    ...

    Mit diesem kleinen bash-script können die Ausgänge durchgeschaltet werden:

    Entgegen meiner Überzeugung habe ich sogar ein Python script ausgebuddelt und leicht angepasst. Das schaltet jetzt den ersten Ausgang zyklisch ein und aus:

    Damit scheinen die Grundfunktionen erst einmal zu laufen.
    Das Thema EEPROM werde ich später noch ausführlich behandeln. Soviel sei vorab gesagt: es lässt sich schreiben und lesen - funktioniert also auch wie erwartet.
    Bis dahin dauert es aber jetzt erst noch mal eine Weile ...

    Update 30.10.2016:
    Um den Uhrenbaustein auszureizen ist es mit Bordmitteln ( i2ctools) möglich auch die Alarm-Funktion des DS3231 zu nutzen.
    Eine aus meiner Sicht ziemlich ausführliche Anleitung habe ich im Thread zur -> Real Time Clock für den Raspi <- verfasst.


    Fazit bis jetzt: Super Teil :thumbs1:

    t.b.c.

    History:
    01.09.2016 - Python script hinzugefügt
    30.10.2016 - Link zur Anleitung für das Alarm-Handling hinzugefügt ...


    cu,
    -ds-

  • Hallo Neueinsteiger, hallo Dreamshader...

    Ich glaube das ist - zumindest im Ansatz - genau das was ich benötige um die Verbindung vom Raspi zum Steuerungsteil meiner im Bau befindlichen Maschine herzustellen... Es könnte aber durchaus sein, das 8 Kanäle für mein Anliegen zu wenig ist...

    Ist diese Platine kaskardierbar?
    Wäre es denkbar mit der Platine größere Relais oder sogar Schütze anzusteuern?

    LG..

  • Hallo Tiieto,
    auweia ... das ist ja schon wieder eine halbe Ewigkeit her ;) ...

    Theoretisch müsste das kasper ... äh kaskadierbar sein ... einzig der Uhrenbaustein könnte Mucken machen, weil der, wenn ich mich recht erinnere, keine Adress-Jumper hat. Die Adressen von EEPROM und Portexpander sind, soweit ich noch weiss, mit Lötjumpern einstellbar.

    Schütze ... hm ... die MOSFETs schaffen afair 30V/4A ... sollte also möglich sein.

    Naja ... Neueinsteiger kann da eh mehr dazu sagen. Evtl. hat er die eine oder andere Platine über und/oder baut Dir eine Sonderedition ohne RTC und Relais ...

    btw: den Restart über die Uhr habe ich noch nicht ausprobiert!

    cu,
    -ds-


  • Meine unmaßgebliche Meinung dazu: einfach EEPROM, RTC und Knopfzellen-Halter der zweiten, ... Platine nicht bestücken.
    Da wäre sonst wohl ein Redesign notwendig ...

    ich wäre ja dafür, Stapelstecker, konfigurierbare I2C Adresse und auf der Platine ein Steckplatz 4-5 Pins für eine normale kaufbare RTC mit I2C EEPROM, dann könnte man den Relauisteil "stacken" also mehr Platinen setzten und als oberste die RTC stecken, die muss und darf ja nicht auf jedem Relais Modul

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Die Idee ist interessant, wurde aber in der Form, soweit ich mich erinnere, nicht geäußert:
    Umfrage: Welche Eigenschaften sollte eine "Relaisplatine" haben?

    Wie ich im letzten Punkt des ersten Beitrages geschrieben habe, wurde eine Erweiterung bereits bedacht. Über die vorhandene Buchsenleiste kann eine weitere "Huckepack"-Platine installiert werden. So könnte man weitere Kanäle hinzu fügen. Das könnten entweder bis zu 16 Kanäle sein, die über Mosfets geschaltet werden, oder wesentlich weniger Kanäle, die dann aber stärkere Relais schalten. Gezeichnet habe ich diese Platine allerdings immer noch nicht.

    Tiieto: Wie viele Kanäle benötigst Du und welche Spannungen und Ströme willst Du damit schalten?

  • Eine andere Variante wäre auch noch, die Ausgänge als Digitaloutput auszuführen & so zu dimensionieren, dass man an jeden DO ein Relais / Schütz seiner Wahl abklemmen kann...
    Die spulenspannung gibt dabei die Platine vor.
    So hat man - so denke ich - ein Maximum an Flexibilität...

    @ Neueinsteiger: das kann ich Dir ehrlich gesagt noch gar nicht beantworten, ich sitze noch am Reißbrett was den Schaltplan angeht.. Aktuell sind es glaub ich... Moment... 3..6..18... ...25 Tendenz steigend...

    Spannungen: idealerweise 230V Strom: was zieht so ein Schütz? 1A / DO denk ich reicht locker aus...
    Das wäre aber auch über ein Hilfsrelais realisierbar... Printrelais mit 5V Spulenspannung und darüber das Schütz mit 230V Spulenspannung schalten...

    Das hilfsrelais (2x ein / 2x um) würde ich dann aber wieder einlesen (über den 2. Kontakt) und so überwachen...

    LG..

    Einmal editiert, zuletzt von Tiieto (17. Januar 2017 um 07:52)

  • Nachtrag..

    Optokoppler sind meiner Meinung nach PFLICHT!!
    Ich weiß nicht wie ihr das seht, aber ich tausche lieber nen OK als alle andere Komponenten..

    Schaut euch mal das Video an:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Dort habe ich beispielsweise 3 Spannungen: 230V 12V & 5V

    230V Versorgungsspannung für TV & die Anlage,
    12V für die Sensorik & den Antriebsmotor,
    5V für die Elektronische Steuerung..

    Sensoren (12V) werden über Spannungsteiler und Optokoppler in die Steuerung (5V) eingelesen, dort verarbeitet & über Optokoppler auf Transistoren geschaltet, die wiederrum Printrelais mit 5V Spulenspannung ansteuern.
    Diese Printrelais schalten dann (Potentialfrei) die 12V für den Antriebsmotor..

    So würde ich das bei der Geschichte hier auch machen..
    Ein & Ausgänge über Optokoppler Einlesen & ausgeben..

    LG..


  • Nachtrag..
    Optokoppler sind meiner Meinung nach PFLICHT!!

    OK dann aber gesockelt, sonst macht das keinen Spass
    Dann muss man auch auf das CTR also F4 achten und auf den maximalen GPIO Strom

    mit CNY17-F4 CTR400 kommt man ohne extra Treiber für die Optos bei 3mA auf min. 1,5mA Treiberstrom für die ULN2803, das reicht!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!