Arduino programmering för nybörjare trafikljuskontrollen

Arduino programmering för nybörjare trafikljuskontrollen / DIY

Trafikljuset är ett roligt litet projekt, som kan slutföras på under en timme. Lär dig hur du bygger din egen - med hjälp av en Arduino - och hur man ändrar kretsen för en avancerad modell.

Oroa dig inte om du aldrig har använt en Arduino innan vi har en nybörjarguide. Komma igång med Arduino: En nybörjarhandbok Komma igång med Arduino: En nybörjarhandbok Arduino är en öppen källkods elektronikprototypplattform baserad på flexibel, att använda maskinvara och programvara. Den är avsedd för artister, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer. Läs mer .

Notera: Det här är det senaste i en serie nybörjarkurser för Arduino, open source-elektronikprototypplattformen. Här är en lista över tidigare artiklar i serien:

  • Vad är Arduino och vad kan du göra med det Vad är Arduino & Vad kan du göra med det? Vad är Arduino och vad kan du göra med det? Arduino är en anmärkningsvärd liten elektronik enhet, men om du aldrig har använt en tidigare, precis vad exakt är de, och vad kan du göra med en? Läs mer
  • Vad är en Arduino Starter Kit och vad innehåller den? Vad ingår i ett Arduino Starter Kit? [MakeUseOf Förklarar] Vad ingår i ett Arduino Starter Kit? [MakeUseOf Explains] Jag har tidigare introducerat Arduino open source-hårdvaran här på MakeUseOf, men du behöver mer än bara den verkliga Arduino att bygga något ut av det och faktiskt komma igång. Arduino "startpaket" är ... Läs mer
  • Mer coola komponenter att köpa med din startpaket 8 Fler kalla komponenter till dina Arduino-projekt 8 Fler kalla komponenter till dina Arduino-projekt Så du tänker på att få en Arduino-startpaket, men undrar om några grundläggande lysdioder och motstånd kommer att bli tillräckligt för att hålla dig upptagen för helgen? Antagligen inte. Här är ytterligare 8 ... Läs mer
  • Komma igång med ditt Arduino Starter Kit - Installera drivrutiner och ställa in styrningen och porten Komma igång med ditt Arduino Starter Kit - Installera drivrutiner och konfigurera styret och porten Komma igång med ditt Arduino Starter Kit - Installera drivrutiner och konfigurera styrelsen & Port Så du har köpt dig en Arduino startpaket, och eventuellt några andra slumpmässiga coola komponenter - nu vad? Hur kommer du faktiskt igång med att programmera denna Arduino sak? Hur ställer du upp det ... Läs mer
  • En närmare titt på strukturen i en Arduino App & Exempel Blink Program

Vad du behöver

Förutom den grundläggande Arduino behöver du:

  • Röd, gul och grön lysdioder.
  • En brödbräda.
  • 6 x 220? motstånd.
  • Anslutande ledningar.
  • 1 x tryckknappsbrytare.
  • 1 x 10k? motstånd

Nästan alla Arduino kommer att vara lämpliga, förutsatt att den har tillräckligt med pinnar. Se till att du läser vår köpguide Arduino Köpguide: Vilket styrelse ska du få? Arduino Köpguide: Vilket styrelse ska du få? Det finns så många olika typer av Arduino brädor där ute, du skulle bli förlåtad för att vara förvirrad. Vilket ska du köpa för ditt projekt? Låt oss hjälpa till med den här Arduino-köpguiden! Läs mer om du inte är säker på vilken modell du behöver. Du har nog dessa delar i startpaketet Vad finns i din Arduino Starter Kit? [Arduino Beginners] Vad finns i din Arduino Starter Kit? [Arduino Beginners] Inför en låda full av elektroniska komponenter är det lätt att bli överväldigad. Här är en guide till exakt vad du hittar i ditt kit. Läs mer redan.

Ett enkelt exempel

Låt oss börja små. En enkel, enkel trafikljus är ett bra ställe att börja. Här är kretsen:

Anslut anoden (långbenet) till varje LED till digitala stift åtta, nio och tio (via ett 220-motstånd). Anslut katoderna (kort ben) till Arduino marken.

