Arduino-programmering for begyndere Traffic Light Controller-projektvejledning

  • Joseph Goodman
  • 0
  • 4245
  • 1126
Reklame

Arduino-trafiklyset er et sjovt lille projekt, som du kan bygge i under en time. Her er, hvordan du bygger din egen ved hjælp af en Arduino, og hvordan du ændrer kredsløb for en avanceret variation.

Hvis du hellere vil se dette som tutorial som en video, har vi dig dækket:

Hvad du har brug for for at opbygge en Arduino-trafiklyscontroller

Bortset fra den grundlæggende Arduino, har du brug for:

  • 1 x 10k-ohm-modstand
  • 1 x knapkontakt
  • 6 x 220 ohm-modstande
  • En brødbræt
  • Tilslutning af ledninger
  • Røde, gule og grønne lysdioder

Næsten enhver Arduino vil arbejde for dette projekt, forudsat at det har nok stifter. Sørg for at læse vores Arduino-købsguide Arduino-købsvejledning: Hvilket bord skal du få? Arduino Købsvejledning: Hvilket bord skal du få? Der er så mange forskellige slags Arduino-tavler derude, du vil blive tilgitt for at blive forvirret. Hvilket skal du købe til dit projekt? Lad os hjælpe med denne Arduino-købsguide! hvis du ikke er sikker på, hvilken model du har brug for. Du har muligvis allerede disse dele i dit Arduino-startkit Hvad er der i dit Arduino Starter Kit? [Arduino-begyndere] Hvad er der i dit Arduino-startkit? [Arduino-begyndere] Det er let at blive overvældet overfor en kasse fuld af elektroniske komponenter. Her er en guide til nøjagtigt, hvad du finder i dit sæt. .

Arduino trafiklys: det grundlæggende

Lad os begynde i det små. Et grundlæggende, enkelt trafiklys er et godt sted at starte. Her er kredsløbet:

Forbind anoden (langbenet) på hver LED til digitale stifter otte, ni og ti (via en 220 ohm-modstand). Forbind katoderne (korte ben) til Arduinos jord.

Kode til Arduino trafiklys

Start med at definere variabler, så du kan adressere lysene ved navn i stedet for et tal. Start et nyt Arduino-projekt, og start med disse linjer:

int rød = 10; int gul = 9; int grønt = 8;

Lad os derefter tilføje installationsfunktionen, hvor du konfigurerer de røde, gule og grønne LED'er til at være output. Da du har oprettet variabler til at repræsentere pin-numrene, kan du i stedet henvise til stifterne med navn:

void setup () pinMode (rød, OUTPUT); pinMode (gul, OUTPUT); pinMode (grøn, OUTPUT); 

Det pinMode funktion konfigurerer Arduino til at bruge en given pin som output. Du skal gøre dette for, at dine lysdioder overhovedet fungerer. Nu for trafiklysets faktiske logik. Her er den kode, du har brug for. Tilføj dette under dine variable definitioner og opsætningsfunktion:

void loop () ChangeLights (); forsinkelse (15000);  ugyldig skiftLys () // grøn slukket, gul tændt i 3 sekunder digitalWrite (grøn, LAV); digitalWrite (gul, HØJ); forsinkelse (3000); // sluk for gult, tænd derefter rødt i 5 sekunder digitalWrite (gul, LAV); digitalWrite (rød, HØJ); forsinkelse (5000); // rød og gul tændt i 2 sekunder (rød er dog allerede tændt) digitalWrite (gul, HØJ); forsinkelse (2000); // sluk rød og gul, tænd derefter for grøn digitalWrite (gul, LAV); digitalWrite (rød, lav); digitalWrite (grøn, HØJ); forsinkelse (3000); 

Upload denne kode til din Arduino, og kør (sørg for at vælge det rigtige bord og port fra Værktøj > Bestyrelse og Værktøj > Havn menuer). Du skal have et fungerende trafiklys, der skifter hvert 15. sekund, som dette (fremskyndet):

Lad os fordele denne kode. Det changeLights funktion udfører alt det hårde arbejde. Dette drejer trafiklyset gennem gult og rødt og derefter tilbage til grønt. Efterhånden som dette bliver kaldt inde i løkke funktion, vil Arduino køre denne kode for evigt med en 15 sekunders pause hver gang.

Det changeLights funktion består af fire forskellige trin:

  • Grøn på, gul fra
  • Gul fra, rød på
  • Gul på, rød på
  • Grøn på, rød slukket, gul slukket

Disse fire trin gentager processen, der bruges i rigtige trafiklys. For hvert trin er koden meget ens. Den passende LED tændes eller slukkes ved hjælp af digitalWrite. Dette er en Arduino-funktion, der bruges til at indstille udgangsstifter til HØJ (for til) eller LAV (for slukket).

Efter aktivering eller deaktivering af de krævede LED'er, aktiveres forsinke får Arduino til at vente i et givet tidsrum. Tre sekunder i dette tilfælde.

Gå dybere: Arduino fodgængerovergang

Nu hvor du kender det grundlæggende, lad os forbedre det. Tilføj en trykknap til fodgængere til at skifte lys, når de vil:

Bemærk, hvordan lyskrydset er nøjagtigt det samme som det foregående eksempel. Tilslut knappen til den digitale pin 12. Du vil bemærke, at kontakten har en 10-ohm-modstand med høj impedans knyttet til den, og du spekulerer måske på, hvorfor. Dette er en pull-down modstand.

En switch muliggør enten strømmen eller ikke. Dette virker simpelt nok, men i et logisk kredsløb skal strømmen altid flyde i enten en høj eller lav tilstand (husk, 1 eller 0, HØJ eller LAV). Du kan antage, at en knapafbryder, der faktisk ikke er trykket, vil være i en LAV tilstand, men faktisk siges den at være 'flydende', fordi der ikke bliver trukket nogen strøm overhovedet.

