Å bygge en Arduino trafikklyskontroller hjelper deg med å utvikle grunnleggende kodingsevner!  Vi setter i gang.

Arduino-programmering for nybegynnere: Traffic Light Controller Project Tutorial

Annonse Arduino trafikklys er et morsomt lite prosjekt som du kan bygge i løpet av en time. Slik bygger du din egen ved hjelp av en Arduino, og hvordan du kan endre kretsen for en avansert variant. Hvis du heller vil se dette som opplæring som en video, har vi deg dekket: Hva du trenger for å bygge en Arduino trafikklyskontroller Bortsett fra den grunnleggende Arduino, trenger du: 1 x 10k-ohm-motstand 1 x trykknappbryter 6 x 220 ohm-motstander En brødplate Koble til ledninger Røde, gule og grønne lysdioder Nesten hvilken som helst Arduino vil jobbe for dette prosjektet, forutsatt at det har nok

Annonse

Arduino trafikklys er et morsomt lite prosjekt som du kan bygge i løpet av en time. Slik bygger du din egen ved hjelp av en Arduino, og hvordan du kan endre kretsen for en avansert variant.

Hvis du heller vil se dette som opplæring som en video, har vi deg dekket:

Hva du trenger for å bygge en Arduino trafikklyskontroller

Bortsett fra den grunnleggende Arduino, trenger du:

  • 1 x 10k-ohm-motstand
  • 1 x trykknappbryter
  • 6 x 220 ohm-motstander
  • En brødplate
  • Koble til ledninger
  • Røde, gule og grønne lysdioder

Nesten hvilken som helst Arduino vil jobbe for dette prosjektet, forutsatt at det har nok pinner. Sørg for at du leser vår Arduino kjøpeguide Arduino kjøpeguide: Hvilket brett bør du få? Arduino kjøpeguide: Hvilket brett bør du få? Det er så mange forskjellige typer Arduino-brett der ute, du vil bli tilgitt for å bli forvirret. Hvilket bør du kjøpe for prosjektet ditt? La oss hjelpe med denne Arduino-kjøpsguiden! Les mer hvis du ikke er sikker på hvilken modell du trenger. Du har kanskje allerede disse delene i Arduino-startpakken. Hva finnes i Arduino-startpakken? [Arduino-nybegynnere] Hva finnes i Arduino-startpakken? [Arduino nybegynnere] Det er lett å bli overveldet overfor en boks full av elektroniske komponenter. Her er en guide til nøyaktig hva du finner i settet ditt. Les mer .

Arduino Traffic Light: The Basics

La oss begynne i det små. Et enkelt, enkelt trafikklys er et bra sted å starte. Her er kretsen:

Kretsdiagram for grunnleggende Arduino trafikklys

Koble anoden (langbenet) til hver LED til digitale pinner åtte, ni og ti (via en 220 ohm-motstand). Koble katodene (korte benet) til Arduino.

Kode for Arduino trafikklys

Begynn med å definere variabler slik at du kan adressere lysene med navn i stedet for et tall. Start et nytt Arduino-prosjekt, og begynn med disse linjene:

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

La oss deretter legge til konfigurasjonsfunksjonen, der du konfigurerer de røde, gule og grønne lysdiodene som utganger. Siden du har opprettet variabler for å representere pinnetallene, kan du nå henvise til pinnene med navn i stedet:

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

PinMode- funksjonen konfigurerer Arduino til å bruke en gitt pin som en utgang. Du må gjøre dette for at LED-ene i det hele tatt skal fungere. Nå for den faktiske logikken i lyskrysset. Her er koden du trenger. Legg til dette under variabeldefinisjonene og konfigurasjonsfunksjonen:

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

Last opp denne koden til Arduino, og kjør (sørg for å velge riktig tavle og port fra Verktøy > Tavle og verktøy > Portmenyer). Du bør ha et fungerende trafikklys som skifter hvert 15. sekund, slik som dette (fremskyndet):

Arduino trafikklys i aksjon

La oss bryte ned denne koden. ChangeLights- funksjonen utfører alt det harde arbeidet. Dette roterer trafikklyset gjennom gult og rødt og deretter tilbake til grønt. Når dette blir kalt i loop- funksjonen, vil Arduino kjøre denne koden for alltid, med en 15-sekunders pause hver gang.

ChangeLights- funksjonen består av fire forskjellige trinn:

  • Grønn på, gul av
  • Gul av, rød på
  • Gul på, rød på
  • Grønn på, rød av, gul av

Disse fire trinnene gjenskaper prosessen som brukes i virkelige trafikklys. For hvert trinn er koden veldig lik. Den aktuelle LED-en slås på eller av ved hjelp av digitalWrite . Dette er en Arduino-funksjon som brukes til å sette utgangspinner til HØY (for på), eller LAV (for av).

Etter å ha aktivert eller deaktivert de nødvendige LEDene, får forsinkelsen Arduino til å vente i et gitt tidsrom. Tre sekunder i dette tilfellet.