Jag använde Fritzing för att rita dessa diagram. Det är inte bara lätt att använda, det är gratis!

Koden

Börja med att definiera variabler så att vi kan adressera ljusen efter namn i stället för ett nummer. Starta ett nytt Arduino-projekt, och börja med dessa rader:

int rött = 10; int gul = 9; int grön = 8;

Låt oss sedan lägga till installationsfunktionen, var ska vi konfigurera de röda, gula och gröna lysdioderna som ska matas ut. Eftersom du har skapat variabler för att representera stiftnumren kan du nu hänvisa till stiften i namnet istället.

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

Det var enkelt. Nu för den svåra delen - den faktiska logiken i ett trafikljus. Skapa en separat funktion för att byta ljus (du förstår varför senare).

När du börjar programmera, är själva koden mycket rudimentär - det går ut på att hitta de minutiska logikuppgifterna som presenterar det största problemet. Nyckeln till att vara en bra programmerare är att kunna titta på vilken process som helst och bryta ner den i sina grundläggande steg. Här är resten av koden:

tomrumsling () changeLights (); fördröjning (15 tusen);  annulleringsändringarLights () // green off, gul på i 3 sekunder digitalWrite (grön, LOW); digitalWrite (gul, HIGH); fördröjning (3000); // stäng av gult, sätt sedan på rött på i 5 sekunder digitalWrite (gul, LOW); digitalWrite (röd, HIGH); fördröjning (5000); // röd och gul på i 2 sekunder (röd är redan på) digitalWrite (gul, HIGH); fördröjning (2000); // stäng av rött och gult, sätt sedan på green digitalWrite (gul, LOW); digitalWrite (röd, LOW); digitalWrite (grön, HIGH); fördröjning (3000); 

Gjort! Ladda upp och kör nu (var noga med att välja rätt kartong och port från Verktyg > Hamn och Verktyg > Styrelse menyer). Du bör ha ett trafikljus som ändras var 15: e sekund, så här (sped up):

En gångkorsning

Nu när du vet grunderna, låt oss förbättra det. Lägg i en knapp för fotgängare att byta ljus när som helst:

Lägg märke till hur trafikljuset är exakt detsamma som i föregående exempel. Anslut knappen till digital stift 12. Du märker att strömbrytaren har en högimpedans 10k? motstånd kopplat till det, och du kanske undrar varför. Detta kallas ett neddragningsresistor. Det är ett svårt begrepp att förstå först, men bära med mig.

En strömbrytare låter strömmen strömma eller inte. Detta verkar enkelt nog, men i en logisk krets bör strömmen alltid strömma i antingen högt eller lågt tillstånd (kom ihåg - 1 eller 0, hög eller låg). Man kan anta att en knappbrytare som inte faktiskt drivs skulle definieras vara i ett lågt tillstånd, men i själva verket sägs det vara "flytande", eftersom ingen ström dras alls.

I det här flytande tillståndet är det möjligt att en falsk avläsning uppträder då den fluktuerar med elektrisk störning. Med andra ord ger en flytande brytare varken en pålitlig hög eller lågläsning. Ett dragningsmotstånd håller en liten mängd ström som flyter när brytaren är stängd och därigenom säkerställer en exakt lågläsning. I andra logikkretsar kan du hitta ett dragmotstånd istället - det fungerar enligt samma princip, men i omvänd ordning, se till att den speciella logiska grinden är för hög.

Nu, i kupans del av koden, istället för att byta lampor var 15: e sekund, kommer vi läsa läget för tryckknappsbrytaren istället, och ändrar bara lamporna när den är aktiverad.

Koden

Börja med att lägga till en ny variabel till början av programmet:

int knapp = 12; // strömbrytaren är på stift 12 

Nu, i inställningsfunktionen, lägg till en ny rad för att deklarera omkopplaren som en ingång. Jag har också lagt till en enda linje för att starta trafikljusen i det gröna scenet. Utan denna initiala inställning skulle de stängas av, tills första gången en changeLights () initierades med en funktion.

pinMode (knapp, INPUT); digitalWrite (grön, HIGH);

Ändra hela slingans funktion till följande istället:

