DCF77 klokthermostaat

Altijd op tijd het huis op temperatuur

Dit project maakt gebruik van een PIC16F648A (het PIC programma past helaas niet in een 16F628) en de kant en klare DCF77 ontvanger van Conrad (Bestelnr. 64 11 38)
DCF77 zorgt ervoor dat de klok van de thermostaat altijd op tijd loopt en ook automatisch de zomertijd aanpast.
De klok zelf gelijkzetten is dus verleden tijd.

De temperatuursensor is een DS1820 of DS18B20 en op een HD44780 (of compatibel) 2x16 LC-Display wordt dag, datum, tijd, temperatuur (met 0,1°C precisie) en een aanduiding of de economy- of comfort temperatuur actief is, weergegeven.

Er zijn per dag 4 AAN/UIT tijden in te stellen, AAN betekent schakelen naar comfort temperatuur en UIT naar economy temperatuur.
Een extraatje is handig voor mensen die in 2-ploegendienst werken omdat ook mogelijk is de klok een 2-wekelijks schakelschema mee te geven.


Virtueel front als voorbeeld hoe deze klokthermostaat eruit zou kunnen zien.

De bediening in het kort
De bediening is bijzonder eenvoudig, ook al omdat toetsen en commando's om de klok gelijk te zetten dankzij DCF77 niet nodig zijn.
Er zijn 2 temperaturen in te stellen, een Lage economy- en een Hogere comfort temperatuur.
Met 4 toetsen is alles te bedienen.

Toets 1 schakelt handmatig van L (economy) naar H (comfort) temperatuur ("verwarming aan of uit") of andersom.
Toets 2 stelt de comfort temperatuur met stapjes van 0,5°C hoger in.
Toets 3 stelt de comfort temperatuur met stapjes van 0,5°C lager in.
Toets 4 moet 2 seconden worden vastgehouden om naar het "timer instellingsmenu" te gaan (zie verderop).

