Kategori: Lese analoge verdier
Treff: 4474

En Arduino Uno har seks pinner som kan måle analoge verdier. Disse pinnene heter A0 til A5. I mikrokontrolleren ligger det en 10-bits analog-til-digital-konverter (ADC). Det vil si at spenningene vi måler på disse pinnene gjøres om til verdier fra 0 til 1023, hvor (i utgangspunktet) 0 tilsvarer 0V og 1023 tilsvarer 5V. Det er fullt mulig å bruke andre referansespenninger for å få mer nøyaktige målinger på et mindre område, men det vil vi ikke komme inn på her.

Veldig mange målinger vi tar, bruker prinsippet med spenningsdelere. Spenningsdelere kan lages med veldig mange typer komponenter, men den enkleste vil være et potensiometer. Her kobler vi GND og 5V til de ytterste (faste) tilkoblingene, og måler resultatet på den midterste tilkoblingen. (Det samme prinsippet brukes også på eksempelet under "Serial plotter", da med to potensiometer, ett for X-aksen og ett for Y-aksen)

Figuren under viser prinsippet. Potensiometeret (den variable motstanden) til venstre står i midtstilling, og vil tilsvare de to faste motstandene til høyre. Spenningen som kan måles på A0 og A1 blir den samme, ganske nøyaktig 2,5V, forutsatt at forsyningsspenningen er 5V. Det vil si at verdien vi måler på mikrokontrolleren blir ca. 512.

Spenningsdelere

Oppkobling

I dette eksempelet bruker vi et 10 kOhms potensiometer, som vi kobler til 5V, GND og A0.
Når vi kobler er det veldig greit om en holder seg til røde ledninger til 5V, og svarte til jord.
Dette gjør feilsøking MYE enklere!
Arduino spenningsdeler Arduino spenningsdeler

Program

Vi gjør eksempel-programmet så enkelt som mulig. Verdier leses fra pinnen A0 med funksjonen analogRead() og skriver direkte til serieporten. På denne måten kan vi se resultatet både på Serial monitor og Serial plotter

void setup() {
pinMode(A0, INPUT); //Setter pinnen A0 til inngang
Serial.begin(9600); //Starter serieporten med hastighet på 9600 baud
}

void loop() {
Serial.println(analogRead(A0)); //Leser verdien på A0 og skriver til serieporten i samme operasjon.
delay(100); // Liten pause for at vi skal se hva som skjer
}

Resultat

Her er et eksempel på resultat vi får på Serial Monitor:
Serial Montior

Dette er tilsvarende eksempel vist på Serial Plotter:

Serial Plotter

Oppgaver

Løsningsforslag