Programmazione Arduino per principianti Il semaforo

Programmazione Arduino per principianti Il semaforo / Fai da te

Il semaforo è un piccolo progetto divertente, che può essere completato in meno di un'ora. Scopri come costruire il tuo - usando un Arduino - e come modificare il circuito per un modello avanzato.

Non preoccuparti se non hai mai utilizzato un Arduino in precedenza, abbiamo una guida per principianti Guida introduttiva ad Arduino: Guida per principianti Guida introduttiva ad Arduino: Guida per principianti Arduino è una piattaforma di prototipazione elettronica open source basata su flessibile, facile- usare hardware e software. È pensato per artisti, designer, hobbisti e chiunque sia interessato a creare oggetti o ambienti interattivi. Leggi di più .

Nota: Questo è l'ultimo di una serie di tutorial per principianti per Arduino, la piattaforma di prototipazione elettronica open source. Ecco un elenco degli articoli precedenti della serie:

  • Cosa è Arduino e cosa puoi fare con esso Cosa è Arduino e cosa puoi fare con esso? Cosa è Arduino e cosa puoi fare con esso? L'Arduino è un eccezionale dispositivo elettronico, ma se non ne hai mai usato uno prima, cosa sono esattamente e cosa puoi fare con uno? Leggi di più
  • Che cos'è un kit di avvio Arduino e cosa contiene? Cosa è incluso in un kit di avvio Arduino? [MakeUseOf Explains] Cosa è incluso in un Arduino Starter Kit? [MakeUseOf Explains] Ho già introdotto l'hardware open source Arduino qui su MakeUseOf, ma non avrai bisogno di altro che l'effettivo Arduino per crearne qualcosa e iniziare davvero. I "kit di avvio" Arduino sono ... Leggi di più
  • Altri componenti fantastici da acquistare con il kit di avvio 8 Altri componenti fantastici per i tuoi progetti Arduino 8 Altri componenti fantastici per i tuoi progetti Arduino Quindi, stai pensando di ottenere un kit di avvio Arduino, ma ti chiederai se alcuni LED e resistori di base saranno abbastanza per tenerti occupato per il weekend? Probabilmente no. Ecco altri 8 ... Leggi altro
  • Guida introduttiva al kit di avvio Arduino - Installazione dei driver e configurazione della scheda e della porta Guida introduttiva di Arduino Starter Kit - Installazione dei driver e configurazione della scheda e della porta Guida introduttiva con Arduino Starter Kit - Installazione dei driver e impostazione della scheda & Port Quindi, ti sei comprato un kit di avvio Arduino, e possibilmente qualche altro componente casuale - ora cosa? In che modo inizi a programmare questa cosa di Arduino? Come si imposta ... Per saperne di più
  • Uno sguardo ravvicinato alla struttura di un'app Arduino e del programma di esempio di lampeggio

Quello di cui hai bisogno

Oltre all'Arduino di base, avrai bisogno di:

  • LED rossi, gialli e verdi.
  • Una breadboard.
  • 6 x 220? resistenze.
  • Cavi di collegamento.
  • 1 x interruttore a pulsante.
  • 1 x 10k? resistore

Quasi ogni Arduino sarà adatto, a patto che abbia abbastanza spilli. Assicurati di leggere la nostra guida all'acquisto Guida all'acquisto di Arduino: quale scheda dovresti acquistare? Guida all'acquisto di Arduino: quale scheda si dovrebbe ottenere? Ci sono così tanti diversi tipi di tavole Arduino là fuori, ti verrebbe perdonato per essere stato confuso. Quale dovresti comprare per il tuo progetto? Aiutaci, con questa guida all'acquisto di Arduino! Leggi di più se non sei sicuro di quale modello ti serve. Probabilmente hai queste parti nel tuo kit iniziale Cosa c'è nel tuo Starter Kit Arduino? [Arduino Beginners] Cosa c'è nel tuo Arduino Starter Kit? [Arduino Beginners] Di fronte a una scatola piena di componenti elettronici, è facile essere sopraffatti. Ecco una guida per esattamente quello che troverai nel tuo kit. Leggi di più già.

Un semplice esempio

Iniziamo in piccolo. Un semplice semaforo di base è un buon punto di partenza. Ecco il circuito:

