Arduino programmering for nybegynnere Trafikklyskontrolleren

Arduino programmering for nybegynnere Trafikklyskontrolleren / DIY

Trafikklyset er et morsomt lite prosjekt, som kan fullføres på under en time. Lær hvordan du bygger din egen - ved hjelp av en Arduino - og hvordan du endrer kretsen for en avansert modell.

Ikke bekymre deg hvis du aldri har brukt en Arduino før, vi har en nybegynnerveiledning Komme i gang med Arduino: En nybegynnersveiledning Komme i gang med Arduino: En nybegynnersguide Arduino er en åpen kilde elektronikk prototyping plattform basert på fleksibel, å bruke maskinvare og programvare. Det er ment for kunstnere, designere, hobbyister, og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer .

Merk: Dette er det siste i en serie av nybegynnernivåopplæringsprogrammer for Arduino, open source elektronikk prototyping plattform. Her er en liste over tidligere artikler i serien:

  • Hva er Arduino og hva kan du gjøre med det Hva er Arduino og hva kan du gjøre med det? Hva er Arduino og hva kan du gjøre med det? Arduino er en bemerkelsesverdig liten elektronikk enhet, men hvis du aldri har brukt en før, akkurat hva er de, og hva kan du gjøre med en? Les mer
  • Hva er en Arduino Starter Kit og hva inneholder den? Hva er inkludert i en Arduino Starter Kit? [MakeUseOf Forklarer] Hva er inkludert i et Arduino Starter Kit? [MakeUseOf Forklarer] Jeg har tidligere introdusert Arduino open-source hardware her på MakeUseOf, men du trenger mer enn bare den faktiske Arduino å bygge noe ut av det og faktisk komme i gang. Arduino "startpakker" er ... Les mer
  • Flere kjølige komponenter for å kjøpe med startpakken 8 Flere kjølige komponenter for dine Arduino-prosjekter 8 Flere kule komponenter for dine Arduino-prosjekter Så du tenker på å få et Arduino-startpakke, men lurer på om noen grunnleggende lysdioder og motstander kommer til å bli nok til å holde deg opptatt i helgen? Sannsynligvis ikke. Her er en annen 8 ... Les mer
  • Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og porten Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og porten Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret & Port Så, du har kjøpt deg en Arduino startpakke, og muligens noen andre tilfeldige, kule komponenter - nå hva? Hvordan kommer du faktisk i gang med programmering av denne Arduino-tingen? Hvordan setter du opp ... Les mer
  • En nærmere titt på strukturen av en Arduino App & Eksempel Blink Program

Hva trenger du

Bortsett fra det grunnleggende Arduino, trenger du:

  • Røde, gule og grønne lysdioder.
  • Et brødbrett.
  • 6 x 220? motstander.
  • Kobling av ledninger.
  • 1 x trykknappbryter.
  • 1 x 10k? motstand

Nesten noen Arduino vil være egnet, forutsatt at den har nok pins. Sørg for at du leser vår kjøpeguide Arduino Kjøpsguide: Hvilket styre bør du få? Arduino Kjøpsguide: Hvilket styre bør du få? Det er så mange forskjellige typer Arduino boards der ute, du vil bli tilgitt for å være forvirret. Hvilken bør du kjøpe for prosjektet ditt? La oss hjelpe, med denne Arduino kjøpesiden! Les mer hvis du ikke er sikker på hvilken modell du trenger. Du har sikkert disse delene i startpakken Hva er i din Arduino Starter Kit? [Arduino Beginners] Hva er i din Arduino Starter Kit? [Arduino Beginners] Faced med en boks full av elektroniske komponenter, er det enkelt å bli overveldet. Her er en guide til nøyaktig hva du finner i ditt sett. Les mer allerede.

Et enkelt eksempel

La oss starte små. Et grunnleggende, enkelt trafikklys er et godt sted å starte. Her er kretsen:

Koble anoden (langbenet) til hver LED til digitale stifter åtte, ni og ti (via en 220-motstand). Koble katodene (kort ben) til Arduino bakken.

Jeg brukte Fritzing til å tegne disse diagrammene. Ikke bare er det enkelt å bruke, det er gratis!

