Relais schalten bei Arduino Neustart alle durch...

Begonnen von Skusi, 15 Januar 2016, 19:28:26

Vorheriges Thema - Nächstes Thema

dbox2user

Hallo Henno!
Also mich interessiert das Thema noch!   :)

Den VCC per Pin zu schalten ist eine gute Idee von Dir.
Nachdem ich alle GPIOs meines Arduino Uno aber bereits belegt habe, habe ich leider keinen mehr dafür frei.

Mir kam aber noch eine Idee ..... das Material ist schon bestellt, aber die Chinalieferung dauert einfach etwas.  ;)
Ich möchte meine 8fach Relais Karte per "PCF8574 IO Erweiterungskarte" ansteuern, somit hätte ich dann auf dem Uno sogar wieder einige Pins frei.
http://www.ebay.de/itm/PCF8574-IO-Erweiterungskarte-I-O-I2C-Bus-Modul-Leichtbau-Expansion-Board-TE255-/311407600151?hash=item488156e217:g:MngAAOSwepJXVVmz

Diese Karte wird per I2C-Bus angesteuert und schaltet dann die 8 Relais.
Einen I2C-Bus benutze ich am Uno bereits für mein LCD Display. Ich denke die Erweiterungskarte sollte problemlos am gleichen Bus laufen.

Es gibt für diese Karte sogar ein fertiges Fhem Modul "I2C_PCF8574".

Die Karte ist wirklich interessant auch für andere Geräte mit I2C Bus. z.B. Raspberry oder ESP8266....

Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

dbox2user

So...

meine PCF8574 Module sind mitlerweile gekommen.
Ich habe das Teil wie geplant zusammen mit einem LCD-Display an den I2C-Bus des Arduino Uno angeschlossen.

Soweit sah das ganze auch echt gut aus. Ich konnte die 8 fach Relaiskarte schalten.
Nur scheint nach einigen probieren das ganze zu "spinnen"  und schaltet dann den zuletzt geschalteten Port wieder um.
Das ganze habe ich auch direkt im PCF8574-Bereich geschrieben.
https://forum.fhem.de/index.php/topic,20452.60.html

Vielleicht läuft das Modul zwar sauber direkt am Raspberry_I2C-Bus aber nicht 100% beim Arduino per configurable Firmata.

Falls jemand noch einen guten Tip hat, nur her damit. :)

Ansonsten muss ich wohl doch wieder direkt per Frm-Out schalten inklusive dem "Fehlschalten beim Neustart".


Für Interessierte hier noch meine Config:

define HeizRelais I2C_PCF8574 0x38
attr HeizRelais IODev Frm_Heizung
attr HeizRelais room Heizung
attr HeizRelais verbose 0

define Heiz_Out_0 dummy
attr Heiz_Out_0 alias Heizung Relais 0
attr Heiz_Out_0 icon black_Steckdose.off
attr Heiz_Out_0 room Heizung
attr Heiz_Out_0 webCmd on:off

define Heiz_Out_1 dummy
attr Heiz_Out_1 alias Heizung Relais 1
attr Heiz_Out_1 icon black_Steckdose.off
attr Heiz_Out_1 room Heizung
attr Heiz_Out_1 webCmd on:off

define Heiz_Out_2 dummy
attr Heiz_Out_2 alias Heizung Relais 2
attr Heiz_Out_2 icon black_Steckdose.off
attr Heiz_Out_2 room Heizung
attr Heiz_Out_2 webCmd on:off

define Heiz_Out_3 dummy
attr Heiz_Out_3 alias Heizung Relais 3
attr Heiz_Out_3 icon black_Steckdose.off
attr Heiz_Out_3 room Heizung
attr Heiz_Out_3 webCmd on:off

define Heiz_Out_4 dummy
attr Heiz_Out_4 alias Heizung Relais 4
attr Heiz_Out_4 icon black_Steckdose.off
attr Heiz_Out_4 room Heizung
attr Heiz_Out_4 webCmd on:off

define Heiz_Out_5 dummy
attr Heiz_Out_5 alias Heizung Relais 5
attr Heiz_Out_5 icon black_Steckdose.off
attr Heiz_Out_5 room Heizung
attr Heiz_Out_5 webCmd on:off

define Heiz_Out_6 dummy
attr Heiz_Out_6 alias Heizung Relais 6
attr Heiz_Out_6 icon black_Steckdose.off
attr Heiz_Out_6 room Heizung
attr Heiz_Out_6 webCmd on:off

define Heiz_Out_7 dummy
attr Heiz_Out_7 alias Heizung Relais 7
attr Heiz_Out_7 icon black_Steckdose.off
attr Heiz_Out_7 room Heizung
attr Heiz_Out_7 webCmd on:off

define doif_Heiz_Out_0 DOIF ([Heiz_Out_0] eq "on") (set HeizRelais Port0 off) DOELSE (set HeizRelais Port0 on)
attr doif_Heiz_Out_0 room Heizung

