Met onze arduinoklok kunnen we ook temperaturen inlezen (omzetten van analoog naar digitaal) en tonen. |
-
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. Het doven van bepaalde posities geeft eenduidig aan dat de arduino een temperatuur aangeeft.
Electronisch gedeelteDit 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).
ProgrammatieDe 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:
We schrijven de drie cijfers: In ons geval is de programmatie complexer geworden, want we moeten de temperatuuraanduiding combineren met de tijdaanduiding. We kunnen drie displaymodussen kiezen:
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.
CalibratieWe 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.
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