John Val/ Informatica/ Physical computing/sketch 2

Een tweede project: analoge invoer:The love-o-meter

Temperatuur meten Sketch Licht Uitdagingen
Temperatuur meten: The love-o-meter

love-o-meter


Schema love-o-meter. Klik op het schema voor de bekabeling op het breadboard

In dit tweede project "De love-o-meter" ga je een temperatuurmeting laten uitvoeren door de Arduino. Als reactie op de gemeten temperatuur laat je een of meerdere led's branden en schrijf je de data naar de computer via de USB kabel.
Dit project komt uit het Arduino Projects Book (Project 3). Een video door Massimo Banzi, een van co-ontwikkelaars van Arduino, voor dit project kun je hier vinden. Nederlandstalige uitleg over de gebruikte functies vind je weer in Arduino programmeer manual 1_0 NL.pdf
Na deze les hoor je te weten:

  1. Dat je met de Arduino een analoog signaal uitleest met behulp van analogRead()
  2. Wat een thermistor is.
  3. Dat je data kunt schrijven van de Arduino naar de computer via het object Serial .

In dit project gebruiken we een thermistor. Een thermistor is een elektrische weerstand (component) waarvan de elektrische weerstand afhankelijk is van de temperatuur. Het woord thermistor is een samenvoeging van de Engelse woorden thermal en resistor. (bron). De eigenschappen van de thermistor MCP9701 aanwezig in de Iprototype box kun je lezen in de datasheet. De eigenschappen van de thermistor MPV36 aanwezig in de Arduino Starter Kit kun je lezen in de datasheet.

Beide thermistors zijn linear. Dat wil zeggen dat er een lineair verband is tussen de temperatuur van de omgeving (T) en de spanning (U) die de thermistor daarbij levert. Ofwel T = a U + b. de waarden van a en b verschillen per type thermistor.

Sketch

Sketch love-o-meter

In het schema hierboven zijn 3 LED - weerstand combinaties en een thermistor geplaatst. Klik op het schema voor de bedrading op de Arduino. Maak dit circuit.

De onderstaande sketch kun je in de IDE laden. In het bovenste deel van de sketch wordt beschreven wat er van het programma wordt verwacht. De code voldoet daar echter nog niet aan.

/*
 Analog Input
 Demonstratie van het uitlezen van een thermistor (temperatuur meting) verbonden aan de analoge
 invoer 1.
 Op basis van de uitgelezen waarde wordt bepaald of de persoon die de termistor verwarmt met
 zijn vingers "vurig is" of niet. 
 Er zijn 3 leds aangesloten Groen, Geel en Rood. 
 Onder 20 graden moeten alle leds uit zijn.
 Tussen 20 en 22 graden moet alleen groen aan zijn. 
 Tussen 22 en 24 groen en geel aan zijn.
 Tussen 24 en 26 geel en rood aan zijn.
 en tenslotte bij meer dan 26 graden alleen rood aan zijn.
 
 Taken from Arduino Projects Book
 modified 2 Jan 2014 By John Val
 This example code is in the public domain.
 
 https://arduino.cc/en/Tutorial/AnalogInput
 
 */

int sensorPin1  = A0;     // selecteer de invoer pin voor de thermistor
int ledPinGroen = 13;     // selecteer de uitvoer pin voor de groene LED
int ledPinGeel  = 12;     // selecteer de uitvoer pin voor de gele LED
int ledPinRood  = 11;     // selecteer de uitvoer pin voor rode de LED
int basistemeratuur = 20; // grenswaarde voor de led aan
// De thermiostor is een linaire thermistor zodat T = a * U + b
// Voor de MCP9701 thermistor geldt a= 51.3 en b= -20.5
// Voor de MPV36 thermistor geldt a= 100 en b= -50
float a =51.3;
float b =-20.5;

void setup() {
  // declareer de ledPin als OUTPUT:
  pinMode(ledPinGroen, OUTPUT); 
  pinMode(ledPinGeel, OUTPUT); 
  pinMode(ledPinRood, OUTPUT);
  // gebruik de functie setLeds die verderop in de sketch is gemaakt om
	// alle lampjes uit te zetten.
	setLeds(LOW,LOW,LOW); 
  //  initialiseer de Serial communicatie over de USB connectie (https://arduino.cc/en/Serial/Begin), 
	Serial.begin(9600);
}

