Code zoeken

Les 98-7: Lopend licht met Arduino en 5 LED's

Les 98-7: Lopend licht met Arduino en 5 LED's

Een looplicht (ook wel een "chasing"- of "Knight Rider"-licht genoemd) is een van de klassieke Arduino-projecten voor beginners — en terecht. Je leert er meerdere uitgangen na elkaar aan te sturen, gebeurtenissen te timen en na te denken over stroombegrenzende weerstanden, terwijl je iets maakt dat er visueel bevredigend uitziet. In dit project sluit je vijf LED's aan op een Arduino en programmeer je ze zo dat ze om de beurt oplichten, waardoor de illusie ontstaat van één licht dat als het ware langs de rij "loopt".

5 leds on breadboard with resistor shown connected to Arduino UNO
5 leds on breadboard with resistor shown connected to Arduino UNO

Zodra je het patroon begrijpt, kun je het in een verrassend aantal praktische toepassingen hergebruiken:

  • Decoratieve verlichting: een lopende rand voor een plank, fotolijst of model.
  • Richtingaanwijzers: een sequentieel knipperlichteffect voor een propvoertuig of e-bike.
  • Voortgangs- of statusweergave: een rij LED's die opschuift naarmate een proces vordert.
  • Game- en scorebordprops: een "bewegend doelwit" of niveaumeter.
  • Leermiddel: de duidelijkst mogelijke demonstratie van digitale uitgangen en timing.

Dezelfde bedrading met vijf LED's wordt in verschillende andere projecten in deze cursus hergebruikt, dus de hardware die je hier bouwt wordt een herbruikbaar platform.

Hoe het looplicht werkt

Het principe is precies hetzelfde als het aanzetten van één LED — het wordt simpelweg vijf keer herhaald (in video op 30:47). Elke LED is via zijn eigen stroombegrenzende weerstand op zijn eigen Arduino-pin aangesloten, en alle weerstanden delen een gemeenschappelijke massarail. De sketch zet vervolgens één pin HIGH, wacht, zet hem LOW, wacht en gaat door naar de volgende pin. Omdat er steeds maar één LED tegelijk aan is, leest het oog de reeks als beweging.

De twee timingwaarden geven het effect zijn karakter. De aan-tijd bepaalt hoe lang elke LED blijft branden, en de uit-tijd bepaalt de pauze voordat de volgende LED oplicht. Een korte aan-tijd met een lange uit-tijd geeft een enkele stip die snel reist; een lange aan-tijd met een korte uit-tijd geeft een vloeiender, meer aaneengesloten veegbeweging (in video op 35:00).

Hardware en componenten

  • 1 × Arduino-bord (Uno, Nano of vergelijkbaar)
  • 5 × LED's (elke kleur; kleuren mengen maakt het effect duidelijker)
  • 5 × weerstanden — 300 Ω tot 1 kΩ werken goed
  • 1 × breadboard
  • Jumperdraden
  • USB-kabel of batterijpak voor voeding

Als je later een variant met een drukknop wilt toevoegen, heb je ook één momentdrukknop en twee extra jumperdraden nodig.

De weerstandswaarde kiezen

Een LED heeft een doorlaatspanning van ongeveer 2 V en wil ongeveer 10 mA voor volledige helderheid (in video op 03:49). Bij een voeding van 5 V moet de weerstand de resterende 3 V opnemen. Met de wet van Ohm: R = V / I = 3 V / 0,01 A = 300 Ω. In de praktijk werkt alles van 300 Ω tot ongeveer 1 kΩ — hoe hoger de weerstand, hoe dimmer de LED, maar hoe veiliger en efficiënter het circuit (in video op 05:33).

Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button

Beddradengids

wiring of 5 LED on Arduino
wiring of 5 LED on Arduino

Plaats de vijf LED's in het breadboard met hun anodes (het langere pootje) in dezelfde richting. Verbind elke kathode (het kortere pootje met een platte kant) met zijn eigen weerstand, en verbind het uiteinde van alle vijf weerstanden met een gemeenschappelijke massarail. Leg vervolgens een jumperdraad van elke anode naar een Arduino-pin.

In deze build zijn de LED's toegewezen aan pin 3, 4, 5, 6 en 7 (in video op 31:29). De pinnummers worden bovenaan de sketch gedefinieerd, dus als je een andere indeling wilt, hoef je alleen die vijf regels te wijzigen.

Uitleg van de code

