Den Store Gnist – 16 projekter med kode og diagrammer

16 projekter fra "få en LED til at blinke" til spil, skifteregistre og optokoblere – alle bygget med stumperne i Den Store Gnist og en Arduino Nano eller UNO.

⚡ Har du ikke kittet endnu? Se Den Store Gnist her – du skal også bruge en Arduino Nano eller UNO.

Hop til projekt: 1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · 11 · 12 · 13 · 14 · 15 · 16

Før du starter

Den Store Gnist har ingen hjerne med, så du skal bruge en Arduino Nano V3 eller Arduino UNO R3 (5 V). Al kode i guiden er skrevet til dem og kan uploades direkte fra Arduino IDE (gratis på arduino.cc). Bruger du en ESP32, så se bilaget bagerst – det meste virker, men pins og spænding er anderledes.

Hvert projekt har samme opbygning:

  1. Det lærer du – den ene ting projektet handler om.
  2. Du skal bruge – stumperne fra kassen.
  3. Sådan kobler du – en tabel og et diagram over, hvad der går hvorhen.
  4. Koden – kopiér, upload, se det virke.
  5. Prøv selv – en udfordring, når det virker.

Projekterne bygger oven på hinanden, så tag dem gerne i rækkefølge. Koden bruger kun Arduinos indbyggede funktioner – du skal ikke installere biblioteker.

Grundregler på værkstedet

Fem regler redder dig fra 90 % af alle fejl.

1. Breadboardet. De to lange rækker i kanterne (+ og –) er strømskinner, der går hele vejen langs. Hullerne i midten hænger sammen fem og fem på tværs. Kanalen i midten deler dem, så en chip kan sidde over den.

2. Strøm. Arduinoen giver 5 V og GND på sine pins. Forbind 5V til breadboardets + skinne og GND til – skinnen. MB102-modulet bruger du først fra projekt 15, når et kredsløb skal have sin egen strøm. Det klikkes ned i enden af breadboardet, og jumperen ved hver skinne vælger 3,3 V eller 5 V.

3. LED + modstand – altid. En LED uden modstand brænder af. Brug 220 Ω (rød-rød-brun) i serie. Det lange ben (anode, +) skal mod Arduino-pinnen, det korte ben (katode, –) mod GND.

4. Knapper med INPUT_PULLUP. Arduinoen har indbyggede modstande, der holder en pin på HIGH. Kobl knappen mellem pinnen og GND, og skriv pinMode(pin, INPUT_PULLUP). Nu læser pinnen LOW når knappen er trykket – det vender mange forkert.

5. Træk stikket, før du ombygger. Fjern USB-kablet, mens du flytter ledninger. Så undgår du kortslutninger, der kan brænde en pin af.

Modstand Farver Bruges til
220 Ω rød · rød · brun LED'er
1 kΩ brun · sort · rød Transistor-base, optokobler
10 kΩ brun · sort · orange LDR, thermistor, kondensator-stopur
100 Ω brun · sort · brun Passiv buzzer (dæmper lyden lidt)

Niveau 1 – Lys og knapper

Projekt 1: Hej verden – få en LED til at blinke

Det lærer du: At styre en udgang med digitalWrite og vente med delay.

Du skal bruge: 1 rød LED, 1 × 220 Ω, 2 ledninger.

Fra Til
Arduino D8 220 Ω → LED langt ben
LED kort ben GND

Koblingsdiagram til projekt 1

const int LED = 8;

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  digitalWrite(LED, HIGH);  // tænd
  delay(500);               // vent et halvt sekund
  digitalWrite(LED, LOW);   // sluk
  delay(500);
}

Prøv selv: Lav SOS-blink (kort-kort-kort, lang-lang-lang, kort-kort-kort).

Projekt 2: Lyskryds med fodgængerknap

Det lærer du: At styre flere udgange i en fast rækkefølge og reagere på en knap.

Du skal bruge: 2 røde, 1 gul og 2 grønne LED'er, 5 × 220 Ω, 1 trykknap.

