Arduino-programmering voor beginners De verkeerslichtregelaar

Arduino-programmering voor beginners De verkeerslichtregelaar / DIY

Het verkeerslicht is een leuk klein project, dat in minder dan een uur kan worden voltooid. Leer hoe je je eigen kunt bouwen - met behulp van een Arduino - en hoe je het circuit kunt aanpassen voor een geavanceerd model.

Maak je geen zorgen als je nog nooit een Arduino hebt gebruikt, we hebben een beginnershandleiding Aan de slag met Arduino: een beginnershandleiding Aan de slag met Arduino: een beginnershandleiding Arduino is een prototype-platform voor open-source elektronica op basis van flexibele, gebruiksvriendelijke om hardware en software te gebruiken. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees verder .

Notitie: Dit is het nieuwste in een reeks tutorials op beginnersniveau voor Arduino, het prototypeplatform voor open source-elektronica. Hier is een lijst van de vorige artikelen in de serie:

  • Wat is Arduino en wat kun je ermee doen Wat is Arduino en wat kun je ermee doen? Wat is Arduino en wat kun je ermee doen? De Arduino is een opmerkelijk klein elektronisch apparaat, maar als je er nog nooit een hebt gebruikt, wat precies zijn ze dan, en wat kun je ermee doen? Lees verder
  • Wat is een Arduino-starterkit en wat zit erin? Wat zit er in een Arduino Starter Kit? [MakeUseOf Explains] Wat zit er in een Arduino Starter Kit? [MakeUseOf Explains] Ik heb eerder de Arduino open-source hardware hier op MakeUseOf geïntroduceerd, maar je zult meer nodig hebben dan alleen de echte Arduino om er iets uit te bouwen en daadwerkelijk aan de slag te gaan. Arduino "starter kits" zijn ... Lees meer
  • Meer coole onderdelen om te kopen met uw startpakket 8 meer coole componenten voor uw Arduino-projecten 8 meer coole componenten voor uw Arduino-projecten Dus u denkt erover om een ​​Arduino-starterkit te kopen, maar u vraagt ​​zich af of sommige basis-leds en -weerstanden zullen worden genoeg om je het weekend bezig te houden? Waarschijnlijk niet. Hier zijn nog eens 8 ... Lees meer
  • Aan de slag met uw Arduino-starterkit - Stuurprogramma's installeren en het board en de poort instellen Aan de slag met uw Arduino-starterkit - Stuurprogramma's installeren en het board en de poort instellen Aan de slag met uw Arduino-starterkit - Stuurprogramma's installeren en het moederbord instellen & Port So, je hebt jezelf een Arduino-starterkit en mogelijk enkele andere willekeurige coole componenten gekocht - wat nu? Hoe begin je eigenlijk met het programmeren van dit Arduino-ding? Hoe stel je het in ... Lees meer
  • Een nadere blik op de structuur van een Arduino-app & het voorbeeld-knipperprogramma

Wat je nodig hebt

Afgezien van de basis Arduino, heb je nodig:

  • Rode, gele en groene LED's.
  • Een breadboard.
  • 6 x 220? weerstanden.
  • Draden verbinden.
  • 1 x drukknopschakelaar.
  • 1 x 10k? weerstand

Bijna elke Arduino zal geschikt zijn, mits hij voldoende pennen heeft. Zorg ervoor dat u onze koopgids leest Arduino Koopwijzer: welk bord moet u kopen? Arduino Koopwijzer: welk bord moet je kopen? Er zijn zoveel verschillende soorten Arduino-boards, dat je zou worden vergeven dat je in de war was. Welke moet je kopen voor je project? Laat ons helpen, met deze Arduino koopgids! Meer lezen als u niet zeker weet welk model u nodig hebt. Je hebt deze onderdelen waarschijnlijk in je startpakket. Wat zit er in je Arduino Starter Kit? [Arduino Beginners] Wat zit er in je Arduino Starter Kit? [Arduino Beginners] Geconfronteerd met een doos vol met elektronische componenten, is het gemakkelijk om overweldigd te worden. Hier is een gids voor precies wat u in uw kit zult vinden. Lees Meer al.

Een eenvoudig voorbeeld

Laten we klein beginnen. Een eenvoudig, één verkeerslicht is een goed beginpunt. Dit is het circuit:

Sluit de anode (lange been) van elke LED aan op digitale pinnen acht, negen en tien (via een 220 "weerstand). Verbind de kathodes (korte poot) met Arduino-grond.

Ik heb Fritzing gebruikt om deze diagrammen te tekenen. Het is niet alleen gemakkelijk te gebruiken, het is gratis!

De code

Begin met het definiëren van variabelen zodat we de lichten kunnen aanspreken op naam in plaats van op een nummer. Start een nieuw Arduino-project en begin met deze lijnen:

int rood = 10; int geel = 9; int groen = 8;

Laten we vervolgens de setup-functie toevoegen, waar zullen we de rode, gele en groene LED's configureren die als outputs moeten worden gebruikt. Omdat u variabelen hebt gemaakt om de pincodes weer te geven, kunt u nu naar de pinnen op naam verwijzen.

void setup () pinMode (red, OUTPUT); pinMode (geel, UITGANG); pinMode (groen, OUTPUT); 

Dat was gemakkelijk. Nu voor het moeilijke deel - de werkelijke logica van een verkeerslicht. Maak een aparte functie om de lichten te veranderen (je zult later zien waarom).

Wanneer je voor het eerst met het programmeren begint, is de code zelf erg rudimentair - het is uitzoeken wat de meest logische details zijn die het grootste probleem vormen. De sleutel tot het zijn van een goede programmeur is om naar elk proces te kunnen kijken en het op te splitsen in zijn fundamentele stappen. Dit is de rest van de code:

void loop () changeLights (); delay (15000);  void changeLights () // groen uit, geel aan gedurende 3 seconden digitalWrite (groen, LAAG); digitalWrite (geel, HOOG); delay (3000); // geel uitschakelen en vervolgens 5 seconden rood branden digitalWrite (geel, LAAG); digitalWrite (rood, HOOG); delay (5000); // rood en geel gedurende 2 seconden (rood staat al aan) digitalWrite (geel, HOOG); delay (2000); // schakel rood en geel uit en schakel vervolgens groen digitalWrite in (geel, LAAG); digitalWrite (rood, LAAG); digitalWrite (groen, HOOG); delay (3000); 

Gedaan! Upload en voer nu uit (zorg ervoor dat u de juiste kaart en poort selecteert in de Hulpmiddelen > Haven en Hulpmiddelen > Boord menu's). U zou een werkend verkeerslicht moeten hebben dat elke 15 seconden verandert, zoals dit (versneld):

Een voetgangersoversteekplaats

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

Merk op hoe het verkeerslicht precies hetzelfde is als in het vorige voorbeeld. Sluit de knop aan op digitale pen 12. U zult merken dat de schakelaar een hoge impedantie heeft van 10k? weerstand die eraan verbonden is, en u vraagt ​​zich misschien af ​​waarom. Dit wordt een pull-down-weerstand genoemd. Het is een moeilijk begrip om eerst te begrijpen, maar wees geduldig.

Een schakelaar laat de stroom lopen, of niet. Dit lijkt eenvoudig genoeg, maar in een logisch circuit moet de stroom altijd in een hoge of een lage status stromen (onthoud - 1 of 0, hoog of laag). Je zou kunnen aannemen dat een drukknopschakelaar die niet daadwerkelijk wordt ingedrukt, zou worden gedefinieerd als zijnde in een lage toestand, maar in feite wordt er gezegd dat het 'zwevend' is, omdat er helemaal geen stroom wordt getrokken.

In deze zwevende staat is het mogelijk dat er een foutieve aflezing optreedt wanneer deze fluctueert met elektrische interferentie. Met andere woorden, een zwevende schakelaar geeft geen betrouwbare hoge of lage statuswaarde. Een neertrekweerstand houdt een kleine hoeveelheid stroom in stand als de schakelaar wordt gesloten, waardoor een nauwkeurige lage statuswaarde wordt gegarandeerd. In andere logische circuits vindt u mogelijk een pull-up-weerstand - dit werkt op hetzelfde principe, maar in omgekeerde volgorde, waarbij u ervoor zorgt dat bepaalde logische poorten standaard te hoog zijn.

Nu, in het lusgedeelte van de code, in plaats van de lichten om de 15 seconden te veranderen, gaan we in plaats daarvan de status van de drukknopschakelaar lezen en alleen de lichten veranderen wanneer deze wordt geactiveerd.

De code

Begin met het toevoegen van een nieuwe variabele aan het begin van het programma:

int-knop = 12; // schakelaar staat op pin 12 

Voeg nu in de setup-functie een nieuwe regel toe om de switch als input te declareren. Ik heb ook een enkele regel toegevoegd om de verkeerslichten in de groene fase te starten. Zonder deze initiële instelling zouden ze worden uitgeschakeld, tot de eerste keer dat een changeLights () werd gestart met behulp van een functie.

pinMode (knop, INPUT); digitalWrite (groen, HOOG);

Wijzig in plaats daarvan de hele lusfunctie naar de volgende:

void loop () if (digitalRead (button) == HIGH) delay (15); // software weigert if (digitalRead (button) == HIGH) // als de schakelaar HOOG is, dat wil zeggen. naar beneden gedrukt - verander de lichten! changeLights (); delay (15000); // wacht 15 seconden

Dat zou het moeten doen. U vraagt ​​zich misschien af ​​waarom de knop twee keer wordt gecontroleerd (digitalRead (button)), gescheiden door een kleine vertraging. Dit wordt debouncing genoemd. Net als de pull-downweerstand die nodig was voor de knop, stopt deze eenvoudige controle de code die kleine interferentie detecteert als een druk op de knop. Je hoeft dit niet te doen (en het zou waarschijnlijk prima werken zonder het), maar het is een goede gewoonte.

Door te wachten in de als verklaring gedurende 15 seconden, kunnen de verkeerslichten gedurende ten minste die duur niet veranderen. Zodra 15 seconden voorbij zijn, start de lus opnieuw. Elke herstart van de lus, lees de toestand van de knop opnieuw, maar als deze niet wordt ingedrukt, wordt de als statement wordt nooit geactiveerd, de lampjes veranderen nooit en worden gewoon opnieuw opgestart.

Hier ziet u hoe dit eruit ziet (versneld):

Een knooppunt

Laten we een geavanceerder model proberen. In plaats van een voetgangersoversteekplaats, pas je circuit aan om twee verkeerslichten te hebben:

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

De code

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

// licht één int rood1 = 10; int yellow1 = 9; int green1 = 8; // light two int red2 = 13; int yellow2 = 12; int green2 = 11; void setup () // licht één pinMode op (red1, OUTPUT); pinMode (geel1, UITGANG); pinMode (groen1, OUTPUT); // light two pinMode (red2, OUTPUT); pinMode (yellow2, OUTPUT); pinMode (green2, OUTPUT); 

Werk nu je loop bij om de code uit het eerste voorbeeld te gebruiken (in plaats van het zebrapad):

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

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

void changeLights () // zet beide geelen op digitalWrite (green1, LOW); digitalWrite (geel1, HOOG); digitalWrite (yellow2, HIGH); delay (5000); // zet beide gele kleuren uit, en tegenovergestelde groene en rode digitalWrite (geel1, LAAG); digitalWrite (red1, HIGH); digitalWrite (yellow2, LOW); digitalWrite (red2, LOW); digitalWrite (green2, HIGH); delay (5000); // beide geel op weer digitalWrite (geel1, HOOG); digitalWrite (yellow2, HIGH); digitalWrite (green2, LOW); delay (3000); // zet beide gele kleuren uit, en tegenovergestelde groene en rode digitalWrite (groen1, HOOG); digitalWrite (geel1, LAAG); digitalWrite (rood1, LAAG); digitalWrite (yellow2, LOW); digitalWrite (red2, HIGH); delay (5000); 

Zo ziet dat eruit (versneld):

Dat is het deze keer, dus ik hoop dat je veel hebt geleerd en plezier hebt gehad van nul. Je hebt je handen vies met een paar LED's en weerstanden, evenals een schakelaar met een pull-down weerstand toegevoegd - hopelijk begreep je waarom we er een nodig hebben. Speel rond met de code, pas hem aan en vooral veel plezier. Als u toevoegingen of wijzigingen aanbrengt, kunt u ons dit laten weten in de opmerkingen?

En onthoud dat je mede-doe-het-zelvers tijdens de vakantie of wanneer hun verjaardag arriveert met deze cadeau-ideeën alleen voor Arduino-fans 10 Geschenkideeën voor de Arduino Tinkerer in je leven 10 Geschenkideeën voor de Arduino Tinkerer in je leven Een cadeau kopen voor de Arduino liefhebber in je leven? Hier zijn enkele geweldige cadeau-ideeën: boeken, kits, projectonderdelen en meer! Lees verder :

Beeldcredits: androsvector via Shutterstock.com

Ontdek meer over: Arduino, programmeren.