tomrumsling () om (digitalRead (knapp) == HÖG) fördröjning (15); // programvara debounce if (digitalRead (button) == HIGH) // om växeln är HIGH, dvs. tryckt ner - byt ljus! changeLights (); fördröjning (15 tusen); // vänta i 15 sekunder

Det borde göra det. Du kanske undrar varför knappen är kontrollerad två gånger (digitalRead (knapp)), åtskilda av en liten fördröjning. Detta kallas debouncing. I likhet med att dragningsresistorn behövdes för knappen, stoppar den här enkla kontrollen koden som upptäcker mindre störningar som en knapptryckning. Du behöver inte göra det här (och det skulle förmodligen fungera bra utan det), men det är bra.

Genom att vänta inuti om uttalande i 15 sekunder kan trafikljusen inte ändras under minst den tiden. När 15 sekunder är klar startar slingan om. Varje omstart av slingan läser läget på knappen igen, men om den inte trycks ned, om uttalandet aktiveras aldrig, lamporna ändras aldrig, och det startar helt enkelt igen.

Så här ser det ut (sped up):

En korsning

Låt oss prova en mer avancerad modell. I stället för en gångövergång, ändra din krets för att ha två trafikljus:

Anslut det andra trafikljuset till digitala stiften 11, 12 och 13.

Koden

Tilldela först dina nya trafikljusstift till variabler och konfigurera dem som utgångar, precis som i det första exemplet:

// ljus en int röd1 = 10; int yellow1 = 9; int green1 = 8; // ljus två int red2 = 13; int yellow2 = 12; int green2 = 11; tomrumsinställning () // ljus en pinMode (red1, OUTPUT); pinMode (yellow1, OUTPUT); pinMode (green1, OUTPUT); // Ljus två pinMode (Red2, OUTPUT); pinMode (yellow2, OUTPUT); pinMode (green2, OUTPUT); 

Uppdatera nu din slinga för att använda koden från det första exemplet (istället för gågatan):

tomrumsling () changeLights (); fördröjning (15 tusen); 

Än en gång utförs allt arbete i changeLights () fungera. Snarare än att gå röd > röd & gul > grön, denna kod kommer att växla trafikljusen. När en är på grön, kommer den andra att vara röd. Här är koden:

void changeLights () // vrid båda gyllene på digitalWrite (green1, LOW); digitalWrite (yellow1, HIGH); digitalWrite (yellow2, HIGH); fördröjning (5000); // stänga båda gula och motsatta grön och röd digitalWrite (gul1, LOW); digitalWrite (red1, HIGH); digitalWrite (yellow2, LOW); digitalWrite (red2, LOW); digitalWrite (green2, HIGH); fördröjning (5000); // båda gyllene på igen digitalWrite (yellow1, HIGH); digitalWrite (yellow2, HIGH); digitalWrite (green2, LOW); fördröjning (3000); // stänga båda gula och motsatta grön och röd digitalWrite (green1, HIGH); digitalWrite (yellow1, LOW); digitalWrite (red1, LOW); digitalWrite (yellow2, LOW); digitalWrite (red2, HIGH); fördröjning (5000); 

Så här ser det ut (sped up):

Det är det för den här tiden, så jag hoppas att du lärde dig mycket och hade kul att skriva från början. Du har smutsiga dina händer med några lysdioder och motstånd, samt att lägga till en brytare med dragmotstånd - förhoppningsvis förstod du varför vi behöver en. Leka med koden, justera den och ha det viktigaste. Om du gör några tillägg eller ändringar, varför inte meddela oss om det i kommentarerna?

Och kom ihåg dina medmänniskor gör det själv under semestern eller när deras födelsedag anländer med dessa presentidéer bara för Arduino-fansen 10 Presentidéer till Arduino Tinkerer i ditt liv 10 Presentidéer till Arduino Tinkerer i ditt liv Köp en present till dig Arduino älskare i ditt liv? Här är några fantastiska presentidéer: böcker, kit, projektkomponenter och mycket mer! Läs mer :

Bildkrediter: androsvector via Shutterstock.com

Utforska mer om: Arduino, Programmering.