Fra Til
D10 / D9 / D8 220 Ω → bil-rød / bil-gul / bil-grøn
D7 / D6 220 Ω → gå-rød / gå-grøn
D2 Trykknap → GND
Alle LED'ers korte ben GND

Koblingsdiagram til projekt 2

const int BIL_ROD = 10, BIL_GUL = 9, BIL_GRON = 8;
const int GAA_ROD = 7, GAA_GRON = 6;
const int KNAP = 2;

void saetLys(int r, int g, int gr, int fr, int fg) {
  digitalWrite(BIL_ROD, r);  digitalWrite(BIL_GUL, g);  digitalWrite(BIL_GRON, gr);
  digitalWrite(GAA_ROD, fr); digitalWrite(GAA_GRON, fg);
}

void setup() {
  pinMode(BIL_ROD, OUTPUT); pinMode(BIL_GUL, OUTPUT); pinMode(BIL_GRON, OUTPUT);
  pinMode(GAA_ROD, OUTPUT); pinMode(GAA_GRON, OUTPUT);
  pinMode(KNAP, INPUT_PULLUP);
  saetLys(LOW, LOW, HIGH, HIGH, LOW);          // bilerne kører
}

void loop() {
  if (digitalRead(KNAP) == LOW) {               // nogen trykker
    delay(2000);
    saetLys(LOW, HIGH, LOW, HIGH, LOW);  delay(2000);   // gul
    saetLys(HIGH, LOW, LOW, HIGH, LOW);  delay(1000);   // rød for biler
    saetLys(HIGH, LOW, LOW, LOW, HIGH);  delay(5000);   // gå!
    for (int i = 0; i < 6; i++) {                       // grøn mand blinker
      digitalWrite(GAA_GRON, i % 2 == 0 ? LOW : HIGH);
      delay(400);
    }
    saetLys(HIGH, LOW, LOW, HIGH, LOW);  delay(1000);
    saetLys(HIGH, HIGH, LOW, HIGH, LOW); delay(1500);   // rød + gul
    saetLys(LOW, LOW, HIGH, HIGH, LOW);                 // grønt igen
  }
}

Prøv selv: Tilføj en aktiv buzzer på D5, der bipper, mens den grønne mand lyser.

Projekt 3: Tænd og sluk med én knap

Det lærer du: At huske en tilstand og undgå "prel", hvor ét tryk tæller som mange.

Du skal bruge: 1 LED, 1 × 220 Ω, 1 trykknap.

Fra Til
D8 220 Ω → LED → GND
D2 Trykknap → GND

Koblingsdiagram til projekt 3

const int KNAP = 2, LED = 8;
bool ledTaendt = false;
bool sidste = HIGH;
int tryk = 0;

