Arduino AnalogInput

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

Denne opgave går videre som en del af den grundlæggende start på Arduinoen.

Software

Der er ikke et enkelt program der kan dække hele opgaven, så der skal hentes dele fra forskellige programmer, for at lære de forskellige teknikker omkring den serielle port.

At måle med Arduinoen og få en reaktion på målingen

Det første er at få Arduinoen til at sende noget der kan læses på PC'en.

I Arduino-programmet åbnes Fil - Eksempler - 03.Analog - AnalogInput[1].

Virkemåde

I funktionen setup() sættes et ben op til Output.

I funktionen loop() afvikles den samme kode i en uendelig løkke, hvor der læses en analog værdi på ben A0 - dette giver et tal mellem 0 og 1023. Værdien bliver så efterfølgende brugt som puls-tid og pause-tide, hvor enheden i tiden er målt i millisekunder (1/1000 sekund).

Hardware

For at teste programmet fornuftigt skal der tilsluttes noget hardware. Der skal tilsluttes en LED til ben 13 og et potentiometer så man kan variere spændingen på A0.

For at måle hvilken spænding der sendes ind i Arduinoen, så tilkobles et voltmeter på den variable spænding og til stel, som vist både på diagrammet og på fumlebrættet.

Dette er illustreret i følgende diagram:
Arduino-seriel-input-diag.png
Diagram over Arduinoen med et potentiometer der kan variere fra 0-5V og en LED på en udgang

Kobler man det op på fumlebræt kan det gøres som illustreret her:
Arduino-seriel-input.png
Fumlebræt med Arduinoen tilsluttet et potentiometer der kan variere fra 0-5V og en LED på en udgang

Test

For at teste programmet laves opstillingen som vist, hvorefter man kan variere den analoge spænding fra 0-5V, og observere at den ved 5V blinker langsomt, og efterhånden som der skrues ned mod 0V, så blinker den hurtigere, indtil man ved 0V ikke kan registrere at den blinker, fordi det sker så hurtigt.

Ændringer i programmets opførsel

For at komme ind i tankegangen med programmering, så er det en god praksis at man prøver at få eksisterende programmer til at opføre sig anderledes.

Udvidelse 1

Prøv at lave programmet så det holder en fast pasue i blinket, og kun varierer pulstiden. Pausen kunne f.x. være på 100 ms.

Observer hvordan rettelsen har ændret programmets opførsel.

Udvidelse 2

For at gøre programmet mere fleksibelt kunne man lave der så man læser pausetiden ind fra PC'en via den serielle port.

Et hint til programmeringen kunne være at få indflettet en ny variabel pauseTid. Denne variabel kan indlæses med følgende metode:

    pauseTid = Serial.parseInt();

Det kan evt. være en fordel at kigge på en tidligere opgave for at kunne styre teknikken med at læse noget ind.

Prøv med forskellige tal og observer programmets reaktion.

Test af variabeltype

Variablen pauseTid kan være en byte, som kun indeholde værdier fra 0 til 255 - prøv at taste tal større end 255, og find ud af hvordan Arduinoen håndterer dette.

Prøv at lav pauseTid til en variabel af typen int, og se hvordan den så reagerer.

Referencer

  1. http://arduino.cc/en/Tutorial/AnalogInput Analog læsning, Styring af tiden i Blink