De sketch is bewust eenvoudig zodat een beginner elke regel kan volgen. Alleen het blok helemaal bovenaan hoeft te worden aangepast voor je eigen opstelling.

const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;
int offTime = 30;  // the time each LED waits in the OFF state
int onTime = 100;  // the time each LED is ON

Pindefinities. De vijf regels met const int koppelen elke LED aan een fysieke Arduino-pin. Omdat ze als const zijn gedeclareerd, kunnen de waarden later in het programma niet worden gewijzigd — dit is een veilige gewoonte die voorkomt dat ze per ongeluk opnieuw worden toegewezen. Als je je LED's op andere pinnen aansluit, wijzig dan alleen de nummers hier en niets anders.

onTime en offTime. Deze twee integers zijn de enige "gedragsvariabelen" in het project, en dat zijn degenen waarmee je wilt experimenteren:

  • onTime — hoe lang (in milliseconden) elke LED blijft branden. Grotere waarden maken elke stap langzamer en bedachtzamer.
  • offTime — de pauze nadat een LED uitgaat voordat de volgende aangaat. Kleinere waarden laten het licht sneller bewegen.

Probeer onTime = 200 en offTime = 200 voor een gelijkmatige chase op gemiddelde snelheid, of onTime = 30 en offTime = 30 voor een zeer snel, bijna vervaagd effect (in video op 36:06).

De functie setup() wordt één keer uitgevoerd en stelt eenvoudig alle vijf pinnen in op OUTPUT-modus. De functie loop() herhaalt vervolgens hetzelfde patroon van vier stappen voor elke LED: zet de pin HIGH, wacht onTime, zet hem LOW, wacht offTime. Wanneer de vijfde LED klaar is, begint de loop weer bij de eerste, wat een eindeloze wandeling oplevert.

Live project en demonstratie

Met de standaardwaarden stappen de LED's in een rustig tempo door de rij. Het uploaden van de sketch met onTime en offTime ingesteld op 200 ms geeft een gestage, gelijkmatige mars; beide verlagen naar 30 ms laat het licht bijna te snel over de rij schieten om te volgen (in video op 36:21).

Twee nuttige experimenten om te proberen zodra het werkt:

  • Maak de on time korter dan de off time om een duidelijke reizende stip te creëren.
  • Maak de on time langer dan de off time om een zachte, overlappende gloed te creëren.

Dezelfde bedrading met vijf LED's wordt hergebruikt in het volgende project, waar een drukknop het licht stap voor stap vooruit laat gaan. Die build wordt behandeld in Les 98-8: Walking Light met drukknop en LED's met Arduino.

Als je de rij liever vanuit een analoge ingang aanstuurt in plaats van met een knop, zie Les 98-9: LED-spanningsniveaumeter met Arduino of walking light met potentiometer.

Verder gaan

Zodra de basiswandeling werkt, is een natuurlijke volgende stap om het licht heen en weer te laten stuiteren in plaats van van de laatste LED naar de eerste te springen. Dat is een pure code-oefening — geen extra hardware — en het is een goede manier om loops en arrays te oefenen. Je kunt dit project ook combineren met de drukknopversie om een handmatig voortgeschakeld display te bouwen.

Gerelateerde projecten uit deze video

Hoofdstukken

  • [00:00] Overzicht van de tien LED-projecten
  • [01:22] Inleiding tot de stapsgewijze Arduino-cursus
  • [02:29] Wat een LED is en hoe je de pinnen ervan identificeert
  • [03:49] De stroombegrenzende weerstand berekenen
  • [30:47] Introductie van het walking light-project
  • [31:06] Bedradingsschema voor vijf LED's
  • [32:52] Uitleg van de walking light-code
  • [34:39] Demonstratie en het wijzigen van de timingwaarden
  • [36:41] Het licht vooruit laten gaan met een drukknop (aparte tutorial)
  • [42:25] LED-spanningsbalk met potentiometer (aparte tutorial)
  • [49:25] Arduino-verkeerslicht (aparte tutorial)

Afbeeldingen

wiring of 5 LED on Arduino
wiring of 5 LED on Arduino
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
5 leds op breadboard met weerstand getoond aangesloten op Arduino UNO
5 leds op breadboard met weerstand getoond aangesloten op Arduino UNO
939-Lessson 98-LED-7: Arduino code walking LED light
Taal: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Bestanden📁

Arduino-bibliotheken (zip)

Gebruikershandleiding