I denne flydende tilstand er det muligt, at der forekommer en falsk aflæsning, da den svinger med elektrisk interferens. Med andre ord giver en flydende switch hverken en pålidelig HØJ eller LAV aflæsning. En pull-down modstand holder en lille mængde strømmen flyder, når afbryderen lukkes, hvilket sikrer en nøjagtig aflæsning i lav tilstand.

I andre logiske kredsløb finder du muligvis en pull-up-modstand i stedet, og dette fungerer på samme princip, men omvendt, så du sørger for, at den bestemte logiske gate er standard til høj.

Nu, i løkken del af koden, i stedet for at skifte lys hvert 15. sekund, vil du læse tilstanden af ​​trykknappen i stedet for og kun skifte lysene, når det er aktiveret.

Kode til Arduino fodgængerovergang

Start med at tilføje en ny variabel til at gemme din knapnål:

int-knap = 12; // switch er på pin 12 

Tilføj nu en ny linje i installationsfunktionen for at erklære kontakten som en input. Tilføj en linje for at indstille trafiklys til det grønne trin. Uden denne første indstilling ville de slukke indtil første gang changeLights kørsler.

pinMode (knap, INPUT); digitalWrite (grøn, HØJ);

Skift i stedet hele loop-funktionen til følgende:

void loop () if (digitalRead (knap) == HØJ) forsinkelse (15); // software debounce if (digitalRead (knap) == HIGH) // hvis kontakten er HØJ, dvs. skubbet ned - skift lys! changeLights (); forsinkelse (15000); // vent i 15 sekunder

Det skulle gøre det. Du spekulerer måske på, hvorfor knapkontrol sker to gange (DigitalLæs (knap)), adskilt af en lille forsinkelse. Dette udbryder. Ligesom rullemodstanden for knappen stopper denne enkle kontrol koden, der registrerer mindre interferens som et knaptryk.

Ved at vente inde i hvis angivelse i 15 sekunder, kan trafiklysene ikke ændres i mindst denne varighed. Når 15 sekunder er gået, starter loopen igen. Hver genstart af loopen læser den status på knappen igen, men hvis den ikke er trykket, skal hvis erklæring aktiveres aldrig, lysene skifter aldrig, og programmet genstarter igen.

Sådan ser det ud (fremskyndes):

Arduino trafiklys med kryds

Lad os prøve en mere avanceret model. I stedet for et fodgængerfelt, skal du skifte dit kredsløb til at have to trafiklys:

Tilslut det andet lyskryds til digitale stifter 11, 12 og 13.

Kode til Arduino trafiklys med kryds

Tildel først dine nye trafiklysnåle til variabler og konfigurer dem som output, som i det første eksempel:

// lys en int rød1 = 10; int gul1 = 9; int grøn1 = 8; // lys to int rød2 = 13; int gul2 = 12; int green2 = 11; tom opsætning () // lyser en pinMode (red1, OUTPUT); pinMode (gul1, OUTPUT); pinMode (green1, OUTPUT); // lys to pinMode (red2, OUTPUT); pinMode (gul2, OUTPUT); pinMode (green2, OUTPUT); 

Opdater nu din loop for at bruge koden fra det første eksempel (i stedet for fodgængerovergangen):

void loop () ChangeLights (); forsinkelse (15000); 

Endnu en gang udføres alt arbejde i changeLights fungere. Snarere end at gå rød > rød & gul > grøn, denne kode skifter trafiklys. Når den ene er på grøn, er den anden på rød. Her er koden:

void changeLights () // slå begge gule på digitalWrite (grøn1, LAV); digitalWrite (gul1, HØJ); digitalWrite (gul2, HØJ); forsinkelse (5000); // sluk begge gule og modsat grøn og rød digitalWrite (gul1, LAV); digitalWrite (rød1, HØJ); digitalWrite (gul2, LAV); digitalWrite (red2, LOW); digitalWrite (grøn2, HØJ); forsinkelse (5000); // begge gule igen digitalWrite (gul1, HØJ); digitalWrite (gul2, HØJ); digitalWrite (grøn2, LAV); forsinkelse (3000); // sluk begge gule og modsat grøn og rød digitalWrite (grøn1, HØJ); digitalWrite (gul1, LAV); digitalWrite (rød1, LAV); digitalWrite (gul2, LAV); digitalWrite (rød2, HØJ); forsinkelse (5000); 

Her er hvordan det ser ud (fremskyndet):

Arduino trafiklys næste trin

Det er alt for i dag. Din nye forståelse af Arduino LED'er og knapper gælder for alle slags forskellige projekter. Hvis du vil udvide disse trafiklys, hvorfor ikke bygge et firvejs (eller mere) kryds, komplet med mange fodgængerovergange og fodgængers trafiklys?

Eller hvorfor ikke udvide dine nye færdigheder med et større projekt som denne DIY MIDI-controller eller Arduino-robot med Xod? Du kan også se på Arduino-kodning med VS-kode og PlatformIO Bedre Arduino-kodning med VS-kode og PlatformIO Bedre Arduino-kodning med VS-kode og PlatformIO Vil du have en nem måde at starte kodning af Arduino? Med PlatformIO og VS-kode kan du forenkle Arduino-projekter og lære hurtigere. .

Billedkredit: androsvector / Shutterstock




Endnu ingen kommentarer

Om moderne teknologi, enkel og overkommelig.
Din guide i en verden af moderne teknologi. Lær hvordan du bruger de teknologier og gadgets, der omgiver os hver dag, og lær, hvordan du finder interessante ting på Internettet.