void setup() {
  pinMode(KNAP, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  bool nu = digitalRead(KNAP);
  if (sidste == HIGH && nu == LOW) {   // knappen er lige blevet trykket ned
    ledTaendt = !ledTaendt;
    digitalWrite(LED, ledTaendt);
    tryk++;
    Serial.print("Antal tryk: ");
    Serial.println(tryk);
    delay(50);                          // afprelling
  }
  sidste = nu;
}

Prøv selv: Fjern delay(50) og se i Seriel monitor, hvordan ét tryk pludselig tæller flere gange.

Projekt 4: Dæmper med potentiometer

Det lærer du: At læse et analogt signal (0–1023) og lave "halv strøm" med PWM.

Du skal bruge: 1 LED, 1 × 220 Ω, trimmerpotentiometeret (10 kΩ).

Fra Til
Potentiometer yderben 5V og GND
Potentiometer midterben A0
D9 (PWM, mærket ~) 220 Ω → LED → GND

Koblingsdiagram til projekt 4

const int POT = A0, LED = 9;

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

void loop() {
  int vaerdi = analogRead(POT);            // 0-1023
  int lys = map(vaerdi, 0, 1023, 0, 255);  // omregn til 0-255
  analogWrite(LED, lys);
  Serial.println(vaerdi);                  // åbn Værktøjer → Seriel plotter
  delay(20);
}

Prøv selv: Lad potentiometeret styre blinkets hastighed i stedet for lysstyrken.

Niveau 2 – Sensorer og lyd

Projekt 5: RGB-farveblander

Det lærer du: At blande farver med tre PWM-kanaler og bruge random.

Du skal bruge: RGB-LED (fælles katode – det længste ben), 3 × 220 Ω, 1 trykknap.

Fra Til
D9 / D10 / D11 220 Ω → RGB rød / grøn / blå
RGB længste ben GND
D2 Trykknap → GND

Koblingsdiagram til projekt 5

const int R = 9, G = 10, B = 11, KNAP = 2;

void farve(int r, int g, int b) {
  analogWrite(R, r); analogWrite(G, g); analogWrite(B, b);
}

void setup() {
  pinMode(KNAP, INPUT_PULLUP);
  randomSeed(analogRead(A5));      // tilfældigt frø fra en løs pin
  farve(0, 255, 0);
}

void loop() {
  if (digitalRead(KNAP) == LOW) {
    farve(random(256), random(256), random(256));
    delay(300);
  }
}

Prøv selv: Lav en "regnbue", der langsomt glider gennem alle farver. Lyser LED'en slet ikke? Så har du en med fælles anode: sæt det lange ben til 5V og skriv 255 - værdi.

Projekt 6: Natlampe med lyssensor

Det lærer du: At bygge en spændingsdeler og bruge en tærskelværdi.

Du skal bruge: 1 LDR, 1 × 10 kΩ, 1 hvid LED, 1 × 220 Ω.

Fra Til
5V LDR → A0
A0 10 kΩ → GND
D9 220 Ω → hvid LED → GND

Koblingsdiagram til projekt 6

const int LDR = A0, LED = 9;
const int MOERKT = 300;   // juster efter dit rum

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

void loop() {
  int lys = analogRead(LDR);   // højt tal = lyst
  Serial.println(lys);
  if (lys < MOERKT) {
    // jo mørkere, jo kraftigere lys
    analogWrite(LED, map(lys, 0, MOERKT, 255, 30));
  } else {
    analogWrite(LED, 0);
  }
  delay(100);
}

Prøv selv: Hold hånden over LDR'en og aflæs tallene i Seriel monitor. Indstil MOERKT, så lampen tænder, når du slukker loftlyset.

Projekt 7: Termometer med thermistor

Det lærer du: At omregne en sensor-værdi til grader med en formel.

Du skal bruge: Thermistor (NTC 10 kΩ), 1 × 10 kΩ, LED'er i blå, grøn og rød + 3 × 220 Ω.

Fra Til
5V Thermistor → A1
A1 10 kΩ → GND
D5 / D6 / D7 220 Ω → blå / grøn / rød LED → GND

Koblingsdiagram til projekt 7

const int TERM = A1, BLAA = 5, GRON = 6, ROD = 7;
const float BETA = 3950.0, R0 = 10000.0, T0 = 298.15;  // 25 °C

void setup() {
  pinMode(BLAA, OUTPUT); pinMode(GRON, OUTPUT); pinMode(ROD, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int v = analogRead(TERM);
  float r = 10000.0 * (1023.0 / v - 1.0);           // thermistorens modstand
  float c = 1.0 / (log(r / R0) / BETA + 1.0 / T0) - 273.15;
  Serial.print(c, 1); Serial.println(" °C");

  digitalWrite(BLAA, c < 20);
  digitalWrite(GRON, c >= 20 && c < 26);
  digitalWrite(ROD,  c >= 26);
  delay(500);
}

Prøv selv: Hold om thermistoren med fingrene og se den røde LED tænde. Tallene er cirka-værdier – kalibrér mod et rigtigt termometer ved at justere BETA.

Projekt 8: Melodimaskine – Mester Jakob

Det lærer du: At lave toner med tone() og gemme en melodi i tabeller.

Du skal bruge: Passiv buzzer (den uden mærkat), 1 × 100 Ω, 1 trykknap.

Fra Til
D8 100 Ω → buzzer +
Buzzer − GND
D2 Trykknap → GND

Koblingsdiagram til projekt 8

const int BUZ = 8, KNAP = 2;
#define G3 196
#define C4 262
#define D4 294
#define E4 330
#define F4 349
#define G4 392
#define A4 440

int noder[]  = {C4,D4,E4,C4, C4,D4,E4,C4, E4,F4,G4, E4,F4,G4,
                G4,A4,G4,F4,E4,C4, G4,A4,G4,F4,E4,C4, C4,G3,C4, C4,G3,C4};
int laengde[] = {4,4,4,4, 4,4,4,4, 4,4,2, 4,4,2,
                 8,8,8,8,4,4, 8,8,8,8,4,4, 4,4,2, 4,4,2};

void setup() { pinMode(KNAP, INPUT_PULLUP); }

void loop() {
  if (digitalRead(KNAP) == LOW) {
    int antal = sizeof(noder) / sizeof(noder[0]);
    for (int i = 0; i < antal; i++) {
      int ms = 1600 / laengde[i];
      tone(BUZ, noder[i], ms * 0.9);
      delay(ms);
    }
    noTone(BUZ);
  }
}

Prøv selv: Byt den passive buzzer ud med den aktive – hvorfor lyder alle toner nu ens?

Projekt 9: Skuffealarm

Det lærer du: At "armere" et system og reagere på en ændring.

Du skal bruge: 1 LDR, 1 × 10 kΩ, aktiv buzzer, 1 rød LED + 220 Ω, 1 trykknap.

Fra Til
5V → LDR → A0, A0 → 10 kΩ → GND Lyssensor
D7 Aktiv buzzer + (− til GND)
D6 220 Ω → rød LED → GND
D2 Trykknap → GND (slå alarm til/fra)

Koblingsdiagram til projekt 9

const int LDR = A0, BUZ = 7, LED = 6, KNAP = 2;
bool armeret = false;
int moerke = 0;

void setup() {
  pinMode(BUZ, OUTPUT); pinMode(LED, OUTPUT); pinMode(KNAP, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(KNAP) == LOW) {
    armeret = !armeret;
    digitalWrite(BUZ, LOW);
    if (armeret) {
      for (int i = 0; i < 10; i++) {           // 5 sek. til at lukke skuffen
        digitalWrite(LED, i % 2); delay(500);
      }
      moerke = analogRead(LDR);
    }
    digitalWrite(LED, LOW);
    delay(300);
  }
  if (armeret && analogRead(LDR) > moerke + 150) {   // nogen åbnede!
    digitalWrite(BUZ, HIGH);
    digitalWrite(LED, HIGH);
  }
}

Prøv selv: Læg Arduinoen i en skuffe eller kasse, armer den og luk. Lav alarmen om, så den piber i et mønster i stedet for konstant.

Niveau 3 – Spil

Projekt 10: Reaktionsspil

Det lærer du: At måle tid med millis() og fange snydere.

Du skal bruge: 1 grøn LED + 220 Ω, 1 trykknap, aktiv buzzer.

Fra Til
D8 220 Ω → grøn LED → GND
D2 Trykknap → GND
D7 Aktiv buzzer + (− til GND)

Koblingsdiagram til projekt 10

const int LED = 8, KNAP = 2, BUZ = 7;
unsigned long rekord = 99999;

void setup() {
  pinMode(LED, OUTPUT); pinMode(BUZ, OUTPUT); pinMode(KNAP, INPUT_PULLUP);
  Serial.begin(9600);
  randomSeed(analogRead(A5));
  Serial.println("Tryk, så snart LED'en lyser!");
}

void loop() {
  unsigned long vent = millis() + random(1500, 5000);
  while (millis() < vent) {
    if (digitalRead(KNAP) == LOW) {              // for tidligt
      Serial.println("Snyd! For tidligt.");
      digitalWrite(BUZ, HIGH); delay(600); digitalWrite(BUZ, LOW);
      delay(1000);
      return;
    }
  }
  digitalWrite(LED, HIGH);
  unsigned long start = millis();
  while (digitalRead(KNAP) == HIGH) {}
  unsigned long tid = millis() - start;
  digitalWrite(LED, LOW);

  Serial.print("Din tid: "); Serial.print(tid); Serial.println(" ms");
  if (tid < rekord) { rekord = tid; Serial.println("NY REKORD!"); }
  delay(1500);
}

Prøv selv: Byg en tomandsversion med to knapper (D2 og D3) – hvem er hurtigst?

Projekt 11: Huskespil (Simon siger)

Det lærer du: Arrays, løkker og at bygge et rigtigt spil med stigende sværhedsgrad.

Du skal bruge: 4 LED'er (rød, gul, grøn, blå) + 4 × 220 Ω, 4 trykknapper, passiv buzzer + 100 Ω.

Fra Til
D8 / D9 / D10 / D11 220 Ω → rød / gul / grøn / blå LED → GND
D2 / D3 / D4 / D5 Knap ved hver LED → GND
D12 100 Ω → passiv buzzer → GND

Koblingsdiagram til projekt 11

const int LED[] = {8, 9, 10, 11};
const int KNAP[] = {2, 3, 4, 5};
const int TONE[] = {262, 330, 392, 523};
const int BUZ = 12;
int raekke[50];
int niveau = 0;

void vis(int i, int ms) {
  digitalWrite(LED[i], HIGH); tone(BUZ, TONE[i]);
  delay(ms);
  digitalWrite(LED[i], LOW);  noTone(BUZ);
  delay(ms / 2);
}

int ventPaaKnap() {
  while (true) {
    for (int i = 0; i < 4; i++) {
      if (digitalRead(KNAP[i]) == LOW) {
        vis(i, 200);
        while (digitalRead(KNAP[i]) == LOW) {}
        return i;
      }
    }
  }
}

void setup() {
  for (int i = 0; i < 4; i++) { pinMode(LED[i], OUTPUT); pinMode(KNAP[i], INPUT_PULLUP); }
  randomSeed(analogRead(A5));
  Serial.begin(9600);
}

void loop() {
  if (niveau >= 50) niveau = 0;                     // du har vundet!
  raekke[niveau] = random(4);
  niveau++;
  delay(600);
  int fart = max(150, 450 - niveau * 20);           // hurtigere for hver runde
  for (int i = 0; i < niveau; i++) vis(raekke[i], fart);

  for (int i = 0; i < niveau; i++) {
    if (ventPaaKnap() != raekke[i]) {               // forkert!
      tone(BUZ, 110, 800);
      Serial.print("Game over – du nåede niveau "); Serial.println(niveau - 1);
      delay(1500);
      niveau = 0;
      return;
    }
  }
}

Prøv selv: Gem den højeste score og blink alle LED'er, når rekorden slås.

Projekt 12: Morse-sender

Det lærer du: At arbejde med tekst (String) og læse fra Seriel monitor.

Du skal bruge: 1 gul LED + 220 Ω, passiv buzzer + 100 Ω.

Fra Til
D8 220 Ω → gul LED → GND
D9 100 Ω → passiv buzzer → GND

Koblingsdiagram til projekt 12

const int LED = 8, BUZ = 9, PRIK = 120;
const char* MORSE[] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---",
  "-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--",
  "-..-","-.--","--.."};

void signal(int ms) {
  digitalWrite(LED, HIGH); tone(BUZ, 700);
  delay(ms);
  digitalWrite(LED, LOW);  noTone(BUZ);
  delay(PRIK);
}

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  Serial.println("Skriv en besked og tryk Enter:");
}