define doif_Heiz_Out_1 DOIF ([Heiz_Out_1] eq "on") (set HeizRelais Port1 off) DOELSE (set HeizRelais Port1 on)
attr doif_Heiz_Out_1 room Heizung

define doif_Heiz_Out_2 DOIF ([Heiz_Out_2] eq "on") (set HeizRelais Port2 off) DOELSE (set HeizRelais Port2 on)
attr doif_Heiz_Out_2 room Heizung

define doif_Heiz_Out_3 DOIF ([Heiz_Out_3] eq "on") (set HeizRelais Port3 off) DOELSE (set HeizRelais Port3 on)
attr doif_Heiz_Out_3 room Heizung

define doif_Heiz_Out_4 DOIF ([Heiz_Out_4] eq "on") (set HeizRelais Port4 off) DOELSE (set HeizRelais Port4 on)
attr doif_Heiz_Out_4 room Heizung

define doif_Heiz_Out_5 DOIF ([Heiz_Out_5] eq "on") (set HeizRelais Port5 off) DOELSE (set HeizRelais Port5 on)
attr doif_Heiz_Out_5 room Heizung

define doif_Heiz_Out_6 DOIF ([Heiz_Out_6] eq "on") (set HeizRelais Port6 off) DOELSE (set HeizRelais Port6 on)
attr doif_Heiz_Out_6 room Heizung

define doif_Heiz_Out_7 DOIF ([Heiz_Out_7] eq "on") (set HeizRelais Port7 off) DOELSE (set HeizRelais Port7 on)
attr doif_Heiz_Out_7 room Heizung


Gruß,

Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

Skusi

Sehr interessant, und zugleich schade das es nicht zuverlässig läuft.

Ich bin gespannt ob da das Problem gefunden wird. Ansonsten bietet das Board ja ungeahnte Möglichkeiten.

So kann man ja bis zu 64 Relais (Plus die DO´s des Nano) mit einem Nano ansteuern...

Krass und krank zugleich !

Ich liebe China ;-)
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

dbox2user

Ja, gerade die vielen möglichen Relaisansteuerungen wären eine feine Sache. ::)

Ich habe  noch ein bisschen rumprobiert...
Direkt an einem Raspberry angeschlossen (I2C-Pins) läuft das PCF8574 mit dem Fhem-Modul wirklich sehr sauber.

Schließe ich das ganze wieder per Firmata an habe ich wieder die Probleme. :'(

Es liegt also irgendwie am I2C-Bus des Arduinos ,
ODER am Frm-I2C-Modul ,
ODER an den Timings bezüglich der Netzwerkübertragung,
ODER ODER ODER .... :(

Woran man das Probel sofort erkennt...
Ist das Modul direkt am Raspberry angeschlossen, werden die Readings SOFORT aktualisiert.
Der zuletzt geschaltete Pin und das state werden dann sofort aktualisiert.

Hängt das Modul über Firmata am Arduino aktualisiert sich das state nur gelegentlich bzw nach einem Refresh des Browserfensters.
Die Readings der Pins werden dann nur ganz sporadisch aktualisiert.

Ich denke es fehlt deswegen die Rückmeldung über den aktuell geschalteten Zustand und dann gibts beim nächsten senden die Probleme.

Readings:
     2017-02-26 12:11:32   Port0           off
     2017-02-26 12:18:04   Port1           off
     2017-02-26 12:12:09   Port2           off
     2017-02-17 21:18:48   Port3           on
     2017-02-04 14:21:48   Port4           on
     2017-02-26 12:22:02   Port5           off
     2017-02-26 12:18:42   Port6           off
     2017-02-17 21:19:00   Port7           on
     2017-02-26 12:23:44   state           152


Wo man da ansetzten kann weiß ich leider nicht.

Vielleicht kann irgendjemand helfen! ::)

Falls nicht, muss ich wohl doch die Relais direkt per GPIOs schalten (inkl. den Fehlschaltungen beim Fhem-Neustart).

Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

hugo.crank

Hallo,
am ende hab ich es über einen ULN2003 gelöst der zwischen Arduino und Relaiskarte geschaltet ist inklusive Sperrdiode der dreht den Zustand des Arduino Pin um und sichert gleichzeitig elektrisch meinen Arduino durch rückschlagende Spannung ab! Da mir schon ein paar Relais abgeraucht sind...

Im gesamten habe ich 5x Arduino Mega 2560 bei mir verbaut auf 4 Gebäude verteilt mit Relaiskarten / Ethernetshield und das ganze funktioniert vollkommen Wartungsfrei.
Angesteuert werden Garagentore / Hoftore / Stellantriebe von Fenstern / Stromkreise

Grüße

dbox2user

Hallo Hugo!
Danke nochmal für deinen Hinweis mit dem ULN2003.
Falls das mit dem PCF8574 nicht klappt werde ich das wahrscheinlich auch so umsetzen.  :)

