Grundläggande Arduino 006 – Dimmer

I projektet för växlande lysdiod såg vi hur man läser in digitala händelser utifrån, dvs något som är aktivt eller inte. I det här projektet ska vi lära oss hur man läser in analoga värden, dvs ett värde som kan vara nästan vad som helst, inte bara ett eller noll utan något mitt emellan. T.ex. vattennivå, ljusstyrka eller avstånd. För att börja enkelt kommer vi att göra en dimmer som läser av positionen av ett vridmotstånd och sätter sedan ljusstyrkan på en lysdiod till motsvarande värde.

Koppling

Kopplingen vi behöver är enkel. Förutom lysdiod och motstånd så behöver vi även ett vridmotstånd inkopplat till en av de analoga ingångarna. Vridmotståndets värde är inte särskilt viktigt i det här fallet, men bör vara mellan 1 kΩ och 100 kΩ.

Beskrivning

Koden är ganska enkel – vi läser in spänningen på den analog ingången A0 med analogRead(). Denna funktion lämnar tillbaka ingångens spänning som ett heltal mellan 0 och 1023 där 0 motsvarar 0 volt och 1023 motsvarar 5 V. Detta värde använder vi sen för att tända lysdioden. Eftersom Arduinos utgångar arbetar med värden mellan 0 och 255 behöver vi använda map()-funktionen för att skala om värdet. Till skillnad från projektet där vi använde en tryckknapp så aktiverar vi inte pull-up-motståndet på ingången. Vridmotståndet är kopplad till både plus och minus vilket innebär att dess utgång och därmed Arduinons ingång kommer alltid att ha en bestämd spänning och kommer inte att fånga upp störningar. Notera också att det är enbart de dedikerade analoga ingångarna A0-A5 som kan mäta spänning. Alla andra ingångar är digitala och kan därför bara se om spänningen är hög eller låg, dvs logisk etta eller nolla.

Koden

// Skapa variabler för att lagra det inlästa värdet och det omskalade värdet i.
int varde_in;
int varde_ut;

void setup() {
  // Sätt pinne 2 att vara en utgång.
  pinMode(2, OUTPUT);
  // Sätt pinne A0 till att vara en ingång.
  pinMode(A0, INPUT);
}


void loop() {
  // Läs av vridmotståndets position. Detta ger ett värde mellan 0 och 1023.
  varde_in = analogRead(A0);
  // Skala om värdet så att det är mellan 0 och 255.
  varde_ut = map(varde_in, 0, 1023, 0, 255);
  // Sätt lysdiodens ljusstyrka.
  analogWrite(2, varde_ut);
}

Lämna ett svar