Het bouwen van een Arduino verkeerslichtcontroller helpt je bij het ontwikkelen van basiscoderingsvaardigheden!  Wij helpen u op weg.

Arduino Programming for Beginners: Traffic Light Controller Project Tutorial

Advertentie Het Arduino-verkeerslicht is een leuk klein project dat je binnen een uur kunt inbouwen. Hier is hoe je je eigen kunt bouwen met behulp van een Arduino, en hoe je het circuit kunt veranderen voor een geavanceerde variatie. Als je dit liever als zelfstudie als een video bekijkt, hebben we je gedekt: Wat u nodig hebt om een ​​Arduino verkeerslichtcontroller te bouwen Naast de basis Arduino heb je nodig: 1 x 10k-ohm weerstand 1 x drukknopschakelaar 6 weerstanden van 220 ohm Een broodplank Draden verbinden Rode, gele en groene LED's Bijna elke Arduino zal voor dit project werken, op

Advertentie

Het Arduino-verkeerslicht is een leuk klein project dat je binnen een uur kunt inbouwen. Hier is hoe je je eigen kunt bouwen met behulp van een Arduino, en hoe je het circuit kunt veranderen voor een geavanceerde variatie.

Als je dit liever als zelfstudie als een video bekijkt, hebben we je gedekt:

Wat u nodig hebt om een ​​Arduino verkeerslichtcontroller te bouwen

Naast de basis Arduino heb je nodig:

  • 1 x 10k-ohm weerstand
  • 1 x drukknopschakelaar
  • 6 weerstanden van 220 ohm
  • Een broodplank
  • Draden verbinden
  • Rode, gele en groene LED's

Bijna elke Arduino zal voor dit project werken, op voorwaarde dat het voldoende pinnen heeft. Zorg ervoor dat je onze Arduino koopgids leest: Arduino Koopgids: Welk bord moet je krijgen? Arduino Koopgids: Welk bord moet je krijgen? Er zijn zoveel verschillende soorten Arduino-boards die je zou kunnen vergeven als je in de war bent. Wat moet u kopen voor uw project? Laat ons helpen met deze Arduino koopgids! Lees meer als u niet zeker weet welk model u nodig hebt. Mogelijk hebt u deze onderdelen al in uw Arduino-startpakket Wat zit er in uw Arduino-startpakket? [Arduino Beginners] Wat zit er in uw Arduino Starter Kit? [Arduino Beginners] Geconfronteerd met een doos vol elektronische componenten, is het gemakkelijk om overweldigd te worden. Hier is een gids voor precies wat u in uw kit zult vinden. Lees verder .

Arduino Traffic Light: The Basics

Laten we klein beginnen. Een eenvoudig, enkel verkeerslicht is een goede plek om te beginnen. Hier is het circuit:

Schakelschema voor basis Arduino verkeerslicht

Verbind de anode (lange poot) van elke LED met digitale pinnen acht, negen en tien (via een weerstand van 220 ohm). Verbind de kathoden (kort been) met de grond van de Arduino.

Code voor het Arduino verkeerslicht

Begin met het definiëren van variabelen zodat u de lichten op naam kunt richten in plaats van op een nummer. Start een nieuw Arduino-project en begin met deze regels:

 int red = 10; int yellow = 9; int green = 8; 

Laten we vervolgens de installatiefunctie toevoegen, waar u de rode, gele en groene LED's configureert als uitgangen. Omdat u variabelen hebt gemaakt om de pinnummers te vertegenwoordigen, kunt u nu in plaats daarvan naar de pinnen verwijzen:

 void setup(){ pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); } 