Koden

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

int rødt = 10; int gul = 9; int grønn = 8;

Deretter la vi legge til oppsettfunksjonen, hvor skal vi konfigurere de røde, gule og grønne LEDene som skal utgange. Siden du har opprettet variabler for å representere pinnumrene, kan du nå referere til pinnene ved navn i stedet.

tomt oppsett () pinMode (rød, OUTPUT); pinMode (gul, OUTPUT); pinMode (grønn, OUTPUT); 

Det var lett. Nå for den vanskelige delen - den faktiske logikken til et trafikklys. Lag en egen funksjon for å skifte lysene (du vil se hvorfor senere).

Når du begynner programmeringen, er selve koden veldig rudimentær - det er å finne ut de øyeblikkelige logikkdetaljer som presenterer det største problemet. Nøkkelen til å være en god programmør er å kunne se på hvilken som helst prosess, og bryte den ned i grunnleggende trinnene. Her er resten av koden:

tomromsløyfe () changeLights (); forsinkelse (15000);  ugyldig bytteLights () // grønn, gul på i 3 sekunder digitalWrite (grønn, LOW); digitalWrite (gul, HIGH); forsinkelse (3000); // Slå av gul, og slå deretter rødt på i 5 sekunder digitalWrite (gul, LOW); digitalWrite (rød, HIGH); forsinkelse (5000); // rød og gul på i 2 sekunder (rød er allerede på) digitalWrite (gul, HIGH); forsinkelse (2000); // slå av rød og gul, og slå deretter på green digitalWrite (gul, LOW); digitalWrite (rød, LOW); digitalWrite (grønn, HIGH); forsinkelse (3000); 

Ferdig! Nå, last opp og kjøre (pass på å velge riktig kort og port fra Verktøy > Havn og Verktøy > Borde menyer). Du bør ha et trafikklys som skifter hvert 15. sekund, slik som dette (sped up):

En fotgjengerovergang

Nå som du vet det grunnleggende, la oss forbedre det. Legg i en trykknapp for fotgjengere for å endre lyset når de liker:

Legg merke til hvordan trafikklyset er nøyaktig det samme som forrige eksempel. Koble knappen til digital pin 12. Du vil merke at bryteren har en høyimpedans 10k? motstand festet til den, og du lurer kanskje på hvorfor. Dette kalles en nedtrekksmotstand. Det er et vanskelig konsept å forstå først, men bære med meg.

En bryter lar enten strømmen strømmer, eller ikke. Dette virker enkelt nok, men i en logikkkrets 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 egentlig blir presset, vil bli definert som i lav tilstand, men faktisk sies det å være "flytende" fordi ingen strøm blir trukket i det hele tatt.

I denne flytende tilstand er det mulig at en falsk avlesning vil oppstå når den svinger med elektrisk forstyrrelse. Med andre ord gir en flytende bryter hverken en pålitelig høy eller lav tilstandsavlesning. En nedtrekksmotstand holder en liten mengde strøm som strømmer når bryteren er stengt, og sikrer dermed en nøyaktig lavtilstandsavlesning. I andre logikkkretser kan du finne en opptrekksmotstand i stedet - dette fungerer på samme prinsipp, men i motsatt retning, sørg for at den aktuelle logiske porten er for høy.

Nå, i loop-delen av koden, i stedet for å bytte lys hvert 15. sekund, skal vi lese tilstanden til trykknappbryteren i stedet, og bare endre lysene når den er aktivert.

Koden

Start med å legge til en ny variabel til starten av programmet:

int-knapp = 12; // bryteren er på pin 12 

Nå, i oppsettfunksjonen, legger du til en ny linje for å erklære bryteren som en inngang. Jeg har også lagt til en enkelt linje for å starte trafikklysene i det grønne scenen. Uten denne innledende innstillingen, ville de bli slått av, til første gang ble en changeLights () startet ved hjelp av en funksjon.

pinMode (knapp, INPUT); digitalWrite (grønn, HIGH);

Endre hele loop-funksjonen til følgende i stedet:

