Server » Verwarming » Arduino
Zelf aan de slag:
Sturing van de verwarming met een Arduino
Arduino
Het is mogelijk een Arduino te gebruiken voor de sturing van de verwarming, maar snel botst je tegen een probleem: de Arduino heeft te weinig digitale poorten (aan/uit).

De arduino kan gebruikt worden om een kleine centrale verwarming te sturen met vier zones (living, slaapkamer I, slaapkamer II en badkamer). De boilertemperatuur en de buitentemperatuur wordt ook gemeten zodat de 6 analoge ingangen gebruikt worden.

De aanduiding gebeurt door een LCD module die serieel aangestuurd wordt. De meeste LCD modules kunnen ook stuurkodes verwerken zodat een mooie aanduiding mogelijk is (cursorpositionnering, inverse letters,...).

Maar het probleem is de beperkte aantal digitale in- en uitgangen. De poorten worden softwarematig ingesteld als ingang of uitgang tijdens de initialisatie. Maar het aantal poorten is veel te beperkt.

We hebben dus 4 poorten nodig om de kleppen van de 4 zones aan te sturen, de brander moet aan- en uit gezet kunnen worden en de circulateur moet kunnen draaien volgens 3 snelheden:

  • LOW + MED = OFF,
  • LOW + MED = LOW,
  • LOW + MED = MED en
  • LOW + MED = HIGH

Dit is theoretisch mogelijk, maar het kan wel nuttig zijn aanduiders te voorzien om aan te geven of er een speciaal programma aan het draaien is (bijvoorbeeld extra warmte in een ruimte).

Ook zijn er stuurknoppen nodig om de funkties te aktiveren: meer warmte of minder warmte hier, we zijn weg gedurende x uren, badprogramma, slaapprogramma, enz. Een tiental drukknoppen zijn nodig, maar zoveel poorten hebben we niet.

Ik gebruik hier specifiek drukknoppen en geen schakelaars, want bepaalde funkties moeten van meerdere plaatsen bediend kunnen worden. De drukknoppen worden gewoon parallel geschakeld en de leds (aanduiders) worden in serie gezet (met een stroombeperkingsweerstand).

Verhoging van het aantal binaire uitgangen


De procedure om de extra uitgangen te sturen staat beschreven op de pagina over de realisatie van een nixie klok.

Indien je een arduino zou gebruiken voor de sturing van de verwarming, dan zal je snel merken dat je te weinig binaire in- en uitgangen hebt. Zelfs de PLC-versie heeft er te weinig (de PLC uitvoering is gewoon een extra kast rond de arduino, met een voeding, relais voor de uitgang en optocoplers voor de ingangen).

Maar door 4 CD4099BE te gebruiken (BCD to decimal with latch) kan je niet minder dan 32 uitgangen aansturen. Daarmee heb je zeker genoeg, zelfs al zou je een paar van deze uitgangen gebruiken om d eingangen uit te lezen).

Per IC wordt de BCD code (3 bits) omgezet in een decimale code (8 lijnen). De uitgangen kunnen één voor één aan of uitgezet worden (de geschreven waarden blijven in de geheugen zitten).

Indien je genoeg zou hebben met 24 uitgangen kan je een 4099 uitsparen (een schrijflijn komt hierbij vrij). Met 16 uitgangen heb je genoeg met 2 4099 en heb je opnieuw een processorlijn die vrijkomt.

Uitbreiding van het anatal binaire ingangen

Je kan de binaire poorten van de arduino vrij configureren als ingang of uitgang, maar uiteindelijk heb je toch te weinig poorten. Je kan een deel van de aangemaakte uitgangspoorten gebuiken om de toestand van drukknoppen te lezen.

Veronderstel dat we de toestand van 8 drukknoppen willen inlezen. We kunnen 8 van de 32 uitgangen gebruiken. We zetten de eerste lijn hoog en de andere laag en lezen het resultaat: is de ingang hoog, dan maakt de eerste drukknop contact. Dan doen we hetzelfde om de tweede drukknop uit te lezen, en zo verder tot alle drukknoppen uitgelezen zijn.

Dit lijkt een hele bedoening, maar het is een kleine routine die slechts éénmaal geprogrammeerd moet worden en dan overal gebruikt kan worden als we de toestand van een drukknop willen lezen (overigens is het beter de toestanden van alle drukknoppen in één keer te lezen en het resultaat in een tabel op te slaan).

Met 8 van de 32 uitgangen kunnen we eigenlijk meer dan 8 drukknoppen uitlezen, namelijk 24. Hier verliezen we wel een analoge ingang. Ieder van de 8 uitgangen kan de toestnd van 3 drukknoppen uitlezen. De drukknoppen worden met een weerstand verbonden met de analoge ingang van de arduino. Drukknop 1 heeft een weerstand van 2.2kΩ, knop 2 een weerstand van 680Ω en drukknop 3 één van 120Ω. De ingang heeft een weerstand naar massa van 1kΩ.

De eerste uitgang wordt aktief gemaakt, we kunnen zo de toestand van drie knoppen uitlezen. Is de eerste drukknop ingedrukt, dan heeft men een ingangspanning van ongeveer 1V. Wordt de tweede knop ingedrukt, dan heeft men een weerstand van ongeveer 2.5V en wordt de derde knop ingedrukt, dan bedraagt de ingangspanning ongeveer 4V (rekening houdend met de verliezen over de schakeldiode).

Als de tweede uitgangslijn aktief gemaakt wordt, dan worden de drie volgende drukknoppen uitgelezen, en zo verder. In het voorbeeld worden er slechts 4 lijnen gebruikt, genoeg on de toestand van 12 druktoetsen in te lezen. Voor een kleine verwarmingsinstallatie is dit ruim voldoende.

Meer analoge ingangen

De arduino heeft 6 analoge ingangen, wat voor d emeeste toepassingen voldoende is. Maar hier ook kan men het aantal ingangspoorten artificieel verhogen door een multiplexer te gebruiken. De multiplexer verbind om beurt één van de extra ingangen met de ingang van de arduino.

Om de multiplexer te schakelen zal men hier ook een aantal uitgangslijnen nodig hebben: 2 indien men 8 analoge ingangen wilt multiplexen naar twee ingangen (of 4 naar 1), of 3 indien men 16 ingangen wilt multiplexen naar 2 (of 8 naar 1).

Op de twee of drie lijnen zit er een BCD kode om de lijn te selecteren die met de analoge ingang verbonden gaat worden.

Een multiplex-voorbeeld om het anatal ingangen te verhogen is gegeven op de K8055 van Velleman. Die computer in/out kaart heeft veel te weinig analoge ingangen. De BCD kode die naar de 4028 gestuurd moet worden wordt geleverd door twee of drie lijnen van de 4099 (op deze pagina).

Links to relevant pages - Liens vers d'autres pages au contenu similaire - Links naar gelijkaardige pagina's