void loop() {
  if (Serial.available()) {
    String tekst = Serial.readStringUntil('\n');
    tekst.toUpperCase();
    for (unsigned int i = 0; i < tekst.length(); i++) {
      char c = tekst[i];
      if (c >= 'A' && c <= 'Z') {
        const char* kode = MORSE[c - 'A'];
        Serial.print(c); Serial.print(" "); Serial.println(kode);
        for (int j = 0; kode[j]; j++) signal(kode[j] == '.' ? PRIK : PRIK * 3);
        delay(PRIK * 2);                           // mellem bogstaver
      } else if (c == ' ') {
        delay(PRIK * 6);                           // mellem ord
      }
    }
  }
}

Prøv selv: Tilføj tallene 0–9, og lav en knap, så du kan morse i hånden. Æ, Ø og Å er ikke med i tabellen – hvad sker der med dem?

Niveau 4 – Chips og strøm

Projekt 13: Løbelys med 74HC595

Det lærer du: At styre 8 LED'er med kun 3 ben via et skifteregister.

Du skal bruge: SN74HC595, 8 LED'er + 8 × 220 Ω, ledninger.

Chippen sættes over midterkanalen på breadboardet. Hakket i chippen markerer ben 1.

74HC595-ben Til
16 (VCC) og 10 (MR) 5V
8 (GND) og 13 (OE) GND
14 (DS – data) Arduino D4
12 (ST_CP – latch) Arduino D5
11 (SH_CP – clock) Arduino D6
15, 1, 2, 3, 4, 5, 6, 7 (Q0–Q7) 220 Ω → LED → GND (én pr. udgang)