De economy temperatuur, (als niemand thuis is of 's nachts) blijft normaal altijd op dezelfde temperatuur (±16,0°C) staan.
Eventueel is deze temperatuur te verhogen door toets 1 gelijktijdig met toets 2 in te drukken of te verlagen door toets 1 gelijktijdig met toets 3 in te drukken, maar normaal is dit dus nooit nodig.



Bij het inschakelen van de spanning laat de PIC een paar seconden een intro zien, mocht de papieren handleiding zoek zijn geraakt, dan is te zien waar informatie over de klokthermostaat te vinden is.



Vervolgens laat de LCD het versie nummer van het PIC programma zien en of de timers werken volgens een 1 of een 2-wekelijks schakelschema.



Daarna wacht de PIC tot het een signaal krijgt van de DCF77 module (ontvanger).



Als het zoeken langer dan 45 seconden duurt volgt de melding "Geen DCF signaal".
De PIC blijft echter zoeken totdat er weer een behoorlijk tijdssignaal ontvangen wordt.
De verwarming blijft gewoon handmatig te bedienen als er geen DCF signaal aanwezig is, alleen de timers werken dan niet.



Is er een signaal gevonden dan wordt naar het begin van een minuut gezocht, dit duurt maximaal 1 minuut.
De tijdsbalk geeft de verstreken tijd aan.
Is de hele tijdsbalk vol, dan is de startseconde niet gevonden en volgt weer de melding "Geen DCF signaal".



Nadat de startseconde is gevonden worden de bits gevuld met de tijd en datum.
Dit duurt precies één minuut.
Als de hele tijdsbalk vol is, zijn alle bits voorzien van de actuele tijd en datum.



Bovenstaande foto toont het display zoals het er meestal uit zal zien.
Linksboven de dag met een kleine 1 of 2 dat aangeeft welke week actief is.
Is gekozen voor een 1-wekelijks schakelschema, dan staat dit cijfertje er niet.
Rechtsboven staat de actuele tijd en linksonder de actuele datum.
Naast de datum staat een L of een H.
Een L betekent verwarming Laag (= economy temperatuur) en een H betekent verwarming Hoog (= comfort temperatuur).
Rechtsonder staat de huidige door de DS1820 gemeten temperatuur met 0,1°C precisie.


Timers instellen


Door toets 4 (instel) twee seconden lang ingedrukt te houden wordt naar het "timers instelling menu" gesprongen, startend op maandag.
Met diezelfde toets 4 wordt eerst de dag geselecteerd die ingesteld moet worden, door een paar keer op deze toets te drukken.
Is gekozen voor een 2-wekelijks schakelschema dan moet, om bijvoorbeeld de woensdag van de tweede week in te stellen, eerst door de eerste week worden gestapt.
Aan het kleine cijfertje is te zien welke week wordt ingesteld.
Als er een paar seconden niet op toets 4 wordt gedrukt dan valt het programma terug naar de normale mode.
Staat de gekozen dag op het display dan op toets 1 (aan/uit) drukken om de aan/uit tijden in te stellen.



Er kunnen per dag 4 blokken met elk een AAN en een UIT tijd geprogrammeerd worden, maar het is niet verplicht ze alle 4 te gebruiken.
Ook is het niet verplicht om altijd een UIT tijd in te programmeren.
Als er 30 seconden geen toets wordt ingedrukt, worden eventuele ingestelde gegevens opgeslagen in het EEPROM geheugen van de PIC en springt het programma terug in de normale mode.



Met toets 2 zijn de uren in te stellen (0...23) en met toets 3 de minuten, met stapjes van 5 minuten (00...55).
Door de toets vast te houden verhoogt de tijd automatisch.
Als de juiste AAN schakeltijd is ingesteld, dan weer op toets 1 (aan/uit) drukken.



Het PIC programma maakt het onmogelijk een lagere tijd in te stellen dan de vorige tijd.
Het is niet verplicht een UIT tijd in te stellen, de verwarming blijft dan AAN (= op comfort temperatuur) totdat het een UIT schakelpunt van een andere dag tegenkomt.
Is de juiste UIT schakeltijd ingesteld dan weer op toets 1 (aan/uit) drukken om eventueel nog de blokken 2, 3 en 4 in te stellen.
Als een AAN of UIT tijd van een blok wordt gewijzigd dan worden alle tijden die daarna komen (van de overige blokken van die dag) gewist om te voorkomen dat later alsnog een verkeerde tijd wordt ingesteld.
Door op toets 4 (instel) te drukken wordt naar de volgende dag gegaan.
(Wordt er een paar seconden niet op een toets gedrukt dan worden de ingestelde gegevens opgeslagen in het EEPROM geheugen van de PIC en staat het programma weer in normale mode).



Voor de volgende dag zijn er weer 4 blokken in te stellen net zoals hierboven is beschreven.
Moet de dag hetzelfde zijn als de vorige dag dan kunnen de 4 blokken gekopieerd worden door de toetsen 1 en 2 tegelijk in te drukken.
De 'C' linksonder in het display laat weten dat het een kopie betreft.
Omdat het vaak voorkomt dat de hele werkweek hetzelfde is kan ook de hele werkweek (maandag t/m vrijdag) ineens gekopieerd worden door de toetsen 1 en 3 minimaal 1 seconde lang tegelijk in te drukken.
De seconde wachttijd is gedaan om het per ongeluk indrukken van de toetscombinatie te voorkomen, anders zou de hele week per ongeluk overschreven worden.
Alle tijden die op maandag zijn ingesteld worden dan overgenomen door dinsdag t/m vrijdag.
Let op, vanuit de maandag zelf kan niet gekopieerd worden.



Als er de hele dag niets geschakeld hoeft te worden maar er staan nog tijden ingesteld op die dag, dan kunnen alle 4 blokken van die dag gewist worden door de toetsen 2 en 3 minimaal 1 seconde lang tegelijk in te drukken.
Of die dag dan economy dan wel comfort temperatuur zal zijn is afhankelijk van hoe de situatie om 00:00 van die dag was, want als alle timerblokken van die dag leeg zijn ( - - : - - ) wordt er ook niets geschakeld.



Nadat de timers zijn ingesteld en de klokthermostaat weer in de normale mode komt, staat er een sterretje voor de tijd (zie foto).
Dit betekent dat de op dat moment aangegeven tijd niet actueel meer is omdat tijdens het instellen van de timerblokken niet gelijktijdig de DCF77 tijd gemeten kan worden, de klok loopt nu dus een paar minuten achter.
Maar geen nood, na maximaal 2 minuten staat de actuele tijd er tot op de seconde weer en is het sterretje weer verdwenen.

Het instellen van de timers lijkt ingewikkeld, maar heus, als de schakeling is gebouwd wordt bovenstaande al na een paar minuten spelen duidelijk, alles wijst zichzelf.


Timers overbruggen
Door toets 1 (PORTB.0) langer vast te houden is het mogelijk om de timers voor een aantal uren te overbruggen.
Om bij thuiskomst handmatig de temperatuur in huis op comfort temperatuur te brengen, moet op toets 1 (aan/uit, H / L) worden gedrukt.
Op het display verandert de L (Laag) in een H (Hoog) en geeft de temperatuurindicatie op het display de ingestelde comfort temperatuur voor een paar seconden weer, daarna wordt weer de actuele temperatuur weergegeven.
De klokthermostaat blijft nu net zolang op comfort temperatuur staan, totdat opnieuw op toets 1 (aan/uit, H / L) wordt gedrukt of totdat een ingestelde UIT timer wordt bereikt.
Deze UIT timer zal de klokthermostaat omschakelen van H (comfort) naar L (economy) temperatuur instelling.
Als dat niet de bedoeling is dan moet toets 1 wat langer ingedrukt worden gehouden zodat de uren teller van de overbruggingstijd gaat lopen.
Zolang de overbruggingstijd loopt blijft de klokthermostaat in de ingestelde temperatuur mode (economy of comfort), ongeacht de timerinstellingen.
Op het display is te zien hoeveel uren er nog resten, de teller loopt met het uur terug.
Als die tijd verstreken is wordt de verwarming weer geregeld volgens de timerinstellingen.
Er kan een maximum van 99 uren overbruggingstijd ingesteld worden.
De overbruggingstijd wordt meteen afgebroken als er opnieuw op toets 1 wordt gedrukt.
Of de overbruggingstijd in economy of in comfort temperatuur instelling staat is afhankelijk van de begin situatie, aangeduid met een L of een H op het display.


Volgens het display op de foto hierboven zal de thermostaat dus (nog) 14 uur in stand H (comfort) blijven, ongeacht of er binnen die tijd timers AAN of UIT schakelen.
Na precies 1 uur staat de teller op het display op 13uur, en gaat zo door totdat de uren voorbij zijn.
Wanneer de overbruggingstijd voorbij is blijft de thermostaat in de gekozen stand (H of L) als er die dag geen timers geprogrammeerd zijn.
Zijn er wel tijden geprogrammeerd dan blijft hij in stand H of schakelt naar stand L, afhankelijk van hoe de stand op dat moment volgens de timer moet zijn.

Als er voor een langere tijd niemand thuis is (een paar weken op vakantie bijvoorbeeld) en er niets geschakeld hoeft te worden is het niet nodig om de timerblokken te wissen of te overbruggen.
Handiger is het dan om de comfort temperatuur tijdelijk op een lagere temperatuur in te stellen, eventueel gelijk aan de economy temperatuur.
Of de timer de verwarming dan AAN of UIT zet maakt dan niet uit, de verwarming zal pas AAN gaan als de temperatuur echt laag is.


"Brrr, zet de verwarming wat hoger", gaat eenvoudig, houdt toets 2 ingedrukt en de comfort temperatuurinstelling verhoogt automatisch met stapjes van 0,5°C.
Toets 3 ingedrukt houden verlaagt de comfort temperatuur automatisch met stapjes van 0,5°C.
Temperatuur wijzigen niet door de knop steeds in te drukken maar de knop blijven vasthouden, de waarde verloopt dan vanzelf.
De economy temperatuur is instelbaar tussen 5°C en 18°C en de comfort temperatuur tussen 7°C en 32°C.

Er is geen indicatie op het display of de verwarming ook daadwerkelijk aan of uit is, degene die dat wel wil kan een LED met 1k serieweerstand over het relais plaatsen.
De L en de H geven alleen aan of de economy dan wel de comfort temperatuur is geselecteerd.

De temperatuur wordt 3x per minuut gemeten.
De thermostaat heeft een hysteresis van 0,2°C, dat betekent dat als de temperatuur is ingesteld op bijvoorbeeld 20,0°C de verwarming aan zal gaan als het is afgekoeld tot 19,9°C en alweer uitgaat als het 20,1°C is.
Dat lijkt weinig maar valt in de praktijk wel mee omdat er een overshoot is waardoor de verwarming wel door kan schieten tot 20,5°C of nog meer, dit is erg afhankelijk van waar de DS1820 temperatuursensor wordt neergehangen.
Ga maar na, als de DS1820 boven een verwarmingsradiator wordt gehangen, dan is de temperatuur ter plekke binnen een korte tijd hoger dan 20,1°C en schakelt hij al binnen een minuut weer uit.

Na het programmeren van de PIC zelf staat de economy temperatuur ingesteld op 16,0°C en de comfort temperatuur op 20,0°C.
Als deze temperaturen door de gebruiker worden gewijzigd dan worden deze nieuwe instellingen (pas na enkele minuten) opgeslagen in de EEPROM van de PIC zodat bij stroomuitval de door de gebruiker ingestelde temperaturen zullen worden gehandhaafd.
Na een stroomuitval zal de PIC altijd op de ingestelde economy temperatuur opstarten, ook als deze vóór de stroomuitval op comfort stond.


Twee ploegendienst
Iets wat, voor zover bekend, geen enkele commerciële klokthermostaat heeft is een meer wekelijkse timer instelling mogelijkheid.
Mensen die in twee ploegendienst werken moeten elke week de klokthermostaat omprogrammeren, omdat ze de ene week om half 3 thuiskomen, terwijl ze de andere week om die tijd nog maar net op het werk zijn en 's avonds tegen 23 uur thuiskomen, terwijl ze de andere week om deze tijd al in bed liggen omdat ze er 's morgens weer vroeg uit moeten.
Deze PIC klokthermostaat heeft daarom 2 weken die elke week van week verwisseld.
Het huidige weeknummer (1 of 2) staat achter de dagnaam.
Elke week, als de zondag om middernacht naar maandag springt wisselt het weeknummer automatisch mee.
Mocht het (om wat voor reden dan ook) voorkomen dat het actuele weeknummer niet klopt, dan kan van weeknummer gewisseld worden door insteltoets 4 langer dan 5 seconden vast te houden.

Als van de 2-wekelijkse optie geen gebruik wordt gemaakt dan is de klokthermostaat ook om te schakelen in een 1 wekelijks schakelschema.
Dit gaat als volgt:
- Haal de spanning van de PIC schakeling.
- Houdt een willekeurige toets ingedrukt terwijl de spanning weer wordt ingeschakeld.
- Op het display is nu voor een paar seconden het ingestelde aantal weken te zien.
- Nu is omgeschakeld van 1 naar 2-wekelijks of andersom.
Er staat geen weeknummer achter de dagnaam als de PIC in de 1-weeks mode staat.


Op het display is nu voor een paar seconden het ingestelde aantal weken te zien.


Schema
Zorg voor een mooie gestabiliseerde 5V spanning.
Let op dat de PIC dit keer niet met 100n, maar met een tantaal van 1µF wordt ontkoppelt (C5), anders kan de PIC soms vastlopen bij het programmeren van zijn EEPROM (stroompieken die moeten worden opgevangen door C5, 100n is niet genoeg).
R1 en C2 aan de zijde van de DCF77 module plaatsen.
De vier toetsen kunnen rechtstreeks aan PORTB.0 t/m PORTB.3 worden aangesloten zonder pull-up weerstand, omdat de interne pull-ups in de PIC zelf zijn geactiveerd.
Voor het relais kan elk type 5V relais worden genomen, maar als de stroomopname groter is dan 100mA dan voor T1 een BC337 nemen.


Schema DCF77 klokthermostaat

LCD HD44780 (of compatibel) 2x16 karakters
DCF77 Module, Conrad 64 11 38
IC1 PIC16F648A
IC2 DS1820 temperatuursensor
T1 BC547 NPN transistor (evt. BC337)
D1 1N4148 diode
X1 Kristal 10MHz
R1 100Ω
R2 33k
R3 10k
R4,R5 4k7
R6 0,0Ω (of gewoon een draad) of een weerstand voor LCD achtergrondverlichting
P1 Instelpot 10k
C1 470µF
C2 4µ7 tantaal
C3,C4 22pF
C5,C6 1µ tantaal
S1...S4 Maakcontact, pulsschakelaar
IC-voet Eigen keus
Relais Eigen keus, 5VDC, enkelpolig maak

Afstandsbediening
Handig voor eigen uitbreidingen is de functie van PORTA.5, zodat van afstand de verwarming AAN of UIT kan worden gezet door bijvoorbeeld een infrarood afstandsbediening of een telefoonschakeling (komt ook nog eens op deze site) waardoor via opbellen de thermostaat AAN of UIT kan worden gezet.
Normaal is zonder LCD niet te zien of de verwarming met een puls op PORTB.0 AAN (H) of UIT (L) wordt gezet.
Door eerst PORTA.5 laag te maken en dan een puls op PORTB.0 (van toets 1) zal de verwarming altijd naar de economy stand gaan.
Moet de comfort stand ingeschakeld worden dan moet eerst PORTA.5 weer hoog worden gemaakt en daarna opnieuw een puls op PORTB.0 (van toets 1) worden gegeven waardoor van L naar H zal worden geschakeld.
Praktijkvoorbeeld:
Om 23:00 zal de verwarming volgens timer AAN moeten gaan, maar een collega vraagt of je nog een biertje bij hem komt drinken.
De verwarming zal dus voor niets aan gaan.
Het mooiste is om telefonisch de verwarming te kennen te geven dat de verwarming dit keer niet aan hoeft.
Door met behulp van een telefoonschakeling de timers te annuleren voor een paar uur moet de puls op PORTB.0 langer aanhouden zodat gebruik wordt gemaakt van de overbruggingsfunctie (zie hier).
De urenteller loopt per 0,5 seconde 1 uur op, om de timers voor bijvoorbeeld 4 uur te overbruggen moet er een puls van 2,5 seconden worden gegeven (4 x 0,5sec + een extra 0,5 startseconde).

Deze klokthermostaat werkt natuurlijk op alle merken en types verwarmingsketels, maar is niet modulerend (iets dat mogelijk is op de modernste verwarmingsketels), omdat de fabrikanten nogal geheimzinnig over het data protocol van bijv. OpenTherm® of het Nefit protocol doen...

Toekomstmuziek
Bij veel vraag komt er in de toekomst misschien een programma met 3 en 4 wekelijks klokthermostaat.
Ook ligt in de planning een DCF77 klokthermostaat die tevens te bedienen is met een RC5 afstandsbediening, zodat met de TV afstandsbediening van H naar L en andersom kan worden geschakeld.
Alleen een TSOP1736 infrarood ontvanger hoeft dan op een poort worden aangesloten.
En als het allemaal lukt, de schakeling ook rechtstreeks op een telefoonlijn aan te sluiten voor telefonische afstandsbediening.
Dit alles zal in ieder geval niet met een PIC16F648 gebeuren, maar met een 28-pins PIC.

Download DCFTHERN.HEX V-1 bestand om in een 16F648A te programmeren (Beta versie)
Download DCF77_Thermostaat_V-1_NL.bas, de broncode voor Basic
Download schema als PDF bestand
De werking van het DCF77 tijd signaal
PIC gestuurde modulerende kamerthermostaat
Datasheet DS18B20.pdf temperatuursensor
Datasheet HD44780.pdf LCD (Liquid Crystal Display)
Bestel geprogrammeerde PIC