PIC gestuurde modulerende kamerthermostaat

Thermostaat met Nefit protocol door een PIC aansturen

De 140209 print.
 

Met behulp van onderstaande schakeling kan met de PIC Basic instructie SEROUT een modulerende thermostaat worden aangestuurd.
Hierdoor kan eenieder zelf een thermostaat met het Nefit protocol naar wens aansturen door simpel de temperatuursinstelling met een 8-bits waarde er naar toe te zenden.
Je kunt dan zelf een PIC Basic programma schrijven die de temperatuurinstelling laat afhangen van bijvoorbeeld de tijd (DCF77 of klok-IC), een afstandsbediening of via telefoon.

Nefit heeft een eigen protocol (geen OpenTherm®) en ikzelf had geen zin om het protocol van Nefit uit te zoeken, daarom gewoon gebruik gemaakt van een (op één na) goedkoopste modulerende thermostaat, de ModuLine 15 van Nefit.
Met behulp van aansturing door bijvoorbeeld een PC of een andere PIC kan de ModuLine thermostaat nu worden ingesteld.
Door een optocoupler is een galvanische scheiding tussen ModuLine thermostaat en aansturende (PIC) schakeling gegarandeerd.


ModuLine 15 van Nefit.
 
Werking
De schakeling wordt opgebouwd op de zelf te etsen print 140209 en haalt zijn voeding uit de thermostaataansluiting (zie schema).
Er wordt hier gebruik gemaakt van de digitaal te bedienen potmeter, type X9C103 (= 10k versie), een 8-pins IC, deze komt in de plaats voor de 20k potmeter die normaal op de ModuLine thermostaatprint zit.
Na ombouw is de ModuLine thermostaat dus niet meer met de witte ronde knop te bedienen, maar moet de temperatuur ingesteld worden door er een 8-bits waarde naar toe te zenden met een snelheid van (maar) 300 Baud.
De snelheid is zo laag gekozen omdat de PIC op zijn interne oscillator loopt, door de lage baudrate is de timing minder kritisch.
Bij hogere baudrates zou er een kristal, weerstand en twee condensatoren nodig zijn en daar is de ruimte niet voor in de ModuLine behuizing.

Het versturen van de 8-bits waarde gebeurt via een 2-draads verbinding naar een optocoupler op de 140209 print, en moet een waarde zijn van 1 ... 100, waarbij 1 staat voor 12°C en 100 voor 24,5°C.
Een andere waarde dan 1 ... 100 wordt als niet ontvangen beschouwd (genegeerd).
Door de formule x = ((Temp * 8) / 10) - 95 in de verzendende PIC te plaatsen, wordt de temperatuursinstelling (12°C ... 24,5°C) automatisch omgezet in de juiste schaalwaarde voor de potmeter (1 ... 100).
Om stapjes van 0,5°C te kunnen maken zonder gebruik van een FLOAT variabele moet 'Temp' een factor 10 groter worden opgegeven.
Voor een temperatuur van bijvoorbeeld 16,0°C moet er dus 160 aan 'Temp' worden opgegeven en voor 19,5°C de waarde 195.


Digitaal te bedienen potmeter X9Cxxx
De X9C103 is een elektronische (8-pins) potmeter die zijn weerstandswaarde wijzigt aan de hand van pulsjes op zijn INC pin.
Of er naar boven of naar beneden wordt geregeld is afhankelijk van de U/D (= Up / Down) pin.
Om altijd zeker te zijn van de juiste instelling regelt de PIC na ontvangst van een instellingswaarde de X9C103 steeds eerst (heel snel) helemaal naar minimaal door 100 pulsen te sturen om van daaruit weer omhoog te regelen naar de opgegeven instelling.

De weerstanden aan de X9C103 zorgen ervoor dat het temperatuurbereik ligt tussen 12°C (normaal 7°C) en 24,5°C (normaal 32,5°C).
Het voordeel is hierdoor dat de X9C103 nu niet zo gevoelig is omdat elke stap van deze digitale potmeter nu een hogere resolutie heeft.
Om een ander minimaal en/of maximaal bereik te verkrijgen moeten de weerstandswaarden aangepast worden.
Als er behoefte is voor het hele bereik van de ModuLine thermostaat (7°C ... 32,5°C), dan moeten de twee weerstanden door draadbrugjes worden vervangen.

De X9C103 heeft een geheugen om een potmeterstand in op te slaan die na stroomuitval wordt aangenomen maar daar is geen gebruik van gemaakt.
Na een stroomuitval stelt de PIC12F629 op de 140209 print de temperatuur in op 14°C.


 
De ombouw:


Voor de 140209 print moet de + links en de - rechts zitten (zoals op de foto is aangegeven).
De ModuLine thermostaat is van zichzelf niet poolgevoelig, dus de + en - kan verkeerd om zitten.
Met een multimeter is te meten of de huidige situatie zo is, zo niet, dan de draden even omwisselen.
Er zit geen veiligheidsdiode op de 140209 omdat de thermostaatspanning al aan de krappe kant is.
(Zonder thermostaat is de spanning rond de 12 volt.)

 


De originele 20k potmeter heeft 4 aansluitingen, de linkse pin heeft geen functie.
 


De originele potmeter moet verwijderd worden, hier komt de 140209 print voor in de plaats.
Maak de soldeereilandjes goed vrij van soldeertin.

 


Plaats de 140209 print in de vrijgekomen aansluitingen van de potmeter en ketelaansluiting.
 


Detailfoto soldeerzijde.
 


Voordat de print wordt vast gesoldeerd eerst kijken of deze goed in de kunststof behuizing past.
Vóór het solderen de draden van de 140209 print afknippen.

 


De modulerende thermostaat kan nu met 5 volt (300 Baud) geregeld worden.
Door de optocoupler is een galvanische scheiding gegarandeerd.
Rood = +5V / Zwart = GND.

 


De ModuLine 15 thermostaat van Nefit met ingebouwde 140209 print.
Wees er zeker van dat de linker aansluiting naar de ketel de + is,
voordat de thermostaat geplaatst wordt.
De witte ronde knop klikt in de behuizing, ook zonder de potmeter.
De 140209 print past ook in de goedkoopste thermostaat: de ModuLine 10 (zonder display).

 


Het best kan de PIC eerst geprogrammeerd worden en dan pas in de 140209 print worden gesoldeerd.
De voeding van de ketel is niet geschikt om de PIC in circuit (ICSP) te programmeren.
In circuit programmeren kan alleen als de thermostaat wordt afgekoppeld van de verwarmingsketel en er een voedingsspanning van 5 volt wordt toegevoerd aan de 140209 print.
De PIC kan niet in een voetje worden geplaatst omdat de print dan te hoog wordt waardoor deze niet meer in de ModuLine behuizing past.

De 140209 print nooit zonder de ModuLine print op de klemmen aansluiten, de hogere spanning kan de 140209 print beschadigen.
Een zenerdiode zit niet op de print, deze verstoort namelijk de gegevensoverdracht tussen thermostaat en verwarmingsketel.


PIC Basic
Het onderaan te downloaden PIC Basic programma "Nefit_V-1_NL.bas" is klein genoeg om ook met de LITE versie mee aan de slag te gaan.
Het PIC type achter DEVICE moet in de LITE versie worden gewijzigd in 12F675, want de LITE versie kent de 12F629 niet.
De interne oscillator van de 12F629 kan zodanig afwijken dat de communicatie van 300 Baud niet lukt.
Als dat het geval is, dan moet de PIC oscillator eerst afgeregeld worden met het volgende programmaatje, sluit hiervoor een LED of een buzzer aan op GPIO.5.

DEVICE 12F629     ;Wijzig in PIC Basic LITE de 12F629 in een 12F675 type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF
ALL_DIGITAL TRUE  ;Alle ingangen digitaal

OSCCAL  = 200     ;Hoe hoger de waarde, des te sneller (prototype 170 ... 230)   

WHILE 1 = 1
  HIGH GPIO.5
  DELAYMS 100
  LOW  GPIO.5
  DELAYMS 900
WEND

De waarde achter OSCCAL (0 ... 255) bepaalt de snelheid van de interne oscillator.
Experimenteer net zo lang met deze waarde tot de LED elke seconde even opblinkt (een buzzer i.p.v. LED gaat nog makkelijker).
Als het afregelen gebeurt is (de LED moet ongeveer 60 keer per minuut blinken), dan is de OSCCAL waarde van de PIC bekend en kan die waarde achter OSCCAL in het thermostaat programma "Nefit_V-1_NL.bas" worden geplaatst.


In het PIC Basic programma "Nefit_V-1_NL.bas" staat de volgende regel:

SERIN Ingang, 19697, [WAIT ("Temp"), TempWaarde] ;Wacht op juiste wachtwoord     

De SERIN instructie is hier zo ingesteld dat het wacht totdat op poort 'Ingang' een vooraf opgegeven "wachtwoord" wordt ontvangen, voordat het tot ontvangen van data overgaat.
Zo kunnen meerdere (draadloze) ontvangers op één poort van een (draadloos) data verzendende PIC worden aangesloten.
Het instellen van een wachtwoord kan in de SERIN instructie door de optie WAIT met daarachter tussen haakjes en aanhalingstekens het wachtwoord te plaatsen.
Het "wachtwoord" voor de ModuLine thermostaat is ingesteld op het woordje "Temp" (van temperatuur).
SERIN wacht nu eerst tot er achtereenvolgens T,e,m,p binnenkomt, en als dat gebeurt dan wordt de data die meteen daarna wordt ontvangen in de variabele 'TempWaarde' opgeslagen.
De '19697' is het getal dat de baudrate op 300 Baud (geïnverteerd) zet (voor berekening van de baudrate zie de PIC Basic HELP functie bij de instructie SERIN).

