Trafiklyset er et sjovt lille projekt, der kan gennemføres inden for en time. Lær hvordan du opbygger din egen - ved hjælp af en Arduino - og hvordan man ændrer kredsløbet til en avanceret model.
Bare rolig, hvis du aldrig har brugt en Arduino før, har vi en nybegyndervejledning Kom i gang med Arduino: En nybegyndervejledning Kom godt i gang med Arduino: En nybegyndervejledning Arduino er en open source elektronik prototypeplanlægning baseret på fleksibel, at bruge hardware og software. Det er beregnet til kunstnere, designere, hobbyister og alle interesserede i at skabe interaktive objekter eller miljøer. Læs mere .
Bemærk : Dette er det seneste inden for en række begivenhedsniveauer til Arduino, open source elektronik prototyping platform. Her er en liste over de tidligere artikler i serien:
- Hvad er Arduino & Hvad kan du gøre med det Hvad er Arduino & Hvad kan du gøre med det? Hvad er Arduino & Hvad kan du gøre med det? Arduino er en bemærkelsesværdig lille elektronik enhed, men hvis du aldrig har brugt en før, hvad præcist er de, og hvad kan du gøre med en? Læs mere
- Hvad er et Arduino Starter Kit og hvad indeholder det? Hvad er inkluderet i et Arduino Starter Kit? [MakeUseOf Forklarer] Hvad er inkluderet i et Arduino Starter Kit? [MakeUseOf Forklarer] Jeg har tidligere introduceret Arduino open source hardware her på MakeUseOf, men du skal bruge mere end bare den faktiske Arduino at bygge noget ud af det og faktisk komme i gang. Arduino "starter kits" er ... Læs mere
- Flere kølige komponenter, der kan købes med dit Starter Kit 8 Flere kølige komponenter til dine Arduino-projekter 8 Flere kølige komponenter til dine Arduino-projekter Så du tænker på at få et Arduino-startpakke, men undrer dig over, om nogle grundlæggende LED'er og modstande kommer til at være nok til at holde dig travlt til weekenden? Sikkert ikke. Her er en anden 8 ... Læs mere
- Kom godt i gang med dit Arduino Starter Kit - Installation af drivere og opsætning af styret og porten Kom godt i gang med dit Arduino Starter Kit - Installation af drivere og opsætning af bestyrelsen og porten Kom godt i gang med dit Arduino Starter Kit - Installation af drivere og opsætning af bestyrelsen & Port Så du har købt dig selv et Arduino starterpakke, og muligvis nogle andre tilfældige, kølige komponenter - hvad nu? Hvordan kommer du faktisk i gang med at programmere denne Arduino ting? Hvordan sætter du det op ... Læs mere
- Et nærmere kig på strukturen i en Arduino App & Eksempel Blink Program
Hvad du har brug for
Bortset fra de grundlæggende Arduino, skal du:
- Røde, gule og grønne lysdioder.
- Et brødbræt.
- 6 x 220? modstande.
- Tilslutning af ledninger.
- 1 x trykknap
- 1 x 10k? modstand
Næsten enhver Arduino vil være egnet, forudsat at den har nok stifter. Sørg for at du læser vores købsvejledning Arduino Købsvejledning: Hvilket bestyrelse skal du få? Arduino Købsvejledning: Hvilket bestyrelse skal du få? Der er så mange forskellige slags Arduino boards derude, du ville blive tilgivet for at være forvirret. Hvad skal du købe til dit projekt? Lad os hjælpe med denne Arduino købeguide! Læs mere, hvis du ikke er sikker på, hvilken model du har brug for. Du har sikkert disse dele i din startpakke Hvad er der i din Arduino Starter Kit? [Arduino Beginners] Hvad er der i din Arduino Starter Kit? [Arduino Beginners] Facet med en kasse fuld af elektroniske komponenter, er det nemt at blive overvældet. Her er en vejledning til, hvad du finder i dit kit. Læs mere allerede.
Et simpelt eksempel
Lad os starte små. Et grundlæggende, enkelt trafiklys er et godt sted at starte. Her er kredsløbet:
Tilslut anoden (langbenet) af hver LED til digitale stifter otte, ni og ti (via en 220 Ω-modstand). Tilslut katodene (kort ben) til Arduino jorden.
Jeg brugte Fritzing til at tegne disse diagrammer. Det er ikke kun nemt at bruge, det er gratis!
Koden
Start med at definere variabler, så vi kan adressere lysene ved navn i stedet for et tal. Start et nyt Arduino projekt, og begynd med disse linjer:
int red = 10; int yellow = 9; int green = 8;
Lad os derefter tilføje opsætningsfunktionen, hvor skal vi konfigurere de røde, gule og grønne lysdioder, der skal udgange. Da du har oprettet variabler for at repræsentere pinnumre, kan du nu henvise til stifterne ved navn i stedet.
void setup(){ pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); }
Det var nemt. Nu for den vanskelige del - den faktiske logik af et trafiklys. Opret en separat funktion til ændring af lysene (du kan se hvorfor senere).
Når du først begynder at programmere, er selve koden meget rudimentær - det er at finde ud af de minuts logiske detaljer, der præsenterer det største problem. Nøglen til at være en god programmør er at kunne se på enhver proces og bryde den ned i sine grundlæggende trin. Her er resten af koden:
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); }
Færdig! Nu skal du uploade og køre (sørg for at vælge det rigtige kort og porten i menuen Værktøjer > Port og Værktøjer > Bord ). Du skal have et trafiklys, der ændres hvert 15. sekund, som denne (sped up):
En fodgængerovergang
Nu da du kender det grundlæggende, lad os forbedre det. Tilføj i en tryknap for fodgængere til at ændre lyset, når de kan lide:
Bemærk, hvordan trafiklyset er nøjagtigt det samme som forrige eksempel. Tilslut knappen til digital pin 12. Du vil bemærke, at kontakten har en højimpedans 10k? modstand bundet til det, og du kan undre sig over hvorfor. Dette kaldes en pull-down modstand. Det er et vanskeligt begreb at forstå først, men bære med mig.
En switch lader enten strømmen strømme eller ikke. Dette synes simpelt nok, men i et logisk kredsløb skal strømmen altid strømme i enten høj eller lav tilstand (husk - 1 eller 0, høj eller lav). Man kan antage, at en trykknapkontakt, der ikke rent faktisk bliver skubbet, ville blive defineret som værende i lav tilstand, men det siges faktisk at være "flydende", fordi der ikke bliver trukket nogen strøm.
I denne flydende tilstand er det muligt, at der opstår en falsk læsning, da den svinger med elektrisk interferens. Med andre ord giver en flydende switch hverken en pålidelig høj eller lav tilstandslæsning. En pull down-modstand holder en lille smule strøm strøm, når kontakten er lukket for derved at sikre en nøjagtig lav tilstandsaflæsning. I andre logiske kredsløb kan du måske finde en pull-up-modstand i stedet - det fungerer på samme princip, men i omvendt, så sørg for, at den pågældende logiske gate er for høj.
Nu i kuglens del af koden, i stedet for at skifte lys hvert 15. sekund, vil vi i stedet læse trykknappens tilstand, og kun skifte lys, når den er aktiveret.
Koden
Start med at tilføje en ny variabel til starten af programmet:
int button = 12; // switch is on pin 12
Nu, i opsætningsfunktionen, tilføj en ny linje for at angive omskifteren som input. Jeg har også tilføjet en enkelt linje for at starte trafiklysene i det grønne stadium. Uden denne indledende indstilling ville de være slukket, indtil første gang en changeLights () blev startet ved hjælp af en funktion.
pinMode(button, INPUT); digitalWrite(green, HIGH);
Skift hele loop-funktionen 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 gøre det. Du kan undre dig over, hvorfor knappen er tjekket to gange ( digitalRead (knap) ), adskilt af en lille forsinkelse. Dette kaldes debouncing. I lighed med, at pull down-modstanden var nødvendig for knappen, stopper denne simple check koden, der opdager mindre interferens som et tryk på knappen. Du behøver ikke at gøre dette (og det ville nok nok fungere fint uden det), men det er god praksis.
Ved at vente inde i if- udsagnet i 15 sekunder, kan trafiklysene ikke ændre sig i mindst denne varighed. Når 15 sekunder er op, genstarter sløjfen. Hver genstart af sløjfen, læs tilstanden på knappen igen, men hvis den ikke trykkes, aktiveres if- sætningen aldrig, lysene ændres aldrig, og det genstarter bare igen.
Sådan ser det ud (sped up):
Et knudepunkt
Lad os prøve en mere avanceret model. I stedet for en fodgængerovergang skal du ændre dit kredsløb for at have to trafiklys:
Tilslut det andet trafiklys til digitale stifter 11, 12 og 13.
Koden
Først skal du tildele dine nye trafiklyspinde til variabler, og konfigurere dem som output, ligesom i det første eksempel:
// 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); }
Opdater nu din sløjfe for at bruge koden fra det første eksempel (i stedet for fodgængerovergangen):
void loop(){ changeLights(); delay(15000); }
Endnu en gang udføres alt arbejdet i funktionen changeLights () . I stedet for at gå rødt > rødt og gult > grønt, vil denne kode skifte trafiklygterne. Når en er på grøn, vil den anden være 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); }
Her er hvad det ser ud (sped up):
Det er det for denne gang, så jeg håber du lærte meget og havde det sjovt at skrive fra bunden. Du har fået dine hænder snavset med et par lysdioder og modstande, samt at tilføje en kontakt med en pull down modstand - forhåbentlig forstod du hvorfor vi har brug for en. Spil med koden, juster den, og vigtigst har det sjovt. Hvis du laver nogen tilføjelser eller ændringer, hvorfor ikke lade os vide om det i kommentarerne?
Billedkredit: androsvector via Shutterstock.com