Hallo zusammen,
ich habe mir vor kurzem meine eigene Fußboden-Heizkreis Regel Hardware gebaut.
An meinem Raspberry hängt ein Arduino Nano clone mit insgesamt 12 Relais. Diese versorgen dann die Stellantriebe der einzelnen Heizkreise an meinem Fußbodenverteiler.
Das funfktionier über die Module PWM / PWMR auch schon ganz gut.
Mich stört nur das nach jedem Shutdown restart der Arduino oder die Firmata alle Relais einmal durchschaltet.
Das gibt mir unschöne Kurzimpulse auf meine Antriebe, und da ich auch den Heizkessel bzw die Pumpe (Hocheffiziens Pumpe) ansteuere auch auf diese.
Kann man das irgendwie vermeiden ?
---Skusi
Na, hat denn keiner sowas am laufen ???
ich weiss ja nicht wielange die Impulse dauern.... kann ja einen RC glied vorm Relais installieren....
Hi Skusi,
mich würde interessieren, wie Du das mit dem Nano und 12 Relais realisiert hast und wie du die dann einzeln ansprechen kannst.
Magst dazu mal ein paar Infos geben ?
Grüße
Christian
nicht mit Arduino sondern LAN geht es auch einfach
Schau mal da http://forum.fhem.de/index.php/topic,45244.msg393432.html#msg393432
Gruss
Ralf
Servus,
du wirst das gleiche Problem wie ich haben mit meinem Mega und den RelayBoards. die Pins schalten 1x auf high und wieder auf Low beim reboot. ich hab das gelöst in dem ich über einen ULN2003 das Signal wandle.
Hey Ralf,
das ist cool, das eröffnet völlig neue Möglichkeiten :)
Gibt's sowas evtl auch mit Eingängen statt Ausgängen ? Ich hab nämlich einige Schaltzustände, die ich gerne aufnehmen würde, z.B. Garage auf, Licht an, .....
Wie bindet man die Dinger denn in FHEM ein ?
Grüße
Christian
Sorry das ich so spät reagiere, hatte diesen Beitrag aus den Augen verloren.
@cs-online
Ich habe mir einen Arduino Nano mit dem Firmata Sketch geflasht und per FRM und FRM_OUT Modul in Fhem angelegt.
Den Arduino habe ich dann mit einer 8 Kanal und einer 4 Kanal Relaiskarte verbunden (D2 - D13). Keine große Sache.
Nun kann ich jeden digital Ausgang schalten, und damit das angeschlossene Relais.
Mit dem FRM_IN kannst du auch die Digital Pins als Eingang abfragen. Das hab ich mit einem anderen Nano für GasZähler, Wasserzähler und Hausklingel gemacht.
@Skusi:
das klingt auch gut, vor allem mit den Eingängen ! Ich suche sowas schon lange, weil Gas- und Wasserzähler an den GPIOs zählt der Raspi nämlich nicht genau, da habe ich immer ein großes Delta zwischen FHEM und den Zählern. In welcher Form gibst Du das Eingangssignal auf die Arduino-Pins ?
Grüße
Christian
Zitat von: cs-online am 09 Februar 2016, 20:19:21
Ich suche sowas schon lange
und Firmata gibt es sogar schon sehr lange .... -> http://www.fhemwiki.de/wiki/Arduino_Firmata
Aber das Thema firmata gehört IMHO nach Automatisierung :)
Danke, werde mich da mal einlesen :)
Grüße
Christian
Zitat von: cs-online am 09 Februar 2016, 19:05:50
Hey Ralf,
das ist cool, das eröffnet völlig neue Möglichkeiten :)
Gibt's sowas evtl auch mit Eingängen statt Ausgängen ? Ich hab nämlich einige Schaltzustände, die ich gerne aufnehmen würde, z.B. Garage auf, Licht an, .....
Wie bindet man die Dinger denn in FHEM ein ?
Grüße
Christian
Hallo,
mir ist kein Teil in der Preisklasse bekannt, mit dem das out-of-the-box geht.
Also basteln, z.B. für LAN einen ENC28J60 + Mikrocontroller
oder für USB wie Skusi schreibt mit Arduino Firmata
Gruss
Ralf
Ok, also Firmata für Eingänge.
Und die LAN-boards aus Deinem Post oben für die Relaisansteuerung, (Anschluss an die Relais ist ja klar), wie kann ich die in FHEM einbinden ?
Grüsse Christian
Zitat von: cs-online am 10 Februar 2016, 07:45:51
Ok, also Firmata für Eingänge.
Und die LAN-boards aus Deinem Post oben für die Relaisansteuerung, (Anschluss an die Relais ist ja klar), wie kann ich die in FHEM einbinden ?
Grüsse Christian
Hallo,
schau nochmal im anderen Post nach da steht das für die teuren SaintSmarts und auch für mein Billigboard (kostet aktuell 7,60 USD Ebay 331689134163)
Gruss
Ralf
Hi,
ich glaube, dass das ursprüngliche Problem damit nicht gelöst ist, oder?
Dazu meine Idee: Ich weiß nicht, wie Firmata das macht, aber ich kann mir Folgendes vorstellen. Die Relais schalten Low-Aktiv. D.h. wenn die Spulen-Pins gegen GND geschaltet werden, dann schalten sie ein. Wenn ein Arduino "hochfährt", dann sind alle Pins erstmal auf INPUT, also hochohmig. D.h. es fließt kein Strom und keine der Spulen zieht an. Dann passiert normalerweise folgendes:
pinMode(pin, OUTPUT);
.
.
.
digitalWrite(pin,HIGH);
Durch das Setzen des Pins auf OUTPUT wird der Pin auf LOW gesetzt. In dem moment schaltet das Relais. Erst beim digitalWrite fällt es wieder ab.
Die Lösung ist (zumindest im Arduino-Code) relativ einfach:
digitalWrite(pin,HIGH);
pinMode(pin, OUTPUT);
Dadurch sitzt der Pin schon auf HIGH und die Relais bleiben aus. (Ja, man kann wirklich einen Pin auf HIGH setzten, obwohl er noch auf INPUT ist.)
Dasselbe passiert, wenn man das hier macht:
pinMode(pin,INPUT_PULLUP);
pinMode(pin, OUTPUT);
Gruß,
Thorsten
Das low schreiben funktionierte bei mir nicht. Wurde immer wieder Durch die firmatalogik überschrieben. Ich verweise nochmal auf meinen posthum uln2003. Das ist sie sicherste Variante und funktioniert bei mir perfekt.
I'm übrigen ist es ja schön wenn der arduino es doch schaffen sollte ;-) mit etwas Glück überschreibt dann als nächstes das frm_out Modul nochmal den ganzen Quark und erzeugt wieder ein anziehen und abfallen der Relais.
Hi,
ich wollte nur auf ein prinzipielles "Problem" mit dem Arduino und ueblichen Relaiskarten eingehen. Mit Firmata kenne ich mich nicht aus. Bisher habe ich solche Sachen nur direkt programmiert.
Gruss,
Thorsten
@Thorsten P , Norbert hat im Anfängerforum versucht es hugo.crank zu erklären -> http://forum.fhem.de/index.php/topic,48293.msg400017.html#msg400017
Richtet man sich nach deinem Tipp auf der vorherigen Seite dann hat Norbert das vertauscht, da er zuerst den Output definiert und dann high nachschiebt.
@cs-online
Den Wasserzähler taste ich mit einer IR Lichschranke ab. Die hab ich nach dieser Anleitung zusammengelötet:
http://www.hobbyheizer.de/index.php/haussteuerung/stromzaehler
Den Gaszähler hab ich mit einem Reed Kontakt von Reichelt ausgerüstet.
@Skusi:
Die Sensorik ist schon vorhanden, Gaszähler wie bei Dir mit Reedkontakt von Reichelt, unser Wasserzähler ging nicht mit der Reflexschranke, weil das Zählwerk zu tief im Gehäuse war, aber ich habe bei Ebay günstig einen geeichten Wasserzähler mit Reedausgang bekommen, der ist nun hinter dem vom Versorger. Aber an den GPIOs vom Raspi werden nicht alle Impule gezählt. Deshalb der Gedanke, das mit dem Arduino zu realisieren. Kann ich die Reedkontakte da direkt an die Eingänge legen ? Dann das andere Ende gegen Masse oder gegen Plus ?
Grüße
Christian
Zitat von: Wzut am 10 Februar 2016, 20:17:15
@Thorsten P , Norbert hat im Anfängerforum versucht es hugo.crank zu erklären -> http://forum.fhem.de/index.php/topic,48293.msg400017.html#msg400017
Richtet man sich nach deinem Tipp auf der vorherigen Seite dann hat Norbert das vertauscht, da er zuerst den Output definiert und dann high nachschiebt.
Ja, das würde ich auch so sehen. Es kommt noch ein bisschen darauf an, wie viel Zeit zwischen dem pinMode und dem wieder auf HIGH setzen vergeht, aber sicherer ist bestimmt, zuerst auf HIGH zu setzen und dann den pinMode.
Gruß,
Thorsten
Zitat von: cs-online am 10 Februar 2016, 21:24:12
Kann ich die Reedkontakte da direkt an die Eingänge legen ? Dann das andere Ende gegen Masse oder gegen Plus ?
Das kannst Du dir aussuchen. Entweder schaltest Du 5V auf die Eingänge und legst einen 10kOhm Pullup Widerstand von Eingang auf GND, oder Du verbindest des Reedkontakt mit GND und Eingang, schaltest dann den Pullup von Eingang zu 5V.
In Fhem kannst Du dann im FRM_IN Modul konfigurieren ob er bei High oder LOW aktiv sein soll. Man kann auch die Pullups weg lassen und in FRM_OUT den eingebauten Pullup aktivieren, aber da hab ich schlechte Erfahrungen mit gemacht. Besse ist ein externer Widerstand, dann den internen ausschalten, bzw nicht aktivieren.
Mal auf dein Problem mit dem Durchschalten zurückzukommen, leg doch die Steuerspannung der Antriebe auch über ein Relais, welches ausgeschaltet werden muß, um die Spannung an die anderen Relais zu geben. Dann ist es kein Problem mehr....
Einfach über einen Öffnerkontakt legen.
Gruß
Kai
Keine schlechte Idee,
leider hab ich nicht alle Relais Kontakte über die selbe Phase versorgt. Eines der Relais schaltet mir die Pumpe und den Kessel bedarfsweise ein. Dieses Relais schaltet eine Spannung die aus dem Kessel kommt. Aner das könnte man auch mit einem weitenen Relais umsetzten.
Ich hab nur gehofft das es eine schickere Software basierte Lösung gibt. Aber scheinbar muß ich das auf Hardwareseite lösen.
...Skusi
Ähm...
Das lass man keinen Elektriker sehen, dass Du da mehrere Phasen auf einer Relaiskarte hast !!!!! Dann hast Du 400V innerhalb einer Verteilung und das ist aus gutem Grund strengstens verboten !!! Wenn z.b. eine Sicherung raus haut und einer nachsehen will sind da immer noch 230V und wenn da einer rein packt wird es gefährlich...
Nur mal so angemerkt... nicht zum Nachmachen empfohlen :-)
Grüsse Christian
@ cs-online
Ähmm, ich bin zufälligerweise Elektriker von Beruf, und ja Du hast Recht. Aber ich hab mich da wohl falsch ausgedrückt, ich habe nicht 2 verschiedene Aussenleiter (Phasen) auf der Platine, sondern zweimal dieselbe Phase. Einmal aus der Steckdose an der die Schaltung angeschlossen ist für die Ventil Relais, und das Relais für den Kessel/Pumpe kommt quasi aus der Steckdose (selber Raum) an der der Kessel angeschlossen ist.
Kann man schöner machen, aber ich war bis heute zu faul das zu ändern.
Außerdem ist das nicht so selten und auch nicht verboten das Fremdspannung über einen Potentialfreien Kontakt einer Steuerung geschaltet wird. Eine Handelsübliche Zonenregelung hat fast immer einen Kontakt über den eine Pumpe geschaltet werden kann. Und die Spannung kommt fast nie direkt aus der Steuerung.
Wer mit 230V hantiert sollte sich aber schon damit auskennen. Da gebe ich Dir Recht. Und bei Elektrikern zu Hause werden noch viel schlimmere Sachen verknuspelt. :-) Wenn man vom Fach ist, kann man die Risiken schon gut einschätzen.
... Skusi
...alles gut, wollte nur auf die Gefahren hinweisen, falls das mal ein Laie mitliest und nachbaut und zwischen den Phasen mit 400V wirds dann zu gefährlich ;-)
grüsse Christian
Hallo!
Gibt es mittlerweile neue Erkenntnisse, wie man das kurze Einschalten der Relais beim Neustart softwareseitig verhindern kann?
Eine Änderung der Hardware auf Hight-aktiv möchte ich eigentlich vermeiden.
Ich habe mittlerweile auch ein Low-aktives 8fach Relaismodul an einem Arduino Uno per configurable Firmata per Ethernet (V2.06) laufen und das kurze Einschalten der Relais bei einem Neustart ist schon nicht so schön.
Die Beschreinung von Norbert klappt bei mir nicht.
Das beste Ergebnis habe ich mit folgender Anpassung des firmata Codes erreicht:
#ifdef DigitalOutputFirmata_h
// sets the output to 0, configures portConfigInputs
digitalWrite(i,HIGH);
Firmata.setPinMode(i, OUTPUT);
So schalten die Relais beim Neustart nur noch für ca eine halbe Sekunde.
Aber auch die halbe Sekunde ist noch nicht zufrieden stellend.
Hat irgendjemand noch eine Idee ???
Gruß,
Chris
Sollte es noch jemand interessieren, ich habe eine Lösung.
Nicht die beste aber es geht.
Die Änderung des Sketch wie von @dbox2user beschrieben.
Zusätzlich den Vcc Kontakt des Relai Shields an einen Digitalpin des Arduinos.
Diesen dann bei bedarf anschalten.
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 (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
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 (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
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 ;-)
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
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
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 (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
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 (https://forum.fhem.de/index.php/topic,68070.msg595557.html#msg595557)
Modulupdate zum testen im Thread
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 ;-)
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
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
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
Hallo zusammen,
ebenfalls gerade getestet, funktioniert wie von bfx beschrieben.
Danke (!) an alle
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...
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!
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.
Zitat von: bfx am 21 März 2017, 10:59:19
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
Das habe ich irgendwie nicht hinbekommen. :o
Meine Lösung kam über https://forum.fhem.de/index.php/topic,48293.msg400017.html#msg400017 (https://forum.fhem.de/index.php/topic,48293.msg400017.html#msg400017)
Und so ist mein Code der configurable-firmata, bei dem ich nur die digitalen Ports 4, 5 und 6 "befreit" haben möchte.
Die anpassung erfolgt in folgender Funktion:
void systemResetCallback()
{
// initialize a defalt state
// pins with analog capability default to analog input
// otherwise, pins default to digital output
for (byte i = 0; i < TOTAL_PINS; i++) {
if (IS_PIN_ANALOG(i)) {
#ifdef AnalogInputFirmata_h
// turns off pullup, configures everything
Firmata.setPinMode(i, ANALOG);
#endif
} else if (IS_PIN_DIGITAL(i)) {
#ifdef DigitalOutputFirmata_h
// sets the output to 0, configures portConfigInputs
if (i==4 || i==5|| i==6){
Firmata.setPinMode(i, INPUT);
}
else {
Firmata.setPinMode(i, OUTPUT);
}
#endif
}
}
#ifdef FirmataExt_h
firmataExt.reset();
#endif
}
Nachher probiere ich es noch bei meinem Mega2560.
I don't know why, aber die Code-Änderung hat beim Mega nicht ganz zum Erfolg geführt :o:
Die Relais schalten dennoch durch, allerdings extremst kurz.
Da ich nun keine Lust mehr hatte, das softwarseitig weiterzuverfolgen und der Mega genug digitale Ausgänge bietet,
habe ich die Stromversorgung der Optokoppler auf dem 8-fach-Relais-Modul per Transistor gesteuert. Das tut: Keine Klickerikick beim Neustart.