Koblingsdiagram til projekt 13

const int DATA = 4, LATCH = 5, CLOCK = 6;

void skriv(byte moenster) {
  digitalWrite(LATCH, LOW);
  shiftOut(DATA, CLOCK, MSBFIRST, moenster);
  digitalWrite(LATCH, HIGH);      // nu vises alle 8 bits på én gang
}

void setup() {
  pinMode(DATA, OUTPUT); pinMode(LATCH, OUTPUT); pinMode(CLOCK, OUTPUT);
}

void loop() {
  for (int i = 0; i < 8; i++)  { skriv(1 << i); delay(80); }      // frem
  for (int i = 6; i > 0; i--)  { skriv(1 << i); delay(80); }      // tilbage
  for (int i = 0; i < 4; i++)  { skriv(0b10101010); delay(200);
                                 skriv(0b01010101); delay(200); } // blink
}

Prøv selv: Lav en "Knight Rider"-effekt, hvor to LED'er løber modsat hinanden. Brug 0b-tal til at tegne dine egne mønstre.

Projekt 14: Transistor-projektør med automatisk tænd

Det lærer du: At lade en lille strøm fra Arduinoen styre en større strøm gennem en transistor.

Du skal bruge: 2N2222, 1 × 1 kΩ, 5 hvide LED'er + 5 × 220 Ω, LDR + 10 kΩ.

