Teun de slimme thermostaat, workshop 3

Hoofdcategorie: Techniek Categorie: Arduino
Diverse weerstandenDiverse weerstanden

Inleiding

In Workshop 3 worden potmeters en een speciaal soort weerstand, de NTC, uitgelegd. Teun kan natuurlijk niet werken zonder dat de temperatuur gemeten en ingesteld kan worden.

In het laatste deel van deze workshop wordt programmacode besproken die de waardes van de potmeter en NTC inleest. Deze workshop is het vervolg op Workshop 2. De code zelf kun je weer downloaden.


potentiometerPotmeter

Een speciale weerstand, de potmeter

Een potentiometer of potmeter is een variabele weerstand, waarvan de weerstand wordt bepaald door de stand van een mechanisch beweegbaar onderdeel. In de schakeling worden 2 typen potmeters gebruikt:

De wat grotere paneelpotmeter. De waarde van de weerstand varieert door aan het asje te draaien. Dit soort potmeters zitten bijvoorbeeld ook als volumeregelaar in een radio. In de schakeling wordt deze potmeter gebruikt om de gewenste temperatuur in te stellen.
instelpotInstelpotmeterDe kleine blauwe instelpotmeter. De waarde van de weerstand varieert door aan het kleine schroefje te draaien. In de schakeling wordt deze potmeter gebruikt om de lichtsterkte
van het LCD scherm in te stellen. De instelpotmeter is direct gekoppeld aan het LCD, dus niet aan de Arduino.


variable spanningsdelerSpanningsdelerEen potmeter heeft 3 aansluitingen. Samen functioneren ze als een spanningsdeler. Schematisch ziet dat er uit als in afbeelding 20 weergegeven. Op de beide uiteinden, de buitenste twee pootjes van de potmeters, worden de voedingsspanning ( 5 Volt) en de GND (0 Volt) aangesloten. Op het middelste pootje komt nu een spanning afhankelijk van de stand van de potmeter te staan. Staat de potmeter halverwege dan staat de halve voedingsspanning op de middelste aansluiting, etc.
ntc fotoNTC

Nog een speciale weerstand, de NTC

Weerstanden varieren iets in waarde, afhankelijk van de temperatuur. Meestal is dit niet wenselijk. Er wordt daarom voor de meeste weerstanden materiaal gebruikt wat weinig in weerstandswaarde varieert bij temperatuurveranderingen. In het geval van een NTC, een weerstand met een Negatieve Temperatuurs Coefficient, wordt van dit effect juist gebruik gemaakt, een NTC is dan ook gemaakt van materiaal wat sterk op temperatuurwijzigingen reageert.

De NTC is dus heel gevoelig voor temperatuurwisselingen en geeft dus een maat voorvoor de omgevingstemperatuur. We gebruiken hem in onze schakeling als "thermometer".



ntc curveNTC curventc symbolHelaas is het verband tussen de temperatuur en de weerstand niet lineair. Voor de workshop wordt dit genegeerd en aangenomen dat het verband lineair is. Uiteraard kun je dit met extra programmacode en ijking oplossen.

Uit de grafiek valt af te leiden dat als de temperatuur hoger wordt, de weerstandswaarde lager wordt. Een NTC wordt schematisch weergegeven als in de afbeelding links.


Het inlezen van een spanning, de Analoog-Digitaal converter.

In workshop 1 hebben we met een digitalRead de waarde van de button ingelezen. De digitalRead geeft als resultaat een 0 of een 1. Om met de waarde van de potmeter en de NTC kunnen werken, moeten we de echte spanning weten. Dat kan door deze met een analogRead in te lezen. De analogRead maakt gebruik van een ingebouwde A-D converter in de Arduino. De ADC leest de spanning op een ingang van de Arduino en vertaald deze naar een waarde. Een spanning van tussen de 0 en 5 Volt levert een waarde tussen de 0 en de 1023. De verhouding tussen de spanning en de waarde die het oplevert is keurig lineair.

Niet alle pinnen van de Arduino kunnen als ADC gebruikt worden. Alleen de pinnen waar een A voor staat, dus A0 tot en met A5. We gebruiken voor de potmeter pin A0 en voor de NTC pin A1

De code aangepast, de temperatuur instellen.

De gewenste temperatuur wordt ingesteld met de potmeter. Open het bestand IoT_Workshop_3.fzz in Fritzing.

Net als bij de vorige workshop beginnen we ook hier met het toevoegen van benodigde variabelen. We hebben een extra variabele nodig waarin bijgehouden wordt hoe 'fel' de verwarming moet brangen. We noemen deze variabele heatingPowerVal. In de code zie je dat heatingPowerVal bovenaan bij constants and variables onder het kopje Heating System staat.

Er is ook een kopje Potentiometer verschenen met daarin het gebruikte Arduino pinnummer en een variabele potValue waarin de gelezen waarde opgeslagen wordt.

Bij de routines is een setupPotmeter verschenen. Hier wordt de pin als input gedefinieerd.

In de routine getPotmeterData wordt met behulp van een analogRead de waarde op de pin gelezen. We doen dit een aantal keer (SAMPLE_COUNT) en middelen de waarde dan uit. Dit gebeurt om stabiliteitsredenen waar we hier verder niet op ingaan. De waarde van SAMPLE_COUNT wordt bovenin de code vastgelegd.

Als de waarde van potValue is bepaald moeten we hem omzetten van een getal tussen de 0 en 1023 naar een realistische temperatuurwaarde. Dat doen we met behulp van het map commando. De waarden tussen 0 en 1023 worden proportioneel omgezet naar een waarde tussen 0 en 50. Deze waarden zijn niet helemaal correct maar voldoen voor de workshop.

De temperatuur meten.

Teun meet de temperatuur van de omgeving met behulp van de NTC. Aangezien de NTC en de potmeter vergelijkbaar werken zie je vergelijkbare toevoegingen in de code.

Ook hier wat variabelen, een setup en een stukje code om de NTC waarde in te lezen. In het map commando zie je iets andere waarden omdat dit een beter resultaat voor de workshop geeft. Ook hier zijn de waarden niet helemaal correct maar voldoen ze prima voor de workshop.

Nu wordt Teun aan het werk gezet.

We hebben alle gegevens die nodig zijn om Teun ook echt te laten werken. Wanneer moet de verwarming aan gaan en hoe fel moet hij branden? Welke tekst moet er dan op het LCD scherm komen en welke LEDs gaan er aan? De code om dit te regelen vind je in de routine controlThermostat();

Probeer zelf uit te vinden hoe de thermostaat geregeld wordt. Heb je hier andere ideeën over, pas het dan gerust aan.

Je hebt nu de code zoals deze bij workshop 0 geintroduceerd is weer helemaal werkend. Als je Teun onder controle hebt kun je verder met workshop 4.