De zendende PIC die de ontvangende PIC in de thermostaat een waarde gaat sturen, moet dus eerst de karakters T,e,m,p verzenden, met meteen daarachter de instelwaarde voor de thermostaat, en dit alles met een snelheid van 300 Baud (= 3313).
In de zendende PIC moet SEROUT daarvoor als volgt ingesteld worden:

SEROUT Uitgang, 3313, ["Temp", Waarde] ;Verzend wachtwoord "Temp" en dan 'Waarde'

Hier zendt SEROUT op poort 'Uitgang', met een snelheid van 300 Baud (= 3313, true), eerst het woordje "Temp", en meteen daarna de waarde.
Hierbij moet de anode (+) van de optocoupler LED op de 140209 print het 300 Baud signaal ontvangen en moet de kathode (-) aan de GND worden verbonden.
De '3313' is het getal dat de baudrate op 300 Baud (true) zet (voor berekening van de baudrate zie de PIC Basic HELP functie bij de instructie SEROUT).


 
De 140209 print is getest met de Nefit Economy HRC 24.
 
Voorbeeldsituatie bij mij thuis
Er hangt een infrarood sensor in zowel de woonkamer als in de hal.
Registreert de infrarood sensor in de hal een persoon dan moet de infrarood sensor in de woonkamer binnen een paar minuten ook iemand registreren omdat de persoon vanuit de hal de woonkamer zal binnenlopen.
Gebeurt dat niet, dan wordt de temperatuursinstelling naar een (vooraf ingestelde) lage economy temperatuur gezet, omdat er vanuit wordt gegaan dat de persoon naar buiten (weg) is gegaan (ik heb maar één buitendeur want woon in een appartement).
Wordt in de woonkamer een persoon waargenomen (onafhankelijk van de infrarood sensor in de hal) dan wordt de verwarming op de (hogere) comfort temperatuur gezet die het laatst was ingesteld.
Dit alles natuurlijk medeafhankelijk van tijd, anders dan zou de verwarming 's nachts ook aan gaan als er iemand even door de kamer loopt.
Het schakelen tussen economy en comfort temperatuur, én het hoger en lager instellen van de comfort temperatuur gebeurt met de Pronto Neo afstandsbediening van Philips, waarmee ik alles in huis regel (audio, video, TV, ramen, luxaflex, bad vol laten lopen, afijn, zie de diverse projecten op deze site).
Via telefoon is de verwarming ook te schakelen tussen economy en comfort temperatuur.

Het wijzigen van de temperatuursinstellingen door bijvoorbeeld de gebruiker of door tijd, gebeurt dus in de data verzendende PIC, waarin ook de constante economy temperatuur ligt opgeslagen.
Steeds als de temperatuurswaarde in deze PIC door de gebruiker wordt gewijzigd, verzendt deze PIC de instelling met 300 Baud naar de ontvangende PIC op de 140209 print in de ModuLine thermostaat, waardoor de centrale verwarming aan of uit wordt gezet.
 


Print 140209 onderdelenlijst:

Print 140209
IC1
IC2
IC3
Weerstand
Condensator 
Zelf etsen of door iemand laten maken (25mm × 28mm)
PIC12F629 Download HEX bestand
X9C103 digitale potmeter 10k
4N25 optocoupler
1k + 2k7 + 4k7 + 6k8
100n SMD (of multilayer type) (2×)
 

Schema


De + en - aansluiting aan de ModuLine thermostaat (rechts) zijn de aansluitingen naar de ketel.
Met een omgebouwde OpenTherm® thermostaat (= geen Nefit) zou het ook moeten werken
.


 

Het makkelijkst is om de print eerst te etsen en te boren en dan pas de hoekjes eruit zagen, niet andersom.
Als geen 100n SMD voorhanden is dan multilayer condensatoren (zie foto rechts) plaatsen, de condensatoren weglaten is geen optie.
 

Download NEFIT.HEX, V-1 bestand om in een PIC12F629 te programmeren
Download Nefit_V-1_NL.bas, de broncode voor PIC Basic
Download schema als PDF bestand
Print layout 140209 als PDF bestand  25 × 28mm  >> Afdruk tips <<
DCF77 thermostaat
DS1820 thermometer
OpenTherm association voor info over OpenTherm®  (= geen Nefit!)
Datasheet EEPOT, X9Cxxx digitale potmeter
Bestel geprogrammeerde PIC