Electronika
Nixie klok: temperatuurmeting
TechTalk
Met onze arduinoklok kunnen we ook temperaturen inlezen (omzetten van analoog naar digitaal) en tonen.
-

-

Gelijkaardige artikels:
We kunnen ofwel een zelfstandige thermometer realiseren (die bijvoorbeeld de binnen- en buitentemperatuur meet en aangeeft), of we kunnen onze horloge aanpassen om afwisselend het uur en de temperatuur te tonen. De kostprijs van een losse temperatuurmeting zit hem niet in de arduino (die slechts een paar €s kost), maar in de stuurelectronica van de buizen en de nixiebuizen zelf. We geven hier een zeer algemene kode die gebruikt kan worden in beide toepassingen.

De omzetter in de arduino werkt met 10 bits en heeft dus 1024 niveaus. Indien we de temperatuur meten tussen 0 en 50°, geeft dit ons een nauwkeurigheid van 0.05°C. We hebben drie aanduiders nodig om de temperatuur aan te geven.

Indien we reeds een horloge gebouwd hebben, dan zullen er cijfers zijn die niet moeten oplichten.
29 59 59 <-- maximale waarde die aangeduid kan worden
54 32 10 <-- gebruikte cijferposities
We hebben in het blauw aangegeven welke posities we voor de temperatuur zullen gebruiken. In theorie kunnen we een temperatuur aangeven tot 59.9°, maar we beperken de temperatuur tot 49.9° voor zeer praktische redenen: men kan altijd de hele arduino vervangen door een 5V voltmeter en men heeft ook een temperatuurindikatie.

Het doven van bepaalde posities geeft eenduidig aan dat de arduino een temperatuur aangeeft.

Electronisch gedeelte

Dit deel werd in minder dan een uur gerealiseerd. We hebben een omzetting nodig die een spanning levert van 0 tot 5V voor een temperatuur van 0 tot 50°C. We gebruiken een Pt100 in een basisschakeling, we hebben genoeg aan een tiental standaard componenten.

We gebruiken een dubbele voeding waarbij de positieve en negatieve lijn gefilterd worden door een weerstand en condensator. De voedingslijn van mijn schakelende voeding bleek enorm gestoord te zijn. Controleer dat de voedingsspanningen niet boven de +12V en -12V liggen. Het is beter veilig binnen de normen te blijven met een absolute maximale spanning van 30V. Ik gebruik de beschikbare spanningen van mijn schakelende voeding, maar als je een eigen voeding moet bouwen volstaat een klein transfooke van tweemaal 8V 4VA: deze schakeling verbruikt 125mW.

We gebruiken een LM10 die speciaal gemaakt is voor dergelijke toepassingen. Met de opamp kan je een stroombron maken met slechts enkele extra onderdelen. De drainspanning van de transistor is -5.5V, ongeacht de voedingsspanning (de spanningsbron levert precies -2mA).

We sturen de opamp op zijn negatieve ingang. De spanning over de Pt100 wordt -150× versterkt. Als de temperatuur stijgt, dan wordt de spanning over de Pt100 meer negatief, gaande van -0.2V naar -0.239V bij een temperatuur van 50°. De offset van -0.2V wordt weggeregeld door een spanning op de positieve ingang van de op amp. Gebruik hiervoor een multiturn instelbare weerstand. De gain wordt ingesteld via de software.

Wenst men een snellere reaktie op een temperatuurswijziging, dan kan men de weerstand van 150kΩ vervangen door twee weerstanden van 75kΩ, met een condensator van 1000µF en een weerstand van 1kΩ in serie naar de massa. Het wisselcomponent wordt grotendeels tegengehouden, waardoor de op amp de hogere frekwenties sterker gaat versterken (differentiatie). Het uitgangssignaal bevat meer ruis, dat we digitaal zullen moeten verwijderen.

Het voordeel van dit systeem is dat de reaktiesnelheid verbeterd wordt, maar ook dat de ruis een stoorsignaal in de AD omvormer zal veroorzaken. De digitale ruis kan gemakkelijk weggefilterd worden, met als bijkomend voordeel dat we via een omweg de nauwkeurigheid van de omvormer verhoogd hebben. Deze eigenschappen zijn nuttig als de temperatuurmeting een deel is van een groter systeem (overshoot kan daarmee onderdrukt worden).

Programmatie

De analoge input wordt met een eenvoudige instructie gelezen:
ftemp = (analogRead(1) + ftemp * 9) /10.0;
ftemp is een float variabele die de uitgelezen integer waarde (0 à 1023) inleest en omzet naar een float-waarde. Waarom? Om een lichte integrerende werking te bekomen. Zo wordt vermeden dat er cijfers constant verspringen als de analoge waarde tussen twee digitale meetpunten valt. We maken een gemiddelde over 10 opeenvolgende waarden. De uitmiddeling is niet verplicht, maar is zeker aangewezen als de waarde bij iedere lus gelezen en verwerkt wordt (lus zonder pauze).

