Les 5: Analoge Sensoren

In alle toepassingen van de Arduino speelt de interactie met de buitenwereld een grote rol. Voor interactie zijn er twee zaken nodig:

  • invoer, bij de Arduino in de vorm van sensoren;

  • en uitvoer, in de vorm van actuatoren.

Een sensor is eigenlijk een kunstmatige vorm van wat we in de biologie zintuigen noemen. Voorbeelden van sensoren zijn:

  • druksensor

  • lichtsensor

  • kleurensensor

  • ultrasone sensor

  • temperatuursensor

  • etc

Je kunt sensoren grofweg in twee categorieën onderscheiden: analoge sensoren en digitale sensoren. Maar wat is analoog en wat is digitaal? In het onderstaande kader worden deze begrippen nader toegelicht.

Analoog Analoog betekent overeenkomstig, gelijk aan. Meestal wordt deze term gebruikt in de techniek bij de overdracht van elektronische signalen. Zo wordt bijvoorbeeld het geluid, dat door een microfoon wordt opgenomen, omgezet in elektrische stroom- of spanningsvariaties. Deze worden dan, na elektronisch versterkt te zijn, ten slotte opnieuw omgezet in geluidstrillingen, die door een luidspreker worden weergegeven om te kunnen worden gehoord. Het signaal verliest onderweg, van microfoon tot oor, zijn oorspronkelijke eigenschappen niet en heet daarom analoog. Hetzelfde geldt voor analoge uitzendingen van radio en televisie. Digitaal Een latere ontwikkeling is de "vertaling" van elektronische signalen in een digitale "binaire" code. Digitaal is afgeleid van het Engelse woord digit, dat cijfer betekent. Digitaal wil dus zeggen "in cijfers uitgedrukt". Binair betekent tweetallig, gebaseerd op een talstelsel van slechts twee cijfers, 0 en 1. Ter vergelijking: ons gebruikelijke decimale stelsel heeft 10 cijfers, namelijk 1 t.e.m. 9 en 0. Deze techniek houdt verband met de opkomst van de computer in de jaren 50 en 60 van de vorige eeuw. Een elektrisch signaal kan daar zogezegd "waar" of "niet waar" zijn, zoals een elektrische schakelaar aan en uit kan staan en stroom al dan niet doorlaat. Dus voorgesteld worden door een 1 of een 0. Moderne elektronische schakelingen hebben duizenden, ja soms miljoenen kleine schakelaars.

Dit principe kan ook draadloos worden toegepast. Dus ook op het elektromagnetische veld, dat radio- en televisiezenders rondom uitstralen. Het grote voordeel van gedigitaliseerd transport is het ontbreken van vervorming, die eigen is aan de analoge overdracht.

Het signaal van de televisie in Nederland is sinds 2006 volledig gedigitaliseerd. Ontvangst met een eigen televisieantenne is er dus niet meer bij. Het radiosignaal daarentegen is nog steeds analoog, anders zouden alle bestaande radio's kunnen worden weggegooid. Er is daarnaast tegenwoordig echter eveneens digitale radio. Ook het moderne mobiele telefoonverkeer is digitaal.

bron: https://wikikids.nl/

Veel sensoren zijn gericht op het meten van een analoge waarden; deze wordt door een zogenaamde analoog/digitaal omzetter van de Arduino omgezet in een digitale waarde. We zullen in een volgende les ook digitale sensoren zien, waar de analoog/digitaal-omzetting al deel uitmaakt van de sensor.

Opdracht 1: meten van licht met LDR

Voor dit experiment kun je de sketch Voorbeelden->0.1Basics->AnalogReadSerial gebruiken, om te kijken of de lichtsensor (LDR) werkt.

Een samenvatting van AnalogReadSerial:

void setup() {
  Serial.begin(9600);  // init serial link: 9600 bits per second
}

void loop() {
  int sensorValue = analogRead(A2);   // read the input on analog pin 2
  Serial.println(sensorValue);        // print out the value just read
  delay(1);                           // delay for stability of analog read
}

Opdracht 1 LDR

Opdracht 1a. Met dit programma kun je de waarde van de analoge invoer te zien krijgen in het Seriële Monitor-venster van de IDE (denk om de bitsnelheid). Je kunt daarmee ook controleren of de LDR inderdaad reageert op licht en donker. "Donker" betekent in dit geval echt donker, bijvoorbeeld door er een zwart doosje overheen te schuiven; de hand erop leggen levert niet zo'n groot effect.

  • Wat zijn de waarden die je meet voor "licht" en "donker"?

  • (**) Reken uit wat de bijbehorende weerstand is.

Opdracht 1b. Een volgende stap is om met de uitgelezen waarde een LED aan te sturen. Het programma Voorbeelden->Analog->AnalogInOutSerial laat de LED feller branden als er meer licht op de LDR valt.

  • Pas het programma zo aan dat de LED feller brandt als er minder licht op de LDR valt. (Een "nachtlichtschakelaar", bijvoorbeeld voor een fietslamp.)

AnalogInOutSerial

const int analogInPin = A2;  // Analog input pin:  LDR
const int analogOutPin = 9; // Analog output pin: LED 

int sensorValue = 0;        // value read from the LDR
int outputValue = 0;        // value output to the LED 

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600); 
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);            
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255);  
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);           

  // print the results to the serial monitor:
  Serial.print("sensor = " );                       
  Serial.print(sensorValue);      
  Serial.print("\t output = ");      
  Serial.println(outputValue);   

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);                     
}

Opdracht 2: meten van temperatuur

De temperatuursensor LM35DZ geeft direct een spanning af. Deze spanning kun je meten met een analoge ingang van de Arduino. De relatie tussen de spanning U (in V) en de temperatuur is: T = U * 100 (C). Met andere woorden: de spanning 0V komt overeen met 0 graad Celcius; elke 10mV hoger komt overeen met een graad hoger.

De variant LM35DZ werkt van 0 graad C tot 100 graad C, met 10mV per graad Celcius; andere varianten werken ook voor negatieve temperaturen, en/of in graden Fahrenheit.De precisie bedraagt bij kamertemperatuur ongeveer +/- 0,25C.

Opdracht a. Test eerst de temperatuursensor met het programma AnalogSerial (analoge invoer naar Seriële Monitor). Controleer of de temperatuur verandert als je de sensor vastpakt, of als je erop blaast. Klopt de aanwijzing van de temperatuur met je verwachtingen?

Het genoemde programma heeft voor het meten van de temperatuur twee tekortkomingen:

  1. het programma geeft een digitale waarde, niet een temperatuur.

  2. de maximale spanning van de sensor (1V, voor 100'C) is veel minder dan de maximale spanning van de analoog-digitaal-omzetter (in dit geval: 5V). Je gebruikt niet het volledige bereik van de A/D-omzetter, en dus niet de volledige precisie van de A/D-omzetter.

Opdracht b. Verander het programma zo dat de temperatuur afgedrukt wordt, in plaats van de digitale waarde die uitgelezen wordt. Doe dit in twee stappen:

  1. geef eerst de temperatuur weer als een geheel getal, in 1/10 van graden Celcius. 21,3 geeft je dan weer als 213.

  2. geef de temperatuur weer als een komma-getal. Gebruik hiervoor een float!

Last updated