Arduino de programare pentru începători Traffic Light Controller

Arduino de programare pentru începători Traffic Light Controller / DIY

Lumina de trafic este un mic proiect distractiv, care poate fi finalizat în mai puțin de o oră. Aflați cum să vă construiți propria - folosind un Arduino - și cum să modificați circuitul pentru un model avansat.

Nu vă faceți griji dacă nu ați folosit niciodată un Arduino înainte de a avea un ghid pentru începători Arduino: Un ghid pentru începători Arduino este o platformă de prototipuri electronice cu sursă deschisă bazată pe platforme flexibile, să utilizeze hardware și software. Este destinat artiștilor, designerilor, pasionaților și tuturor celor interesați să creeze obiecte sau medii interactive. Citeste mai mult .

Notă: Acesta este cel mai recent dintr-o serie de tutoriale de nivel incepator pentru Arduino, platforma electronica open source pentru prototipuri. Iată o listă cu articolele anterioare din seria:

  • Ce este Arduino și ce poți să faci cu el Ce este Arduino și ce poți să faci cu el? Ce este Arduino și ce puteți face cu el? Arduino este un dispozitiv remarcabil de electronică, dar dacă nu ai mai folosit niciodată înainte, ce anume sunt și ce poți să faci cu unul? Citeste mai mult
  • Ce este un set Arduino Starter & ce conține? Ce este inclus într-un kit de pornire Arduino? [Explică-i pe MakeUseOf] Ce este inclus în kitul de pornire Arduino? [MakeUseOf Explains] Am introdus hardware-ul open-source Arduino aici pe MakeUseOf, dar ai nevoie de ceva mai mult decât Arduino pentru a construi ceva din ea și de fapt începe. Arduino "kituri de starter" sunt ... Citește mai mult
  • Mai multe componente cool pentru a cumpăra cu kitul de pornire 8 Componente mai cool pentru proiectele dvs. Arduino 8 Componente mai cool pentru proiectele dvs. Arduino Deci, vă gândiți să obțineți un kit de pornire Arduino, dar vă întrebați dacă unele LED-uri și rezistoare de bază vor fi suficient pentru a vă menține ocupat pentru weekend? Probabil ca nu. Iată încă 8 ... Citește mai mult
  • Noțiuni de bază cu setul dvs. de pornire Arduino - Instalarea driverelor și configurarea tabloului de bord și a portului Începeți cu setul dvs. de pornire Arduino - Instalarea driverelor și configurarea tabloului de bord și a portului Noțiuni introductive cu setul de pornire Arduino - Instalarea driverelor & Port Deci, ți-ai cumpărat un kit de pornire Arduino și, eventual, și alte componente cool aleatoare - acum ce? Cum de a începe cu programarea acestui lucru Arduino? Cum îl configurați ... Citește mai mult
  • O privire mai clară asupra structurii unei aplicații Arduino și a programului Blink Exemplu

De ce ai nevoie

În afară de Arduino de bază, veți avea nevoie de:

  • LED-uri roșu, galben și verde.
  • Un pâine.
  • 6 x 220? rezistențe.
  • Conectați firele.
  • 1 x comutator cu buton.
  • 1 x 10k? rezistor

Aproape orice Arduino va fi potrivit, cu condiția să aibă suficienți pini. Asigurați-vă că ați citit ghidul nostru de cumpărare Arduino Ghid de cumpărare: Care ar trebui să obțineți? Arduino Ghidul de cumpărare: care ar trebui să obțineți? Există atât de multe feluri de plăci de arduino, acolo vei fi iertat că ești confuz. Care ar trebui să cumpărați pentru proiectul dvs.? Să ne ajute, cu acest ghid de cumpărare Arduino! Citiți mai multe dacă nu sunteți sigur de ce model aveți nevoie. Probabil că aveți aceste componente în setul dvs. de pornire Ce este în setul dvs. de pornire Arduino? [Arduino Beginners] Ce este în setul dvs. de pornire Arduino? [Arduino Beginners] În fața unei cutii pline de componente electronice, este ușor să fii coplesit. Iată un ghid pentru exact ce veți găsi în kit. Citiți mai multe.

Un exemplu simplu

Să începem puțin. O lumină de drum unică, de bază, este un loc bun pentru a începe. Iată circuitul:

Conectați anodul (piciorul lung) al fiecărui LED la pinii digitali opt, nouă și zece (printr-o rezistență 220?). Conectați catodii (piciorul scurt) la solul Arduino.