Collegare l'anodo (gamba lunga) di ciascun LED ai pin digitali otto, nove e dieci (tramite un resistore da 220?). Collegare i catodi (gamba corta) alla terra di Arduino.

Ho usato Fritzing per disegnare questi diagrammi. Non solo è facile da usare, è gratuito!

Il codice

Inizia definendo le variabili in modo che possiamo indirizzare le luci per nome anziché per numero. Avvia un nuovo progetto Arduino e inizia con queste linee:

int red = 10; int giallo = 9; int green = 8;

Successivamente, aggiungiamo la funzione di configurazione, dove configureremo i LED rossi, gialli e verdi da emettere. Poiché hai creato delle variabili per rappresentare i numeri dei pin, ora puoi fare riferimento ai pin per nome.

void setup () pinMode (red, OUTPUT); pinMode (giallo, OUTPUT); pinMode (verde, OUTPUT); 

È stato facile. Ora per la parte difficile - la logica attuale di un semaforo. Crea una funzione separata per cambiare le luci (vedrai perché dopo).

Quando inizi a programmare per la prima volta, il codice stesso è molto rudimentale: sta individuando i dettagli logici minuti che presentano il problema più grande. La chiave per essere un buon programmatore è essere in grado di esaminare qualsiasi processo e scomporlo nei suoi passaggi fondamentali. Ecco il resto del codice:

void loop () changeLights (); ritardo (15000);  void changeLights () // verde spento, giallo acceso per 3 secondi digitalWrite (verde, LOW); digitalWrite (giallo, ALTO); ritardo (3000); // spegne il giallo, quindi diventa rosso per 5 secondi digitalWrite (giallo, LOW); digitalWrite (rosso, ALTO); ritardo (5000); // rosso e giallo acceso per 2 secondi (il rosso è già acceso) digitalWrite (giallo, ALTO); ritardo (2000); // spegne rosso e giallo, quindi attiva digital digitalWrite (giallo, LOW); digitalWrite (rosso, LOW); digitalWrite (verde, ALTO); ritardo (3000); 

Fatto! Ora, carica ed esegui (assicurati di selezionare la scheda e la porta corrette da Utensili > Porta e Utensili > Tavola menu). Dovresti avere un semaforo funzionante che cambia ogni 15 secondi, in questo modo (accelerato):

Un passaggio pedonale

Ora che conosci le basi, miglioriamolo. Aggiungi un pulsante per consentire ai pedoni di cambiare la luce quando vogliono:

Si noti come il semaforo è esattamente uguale all'esempio precedente. Collegare il pulsante al pin digitale 12. Noterai che l'interruttore ha un'alta impedenza 10k? resistenza collegata ad esso, e forse ti starai chiedendo perché. Questo è chiamato un resistore di pull-down. All'inizio è un concetto difficile da comprendere, ma portami con me.

Un interruttore o lascia il flusso corrente o no. Questo sembra abbastanza semplice, ma in un circuito logico, la corrente dovrebbe fluire sempre in uno stato alto o basso (ricorda - 1 o 0, alto o basso). Si potrebbe supporre che un interruttore a pulsante che non viene effettivamente spinto sia definito come in uno stato basso, ma in realtà si dice che sia "mobile", perché non viene disegnata alcuna corrente.

In questo stato flottante, è possibile che si verifichi una lettura errata in quanto fluttua con interferenze elettriche. In altre parole, un interruttore fluttuante non fornisce né una lettura affidabile, né una lettura di stato basso. Un resistore di pull down mantiene una piccola quantità di corrente che scorre quando l'interruttore è chiuso, garantendo così una lettura accurata dello stato basso. In altri circuiti logici, invece, è possibile trovare un resistore di pull-up, che funziona sullo stesso principio, ma al contrario, assicurandosi che la particolare porta logica sia impostata su.

Ora, nella parte loop del codice, invece di cambiare le luci ogni 15 secondi, leggeremo invece lo stato dell'interruttore a pulsante, e cambiamo solo le luci quando è attivato.

Il codice

Inizia aggiungendo una nuova variabile all'inizio del programma:

pulsante int = 12; // l'interruttore è sul pin 12 