void loop() {
  // Lees het voltage op de analoge input:
  // De documentatie van analogRead vind je op https://arduino.cc/en/Reference/analogRead
  float U = (analogRead(sensorPin1)/1023.0)*5.0; 
  float T = a * U + b;  
  Serial.print("Waarden invoer: ");
  Serial.print(U);
  Serial.print(" komt overeen met temperatuur ");
  Serial.println(T);
  if(T<basistemeratuur)
  {
     setLeds(LOW,LOW,LOW);
  }
  else if(T<basistemeratuur+2)
  {
    setLeds(HIGH,LOW,LOW);
  }
  /*
	 maak de functie af zodat de led's worden geschakeld volgens
	 de voorwaarden boven in deze sketch.
  */
  delay(1000);          
}

void setLeds(int groen,int geel, int rood)
{
  digitalWrite(ledPinGroen,groen);
  digitalWrite(ledPinGeel,geel);
  digitalWrite(ledPinRood,rood);
  
}
Opdracht
  1. Pas de code aan zodat de het programma voldoet aan de eisen in de sketch.
  2. Wat betekent Serial.begin(9600)? Wat betekent baud rate?
  3. Zoals je in de beschrijving van analogRead kunt lezen geeft deze functie een geheel getal van 0 t/m 1023 terug als waarde.
    Leg uit wat float U = (analogRead(sensorPin1)/1023.0)*5.0; doet. Voeg je uitleg als commentaar toe aan de sketch code.
  4. Maak de schakeling en laad de sketch in de Arduino. Open de serial monitor via EXTRA/Seriële monitor.
  5. Zoek in de documentatie van jouw thermistor op wat de nauwkeurigheid is bij een bepaalde temperatuur. Waarom wordt deze nauwkeurigheid niet gehaald? Tip: Wat doet analogRead? Wat is de temperatuurstap per geheel getal? Je kunt je analoge signaal manipuleren met behulp van een operational amplifier (OpAmp) . Je kunt hiermee proberen het kleine gebied rond de meest interessante voltage van de thermistor om te zetten in een 0 t/m 5 volt waarden. Dit document kan hierbij misschien behulpzaam zijn. Voor je dit wilt proberen maak je eerst de lichtsensor spanningsdeler.
Licht

Licht


Schema lichtsensor spanningsdeler. Klik op het schema voor de bekabeling op het breadboard

Er zijn meerdere sensoren in de kits aanwezig. Zoek in je kit een lichtsensor. Je ziet dat er aan deze sensor maar twee connectoren zitten in plaats van de drie van de thermistor. De thermistor bevat een transistor die een deel van de spanning voor je aftapt. Dit moeten we nu zelf gaan doen door een spanningsdeler te maken. Dit gaat als volgt:
Sluit één van de connectoren van de lichtsensor aan op de spanningsbron van 5V. De tweede connector wordt aangesloten op een hoge weerstand (b.v. 10 k&Ohm;) die je aansluit op de aarde. Tussen de sensor en de weerstand tap je de spanning af richting de analoge input.

  1. Verwijder de Arduino van de computer en vervang de thermistor door de spanningsdeler voor de lichtsensor. Sluit vervolgens de arduino weer aan. Wat zie je? Probeer eens door je hand te bewegen verschillende leds aan te krijgen.
  2. Pas de code uit de sketch aan zodanig dat als je hand 5cm van de sensor af is de groene led brandt, op 10cm de groene en gele led branden op 20 cm de gele en rode led branden en verder dan 30 cm de rode led brandt.
  3. Waarom wordt er zo'n hoge weerstand achter de sensor geplaatst en waarom moet de analoge input worden aangesloten in het circuit tussen de sensor en de weerstand? Ofwel hoe werkt een spanningsdeler? Tip
Uitdaging

Uitdaging

  1. Uitdaging Morse code lezen: Laat met de lichtsensor de morse code uit sketch1 die wordt geproduceerd door een andere Arduino terug vertalen naar een boodschap.