Am folosit-o pe Fritzing pentru a desena aceste diagrame. Nu numai că este ușor de folosit, este gratuit!

Codul

Începeți prin definirea variabilelor, astfel încât să putem aborda luminile după nume, mai degrabă decât un număr. Începeți un nou proiect Arduino și începeți cu aceste linii:

int roșu = 10; int galben = 9; int verde = 8;

Apoi, adăugăm funcția de configurare, unde vom configura LED-urile roșu, galben și verde ca ieșiri. Din moment ce ați creat variabilele pentru a reprezenta numerele de pin, puteți să vă referiți acum la pinii după nume.

void setup () pinMode (roșu, OUTPUT); pinMode (galben, OUTPUT); pinMode (verde, OUTPUT); 

A fost ușor. Acum, pentru partea dificilă - logica reală a unui semafor. Creați o funcție separată pentru schimbarea luminilor (veți vedea de ce mai târziu).

Când începeți să vă programați, codul în sine este foarte rudimentar - este vorba de detaliile logice minime care prezintă cea mai mare problemă. Cheia de a fi un bun programator este să fii capabil să privești la orice proces și să-l rupi în pașii lui fundamentali. Iată restul codului:

void loop () changeLights (); întârziere (15000);  void changeLights () // green off, galben activat timp de 3 secunde digitalWrite (verde, LOW); digitalWrite (galben, HIGH); întârziere (3000); // opriți culoarea galbenă, apoi aprindeți roșu timp de 5 secunde digitalWrite (galben, LOW); digitalWrite (roșu, HIGH); întârziere (5000); // roșu și galben aprins timp de 2 secunde (roșu este deja activat) digitalWrite (galben, HIGH); întârziere (2000); // opriți roșu și galben, apoi activați funcția greenWrite verde (galben, LOW); digitalWrite (roșu, LOW); digitalWrite (verde, HIGH); întârziere (3000); 

Terminat! Acum, încărcați și executați (asigurați-vă că selectați placa și portul corect din Unelte > Port și Unelte > Bord meniuri). Ar trebui să aveți un semafor de lucru care să se schimbe la fiecare 15 secunde, astfel:

O trecere pietonală

Acum că știți elementele de bază, să le îmbunătățim. Adăugați un buton pentru pietoni pentru a schimba lumina oricând doriți:

Observați cum lumina semaforului este exact aceeași cu exemplul anterior. Conectați butonul la pinul digital 12. Veți observa că comutatorul are o impedanță înaltă de 10k? rezistor atașat la acesta, și s-ar putea să te întrebi de ce. Aceasta se numește rezistor de împingere. Este un concept dificil de înțeles la început, dar purtați-mă cu mine.

Un comutator fie permite fluxul curent, fie nu. Acest lucru pare destul de simplu, dar într-un circuit logic, curentul ar trebui să curgă întotdeauna fie în stare ridicată, fie în stare scăzută (amintiți - 1 sau 0, înaltă sau joasă). S-ar putea să presupuiți că un comutator cu buton care nu este împins în realitate ar fi definit ca fiind într-o stare scăzută, dar, de fapt, se spune că este "plutitor", deoarece nu se creează deloc curent.

În această stare plutitoare, este posibil ca o citire falsă să aibă loc deoarece fluctuează cu interferențe electrice. Cu alte cuvinte, un comutator plutitor nu oferă nici o citire fiabilă ridicată, nici scăzută. Un rezistor de împingere păstrează o cantitate mică de curent care curge când întrerupătorul este închis, asigurând astfel o citire precisă a stării. În alte circuite logice, puteți găsi o rezistență de tracțiune în schimb - aceasta funcționează pe același principiu, dar în sens invers, asigurându-vă că anumite porți logice defaults la mare.

Acum, în partea de buclă a codului, în loc să schimbăm lumina la fiecare 15 secunde, vom citi în schimb starea comutatorului butonului și schimbăm doar luminile când este activată.

Codul

Începeți prin adăugarea unei noi variabile la începutul programului:

butonul int = 12; // comutatorul este pe pinul 12 

Acum, în funcția de configurare, adăugați o linie nouă pentru a declara comutatorul ca intrare. Am adăugat, de asemenea, o singură linie pentru a porni semaforul în scenă verde. Fără această setare inițială, acestea ar fi dezactivate, până la prima dată când a fost inițiată o modificareLights () utilizând o funcție.

pinMode (buton, INPUT); digitalWrite (verde, HIGH);