Ora, nella funzione di configurazione, aggiungi una nuova riga per dichiarare lo switch come input. Ho anche aggiunto una riga singola per avviare i semafori sul palco verde. Senza questa impostazione iniziale, verrebbero disattivati, fino alla prima volta che changeLights () viene avviato utilizzando una funzione.

pinMode (pulsante, INPUT); digitalWrite (verde, ALTO);

Cambia invece l'intera funzione del ciclo su:

void loop () if (digitalRead (button) == HIGH) delay (15); // software rimbalza se (digitalRead (button) == HIGH) // se l'interruttore è HIGH, es. spinto verso il basso - cambia le luci! changeLights (); ritardo (15000); // aspetta per 15 secondi

Questo dovrebbe farlo. Forse ti starai chiedendo perché il pulsante viene controllato due volte (digitalRead (pulsante)), separati da un piccolo ritardo. Questo è chiamato debouncing. Proprio come per il pulsante era necessario il resistore di pull down, questo semplice controllo blocca il codice che rileva le interferenze minori quando si preme un pulsante. Non devi farlo (e probabilmente funzionerebbe bene senza di esso), ma è una buona pratica.

Aspettando dentro il Se dichiarazione per 15 secondi, i semafori non possono cambiare per almeno quella durata. Dopo 15 secondi, il ciclo si riavvia. Ogni riavvio del ciclo, leggere di nuovo lo stato del pulsante, ma se non viene premuto, il Se la frase non si attiva mai, le luci non cambiano mai e si riavvia semplicemente.

Ecco come appare (velocizzato):

Un incrocio

Proviamo un modello più avanzato. Invece di un passaggio pedonale, modifica il circuito per avere due semafori:

Collegare il secondo semaforo ai pin digitali 11, 12 e 13.

Il codice

Innanzitutto, assegna i nuovi spilli semaforo alle variabili e configurale come uscite, proprio come nel primo esempio:

// 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); 

Ora aggiorna il tuo loop per utilizzare il codice del primo esempio (anziché il passaggio pedonale):

void loop () changeLights (); ritardo (15000); 

Ancora una volta, tutto il lavoro è in corso nel changeLights () funzione. Piuttosto che andare rosso > rosso & giallo > verde, questo codice alternerà i semafori. Quando uno è in verde, l'altro sarà in rosso. Ecco il codice:

void changeLights () // attiva entrambi i gialli su digitalWrite (green1, LOW); digitalWrite (yellow1, HIGH); digitalWrite (yellow2, HIGH); ritardo (5000); // spegne entrambi i gialli, e di fronte a digitalWrite verde e rosso (yellow1, LOW); digitalWrite (red1, HIGH); digitalWrite (yellow2, LOW); digitalWrite (red2, LOW); digitalWrite (green2, HIGH); ritardo (5000); // entrambi i gialli si riaccendono digitalWrite (yellow1, HIGH); digitalWrite (yellow2, HIGH); digitalWrite (green2, LOW); ritardo (3000); // spegne entrambi i gialli, e di fronte a digitalWrite verde e rosso (green1, HIGH); digitalWrite (yellow1, LOW); digitalWrite (red1, LOW); digitalWrite (yellow2, LOW); digitalWrite (red2, HIGH); ritardo (5000); 

Ecco come appare (accelerato):

È tutto per questa volta, quindi spero che tu abbia imparato molto e ti sia divertito a scrivere da zero. Ti sei sporcato le mani con alcuni LED e resistori, oltre ad aggiungere un interruttore con una resistenza verso il basso - si spera che tu abbia capito perché ne abbiamo bisogno. Gioca con il codice, regolalo e, soprattutto, divertiti. Se si apportano aggiunte o modifiche, perché non farcelo sapere nei commenti?

E ricorda i tuoi amici fai-da-te durante le vacanze o quando il loro compleanno arriva con queste idee regalo solo per i fan di Arduino 10 Idee regalo per l'Arduino Tinkerer nella tua vita 10 Idee regalo per l'Arduino Tinkerer nella tua vita Comprare un regalo per Amante di Arduino nella tua vita? Ecco alcune fantastiche idee regalo: libri, kit, componenti di progetto e molto altro! Leggi di più :

Credito immagine: androsvector tramite Shutterstock.com

Scopri di più su: Arduino, programmazione.