Arduino vloerverwarming kleppen regelaar

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • HammieDuDe
  • Registratie: Oktober 2003
  • Laatst online: 14-05 08:52
Goedemorgen allen,

Sinds ik met de voorbereiding/bouw bezig ben van mijn woning ben ik ook in de "voor mij" wondere wereld van de Arduino bordjes gedoken, en al het e.e.a. gemaakt zoals een CO2/humidity/lux meter op een D1 mini.

Dit was echter vaak op een template / voorbeeld zoals hier op Tweakers, en daar red ik mij dan ook prima mee om dit om te bouwen zodat ik met mijn Loxone deze waardes kan uitlezen en daar op acteren.

Nu ben ik bezig om te kijken om zelf iets te maken waarmee ik de 24v actoren kan schakelen. Er zijn uiteraard kant-en-klare oplossingen van merken als Henco of Honeywell, echter wil ik dit zelf aansturen omdat ik in elke ruimte al het e.e.a. aan temperaturen kan opvangen met mijn Loxone.

Ik heb al wel een Railduino en een mooie TCP/IP relaisbox van Denkovi waarmee ik 230v ga schakelen in huis, maar ik wil eigenlijk dit 24v project zelf gaan maken, in een mooi kastje met wartels en dan plaats ik ze ( 4 x 8v relais ). Kostentechnisch is dit natuurlijk interessanter dan de kant-en-klare optie van Denkovi, en ik wil dit ook graag zelf kunnen.

Op de shop van onze verre-oostenbuurtjes heb ik dit gevonden:
https://www.aliexpress.co...b201602_,searchweb201603_

En dit zou ik met een bijpassend bordje ( bij voorkeur met ethernet ) willen aansturen.

Nou lijkt het mij dat ik rekening moet houden met het volgende:
- Genoeg GPIO pins heeft voor het aansturen van de 8 contactjes van de relaiskaart
- Evt. klein LCD die ik in de cover van de case kan maken om de status van de relais te zien ( hoeft niet uitgebreid, liefst iets van 1:O 2:O 3:C etc.
- Ik ga een kleine webserver er op zetten voor HTTP/GET zodat ik de relais kan schakelen met de Loxone maar ook zo inzage kan hebben op de info die op het LCD staat maar ook manual override kan doen
- Ethernet is eigenlijk wel een must ( wil niet op de wifi leunen voor zoiets als dit )

De actoren worden met 24v gevoed, bovenstaande relaiskaart kan ik dan ook de 24v variant nemen, die voed ik dan meteen mee waardoor de stuurstroom van het relais minimaal is, dit kan dan rechtstreeks op een GPIO pin?

Waar ik nu eigenlijk mee zit, is de combinatie van de producten, welk bordje kan ik dan het beste nemen, wat gaat een goede combinatie zijn. Ik zag bijv. naar de MEGA te kijken, die lijkt me zeker geschikt, of is dat weer overkill?

Achterhoek | Loxone | PUHZ-SW75YAA + ERSD-VM2D | 12.200wp PV | Zehnder Q600

Alle reacties


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 22:32
HammieDuDe schreef op dinsdag 1 juni 2021 @ 09:14:
Sinds ik met de voorbereiding/bouw bezig ben van mijn woning ben ik ook in de "voor mij" wondere wereld van de Arduino bordjes gedoken, en al het e.e.a. gemaakt zoals een CO2/humidity/lux meter op een D1 mini.
Aangezien je nieuw bent in de wereld van microcontrollers. De D1 is geen Arduino maar een ESP8266. Dat scheelt nogal qua context :)
Waar ik nu eigenlijk mee zit, is de combinatie van de producten, welk bordje kan ik dan het beste nemen, wat gaat een goede combinatie zijn. Ik zag bijv. naar de MEGA te kijken, die lijkt me zeker geschikt, of is dat weer overkill?
De MEGA is wel weer een type Arduino. Je gaat waarschijnlijk negatief verrast zijn over de beperkingen van een Arduino t.o.v. een ESP. Ik zou dus beginnen eerst helder te krijgen wat het verschil tussen beide is.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • The Lord
  • Registratie: November 1999
  • Laatst online: 22:38