Modificați întreaga funcție a buclă la următoarea:

void loop () if (digitalRead (buton) == HIGH) întârziere (15); // software debounce dacă (digitalRead (buton) == HIGH) // dacă comutatorul este HIGH, adică. împins în jos - schimbați luminile! changeLights (); întârziere (15000); // așteptați 15 secunde

Ar trebui să o facă. S-ar putea să vă întrebați de ce butonul este verificat de două ori (digitalRead (buton)), separate printr-o mică întârziere. Aceasta se numește debouncing. La fel ca rezistorul de tragere a fost necesar pentru buton, această verificare simplă oprește codul detectând interferențe minore ca o apăsare de buton. Nu trebuie să faceți acest lucru (și probabil că ar funcționa bine fără el), dar este o practică bună.

Așteaptă în interiorul dacă pentru 15 secunde, semafoarele nu se pot schimba cel puțin pentru această durată. După 15 secunde, bucla reîncepe. Fiecare repornire a bucla, citiți din nou starea butonului, dar dacă nu este apăsat, butonul dacă declarația nu se activează niciodată, lămpile nu se schimbă niciodată și se repornește din nou.

Iată cum arată acest lucru (urgent):

Un joncțiune

Să încercăm un model mai avansat. În locul unei traversări pietonale, modificați circuitul pentru a avea două semafoare:

Conectați al doilea semafor la pinii digitali 11, 12 și 13.

Codul

Mai întâi, atribuiți noilor indicatori ai semaforului variabilelor și configurați-le ca ieșiri, la fel ca în primul exemplu:

// lumină un int roșu1 = 10; int galben1 = 9; int ver1 = 8; // lumină două int roșu2 = 13; int galben2 = 12; int green2 = 11; void setup () // aprinde un pinMode (red1, OUTPUT); pinMode (galben1, OUTPUT); pinMode (verde1, OUTPUT); // lumina două pinMode (roșu2, OUTPUT); pinMode (galben2, OUTPUT); pinMode (verde2, OUTPUT); 

Acum, actualizați buclă pentru a utiliza codul din primul exemplu (în locul traseului pietonilor):

void loop () changeLights (); întârziere (15000); 

Încă o dată, toate lucrările se desfășoară în changeLights () funcţie. Mai degrabă decât să mergem roșu > roșu & galben > verde, acest cod va alternează semafoarele. Când unul este pe verde, celălalt va fi pe roșu. Iată codul:

void changeLights () // transforma ambele galben pe digitalWrite (green1, LOW); digitalWrite (galben1, HIGH); digitalWrite (galben2, HIGH); întârziere (5000); // întoarceți ambii galbeni și oprirea verde și roșie digitală (galben1, LOW); digitalWrite (roșu1, HIGH); digitalWrite (galben2, LOW); digitalWrite (roșu2, LOW); digitalWrite (verde2, HIGH); întârziere (5000); // ambele galbene din nou digitalWrite (galben1, HIGH); digitalWrite (galben2, HIGH); digitalWrite (verde2, LOW); întârziere (3000); // întoarceți ambele galben-uri, și oprește verde și roșu digitalWrite (verde1, HIGH); digitalWrite (galben1, LOW); digitalWrite (roșu1, LOW); digitalWrite (galben2, LOW); digitalWrite (roșu2, HIGH); întârziere (5000); 

Iată cum arată (urgentă):

Asta e pentru acest timp, așa că sper să învățați multe și să vă distrați scrisul de la zero. Aveți mâinile murdare cu câteva LED-uri și rezistențe, precum și adăugați un comutator cu un rezistor de tragere în jos - sperăm că ați înțeles de ce avem nevoie de unul. Redați-vă codul, ajustați-l și, cel mai important, distrați-vă. Dacă faceți orice adăugiri sau modificări, de ce să nu fiți informați despre aceasta în comentarii?

Și amintiți-vă colegii dvs. do-it-yourself în timpul vacanțelor sau atunci când ziua lor de nastere vine cu aceste idei de cadouri doar pentru fanii Arduino 10 Idei de cadouri pentru Arduino Tinkerer în viața ta 10 Idei cadou pentru Arduino Tinkerer în viața ta Cumpararea unui cadou pentru Arduino iubit în viața ta? Iată câteva idei minunate de cadouri: cărți, truse, componente de proiect și multe altele! Citeste mai mult :

Credit de imagine: androsvector prin Shutterstock.com

Explorați mai multe despre: Arduino, Programare.