Gå dypere: Arduino fotgjengerovergang

Nå som du vet det grunnleggende, la oss forbedre det. Legg i en trykknapp for fotgjengere for å skifte lys når de vil:

Kretsdiagram for Arduino gangfelt

Legg merke til hvordan trafikklyset er nøyaktig det samme som forrige eksempel. Koble knappen til digital pinne 12. Du vil merke at bryteren har en høyimpedans 10k-ohm-motstand festet til den, og du lurer kanskje på hvorfor. Dette er en nedtrekkbar motstand.

En bryter lar strømmen strømme eller ikke. Dette virker enkelt nok, men i en logisk krets bør strømmen alltid flyte i enten høy eller lav tilstand (husk, 1 eller 0, HØY eller LAV). Du kan anta at en trykknappbryter som ikke er trykket, vil være i LAV tilstand, men faktisk sies den å være 'flytende', fordi ingen strøm blir trukket i det hele tatt.

I denne flytende tilstanden er det mulig at en falsk avlesning vil oppstå når den svinger med elektrisk forstyrrelse. Med andre ord, en flytende bryter gir verken en pålitelig HØY eller LAV avlesning. En nedtrekksmotstand holder en liten mengde strøm som strømmer når bryteren blir lukket, og sikrer dermed en nøyaktig avlesning i lav tilstand.

I andre logiske kretsløp kan det hende du finner en opptrekksmotstand i stedet, og dette fungerer på samme prinsipp, men i motsatt retning, og sørg for at den bestemte logiske porten er standard til høy.

Nå, i løkkedelen av koden, i stedet for å skifte lys hvert 15. sekund, kommer du til å lese tilstanden til trykknappbryteren i stedet, og bare skifte lysene når den er aktivert.

Kode for Arduino fotgjengerovergang

Begynn med å legge til en ny variabel for å lagre knappestiften din:

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

Nå, i installasjonsfunksjonen, legger du til en ny linje for å erklære bryteren som en inngang. Legg til en linje for å stille trafikklysene til det grønne scenen. Uten denne første innstillingen, ville de slått til første gang byttelysene går.

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

Endre hele loopfunksjonen til følgende i stedet:

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

Det burde gjøre det. Du lurer kanskje på hvorfor knappekontrollen skjer to ganger ( digitalRead (knapp) ), atskilt med en liten forsinkelse. Dette melder seg ut. På samme måte som nedtrekksmotstanden for knappen, stopper denne enkle kontrollen koden for å oppdage mindre forstyrrelser når du trykker på knappen.

Ved å vente i if- setningen i 15 sekunder, kan ikke trafikklysene skifte i minst den varigheten. Når 15 sekunder er over starter loopen på nytt. Hver omstart av loopen, leser den status på knappen igjen, men hvis den ikke blir trykket, aktiveres hvis setningen aldri, lysene skifter aldri, og programmet starter på nytt.

Slik ser du ut (fremskyndet):

Arduino gangfelt i aksjon

Arduino trafikklys med veikryss

La oss prøve en mer avansert modell. I stedet for en gangfelt, bytt kretsen slik at du har to trafikklys:

Cricuit diagram for Arduino trafikklys med veikryss

Koble det andre lyskrysset til digitale pinner 11, 12 og 13.

Kode for Arduino trafikklys med veikryss

Først tilordner du de nye trafikklyspinnene til variabler, og konfigurer dem som utganger, som i det første eksemplet:

 // 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); } 

Nå, oppdater sløyfen din for å bruke koden fra det første eksemplet (i stedet for gangfeltet):

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

Nok en gang utføres alt arbeidet i endringslysfunksjonen . I stedet for å gå rødt > rødt og gult > grønt, vil denne koden bytte trafikklysene. Når den ene er på grønn, er den andre på rød. Her er koden:

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

Slik ser du ut (fremskyndet):

Arduino trafikklys med veikryss i aksjon

Arduino trafikklys Neste trinn

Det var alt for i dag. Din nye forståelse av Arduino-LED og -knapper gjelder alle slags prosjekter. Hvis du vil utvide trafikklysene, hvorfor ikke bygge et firveis kryss (eller flere), komplett med mange gangfelt og trafikklys for fotgjenger?

Eller hvorfor ikke utvide de nye ferdighetene dine med et større prosjekt som denne DIY MIDI-kontrolleren eller Arduino-roboten med Xod? Du kan også se på Arduino-koding med VS-kode og plattformIO Bedre Arduino-koding med VS-kode og plattformIO Bedre Arduino-koding med VS-kode og plattformIO Vil du ha en enkel måte å starte Arduino-koding? Med PlatformIO og VS Code kan du forenkle Arduino-prosjekter og lære raskere. Les mer .

Bildekreditt: androsvector / Shutterstock

Utforsk mer om: Arduino, DIY Project Tutorials, Programming.