Analog input

Knappen var digital. Världen är analog. analogRead, spänningsdelare, fotocell, tilt-sensor — och Serial Monitor som fönster in i vad Arduinon faktiskt mäter.

Vad du lärde dig

Träff 4 i konkreta byggstenar:

analogRead — 0 till 1023 Arduinons analog-till-digital-omvandlare. 0 V → 0, 5 V → 1023. Bara på pinnarna A0–A5.
Spänningsdelaren Två motstånd i serie. Mätpunkten mellan dem ger en spänning som beror på förhållandet. Grunden för all analog sensoravläsning.
Fotocellen (LDR) En resistor vars värde ändras med ljus: ≈50 kΩ i mörker, ≈500 Ω i starkt ljus. Inte en lampa — en variabel resistor.
Tilt-sensorn En liten boll inuti en hylsa. Upprätt: bollen är bort från stiften → kretsen öppen → HIGH (med INPUT_PULLUP). Lutad: bollen täcker stiften → kretsen sluten → LOW.
Serial Monitor & Plotter Serial.begin(9600) + Serial.println(...) = fönster in i vad koden tänker. Plotter ritar samma data som rörlig kurva.

Spänningsdelaren — kärnkonceptet

Tänk på två motstånd som ett långt motstånd, brutet i mitten. Strömmen kämpar sig igenom — och spänningen sjunker linjärt längs vägen. Mätpunkten mellan dem ger en spänning som beror på förhållandet mellan de två. Byter du den ena mot en fotocell, så ändras spänningen i takt med ljuset.

Fyrdelad illustration: kolfilm med spänningsgradient, ett långt motstånd, två motstånd, vridpotentiometer.
Ett långt motstånd, brutet i mitten — det är vad en spänningsdelare är.
Spänningsdelare: 5V → fotocell → A0 → 1 kΩ → GND.
Fotocellen som övre motstånd, 1 kΩ som nedre. A0 läser mätpunkten.
Fritzing-koppling av fotocell-spänningsdelaren på breadboard.
Samma sak på breadboarden: +5V → fotocell → A0 → 1 kΩ → GND.
Riktningen: Med fotocellen över mätpunkten och 1 kΩ under: mer ljus → högre värde på A0. Det går att byta plats på dem och få motsatt logik — det är båda lika korrekt.

Läs av fotocellen

Den första analog-read-sketchen. Öppna Verktyg → Serial Monitor (eller förstoringsglaset uppe till höger i IDE:n) — och håll handen över fotocellen. Siffrorna ändras i realtid.

photocell-read.ino Ladda ner ↓
const int ldrPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int ljus = analogRead(ldrPin);
  Serial.println(ljus);
  delay(100);
}

För att se signalen som kurva istället för rader av siffror: Verktyg → Serial Plotter. Samma data, annan visualisering.

Skärmdump av Arduino IDE Serial Plotter med kurva 0-1023.
Serial Plotter — kurvan dippar när handen täcker fotocellen.
Tre fotoresistorer side-by-side: i mörker, rumsljus och starkt ljus.
Samma fotocell, olika ljus: 50 kΩ → 5 kΩ → 500 Ω.

Lampa som tänds när det blir mörkt

Första kombinationen av sensor + beslut + utgång. Läs ljuset, jämför med en tröskel, tänd LED:en om det är mörkare än så. Tröskelvärdet beror på rummet — kör photocell-read.ino först och hitta ditt eget värde.

photocell-led.ino Ladda ner ↓
const int ldrPin     = A0;
const int morkTroskel = 300;

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  int ljus = analogRead(ldrPin);
  Serial.print("ljus=");
  Serial.println(ljus);

  if (ljus < morkTroskel) {
    digitalWrite(LED_BUILTIN, HIGH);   // mörkt → tänd
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }
  delay(100);
}
Tröskelvärdet är en kalibrering: 300 är ett riktvärde. Vissa rum behöver 200, andra 500. Det är poängen — i nästa modul (hackathon) kalibrerar du tröskeln för det rum larmet faktiskt ska sitta i.

Tilt-sensorn

Tilt-sensorn är digital, inte analog — den läses precis som knappen. Inuti sitter en liten metallboll i en hylsa. Står sensorn upprätt rullar bollen bort från stiften → kretsen är öppen → digitalRead ger HIGH (Arduinons interna pullup håller upp pinnen). Lutar du sensorn så bollen täcker båda stiften → kretsen sluts mot GND → LOW.

Foto av tilt-sensor kopplad direkt i Arduino-headers via F-M DuPont-kablar.
Tilt-sensor direkt i headers: D2 + GND, ingen breadboard.
tilt-photocell.ino Ladda ner ↓
const int ldrPin  = A0;
const int tiltPin = 2;

void setup() {
  Serial.begin(9600);
  pinMode(tiltPin, INPUT_PULLUP);
}

void loop() {
  int ljus = analogRead(ldrPin);
  int tilt = digitalRead(tiltPin);   // HIGH = upprätt, LOW = lutad
  Serial.print("ljus=");
  Serial.print(ljus);
  Serial.print("  tilt=");
  Serial.println(tilt);
  delay(100);
}
Skriv ut båda samtidigt: När du printar flera värden på samma rad använder du Serial.print(...) för alla utom det sista, som blir Serial.println(...). print = ingen radbrytning. println = radbrytning.
Nästa
Träff 5 — Hackathon

Sätt ihop allt: knapp + tilt + fotocell + buzzer → ett fungerande larm.

Träff 5 →