Een Arduino Thermostaat (1)

We hebben achter in de tuin een kleine blokhut staan. Dat is een fijn plekje om je terug te trekken. Maar in de koude helft van het jaar is er wel wat verwarming nodig om daar behaaglijk te kunnen vertoeven. Geen probleem natuurlijk, er is stroom, en er staat een kleine electrische heater van 1200W die het best op temperatuur houdt. Zelfs als het flink vriest kan die het nog wel bijhouden.

Nou heeft dat ding een ingebouwde thermostaat, maar die werkt niet lekker. Als het warm genoeg is, kun je hem zo afstellen dat hij net afslaat. Maar hij slaat dan pas weer aan als het een paar graden kouder is geworden. Dat is niet echt comfortabel. Dus bedacht ik een oplossing met een Arduino, een goedkope temperatuursensor, en een schakelkastje dat ik nog had liggen.

Allereerst de schakelkast. In het verleden had ik ooit eens een schakelkastje gemaakt om de randapparatuur van mijn computer uit te schakelen als de computer uitstond. Dat werkte door de spanning van de USB poort te gebruiken om een relais aan of uit te zetten. Die zet vervolgens spanning op een stopcontact waar ik de monitor, printer, scanner e.d. op had aangesloten.

Tegenwoordig hebben USB poorten de onhebbelijke eigenschap gewoon nog spanning te geven als ze uit of in slaapstand staan, dus die oplossing had ik al met pensioen gestuurd. Maar het kastje had ik nog, en met wat modificatiewerk kon ik dat voor mijn doel gebruiken.

Allereerst heb ik het relais vervangen door een solid state relais. Met name om stroompieken te voorkomen, want dat relais maakt gebruik van nuldoorgangs detectie, oftewel hij schakelt alleen als er geen stroom loopt. Met 1200W leek me dat beter voor de levensduur van de schakeling.

Daarnaast heb ik er een 5V voeding ingebouwd, om de Arduino van spanning te voorzien.

Tenslotte heb ik het interface printje een beetje aangepast, ik gebruik nu een aparte schakeldraad om het 5V ‘pilot’ relais te schakelen, i.p.v. de 5V van de USB. Ik gebruik nog wel het bestaande USB socket om de aansluiting te kunnen maken. De normale voedingsaansluitingen gebruik ik nu om 5V naar de Arduino te sturen. Een van de datalijnen om het aan-uit signaal vanaf de Arduino naar het pilot relais te krijgen.

De termostaat zelf bestaat uit een Arduino Nano en een DHT22 temperatuur sensor. Deze heb ik gekozen vanwege zijn nauwkeurigheid: hij heeft een nauwkeurigheid van +/- 0,5 graad C. Daarnaast meet hij ook als bonus de luchtvochtigheid. De meetwaarde lees ik uit op een klein OLED schermpje met een resolutie van 128 x 32 pixels.

Het doorzichtige kastje van de thermostaat

Er zitten drie drukknoppen op het kastje en een aan-uit schakelaar. De knoppen hebben de volgende functies:

  • Temperatuur setpoint verhogen
  • Temperatuur setpoint verlagen
  • Relatieve vochtigheid weergeven

De laatste functie wordt geactiveerd door de knop even in te drukken, het display laat dan gedurende 3 seconden de vochtigheid zien. Daarna schakelt hij weer terug naar de gemeten temperatuur.

De verhogen en verlagen drukknoppen veranderen het setpoint met 0,1 graad per druk. Vasthouden van de knop laat de waarde langzaam in deze stappen verhogen of verlagen. Wanneer 1 van de knoppen wordt ingedrukt blijft het gekozen setpoint nog 3 seconden staan voor hij weer terugspringt naar de gemeten waarde.

Relatieve vochtigheid

De drukknoppen hebben ingebouwde LED’s in de vorm van een ring rond de knop. Deze licht rood op als de heater wordt aangestuurd.

Er zit een band (hysterese) van 0,6 graad tussen het inschakelen en weer uitschakelen. Dat bepaalt dus ongeveer de temperatuurschommeling in de blokhut.