tomromsløyfe () hvis (digitalRead (knapp) == HØY) forsinkelse (15); // programvare debounce hvis (digitalRead (knapp) == HIGH) // hvis bryteren er høy, dvs. presset ned - bytt lysene! changeLights (); forsinkelse (15000); // vent i 15 sekunder

Det burde gjøre det. Du lurer kanskje på hvorfor knappen er merket to ganger (DigitalLes (knapp)), adskilt av en liten forsinkelse. Dette kalles debouncing. I likhet med at nedtrekksmodstanden var nødvendig for knappen, stopper denne enkle kontrollen koden som oppdager mindre forstyrrelser som en trykknapp. Du trenger ikke å gjøre dette (og det vil nok fungere fint uten det), men det er god praksis.

Ved å vente inne i hvis utsagn i 15 sekunder, kan trafikklysene ikke endres i minst denne varigheten. Når 15 sekunder er opp, starter sløyfen på nytt. Hver omstart av sløyfen, les tilstanden til knappen igjen, men hvis den ikke er trykket, vil den hvis setningen aktiveres aldri, lysene endres aldri, og det starter bare på nytt.

Slik ser dette ut (sped opp):

Et veikryss

La oss prøve en mer avansert modell. I stedet for en fotgjengerovergang må du endre kretsen for å ha to lyskryss:

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

Koden

Først tilordne de nye trafikklyspinnene til variabler, og konfigurer dem som utdata, akkurat som i det første eksemplet:

// lys en int rød1 = 10; int yellow1 = 9; int green1 = 8; // lys to int rød2 = 13; int yellow2 = 12; int green2 = 11; tomt oppsett () // lys en pinMode (red1, OUTPUT); pinMode (yellow1, OUTPUT); pinMode (green1, OUTPUT); // lys to pinMode (red2, OUTPUT); pinMode (yellow2, OUTPUT); pinMode (green2, OUTPUT); 

Oppdater nå løkken for å bruke koden fra det første eksemplet (i stedet for fotgjengerovergangen):

tomromsløyfe () changeLights (); forsinkelse (15000); 

Igjen blir alt arbeidet utført i changeLights () funksjon. Snarere enn å gå rød > rød & gul > grønn, Denne koden vil skifte trafikklysene. Når en er på grønt, vil den andre være på rødt. Her er koden:

void changeLights () // slå begge gule på digitalWrite (green1, LOW); digitalWrite (yellow1, HIGH); digitalWrite (yellow2, HIGH); forsinkelse (5000); // slå begge gulger av og motsatt grønn og rød digitalWrite (gul1, LOW); digitalWrite (red1, HIGH); digitalWrite (yellow2, low); digitalWrite (red2, LOW); digitalWrite (green2, HIGH); forsinkelse (5000); // begge gulger på igjen digitalWrite (yellow1, HIGH); digitalWrite (yellow2, HIGH); digitalWrite (green2, LOW); forsinkelse (3000); // slå begge gulger av og motsatt grønn og rød digitalWrite (green1, HIGH); digitalWrite (yellow1, LOW); digitalWrite (red1, LOW); digitalWrite (yellow2, low); digitalWrite (red2, HIGH); forsinkelse (5000); 

Her er det som ser ut som (sped up):

Det er det for denne gangen, så jeg håper du lærte mye og hadde det gøy å skrive fra bunnen av. Du fikk dine hender skitne med noen få lysdioder og motstander, samt å legge til en bryter med en nedtrekksmotstand - forhåpentligvis forstod du hvorfor vi trenger en. Spill deg med koden, juster den, og viktigst, ha det gøy. Hvis du gjør noen tilføyelser eller endringer, hvorfor ikke gi oss beskjed om det i kommentarene?

Og husk dine medmennesker i løpet av ferien eller når bursdagen din kommer med disse gaveideene bare for Arduino-fansen 10 Gave Ideas for Arduino Tinkerer i livet ditt 10 Gave Ideas for Arduino Tinkerer i livet ditt Kjøp en gave til deg Arduino elsker i livet ditt? Her er noen flotte gaveideer: bøker, sett, prosjektkomponenter og mer! Les mer :

Bildekreditt: androsvector via Shutterstock.com

Utforsk mer om: Arduino, Programmering.