En Arduino-pin må højst give ca. 20 mA. Fem LED'er bruger tilsammen omkring 75 mA, så transistoren tager slidæbet.

Fra Til
5V Hver hvid LED: 220 Ω → LED langt ben
Alle LED'ers korte ben 2N2222 collector (C)
2N2222 emitter (E) GND
Arduino D9 1 kΩ → 2N2222 base (B)
5V → LDR → A0, A0 → 10 kΩ → GND Lyssensor

Koblingsdiagram til projekt 14

På de fleste 2N2222 i plastik er benene E–B–C set fra den flade side. Tjek databladet, hvis lyset ikke tænder.

const int TRANS = 9, LDR = A0;
int lysstyrke = 0;

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

void loop() {
  int lys = analogRead(LDR);
  int maal = (lys < 350) ? 255 : 0;     // mørkt = fuldt lys
  // glid blødt op og ned i stedet for at springe
  if (lysstyrke < maal) lysstyrke += 5;
  if (lysstyrke > maal) lysstyrke -= 5;
  analogWrite(TRANS, lysstyrke);
  Serial.println(lys);
  delay(20);
}

Prøv selv: Skift de hvide LED'er ud med en lille 5V-motor eller blæser. Husk da en 1N4007-diode hen over motoren (stregen mod 5V), som beskytter transistoren mod spændingsspidser.