Nog mooier, servo actuators en een goede PID regeling.

geeft geen inhoudelijke reacties meer


Acties:
  • 0 Henk 'm!

  • HammieDuDe
  • Registratie: Oktober 2003
  • Laatst online: 14-05 08:52
The Lord schreef op dinsdag 1 juni 2021 @ 09:17:
Nog mooier, servo actuators en een goede PID regeling.
Ik heb hier ook al naar gekeken, echter ga ik op lage temperatuur ( warmtepomp ) mijn woning op temperatuur brengen, waarbij het niet/nauwelijks lonend is om in percentages of gedeeltelijk de kranen open te zetten.

De actoren van Henco heb ik een poos geleden wel op een van mijn 24v PWM dimmers van DMX4U getest en ik kan ze op die manier ook gedeeltelijk open zetten, wat natuurlijk voor de "heb" leuk gaat zijn, maar ik heb de keuze gemaakt om dit niet te gaan doen.
CurlyMo schreef op dinsdag 1 juni 2021 @ 09:17:
[...]

Aangezien je nieuw bent in de wereld van microcontrollers. De D1 is geen Arduino maar een ESP8266. Dat scheelt nogal qua context :)


[...]

De MEGA is wel weer een type Arduino. Je gaat waarschijnlijk negatief verrast zijn over de beperkingen van een Arduino t.o.v. een ESP. Ik zou dus beginnen eerst helder te krijgen wat het verschil tussen beide is.
Oi, daar val ik dus al meteen door de mand, ik heb zoals gezegd al wel wat ervaringen met het programmeren van de ESP8266 in de vorm van de D1 mini en heb ook nog een zakje met 10 NodeMCU v3's liggen om te "prutsen".

Die bordjes zijn natuurlijk al leuk om mee te werken, alleen wil ik er 8 relais mee sturen, ethernet en een LCD wil, wordt het denk ik wel een probleem...

Ik was in de veronderstelling dat Arduino meer een verzamelnaam was, omdat ik de ESP's programmeer/inlees met de Arduino IDE tool.

[ Voor 9% gewijzigd door HammieDuDe op 01-06-2021 09:31 . Reden: toevoeging ]

Achterhoek | Loxone | PUHZ-SW75YAA + ERSD-VM2D | 12.200wp PV | Zehnder Q600


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 22:32
HammieDuDe schreef op dinsdag 1 juni 2021 @ 09:27:
[...]
Die bordjes zijn natuurlijk al leuk om mee te werken, alleen wil ik er 8 relais mee sturen, ethernet en een LCD wil, wordt het denk ik wel een probleem...
Dat wat jij als probleem ervaart is vooral gebrek aan kennis ;)

Met bijv. shift registers kan je theoretisch een oneindig aantal 'GPIO' maken. Alleen moet je wel weer weten hoe je een shift registers aanstuurt. Dat zal voor jou voor nu best lastig zijn. Maar dat is eigenlijk wel de gangbare manier in 8 dezelfde type apparaten aan te sturen met één GPIO. Anders is het inderdaad zoeken naar een bordje met 8 GPIO erop.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • HammieDuDe
  • Registratie: Oktober 2003
  • Laatst online: 14-05 08:52
CurlyMo schreef op dinsdag 1 juni 2021 @ 10:20:
[...]

Dat wat jij als probleem ervaart is vooral gebrek aan kennis ;)

Met bijv. shift registers kan je theoretisch een oneindig aantal 'GPIO' maken. Alleen moet je wel weer weten hoe je een shift registers aanstuurt. Dat zal voor jou voor nu best lastig zijn. Maar dat is eigenlijk wel de gangbare manier in 8 dezelfde type apparaten aan te sturen met één GPIO. Anders is het inderdaad zoeken naar een bordje met 8 GPIO erop.
Ik ga hier eens in duiken, thanks!