De uitmiddeling met een faktor 99/100 is nodig als je de electronische differentiërende instelling van de op amp gebruikt. De uitmiddeling filters de ruis weg en verhoogt de nauwkeurigheid van de AD omzetter. Hoe dit werkt wordt hier uitgelegd: verhoging van de nauwkeurigheid van een AD omzetter (tweede deel van het artikel).

De sturing van de nixie aanduiders kan maar zo eenvoudig zijn, dankzij de routines die we voor de klok geschreven hebben. We beginnen met de cijfers te doven die we niet gebruiken:
SndCh(5, 15); SndCh(4, 15); SndCh(1, 15);

We zetten nu de waarde 0..1023 om tot een waarde 0..499 met de formule
itemp = ftemp/2.05 + 0.05;
itemp is een integer variabele die de temperatuur bevat in tienden van een graad.

We schrijven de drie cijfers:
SndCh(0, itemp % 10); itemp = itemp / 10;
SndCh(2, itemp % 10); SndCh(0, itemp / 10);
De operator "%" geeft de rest van de deling (modulo funktie).

In ons geval is de programmatie complexer geworden, want we moeten de temperatuuraanduiding combineren met de tijdaanduiding. We kunnen drie displaymodussen kiezen:

  • constant de temperatuur
  • enkel de tijd
  • 3 sekonden de temperatuur en 3 sekonden de tijd ("apotheekmodus")

Test de werking van de omzetter (moet als een digitale voltmeter werken): met een spanning van 3.21V moet de aanduider idealerwijze 32 1 aangeven, de exacte waarde moet later ingesteld worden.

Calibratie

We worden hier geholpen door het feit dat onze omzetter een spanning moet afleveren van 0 tot 5V voor een temperatuur tussen 0 en 50°C.

De calibratie gebeurt door middel van een Pt-100 calibrator (voorbeeld rechts) of een weerstandsdecadebank.

  1. Offsetregeling
    Stel de temperatuur in op 0° of gebruik een weerstand van 100.0Ω
    Indien je niet over een calibrator beschikt kan je ook de Pt100 onderdompelen in smeltend ijs.
  2. Stel de weerstand op de print in om een uitgangsspanning van 0.0V te bekomen op de uitgang van de meetmodule (ingang van de omzetter)
  3. Controleer dat de nixie aanduiders 00 0 aangeven

  4. Gainregeling
    Stel de temperatuur in op 49° of gebruik een weerstand van 119.0Ω
    Indien je niet beschikt over een calibrator of een decadebank kan je deze stappen overslaan. De fout zal 5% bedragen (nauwkeurigheid van de gebruikte weerstanden). Dit komt overeen met een fout van 1° bij een aanduiding van 20° (het nulpunt is wel juist).
  5. De uitgangspanning moet ongeveer 4.9V bedragen, de exacte spanning is niet belangrijk. Indien de spanning boven de 5V zou liggen, dan kan die waarde niet gedigitaliseerd worden: verlaag dan wat de temperatuur of de weerstand. Veronderstel dat we de temperatuur op 47.5° moeten instellen voor een spanning van 4.9V.
  6. Verander de waarde van de constante 2.05 in de software om een aanduiding van 49 0 (of 47 5 indien je de temperatuur in de vorige stap hebt gewijzigd). Je moet de constante verhogen om een lagere aanduiding te bekomen en omgekeerd (de constante is de deler).
Onze temperatuuraanduider is nu klaar. Indien je de aanduider niet gebruikt voor de tijd, kan de software sterk vereenvoudigd worden. Maar waarom niet de software gebruiken om de gainregeling op te nemen? Voorzie een drukknop + om de aanduiding te verhogen (de constante wordt met 0.01 verlaagt bij iedere lusdoorgang) en een drukknop - om de waarde te verlagen.

De constante (deler) moet in de EEPROM opgeslagen worden (tien seconden na de laatste wijziging) zodat zijn waarde niet verloren gaat bij een stroomonderbreking of reset. Daarvoor moet je een library gebruiken (<EEPROM.h>) want het zijn geen standaard C-opdrachten. De deler moet omgezet worden in een integer (×100) en opgeslagen worden in drie EEPROM lokaties (dezelfde methode met modulo en deling als de methode gebruikt voor het sturen van individuele cijfers naar de nixie buizen).

Publicités - Reklame

-