DFF4.1

From KONNEKTING Wiki
Revision as of 19:17, 26 September 2019 by Konnekting (talk | contribs)
Jump to navigation Jump to search
DFF4.1
DFF4.1 1.0.png
Developer Alexander Christian
Status Version 1.0 finished
Microcontroller/Board M0dularisM+
KNX connectivity Siemens BCU, Eugen's µBCU


Description

The purpose of this actuator is, to control Roto Rototronic skylight with shutters and/or sun blinds. It has 4 "channels". Each channel internally uses two relays: One for the open-action, and one for the close-action.

Of course you can also control your Roto Rototronic skylight with help of a standard switch-actuator. But then you don't have the possibility to "open the window 75%" or "close the shutter 80%". The firmware for DFF4.1 provides all this neat feature that you know from typical shutter/blinds actuators.

Hardware

This actuator consists of the following REG parts:

I2C address on application board:

A0: 1
A1: 0 
A2: 0

I2C address on frontend board:

A0: 0
A1: 0
A2: 0


Software

User Documentation

Check here for the DFF4.1 User Manual

Developer Documentation

Firmware sourcecode is on github: https://github.com/KONNEKTING/DFF4.1 Follow this guide for updating the firmare from source-code: KONNEKTING USB Firmware Update

Get a DIY kit

You are interested in this actuator? Great! This device is available as a DIY kit.

The kit includes all required parts with pre-soldered SMD parts and pre-flashed controller board.

You only need:

  • soldering iron and solder
  • a screw driver
  • a sharp knife with a fine tip
  • a working KNX installation where you can connect the device to
  • ~2-3hrs to build it according to the build instructions linked on this page
  • a computer: Windows, Linux or MAC that is able to run KONNEKTING Suite plus a KNX IP Interface or an KNX IP Router.
  • for updating the firmware: A Mini USB cable (Not Micro-USB like on your smartphone. Mini USB is a big thicker as Micro USB)

Please write a mail to info@konnekting.de and refer to this page.

Build It

This actuator uses three PCBs, a bunch of SMD components as well as a lot of mechanical parts. As most users are not able to solder SMD, the PCBs are pre-soldered with all SMD components. Due to the big amount of parts, this actuator comes as a DIY kit: You have to solder non-SMD parts yourself and build up the device and finally flash the firmware with help of a USB connection.

Check here for the DFF4.1 Building Instructions

Help

If relays do not work as expected, you can run this test-sketch to be able to switch relais by serial console. Commands follow this syntax:

[a-h0-1]\n

f.i. "a0" disables relay A, "f1" enables relay F On startup all relays are disabled. It is recommended to use this test without attached window/shutter, but with am multimeter/continuity-tester to be able to test relay by relay.

  1#include <Wire.h>
  2#include <Adafruit_MCP23017.h>
  3
  4Adafruit_MCP23017 mcp;
  5#define LED A5
  6#define EN A0
  7
  8// MCP23017 Output register<->pin map
  9#define OA0 0
 10#define OA1 1
 11#define OA2 2
 12#define OA3 3
 13#define OA4 4
 14#define OA5 5
 15#define OA6 6
 16#define OA7 7
 17#define OB0 8
 18#define OB1 9
 19#define OB2 10
 20#define OB3 11
 21#define OB4 12
 22#define OB5 13
 23#define OB6 14
 24#define OB7 15
 25
 26
 27#define A_SET   OB1
 28#define A_RESET OB0
 29
 30#define B_SET   OB3
 31#define B_RESET OB2
 32
 33#define C_SET   OB5
 34#define C_RESET OB4
 35
 36#define D_SET   OB7
 37#define D_RESET OB6
 38
 39#define E_SET   OA0
 40#define E_RESET OA1
 41
 42#define F_SET   OA2
 43#define F_RESET OA3
 44
 45#define G_SET   OA4
 46#define G_RESET OA5
 47
 48#define H_SET   OA6
 49#define H_RESET OA7
 50
 51void setup() {
 52
 53  SerialUSB.begin(115200);
 54
 55  SerialUSB.println("SetupMCP Relais Test ...");
 56
 57  pinMode(LED, OUTPUT);
 58  pinMode(EN, OUTPUT);
 59  digitalWrite(LED, HIGH);
 60  digitalWrite(EN, HIGH);
 61
 62
 63  mcp.begin(1);
 64
 65  for (int i = 0; i < 16; i++) {
 66    mcp.pinMode(i, OUTPUT);
 67  }
 68
 69  pulseMCP(A_RESET);
 70  pulseMCP(B_RESET);
 71  pulseMCP(C_RESET);
 72  pulseMCP(D_RESET);
 73  pulseMCP(E_RESET);
 74  pulseMCP(F_RESET);
 75  pulseMCP(G_RESET);
 76  pulseMCP(H_RESET);
 77
 78
 79  SerialUSB.println("... done");
 80
 81  // initial delay
 82  delay(1000);
 83  SerialUSB.println("Initial delay done.");
 84  SerialUSB.println("Waiting for command...[a-h0-1]");
 85}
 86
 87//84
 88#define WAIT_TIME 84
 89
 90//16
 91#define SET_TIME 16
 92
 93String cmd;
 94
 95void loop() {
 96
 97  cmd = SerialUSB.readStringUntil('\n');
 98
 99  if (cmd.length() > 0) {
100    SerialUSB.print("Command: ");
101    SerialUSB.println(cmd);
102
103    if (cmd == "a1") {
104      pulseMCP(A_SET);
105    } else if (cmd == "a0") {
106      pulseMCP(A_RESET);
107    }
108
109    else if (cmd == "b1") {
110      pulseMCP(B_SET);
111    } else if (cmd == "b0") {
112      pulseMCP(B_RESET);
113    }
114
115    else if (cmd == "c1") {
116      pulseMCP(C_SET);
117    } else if (cmd == "c0") {
118      pulseMCP(C_RESET);
119    }
120
121    else if (cmd == "d1") {
122      pulseMCP(D_SET);
123    } else if (cmd == "d0") {
124      pulseMCP(D_RESET);
125    }
126
127    else if (cmd == "e1") {
128      pulseMCP(E_SET);
129    } else if (cmd == "e0") {
130      pulseMCP(E_RESET);
131    }
132
133    else if (cmd == "f1") {
134      pulseMCP(F_SET);
135    } else if (cmd == "f0") {
136      pulseMCP(F_RESET);
137    }
138
139    else if (cmd == "g1") {
140      pulseMCP(G_SET);
141    } else if (cmd == "g0") {
142      pulseMCP(G_RESET);
143    }
144
145    else if (cmd == "h1") {
146      pulseMCP(H_SET);
147    } else if (cmd == "h0") {
148      pulseMCP(H_RESET);
149    }
150
151    SerialUSB.println("\n\nWaiting for command...[a-h0-1]");
152  }
153
154}
155
156void pulseMCP(int i) {
157  SerialUSB.print("Pulse at addr #");
158  SerialUSB.print(i);
159
160  mcp.digitalWrite(i, HIGH);
161  delay(SET_TIME);
162  mcp.digitalWrite(i, LOW);
163  delay(WAIT_TIME);
164  SerialUSB.println(" *DONE*");
165}


Links