Projekt 15: Optokobler – to kredsløb, der ikke rører hinanden

Det lærer du: At sende et signal med lys gennem en 4N35, så to strømkredse holdes elektrisk adskilt. Her tager du MB102-strømmodulet i brug.

Du skal bruge: 4N35, MB102 + ekstra USB-lader eller -kabel, 1 × 220 Ω, 1 × 1 kΩ, 1 grøn LED, 1 trykknap.

Sæt MB102 på den ene ende af breadboardet, og stil jumperen på 5V. MB102's skinner er "kredsløb B". Arduinoen er "kredsløb A". Forbind ikke de to GND sammen – det er hele pointen.

4N35-ben Kredsløb Til
1 (anode) A Arduino D8 → 220 Ω → ben 1
2 (katode) A Arduino GND
5 (collector) B 1 kΩ → grøn LED (kort ben) … LED langt ben → MB102 +
4 (emitter) B MB102 −
6 (base) – Ikke forbundet

Koblingsdiagram til projekt 15

Trykknappen sættes mellem Arduino D2 og GND.

const int OPTO = 8, KNAP = 2;

void setup() {
  pinMode(OPTO, OUTPUT);
  pinMode(KNAP, INPUT_PULLUP);
}

void loop() {
  // send knappens tilstand videre gennem lyset inde i chippen
  digitalWrite(OPTO, digitalRead(KNAP) == LOW ? HIGH : LOW);
}

Prøv selv: Tag USB-kablet ud af Arduinoen, mens MB102 stadig er tændt – LED'en på kredsløb B slukker, men intet i kredsløb B har nogensinde rørt Arduinoen. Sådan beskytter man f.eks. en mikrocontroller mod støj fra motorer.

Projekt 16: Kondensator-stopur

Det lærer du: Hvordan en kondensator lades op, og hvad tidskonstanten τ = R × C betyder.

Du skal bruge: 1 × 100 µF, 1 × 10 µF, 1 × 10 kΩ, 1 × 220 Ω.

Med 10 kΩ og 100 µF er τ = 10 000 × 0,0001 = 1 sekund. Efter én τ er kondensatoren ladet op til ca. 63 %.

Fra Til
Arduino D7 10 kΩ → punkt X
Punkt X 100 µF langt ben (+)
100 µF kort ben (−, stribe-siden) GND
Punkt X A0
Arduino D6 220 Ω → punkt X (bruges til at aflade hurtigt)

Koblingsdiagram til projekt 16

const int LAD = 7, AFLAD = 6, MAAL = A0;
const float R = 10000.0;

void aflad() {
  pinMode(LAD, INPUT);
  pinMode(AFLAD, OUTPUT); digitalWrite(AFLAD, LOW);
  while (analogRead(MAAL) > 5) {}
  delay(200);
  pinMode(AFLAD, INPUT);           // kobl afladningen fra
}

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

void loop() {
  aflad();
  pinMode(LAD, OUTPUT);
  unsigned long start = micros();
  digitalWrite(LAD, HIGH);                     // start opladning
  while (analogRead(MAAL) < 647) {}            // 63,2 % af 1023
  float tau = (micros() - start) / 1000000.0;

  Serial.print("Tau = "); Serial.print(tau, 3); Serial.print(" s  ->  C = ");
  Serial.print(tau / R * 1000000.0, 1); Serial.println(" uF");
  delay(3000);
}

Prøv selv: Byt til 10 µF – nu skulle τ være ca. 0,1 s. Elektrolytkondensatorer har ofte ±20 % tolerance, så du måler den "rigtige" værdi af netop din. Vend aldrig en elektrolytkondensator forkert – den kan blive varm og gå i stykker.

