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:
- Det lærer du – den ene ting projektet handler om.
- Du skal bruge – stumperne fra kassen.
- Sådan kobler du – en tabel og et diagram over, hvad der går hvorhen.
- Koden – kopiér, upload, se det virke.
- 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 |

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 |

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 |

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 |

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 |

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 |

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 |

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 |

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) |

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) |

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 |

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 |

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) |

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 |

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 |

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) |

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()ogtone()direkte.
God fornøjelse – og del dine byggerier med os på komponemt.dk! ⚡
0 kommentarer