Achterhoek | Loxone | PUHZ-SW75YAA + ERSD-VM2D | 12.200wp PV | Zehnder Q600


Acties:
  • +1 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 23:30

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Hoewel een shift register geen hogere wiskunde is, is een I2C port expander misschien nog even wat eenvoudiger (gegeven de usability van library's). En je kunt prima een ESP8266 aan een Wiznet W5500 hangen om over de UART SPI een ethernet poort toe te voegen. Kun je zowel via wifi als de kabel verbinden :)

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • Accretion
  • Registratie: April 2014
  • Laatst online: 15-05 18:07

Accretion

⭐⭐⭐⭐⭐ (5/5)

Ik ben hier ook over na aan het denken.

Echter, heeft het m.i. met een lage temperatuur verwarming en warmtepomp weinig nut?

Bij ons staat de thermostaat altijd op een vaste temperatuur, het heeft geen nut om d'r aan te gaan draaien, het effect merk je pas veel later.

En denk dat het juist meer energie kost om te "verwarmen -> afkoelen -> verwarmen" als dat het kost om steady een temperatuur te nemen?
(Huis zal goed geïsoleerd zijn)

---

Ik twijfel wel om zones af te schakelen, dat de kelder of (langdurig lege) kamers 'dicht te zetten'.

Maar twijfel of dat een probleem kan zijn voor de pomp, in theorie heeft die de rest dan wel sneller op temperatuur of hoeft ie minder te draaien.

Anyways, erg benieuwd naar het resultaat.

Acties:
  • 0 Henk 'm!

  • HammieDuDe
  • Registratie: Oktober 2003
  • Laatst online: 14-05 08:52
Accretion schreef op dinsdag 1 juni 2021 @ 15:36:
Ik ben hier ook over na aan het denken.

Echter, heeft het m.i. met een lage temperatuur verwarming en warmtepomp weinig nut?

Bij ons staat de thermostaat altijd op een vaste temperatuur, het heeft geen nut om d'r aan te gaan draaien, het effect merk je pas veel later.

En denk dat het juist meer energie kost om te "verwarmen -> afkoelen -> verwarmen" als dat het kost om steady een temperatuur te nemen?
(Huis zal goed geïsoleerd zijn)

---

Ik twijfel wel om zones af te schakelen, dat de kelder of (langdurig lege) kamers 'dicht te zetten'.

Maar twijfel of dat een probleem kan zijn voor de pomp, in theorie heeft die de rest dan wel sneller op temperatuur of hoeft ie minder te draaien.

Anyways, erg benieuwd naar het resultaat.
Bij mij zijn het meer de zones die ik meestal niet aan wil hebben, open te zetten en andersom.
Oftewel, bij verwarmingsbedrijf, badkamer open en referentiezone ( hele BG ) open, rest verdieping dicht
maar bij koelen, alles open behalve de badkamer.

Dat is mijn insteek, referentiezone blijft dus normaliter gezien altijd open ( daarom gebruik ik daar ook NO actuators voor ), maar ik wil wel kunnen schakelen ( eigenwijs ), pomp is proportioneel ( Grundfoss Alpha 2 ), dus gaat minder pompen bij minder open zones etc.
Thijsmans schreef op dinsdag 1 juni 2021 @ 15:13:
Hoewel een shift register geen hogere wiskunde is, is een I2C port expander misschien nog even wat eenvoudiger (gegeven de usability van library's). En je kunt prima een ESP8266 aan een Wiznet W5500 hangen om over de UART SPI een ethernet poort toe te voegen. Kun je zowel via wifi als de kabel verbinden :)
En ook hier ga ik in duiken! Thanks voor alle input

[ Voor 18% gewijzigd door HammieDuDe op 01-06-2021 15:48 ]

Achterhoek | Loxone | PUHZ-SW75YAA + ERSD-VM2D | 12.200wp PV | Zehnder Q600


Acties:
  • 0 Henk 'm!

  • HammieDuDe
  • Registratie: Oktober 2003
  • Laatst online: 14-05 08:52
Kleine update.

Ik heb nu mijn opstelling werkend zoals ik dat zou willen.

- 24v voeding > tevens voor actuatoren
- DC>DC stepdown voor 24v naar 5v voeding voor relay board en NodeMcu v3
- NodeMcu v3
- MCP23017 chip IO multiplexer
- 16 relais 5v boardje van Ali

Mocht iemand nog meer interesse hebben, met deze code heb ik het werkend gekregen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp8266-relay-module-ac-web-server/
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

// Import required libraries
#include "ESP8266WiFi.h"
#include "ESPAsyncWebServer.h"
#include "Adafruit_MCP23017.h"// Instance of MCP23017 library
Adafruit_MCP23017 mcp;

// Set to true to define Relay as Normally Open (NO)
#define RELAY_NO    true

// Set number of relays
#define NUM_RELAYS  16

// Assign each GPIO to a relay
int relayGPIOs[NUM_RELAYS] = {0, 1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10, 11, 12, 13, 14, 15};

// Replace with your network credentials
const char* ssid = "xxxx";
const char* password = "xxxx";

// Set your Static IP address
IPAddress local_IP(x, x, x, x);
// Set your Gateway IP address
IPAddress gateway(x, x, x, x);

IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(1, 1, 1, 1); // optional
IPAddress secondaryDNS(8, 8, 4, 4); // optional

const char* PARAM_INPUT_1 = "relay";  
const char* PARAM_INPUT_2 = "state";

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    html {font-family: Arial; display: inline-block; text-align: center;}
    h2 {font-size: 3.0rem;}
    p {font-size: 3.0rem;}
    body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
    .switch {position: relative; display: inline-block; width: 120px; height: 68px} 
    .switch input {display: none}
    .slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 34px}
    .slider:before {position: absolute; content: ""; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 68px}
    input:checked+.slider {background-color: #2196F3}
    input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}
  </style>
</head>
<body>
  <h2>ESP Web Server</h2>
  %BUTTONPLACEHOLDER%
<script>function toggleCheckbox(element) {
  var xhr = new XMLHttpRequest();
  if(element.checked){ xhr.open("GET", "/update?relay="+element.id+"&state=1", true); }
  else { xhr.open("GET", "/update?relay="+element.id+"&state=0", true); }
  xhr.send();
}</script>
</body>
</html>
)rawliteral";