Fejlfinding

Problem Tjek dette
LED'en lyser ikke Vend LED'en – det lange ben skal mod plus. Sidder modstanden i samme række som LED'en?
Koden kan ikke uploades Vælg det rigtige board og den rigtige port under Værktøjer. Prøv et andet USB-kabel – nogle kan kun lade.
Knappen reagerer tilfældigt Mangler INPUT_PULLUP? Sidder knappen på tværs af midterkanalen?
Analog værdi står på 0 eller 1023 En ledning til 5V eller GND mangler i spændingsdeleren.
Breadboardet virker kun i den ene side På 830-hullers boards er strømskinnerne ofte delt på midten. Sæt en lille bro over.
Buzzeren siger kun én tone Det er den aktive buzzer. Brug den passive til melodier.
Chippen bliver varm Den sidder omvendt. Tag strømmen af med det samme, og vend hakket mod ben 1.

Bilag A – Hvad er der i kassen?

Del Antal Bruges i projekt
830-hullers breadboard 1 Alle
MB102-strømmodul 1 15
Jumperledninger / fleksible ledninger / dupont han-hun 140 / 65 / 20 Alle
LED 5 mm (hvid, rød, gul, grøn, blå) 10 af hver 1–4, 6, 7, 9–15
RGB-LED 1 5
Trykknapper 10 2, 3, 5, 8–11, 15
Trimmerpotentiometer 10 kΩ (3386) 1 4
LDR (lyssensor) 2 6, 9, 14
Thermistor 1 7
Aktiv / passiv buzzer 1 / 1 2, 9, 10 / 8, 11, 12
SN74HC595 skifteregister 1 13
4N35 optokobler 1 15
2N2222 transistor 10 14
1N4007 diode 10 14 (Prøv selv)
Kondensatorer 10 µF, 100 µF, 100 nF, 22 pF 10 af hver 16
Modstande 10 Ω – 1 MΩ (10 værdier) 10 af hver Alle
Stiftlister 40 ben 2 Til at lodde på moduler

Kittet indeholder ikke en Arduino. Alle projekter virker med Arduino Uno eller Nano, som du finder i butikken.

Bilag B – Modstandenes farvekoder

Læs fra den side, hvor ringene sidder tættest. Den sidste ring (guld = ±5 %, brun = ±1 %) er tolerancen.

Værdi 4 ringe 5 ringe
10 Ω brun – sort – sort brun – sort – sort – guld
100 Ω brun – sort – brun brun – sort – sort – sort
220 Ω rød – rød – brun rød – rød – sort – sort
330 Ω orange – orange – brun orange – orange – sort – sort
1 kΩ brun – sort – rød brun – sort – sort – brun
2 kΩ rød – sort – rød rød – sort – sort – brun
5 kΩ (5,1 kΩ) grøn – brun – rød grøn – brun – sort – brun
10 kΩ brun – sort – orange brun – sort – sort – rød
100 kΩ brun – sort – gul brun – sort – sort – orange
1 MΩ brun – sort – grøn brun – sort – sort – gul

I tvivl? Mål med et multimeter.

Bilag C – Bruger du ESP32 i stedet?

Alle projekter kan køre på en ESP32, men den kører på 3,3 V, ikke 5 V:

  • Forsyn spændingsdelere (LDR, thermistor, potentiometer) fra 3V3 – aldrig fra 5V.
  • Analoge værdier går fra 0 til 4095 i stedet for 0 til 1023. Ret tærskler og map().
  • Brug pins, der er sikre som udgange, f.eks. GPIO 4, 5, 6, 7 og 10 på ESP32-C3.
  • Med ESP32 Arduino core 3.x virker analogWrite() og tone() direkte.

God fornøjelse – og del dine byggerier med os på komponemt.dk! ⚡

0 kommentarer

Skriv en kommentar