DFF4.1: Difference between revisions
Konnekting (talk | contribs) No edit summary |
Konnekting (talk | contribs) No edit summary |
||
| Line 82: | Line 82: | ||
== Help == | == 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: | 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 (\n = LF/LineFeed/NewLine): | ||
[a-h0-1]\n | [a-h0-1]\n | ||
Revision as of 19:18, 26 September 2019
| DFF4.1 | |
|---|---|
| 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:
- M0dularis+
- 8x Button + 8x LED
- 8x Relay Bistable, bus powered (8 relays in total, 2 for each channel = 4 channels).
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 (\n = LF/LineFeed/NewLine):
[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.
#include <Wire.h>
#include <Adafruit_MCP23017.h>
Adafruit_MCP23017 mcp;
#define LED A5
#define EN A0
// MCP23017 Output register<->pin map
#define OA0 0
#define OA1 1
#define OA2 2
#define OA3 3
#define OA4 4
#define OA5 5
#define OA6 6
#define OA7 7
#define OB0 8
#define OB1 9
#define OB2 10
#define OB3 11
#define OB4 12
#define OB5 13
#define OB6 14
#define OB7 15
#define A_SET OB1
#define A_RESET OB0
#define B_SET OB3
#define B_RESET OB2
#define C_SET OB5
#define C_RESET OB4
#define D_SET OB7
#define D_RESET OB6
#define E_SET OA0
#define E_RESET OA1
#define F_SET OA2
#define F_RESET OA3
#define G_SET OA4
#define G_RESET OA5
#define H_SET OA6
#define H_RESET OA7
void setup() {
SerialUSB.begin(115200);
SerialUSB.println("SetupMCP Relais Test ...");
pinMode(LED, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(LED, HIGH);
digitalWrite(EN, HIGH);
mcp.begin(1);
for (int i = 0; i < 16; i++) {
mcp.pinMode(i, OUTPUT);
}
pulseMCP(A_RESET);
pulseMCP(B_RESET);
pulseMCP(C_RESET);
pulseMCP(D_RESET);
pulseMCP(E_RESET);
pulseMCP(F_RESET);
pulseMCP(G_RESET);
pulseMCP(H_RESET);
SerialUSB.println("... done");
// initial delay
delay(1000);
SerialUSB.println("Initial delay done.");
SerialUSB.println("Waiting for command...[a-h0-1]");
}
//84
#define WAIT_TIME 84
//16
#define SET_TIME 16
String cmd;
void loop() {
cmd = SerialUSB.readStringUntil('\n');
if (cmd.length() > 0) {
SerialUSB.print("Command: ");
SerialUSB.println(cmd);
if (cmd == "a1") {
pulseMCP(A_SET);
} else if (cmd == "a0") {
pulseMCP(A_RESET);
}
else if (cmd == "b1") {
pulseMCP(B_SET);
} else if (cmd == "b0") {
pulseMCP(B_RESET);
}
else if (cmd == "c1") {
pulseMCP(C_SET);
} else if (cmd == "c0") {
pulseMCP(C_RESET);
}
else if (cmd == "d1") {
pulseMCP(D_SET);
} else if (cmd == "d0") {
pulseMCP(D_RESET);
}
else if (cmd == "e1") {
pulseMCP(E_SET);
} else if (cmd == "e0") {
pulseMCP(E_RESET);
}
else if (cmd == "f1") {
pulseMCP(F_SET);
} else if (cmd == "f0") {
pulseMCP(F_RESET);
}
else if (cmd == "g1") {
pulseMCP(G_SET);
} else if (cmd == "g0") {
pulseMCP(G_RESET);
}
else if (cmd == "h1") {
pulseMCP(H_SET);
} else if (cmd == "h0") {
pulseMCP(H_RESET);
}
SerialUSB.println("\n\nWaiting for command...[a-h0-1]");
}
}
void pulseMCP(int i) {
SerialUSB.print("Pulse at addr #");
SerialUSB.print(i);
mcp.digitalWrite(i, HIGH);
delay(SET_TIME);
mcp.digitalWrite(i, LOW);
delay(WAIT_TIME);
SerialUSB.println(" *DONE*");
}