Der Modulenwickler "klausw" ist mittlerweile aber auf das I2C-Problem mit Firmata aufmerksam geworden und will sich das ganze mal anschauen.
https://forum.fhem.de/index.php/topic,68070.msg595557.html#msg595557

Du schreibst, dass du noch Sperrdioden eingebaut hast weil schon einige Relais abgeraucht sind....
Auf dem Relaisboard sind doch an den Relaisspulen bereits Sperrdioden eingebaut.?

Oder hast Du noch wo anders Sperrdioden eingebaut?

Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

klausw

Zitat von: dbox2user am 03 März 2017, 09:03:34
Falls das mit dem PCF8574 nicht klappt werde ich das wahrscheinlich auch so umsetzen.  :)

Der Modulenwickler "klausw" ist mittlerweile aber auf das I2C-Problem mit Firmata aufmerksam geworden und will sich das ganze mal anschauen.
https://forum.fhem.de/index.php/topic,68070.msg595557.html#msg595557
Modulupdate zum testen im Thread
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

hugo.crank

Die Relais versorge ich mit 5 V vom Arduino. die Sperdiode sitzt auf der 5v Zuleitung um den arduino nicht zu beschödigen. Der ULN2003 bekommt Fehlspannung der Relais trotzdem. das ist aber nicht so kritisch für mich wie der Arduino ;-). Problem waren die Dachfensterstellmotoren welche sehr hohe Last beim Anlaufen haben. Dort hat es mir nen ULN gekostet. Das Relais hat es überlebt allerdings habe ich nach dem Schaden umgebaut auf:
Mega schaltet ULN -> ULN schaltet 5V Relais -> 5V Relais schaltet Eltako Hutschienenrelais welches den Stellantrieb steuert. Tritt aber nur bei den Stellmotoren für Fenster auf mit dem Problem war ich nicht alleine ;-)

Skusi

Ich habe mir eben nochmal den ganzen Threat durchgelesen.

Kann man also als Zwischenbilanz sagen, das es keine zufriedenstellende Lösung des Ursprungsproblems auf Softwarebasis gibt ?

Also der Firmata Sketch lässt sich nicht so anpassen das das lästige Anziehen der Relais bei einem Reset verhindert wird.

Schade, dann werde ich wohl irgendeine Hardwarelösung bauen müssen.

Ich hatte gehofft das es eine Software Lösung gibt.

---Skusi
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

dbox2user

Also eine Lösung des Ursprungsproblems auf Softwarebasis gibt es meines Wissens nicht.

Hardwarelösungen gibt es aktuell 3 verschiedene (sind alle in diesem Threat beschrieben)
1. Lösung: die Versorgungsspannung des Relaisboard über Pin schalten;
2. Lösung: Negierung der Ausgänge mit Hilfe eines ULN2003;
3. Lösung: Ansteuerung über I2C-Bus mit einem PCF8574 durch das PCF857s-Fhem_Modul (die deue Version von Klaus funktioniert TOP!)

Mir persönlich gefällt die Version 3 am besten, da hier noch GPIOs vom Arduino frei bleiben und anderweitig genutzt werden können.

Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

bfx

Hallo,
also ich habe die Softwarelösung noch mal getestet: Sie funktioniert!

Der Port muss VOR allem anderen, auch z.B "Serial.begin(115200);", in der Reihenfolge siehe Code unten initalisiert werden.


void setup()
{
  digitalWrite(10, LOW);
  pinMode(10, OUTPUT);
  ...


Have fun

mikrowelle

Hallo zusammen,

ebenfalls gerade getestet, funktioniert wie von bfx beschrieben.

Danke (!) an alle

Skusi

Vesteh ich nicht.  ???

Wo im StandardFirmata Sketch muß ich jetzt was ändern ?

Ich hab nun nicht die ahnung von arduino Programmierung. Ich hab nur den Firmata Sketch geflasht und steuere damit meine Relais an. Ich hab den sketch gerade in der Aruino IDE überflogen, aber nicht die Richtige Zeile gefunden wo die Pins definiert werden. Ich will mir auch nicht den Sketch zerschießen.

Kann man die Änderung nicht grundsätzlich in Firmata ändern, oder hat die Geschichte auch Nachteile ?

Ich brauch mal Starthilfe...
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

m-zitter

Hallo,
Ich bin ebenfalls an der Informations interessiert wie man die Softwarelösung genau in die Firmata schreibt?
Vielleicht kann mikrowelle oder bfx mal ihre Firmata posten?

Vielen Dank!

2meter_pdm

Moin,
vielleicht bringt jemanden die Variante mit einem Modbus RTU RS485 Relay Module was.Relais setzen und den Zustand abfragen geht echt super über ModbusAttr.Bei einem Neustart bleiben die auch bei dem letzten Zustand.Kosten bei ebay auch nicht viel.Habe diverse im Garten verteilt.