Arduino lessen/les 4

Uit Lab
Naar navigatie springen Naar zoeken springen
Arduino lessen
  1. Blink - digitale uitvoer
  2. Button - digitale invoer
  3. Dimmer - PWM
  4. Dimmer - analoge invoer
  5. Seriële uitvoer naar host
  6. Analoge sensoren
  7. Beweging: servo
  8. Button - event
  9. Tijd - timers
  10. Blink - met timer

Dimmer - analoge invoer

Een Arduino heeft een analoge invoer: een 10-bits Analoog/Digitaal omzetter (A/D converter). Het resultaat van een A/D omzetting is een geheel getal in het bereik 0..1023.

Opdracht 1

Analoge invoer via potmeter
Analoge invoer via potmeter

Maak op het breadboard een LED-dimmer met een potmeter:

  1. sluit een LED aan op pin 9; dit is één van de pinnen die als analoge (PWM) output gebruikt kan worden;
  2. plaats een potmeter op het breadboard, zoals aangegeven. Sluit de loper (middelste aansluiting) van een potmeter aan op pin A0. Dit is één van de pinnen die als analoge input gebruikt kan worden. De andere twee pinnen sluit je aan op 0V en 5V. De loper van de potmeter geeft nu een spanning tussen 0 en 5V; de A/D-omzetter van de Arduino maakt hiervan een getal tussen 0 en 1023.
  3. gebruik het onderstaande programma om het geheel te laten werken als een analoge dimmer: door de potmeter te verdraaien brandt de LED feller of minder fel.

Dimmer-programma:

const int analogInPin = A0;  // Analog input pin for potentiometer
const int analogOutPin = 9;  // Analog output pin for LED

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {
  pinMode(analogOutPin, OUTPUT); // initialize LED output pin
}

void loop() {
  sensorValue = analogRead(analogInPin); // read the potmeter value
  delay(2);            // wait 2 milliseconds for the AD converter to settle
             
  outputValue = map(sensorValue, 0, 1023, 0, 255);  // map input to output range
  analogWrite(analogOutPin, outputValue);      // set the LED                          
}

Opmerking: je kunt ook het programma Bestand->Voorbeelden->0.3 Analog->AnalogInOutSerial gebruiken. Dat programma stuurt de analoge invoerwaarden ook naar de host, via de seriële verbinding. Deze waarden kun je in het Seriële Monitor-venster van de Arduino IDE bekijken. Een voordeel van een dergelijke aanpak is dat je beter kunt volgen wat het programma doet.

Opdracht 2

In het programma voor de dimmer hebben we te maken met twee analoge waarden: de invoer van de potmeter, en de uitvoer voor de LED. Het bereik van deze twee waarden is verschillend: het bereik van een analoge invoer is 0..1023, het bereik van een analoge (PWM) uitvoer is 0..255.

  • Bescrhijf wat er gebeurt als je de uitvoerwaarde direct overneemt van de invoerwaarde (dus zonder <code)map()-aanroep).
  • Beschrijf wat de map()-aanroep doet in het oorspronkelijke voorbeeld.
  • Maak een schakeling met 2 LEDs, waarbij de ene LED een tegengestelde (complementaire) waarde heeft ten opzichte van de andere LED.
    • Hint: gebruik outputValueA + outputValueB = 255.

Opdracht 3

P.M.

Overige

Dimmen zonder de Arduino

Analoge dimmer met potmeter

Voor een eenvoudige dimmer met een LED en een potmeter heb je geen computer nodig: je kunt ook gewoon de onderstaande volledig analoge schakeling gebruiken.

Het voorbeeld met de Arduino is dan ook vooral bedoeld om te leren werken met de analoge inputs en outputs.

  • sluit de beide uiteinden van een potmeter aan op 0V en 5V.
  • sluit een LED met serieweerstand aan op de loper (middelste aansluiting van de potmeter)
  • zie de bijgaande schakeling.

De loper van de potmeter geeft nu een spanning tussen 0 en 5V, deze kun je veranderen door de potmeter-as te verdraaien. De LED gaat daardoor feller of minder fel branden.

Vraag: stel dat het energieverbruik van de Arduino verwaarloosbaar is: hoe verhoudt zich het energieverbruik van de analoge schakeling met de digitale schakeling met de Arduino?