// Replaces placeholder with button section in your web page
String processor(const String& var){
  //Serial.println(var);
  if(var == "BUTTONPLACEHOLDER"){
    String buttons ="";
    for(int i=1; i<=NUM_RELAYS; i++){
      String relayStateValue = relayState(i);
      buttons+= "<h4>Relay #" + String(i) + " - GPIO " + relayGPIOs[i-1] + "</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"" + String(i) + "\" "+ relayStateValue +"><span class=\"slider\"></span></label>";
    }
    return buttons;
  }
  return String();
}

String relayState(int numRelay){
  if(RELAY_NO){
    if(mcp.digitalRead(relayGPIOs[numRelay-1])){
      return "";
    }
    else {
      return "checked";
    }
  }
  else {
    if(mcp.digitalRead(relayGPIOs[numRelay-1])){
      return "checked";
    }
    else {
      return "";
    }
  }
  return "";
}

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);

  if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
  Serial.println("STA Failed to configure");
}

      // Initialize the MCP23017
  mcp.begin();
  
  // Define GP pins as output pins
  mcp.pinMode(0, OUTPUT);
  mcp.pinMode(1, OUTPUT);
  mcp.pinMode(2, OUTPUT);
  mcp.pinMode(3, OUTPUT);
  mcp.pinMode(4, OUTPUT);
  mcp.pinMode(5, OUTPUT);
  mcp.pinMode(6, OUTPUT);
  mcp.pinMode(7, OUTPUT);
  mcp.pinMode(8, OUTPUT);
  mcp.pinMode(9, OUTPUT);
  mcp.pinMode(10, OUTPUT);
  mcp.pinMode(11, OUTPUT);
  mcp.pinMode(12, OUTPUT);
  mcp.pinMode(13, OUTPUT);
  mcp.pinMode(14, OUTPUT);
  mcp.pinMode(15, OUTPUT);
  mcp.digitalWrite(1, LOW);
  mcp.digitalWrite(2, LOW);
  mcp.digitalWrite(3, LOW);
  mcp.digitalWrite(4, LOW);
  mcp.digitalWrite(5, LOW);
  mcp.digitalWrite(6, LOW);
  mcp.digitalWrite(7, LOW);
  mcp.digitalWrite(8, LOW);
  mcp.digitalWrite(9, LOW);
  mcp.digitalWrite(10, LOW);
  mcp.digitalWrite(11, LOW);
  mcp.digitalWrite(12, LOW);
  mcp.digitalWrite(13, LOW);
  mcp.digitalWrite(14, LOW);
  mcp.digitalWrite(15, LOW);

  // Set all relays to off when the program starts - if set to Normally Open (NO), the relay is off when you set the relay to HIGH
  for(int i=1; i<=NUM_RELAYS; i++){
    mcp.pinMode(relayGPIOs[i-1], OUTPUT);
    if(RELAY_NO){
      mcp.digitalWrite(relayGPIOs[i-1], HIGH);
    }
    else{
      mcp.digitalWrite(relayGPIOs[i-1], LOW);
    }
  }
  
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP8266 Local IP Address
  Serial.println(WiFi.localIP());

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });

  // Send a GET request to <ESP_IP>/update?relay=<inputMessage>&state=<inputMessage2>
  server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    String inputParam;
    String inputMessage2;
    String inputParam2;
    // GET input1 value on <ESP_IP>/update?relay=<inputMessage>
    if (request->hasParam(PARAM_INPUT_1) & request->hasParam(PARAM_INPUT_2)) {
      inputMessage = request->getParam(PARAM_INPUT_1)->value();
      inputParam = PARAM_INPUT_1;
      inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
      inputParam2 = PARAM_INPUT_2;
      if(RELAY_NO){
        Serial.print("NO ");
        mcp.digitalWrite(relayGPIOs[inputMessage.toInt()-1], !inputMessage2.toInt());
      }
      else{
        Serial.print("NC ");
        mcp.digitalWrite(relayGPIOs[inputMessage.toInt()-1], inputMessage2.toInt());
      }
    }
    else {
      inputMessage = "No message sent";
      inputParam = "none";
    }
    Serial.println(inputMessage + inputMessage2);
    request->send(200, "text/plain", "OK");
  });
  // Start server
  server.begin();
}
  
void loop() {

}


Maar nou loop ik nog tegen het volgende probleem aan, hopelijk hebben jullie tips voor mij.

Na reboot / stroomstoring / herstart worden alle relais ge-reset ( omdat ik ze als output zet waarschijnlijk ):
- De webpagina laat nog de status zien van voor de reboot maar dit matched niet de status van de relais
- Ik wil graag dat de relais weer zo gaan staan als voor de herstart/ stroomuitval

Any tips?

Achterhoek | Loxone | PUHZ-SW75YAA + ERSD-VM2D | 12.200wp PV | Zehnder Q600


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 06:22

Damic

Tijd voor Jasmijn thee

Je moet je status opslaan in het geheugen, maar ook weer niet teveel doen want elke keer je je geheugen wegschrijft gaat er een write cycle af.

Dus eerst checken met wat er in het geheugen zit voor je wegschrijft.

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • amauer
  • Registratie: Juni 2005
  • Laatst online: 22:59
Je kan ook alle relais inschakelen en vervolgens uitschakelen zodat je status na een reboot altijd up to date is.
Pagina: 1