De pinMode- functie configureert de Arduino om een ​​gegeven pin als output te gebruiken. U moet dit doen om uw LED's te laten werken. Nu voor de eigenlijke logica van het verkeerslicht. Hier is de code die u nodig hebt. Voeg dit hieronder toe aan uw variabele definities en instellingsfunctie:

 void loop(){ changeLights(); delay(15000); } void changeLights(){ // green off, yellow on for 3 seconds digitalWrite(green, LOW); digitalWrite(yellow, HIGH); delay(3000); // turn off yellow, then turn red on for 5 seconds digitalWrite(yellow, LOW); digitalWrite(red, HIGH); delay(5000); // red and yellow on for 2 seconds (red is already on though) digitalWrite(yellow, HIGH); delay(2000); // turn off red and yellow, then turn on green digitalWrite(yellow, LOW); digitalWrite(red, LOW); digitalWrite(green, HIGH); delay(3000); } 

Upload deze code naar uw Arduino en voer uit (zorg ervoor dat u het juiste bord en de juiste poort selecteert in het menu Extra > Bord en Extra > Poortmenu 's). U moet een werkend verkeerslicht hebben dat om de 15 seconden verandert, zoals dit (versneld):

Arduino verkeerslicht in actie

Laten we deze code opsplitsen. De functie changeLights voert al het zware werk uit. Dit roteert het verkeerslicht door geel en rood en vervolgens terug naar groen. Aangezien dit binnen de lusfunctie wordt genoemd, zal de Arduino deze code voor altijd uitvoeren, met elke keer een pauze van 15 seconden.

De functie changeLights bestaat uit vier verschillende stappen:

  • Groen aan, geel uit
  • Geel uit, rood aan
  • Geel aan, rood aan
  • Groen aan, rood uit, geel uit

Deze vier stappen repliceren het proces dat wordt gebruikt in echte verkeerslichten. Voor elke stap is de code erg vergelijkbaar. De juiste LED wordt in- of uitgeschakeld met behulp van digitalWrite . Dit is een Arduino-functie die wordt gebruikt om uitvoerpinnen in te stellen op HOOG (voor aan) of LAAG (voor uit).

Nadat de vereiste LED's zijn in- of uitgeschakeld, laat de vertraging de Arduino een bepaalde tijd wachten. In dit geval drie seconden.

Dieper gaan: Arduino zebrapad

Nu je de basis kent, laten we het verbeteren. Voeg een drukknop toe voor voetgangers om het licht te veranderen wanneer ze maar willen:

Schakelschema voor voetgangersoversteek Arduino

Merk op hoe het verkeerslicht precies hetzelfde is als het vorige voorbeeld. Sluit de knop aan op digitale pin 12. U zult merken dat de schakelaar een weerstand van 10 ohm met hoge impedantie heeft en u vraagt ​​zich misschien af ​​waarom. Dit is een pull-down weerstand.

Een schakelaar laat de stroom vloeien of niet. Dit lijkt eenvoudig genoeg, maar in een logisch circuit moet de stroom altijd in een hoge of lage toestand stromen (onthoud, 1 of 0, HOOG of LAAG). Je zou kunnen veronderstellen dat een drukknopschakelaar die niet daadwerkelijk wordt ingedrukt in een LAGE staat zou zijn, maar in feite wordt gezegd dat deze 'zwevend' is, omdat er helemaal geen stroom wordt getrokken.

In deze zwevende toestand is het mogelijk dat een valse meting optreedt als deze fluctueert met elektrische interferentie. Met andere woorden, een zwevende schakelaar geeft noch een betrouwbare HOGE noch LAGE waarde. Een pull-down weerstand houdt een kleine hoeveelheid stroom stromend wanneer de schakelaar gesloten wordt, waardoor een nauwkeurige lage toestand wordt gegarandeerd.

In andere logische circuits kunt u in plaats daarvan een pull-up weerstand vinden, en dit werkt op hetzelfde principe, maar omgekeerd, zorg ervoor dat bepaalde logische poort standaard hoog is.

Nu, in het lusgedeelte van de code, in plaats van de lichten elke 15 seconden te veranderen, ga je in plaats daarvan de status van de drukknopschakelaar lezen en pas de lichten veranderen wanneer deze is geactiveerd.

Code voor de Arduino zebrapad

Begin met het toevoegen van een nieuwe variabele om uw knoppin op te slaan:

 int button = 12; // switch is on pin 12 

Voeg nu in de setup-functie een nieuwe regel toe om de schakelaar als invoer te declareren. Voeg een lijn toe om de verkeerslichten op het groene podium te zetten. Zonder deze initiële instelling zouden ze uitschakelen tot de eerste keer dat changeLights wordt uitgevoerd.

 pinMode(button, INPUT); digitalWrite(green, HIGH); 

Wijzig in plaats daarvan de hele lusfunctie in:

 void loop() { if (digitalRead(button) == HIGH){ delay(15); // software debounce if (digitalRead(button) == HIGH) { // if the switch is HIGH, ie. pushed down - change the lights! changeLights(); delay(15000); // wait for 15 seconds } } } 

Dat zou het moeten doen. Je vraagt ​​je misschien af ​​waarom de knopcontrole twee keer gebeurt ( digitalRead (knop) ), gescheiden door een kleine vertraging. Dit is debouncing. Net als de pull-down weerstand voor de knop, stopt deze eenvoudige controle dat de code minimale interferentie detecteert als een knop wordt ingedrukt.

Door 15 seconden in de if- verklaring te wachten, kunnen de verkeerslichten ten minste die duur niet veranderen. Zodra 15 seconden voorbij is, start de lus opnieuw. Elke keer dat de lus opnieuw wordt gestart, wordt de status van de knop opnieuw gelezen, maar als deze niet wordt ingedrukt, wordt de instructie if nooit geactiveerd, veranderen de lichten nooit en start het programma opnieuw.

Dit is hoe dit eruit ziet (versneld):

Arduino zebrapad in actie

Arduino verkeerslicht met kruising

Laten we een geavanceerder model proberen. Wijzig in plaats van een zebrapad uw circuit met twee verkeerslichten:

Cricuit-diagram voor Arduino-verkeerslichten met kruising

Sluit het tweede verkeerslicht aan op digitale pinnen 11, 12 en 13.

Code voor het Arduino Verkeerslicht met Junction

Wijs eerst uw nieuwe verkeerslichtpinnen toe aan variabelen en configureer ze als uitgangen, zoals in het eerste voorbeeld:

 // light one int red1 = 10; int yellow1 = 9; int green1 = 8; // light two int red2 = 13; int yellow2 = 12; int green2 = 11; void setup(){ // light one pinMode(red1, OUTPUT); pinMode(yellow1, OUTPUT); pinMode(green1, OUTPUT); // light two pinMode(red2, OUTPUT); pinMode(yellow2, OUTPUT); pinMode(green2, OUTPUT); } 

Werk nu uw lus bij om de code van het eerste voorbeeld te gebruiken (in plaats van de voetgangersoversteekplaats):

 void loop(){ changeLights(); delay(15000); } 

Nogmaals, al het werk wordt uitgevoerd in de functie changeLights . In plaats van rood > rood & geel > groen te gaan, wisselt deze code de verkeerslichten af. Wanneer de ene groen is, is de andere rood. Hier is de code:

 void changeLights(){ // turn both yellows on digitalWrite(green1, LOW); digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); delay(5000); // turn both yellows off, and opposite green and red digitalWrite(yellow1, LOW); digitalWrite(red1, HIGH); digitalWrite(yellow2, LOW); digitalWrite(red2, LOW); digitalWrite(green2, HIGH); delay(5000); // both yellows on again digitalWrite(yellow1, HIGH); digitalWrite(yellow2, HIGH); digitalWrite(green2, LOW); delay(3000); // turn both yellows off, and opposite green and red digitalWrite(green1, HIGH); digitalWrite(yellow1, LOW); digitalWrite(red1, LOW); digitalWrite(yellow2, LOW); digitalWrite(red2, HIGH); delay(5000); } 

Dit is hoe dat eruit ziet (versneld):

Arduino verkeerslicht met knooppunt in actie

Arduino Verkeerslicht Volgende stappen

Dat is alles voor vandaag. Uw nieuwe kennis van Arduino LED's en knoppen is van toepassing op allerlei verschillende projecten. Als u deze verkeerslichten wilt uitbreiden, waarom dan niet een vierrichtingsknooppunt (of meer) bouwen, compleet met veel zebrapaden en verkeerslichten?

Of waarom breid je je nieuwe vaardigheden niet uit met een groter project zoals deze DIY MIDI-controller of Arduino-robot met Xod? U kunt ook een kijkje nemen op Arduino-codering met VS Code en PlatformIO Betere Arduino-codering met VS Code en PlatformIO Betere Arduino-codering met VS-code en PlatformIO Wilt u een eenvoudige manier om te beginnen met het coderen van Arduino? Met PlatformIO en VS Code kunt u Arduino-projecten vereenvoudigen en sneller leren. Lees verder .

Beeldtegoed: androsvector / Shutterstock

Ontdek meer over: Arduino, DIY Project Tutorials, Programming.