Home Automation HMI

Ich möchte hier kurz mal mein Teil meines Projektes vorstellen.
Ziel war es eine ordentliche HMi für einen µC zu finden bzw zu erstellen.
Ich bin wie so mancher hier beim Aufbau einens Heimautomation Systems.
Ich bin dann bei Siemens HMI gelandet da ich beruflich viel damit zu tun habe. Dier Aufbau ist mit einer Bus-Verbindung vie Modbus RTU. Dazu braucht man nur einen RS485-Wandler und Code bzw Libraries.
Man hat mit dem Modbus dann verschiedene Datentypen die man dann an der HMI anzeigen kann oder anzeigen/verändern kann und Bits bzw. Words(16Bit) die man steuern kann d.h. Es gibt in der HMI Steuerbits in Richtung Arduino Steuerbits Arduino => HMI. Anzeigewerte wie Temperaturen die man nicht ändern kann oder Sollwwerte vorgabe via Touch eingabe die man aber auch "exter" (nicht vom HMI ändern kann)

Auf der Seite 1 kann man einzelne LED bzw Ausgänge setzten mit Rückmeldung auf HMI (grün/rot)
Auf der Seite 2 kann man einzlene LED mit einem Dimmwert ansteuern (Hier 0-255)
auf der Siemens HMI kann man beim Projektiern Grenzen für Eingaben vorgeben bzw auch Skalierungen z.B. 10-30°C sollen als 0-512 auf dem Arduino ankommen.
Der Modbus funktioniert ganz gut auf dem Arduino.

Weiter Schritte im zusammenhang mit Homeautomation folgen


Bild mit PWM Werte


Bild mit Schaltern und Rückmeldung

Das Panel ist vorrläufig ein ein Siemens TP177B (7Zoll) wird aber später gegen ein KTP600 bzw KTP700 getauscht. Visualisierung ist mit WinCCflexible 2008 gemacht.
Gruß
DerDani

Weiter Bilder da max 1920kB pro Message


zu Visu ein Blinkenlight Schield (Ein Gewinn aus Weihnachtsspiel)


Der RS485 Wandler hier ein SN75176. MAX485 funktioniert auch.

Hey super! Ich hätte nicht gedacht das es so geht, hast du eigene Libs geschrieben oder funktioniert das sogar über Standart Libs?
Habe mich noch nicht mit Modbus richtig beschäftigt aber von den Schnittstellenadaptern habe ich ein paar herumliegen

Würdest du Code und das WinCC Testprojekt zur Verfügung stellen?

Gruß

Was spricht gegen openHAB?
Ein Tablet/TouchMonitor/Smartphone etc finde ich schöner als das teure kleine Siemens Gerät.

skorpi08:
Was spricht gegen openHAB?
Ein Tablet/TouchMonitor/Smartphone etc finde ich schöner als das teure kleine Siemens Gerät.

Ich denke mal nichts, aber man kann doch ruhig alle Möglichkeiten aufzeigen. Viele haben mit der Siemens Hardware auch beruflich zutun und kennen sich damit gut aus. Und was man dafür ausgibt und wie ist nicht wirklich relevant.
http://www.ebay.de/itm/TP177B-PN-DP-6-CSTN-/231559972205

Gruß

Klar spricht nix gegen das openHab Projekt. Da ich aber beruflich mit der SIemensHardware zu tun habe und ich ein KTP600 abstauben konnte und ein TP177B zu testen bot es sich an dieses mal eben mit dem Arduino zu verbinden.
Beide sprechen gemeinsam ModbusRTU, also fix die Lib rauf ein RS Wandler und eine mini HMI gebaut
(dies ist bei Siemens sehr schnell umgesetzt).
Ich wollte auf jeden Fall vermeiden irgendein Webserver auf den Arduino zu packen bzw. noch was neues zu lernen um auf der Himbeere was zu programmieren.

Hier im Anhang ist der aktuelle Code:
Ich habe diese Software für den ArduinoMega1280 und dem BlinkenlightShield.

Die Modbus Librarie habe ich von hier >Klick< mit dem RS485 Slave Beispiel das ich hier angepasst habe.

/**
 *  Modbus slave example 3:
 *  The purpose of this example is to link a data array
 *  from the Arduino to an external device through RS485.
 *
 *  Recommended Modbus Master: QModbus
 *  http://qmodbus.sourceforge.net/
 */

#include <ModbusRtu.h>

// assign the Arduino pin that must be connected to RE-DE RS485 transceiver
#define TXEN 22 

// data array for modbus network sharing
uint16_t au16data[16] = {
  0, 0, 0, 0, 0, 0, 0, 0, 9, 10,11, 12, 13, 0, 1, -1 };
unsigned long lmillis=0;
float temp=0.0;
/**
 *  Modbus object declaration
 *  u8id : node id = 0 for master, = 1..247 for slave
 *  u8serno : serial port (use 0 for Serial)
 *  u8txenpin : 0 for RS-232 and USB-FTDI 
 *               or any pin number > 1 for RS-485
 */
Modbus slave(1,1,TXEN); // this is slave @1 and RS-485

void setup() {
  slave.begin(19200); // baud-rate at 19200

    pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);

}

void loop() {
  if ((millis()-lmillis)>=1000){
    au16data[6]=millis()/1000;
    lmillis=millis(); 

  }
  slave.poll( au16data, 16 );
  digitalWrite(3,bitRead(au16data[0],0));
  digitalWrite(4,bitRead(au16data[0],1));
  digitalWrite(5,bitRead(au16data[0],2));
  digitalWrite(6,bitRead(au16data[0],3));
  digitalWrite(7,bitRead(au16data[0],4));
  digitalWrite(8,bitRead(au16data[0],5));
  digitalWrite(9,bitRead(au16data[0],6));

  analogWrite(10,au16data[1]);
  analogWrite(11,au16data[2]);
  analogWrite(12,au16data[3]);
  analogWrite(13,au16data[4]);
}

Und im Anhang ist noch das WinCC Projekt.

Edit:" Max 1280kB und das sind 1500kB also hier: Download

Gruß
DerDani

Sieht ja recht übersichtlich aus, gefällt mir. :slight_smile:
Nur der Anhang ist verloren gegangen bzw war vll zu groß für den Post?

Gruß

I am attamting to do the same thing but with a KPT700 ethernet only.

I am having no luck so far. Is this passible with a modbus IP slave library? of do I need a RS485 input?