10 Arduinos an 30m Leitung - Firmata?

Begonnen von frankbatzen, 26 März 2015, 13:03:14

Vorheriges Thema - Nächstes Thema

frankbatzen

Hallo,

vorab Verzeihung für den langen Post, ich möchte nur versuchen von Anfang an eine möglichst umfassende Beschreibung zu liefern.

Ich verwende FHEM auf einem Rasbperry Pi (mit COC und Hmusb) bereits für unterschiedliche Systeme (Max! Heizungssteuerung, Buderus KM200 Heizkesselsteuerung, Comfoair Lüftungsanlage, Homematic).
Nun möchte ich 10 Lüftungsklappen im Keller mittels FHEM regeln - und zwar nicht nur auf/zu, sondern auch Zwischenpositionen anfahren können . Hierbei wären ca. 30m Leitungslänge nötig, um alle Lüftungsklappen an einem Strang an den Raspberry Pi anzubinden.

Zuerst wollte ich es mit Belimo-Stellantrieben umsetzen, die 0-10v als Stellsignal nehmen und auch 0-10v als Positionsfeedback ausgeben. Neben den Anschaffungskosten für die Stellantriebe scheint aber auch die Generierung und Verteilung der Steuerspannung ziemlich aufwändig.

Am liebsten würde ich daher folgendes machen:
1. Gleichstrommotor an jeder Lüftungsklappe (http://www.pollin.de/shop/dt/MjI1OTg2OTk-/Motoren/DC_Getriebemotoren/Gleichstrom_Getriebemotor_GMPD_404980_1_12_V_.html)
2. Arduino nano ( http://www.ebay.de/itm/Arduino-Nano-V3-kompatibles-Board-ATmega328P-16MHz-mit-CH340-USB-RS232-Chip-/291415212095?pt=LH_DefaultDomain_77&hash=item43d9b3403f ) mit
3. Relais-Shield ( http://www.ebay.de/itm/1-Kanal-Relais-Relay-Modul-Optocouple-5V-fur-PIC-AVR-DSP-ARM-MCU-Arduino-3279-/321643306558?pt=LH_DefaultDomain_77&hash=item4ae36f5e3e ) an jedem Motor, die 12V von einem gemeinsamen Netzteil auf den jeweiligen Motor schalten können. Die Drehrichtung müsste ich nicht wechseln, weil die Klappen frei rotieren können.
4. Drehwinkelsensor Melexis MLX90316 per SPI am Arduino um die Klappen auf Position regeln zu können.

Ich nehme an, dass auf dem Arduino ein Sketch laufen sollte, der das Regeln übernimmt, weil ich annehme, dass die Regelung über FHEM vielleicht zu langsam wäre (?). Also Relais solange durchschalten, bis eine bestimmte Position erreicht ist.

Jetzt stellt sich mir "nur" die Frage, wie man die 10 Arduinos in FHEM integriert bekommt, so dass von dort die Klappenpositionen eingestellt werden können. Firmata scheint mir da ein guter Ansatzpunkt zu sein, aber:

a. Wenn von Arduino und Firmata die Rede ist, geht es eigentlich immer darum, ein Firmata-Sketch auf einen Arduino laufen zu lassen, das NUR Firmata macht, also nicht gleichzeitig regeln könnte (StandardFirmata). Auf https://github.com/firmata/arduino ist zu lesen, dass es auch eine andere Verwendung gibt: "In one model, the author of the Arduino sketch uses the various methods provided by the Firmata library to selectively send and receive data between the Arduino device and the software running on the host computer. For example, a user can send analog data to the host using Firmata.sendAnalog(analogPin, analogRead(analogPin)) or send data packed in a string using Firmata.sendString(stringToSend)"
Meine Fragen hierzu:

  • Ist dieser Modus in FHEM implementiert oder funktioniert Firmata mit FHEM "nur" mit dem StandardFirmata?
  • Wäre die Verwendung von StandardFirmata möglich um die Werte des Drehwinkelsensors so zeitgerecht in FHEM auswerten zu können, dass eine Regelung möglich wäre (man müsste wohl auf ca. 100ms genau das Relais schalten können)? Ehrlich gesagt traue ich mir die Umsetzung der Regelung auf dem Arduino eher zu als in FHEM...

b. FHEM ermöglicht die Firmata-Anbindung soweit ich es verstehe über USB oder Ethernet. Für meinen Anwendungsfall wäre es natürlich sehr viel günstiger in Bezug auf Anschaffungskosten und Energieverbrauch, wenn alle 10 Arduinos an einem Bus hängen könnten, wo sie über das Protokoll adressiert werden. Kann man statt des USB-Anschlusses eine serielle Verbindung wählen, die man per RS485 zu den Arduinos bringt? Geht Adressierung in so einem Multidrop-Bus mit Firmata?

Neben den Fragen interessiert mich auch, wie Ihr es umsetzen würdet, vielleicht bin ich ja ganz auf dem Holzweg.

Vielen Dank und Gruß
frankbatzen

frankbatzen

Hallo,

nachdem ich mich jetzt weiter wundgesucht habe, scheint mir eher Modbus über RS-485 die richtige Wahl zu sein. Hierfür gibt es ein fertiges FHEM-Modul und Arduino-Slave-Libraries. Ich habe jetzt erst mal die Hardware bestellt (In China, 4-6 Wochen Lieferzeit...) und werde dann berichten, wie es funktioniert. Falls es irgendwann mal jemanden interessiert  :)

Gruß
frankbatzen

jensb

RPi und Arduino haben beide eine I2C Schnittstelle. Die ist zwar eigentlich nur für kurze Entfernungen vorgesehen, aber es gibt viele Posts, die bestätigen, dass man damit auch sehr viel mehr schafft. Habe selbst einen I2C Lichtsensor an einem ca. 20 Meter langem CAT-5 Kabel angeschlossen (3 Adernpaare: 3.3V, SDA, SCL) und es funktioniert sehr zuverlässig inkl. Spannungsversorgung vom RPi. Eine eventuelle galvanische Trennung erfordert allerdings zusätzlichen Aufwand. Es wäre durchaus vorstellbar, die 10 Arduinos in einer Kette hinter den RPi zu hängen mit dem RPi als Busmaster.

Mit RS-485 hast du aber die bessere Wahl getroffen, das ist per Design deutlich robuster. Viel Erfolg!

jensb
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

frankbatzen

Hallo,

der Kommunikationsteil ist fertig:
http://forum.fhem.de/index.php/topic,25315.msg292115.html#msg292115

Die Motoren funktionieren gut mit den Klappen, nur die Anbringung an die Klappen ist etwas aufwändig.
Die Winkelsensoren sind auch eingebunden, jetzt brauche ich nur Zeit, die 10 Klappen mit allen Teilen zusammenzulöten. Dazu fehlen noch die Motortreiber, die noch auf dem Weg zu mir sind (habe mich gegen Relais und für echte Motorsteuerung entschieden. Ist nur unwesentlich teurer).

Werde weiter berichten.
Gruß
frank