if ( digitalRead(eastButton) == HIGH ) // cere traficul
east>west
if ( digitalRead(eastButton) == HIGH ) //
{
if ( trafficWest == true )
//continua numai dac fluxul de trafic este n opus (vest)
direcia
{
trafficWest = false; //
delay(flowTime); //
digitalWrite(westGreen, LOW);
// schimb spre vest lumina din galben n rou
digitalWrite(westYellow, HIGH);
delay(changeDelay);
digitalWrite(westYellow, LOW);
digitalWrite(westRed, HIGH);
delay(changeDelay);
for ( int a = 0 ; a < 5 ; a++ ) // galben intermintent
{
digitalWrite(eastYellow, LOW);
delay(yellowBlinkTime);
digitalWrite(eastYellow, HIGH);
delay(yellowBlinkTime);
}
digitalWrite(eastYellow, LOW);
digitalWrite(eastRed, LOW); // schimb repede lumina din verde
rou n verde digitalWrite(eastGreen, HIGH);
}
}
Schia noastr ncepe prin utilizarea #define pentru a fi asociat
cu o dat digital. Numerele sunt cu etichete pentru toate LED-urile
utilizate, precum i pentru cele dou butoane. Avem LED-uri roii,
galbene, precum i verzi i un buton pentru fiecare latur vestic i
latur estic a podului. TrafficWest variabil boolean la v este
utilizat pentru a urmri n ce fel traficul merge (flowing) - adevrat
este de la vest la est, i fals este la est la vest.
Not
Observai c traficul Vest are o singur variabil boolean cu
direcia traficului stabilit, fie adevrat, fie fals. Beneficiind de
o singur variabil n loc de dou (una pentru est i una pentru vest)
se asigur c ambele directii nu poate fi accidental adevrate n
acelai timp, fapt ce contribuie la evitarea unui accident!
ntreg timpul de debit variabil la west este perioada minim de
timp n care vehiculele trebuie s traverseze podul. Atunci cnd un
vehicul accelereaz la lumina roie, sistemul ntrzie aceast perioad
pentru a da timp traficului din sens opus s traverseze podul. ntreg
sistemul schimbare Delay, variabil la x, este perioada de timp
dedicat schimbrii culorii semaforului de la verde, la galben, la
rou. nainte ca schia s intre n seciunea de gol bucl (), este
stabilit pentru trafic s curg de la vest la est, n configurare nul
().
Rularea Schiei:
Dup ce ruleaz, schia nu face nimic pn cnd unul dintre butoane
este apsat. Cnd butonul de est este apsat, linia:
if (trafficWest == true)
asigur c se schimb luminile doar n cazul n care traficul se
ndreapt n direcia opus. Restul seciunii codului este compus dintr-o
simpl secven de marcat pornirea i oprirea a diverse LED-uri pentru
a simula operaia luminrii traficului.
Semnale analogice vs. digitale
n aceast seciune, vei afla diferena ntre semnalele digitale i
analogice, i vei nva cum se msoar semnalele analogice cu analogul
cu pini de intrare.
Pn n prezent, schitele noastre au folosit semnale electrice
digitale, cu doar dou niveluri distincte. Mai exact, am folosit
digitalWrite (pin, HIGH) i digitalWrite (pin, LOW) s clipeasc un
LED i digitalRead () pentru a msura dac o dat digital a avut o
tensiune aplicat la ea (HIGH) sau nu (LOW). Figura 4-28 este o
reprezentare vizual a unui semnal digital, care alterneaza intre
mare si mic.
Figura 4-28: Un semnal digital, cu maxime care apar linii
orizontale ca n partea de sus, i minime care apar n partea de
jos
Spre deosebire de semnalele digitale, semnalele analogice pot
varia orict ntre treptele high i low. De exemplu, Figura 4-29
prezint un semnal de und sinusoidal. Observaii n figur c, timpul
progreseaza, tensiunea se mic fluid ntre nivelurile nalte i
joase.
Figura 4-29: Un semnal analogic de und sinusoidal
Cu Arduino, mare este mai aproape de 5 V i sczut este mai
aproape de 0 V, sau GND. Putem msura valorile de tensiune ale unui
semnal analog cu Arduino folosind cele ase intrri analogice
prezentate n Figura 4-30. Aceste intrri analogice pot msura n
condiii de siguran tensiuni de la 0 (GND) pn la 5 V. Dac utilizai
analogRead funcia (), dect Arduino va reveni un numr ntre 0 i 1023
proporional cu tensiunea aplicat la pinul analogic. De exemplu, ai
putea utiliza analogRead () pentru a stoca valoarea analog dat la
zero n variabila A.
a = analogRead (0); // Citeste intrare analog dat 0 (A0)
// Revine 0-1023, care este, de obicei, 0.000-4.995 voli
Proiect # 6: crearea unui tester de baterie cu o singur
celul
Dei popularitatea i utilizarea de baterii cu celule a sczut, cei
mai muli oameni nc au dispozitive din jurul casei care folosesc AA,
AAA, C, D sau celul baterii, cum ar fi telecomenzi, ceasuri, sau
jucrii pentru copii. Aceste baterii transporta mult mai puin dect 5
V, astfel nct s putem msura o celul de tensiune cu Arduino nostru
pentru a determina starea celulei. In acest proiect vom crea un
tester baterie.
Obiectivul
Bateriile cu celule unice, cum ar fi AA, de obicei, ncep de la
aproximativ 1,6 V cnd sunt noi i apoi scad odat cu utilizarea lor.
Vom msura tensiunea i vom exprima condiia bateriei vizual cu
LED-uri. Vom folosi citirea din analogRead () i apoi vom converti
citirea n voli. Tensiunea maxim care poate fi citit este de 5 V,
asa c am mpri 5 la 1024 (numrul de valori posibile), care este egal
0.0048. Prin urmare, dac analogRead () ntoarce 512, atunci vom
multiplica cu 0.0048, care este egal cu 2.4576 V.
Iat algoritmul de funcionare al bateriei noastre tester:
1. Citii din pinul analogic zero.
2. Inmulii citirea de 0.0048 pentru a crea o valoare de
tensiune.
3. Dac tensiunea este mai mare sau egal cu 1,6 V, apoi pornii
scurt LED ul verde.
4. n cazul n care tensiunea este mai mare de 1,4 V i mai puin de
1,6 V, atunci porniti LED ul galben.
5. n cazul n care tensiunea este mai mic de 1,4 V, apoi pornii
scurt LED ul rou.
6. Repetai pe termen nelimitat.
Iat ce vei avea nevoie pentru a crea acest proiect:
Trei rezistori de 560 W (R1 la R3)
Un rezistor 2,2 kW (R4)
Un LED verde (LED1)
Un LED galben (LED2)
Un LED rou (LED3)
Un breadboard
Diverse fire de conectare
Un Arduino i cablu USB
Schema pentru circuitul tester baterie este prezentat n Figura
4-31.
Pe partea stng, observai cele dou terminale, marcat + i -.
Conectai prile ce se potrivesc de o parte i de alta a bateriei
formate dintr-o singur celul, pentru a fi testate n acele puncte.
Pozitiv ar trebui s se conecteze la pozitiv, i negativ trebuie s se
conecteze la negativ. AVERTISMENT n nici un caz nu ar trebui s v
msoare mai mult de 5 V, nici s conectai pozitivul la negativ, sau
invers. Fcnd aceste lucruri se va deteriora produsul Arduino
bord.
Figura 4-31: Schema Proiectului 6
Schia#define newLED 2 //
#define okLED 4 //
#define oldLED 6 //
int analogValue = 0;
u float voltage = 0;
int ledDelay = 2000;
void setup()
{
pinMode(newLED, OUTPUT);
pinMode(okLED, OUTPUT);
pinMode(oldLED, OUTPUT);
}
void loop()
{
v analogValue = analogRead(0);
w voltage = 0.0048*analogValue;
x if ( voltage >= 1.6 )
{
digitalWrite(newLED, HIGH);
delay(ledDelay);
digitalWrite(newLED, LOW);
}
else if ( voltage < 1.6 && voltage > 1.4 )
{
digitalWrite(okLED, HIGH);
delay(ledDelay);
digitalWrite(okLED, LOW);
}
else if ( voltage Mai mare
= Mai mare sau egal cu
Am folosit aceti operatori de comparaie pentru a compara
numerele n linii x, n schia de proiect 6, descris mai devreme.
mbuntirea preciziei de msurare analog cu un referin de tensiune. Aa
cum sa demonstrat n proiect 6, funcia analogRead () returneaz o
valoare proporional cu o tensiune ntre 0 i 5 V. Valoarea superioar
(5 V) este tensiunea de referin, tensiunea maxim acceptat de
intrrile analogice Arduino va accepta i va reveni la cea mai mare
valoare de (1023). Pentru a spori precizia n timp ce se citesc
tensiuni chiar mai mici, putem folosi o tensiune de referin
inferioar. De exemplu, atunci cnd tensiunea de referin este de 5 V,
analogRead () reprezint acest lucru cu o valoare de la 0 la 1023.
Cu toate acestea, dac avem nevoie s msurm doar o tensiune cu un
maxim de (de exemplu) 2 V, atunci se poate modifica ieirea Arduino
pentru a reprezenta 2 V, folosind valoarea gama 0-1,023 pentru a
permite msurarea mai precis. Putei face acest lucru folosind o
tensiune de referin extern sau intern.
Prima metod const n a folosi o tensiune de referin Aref (de
referin analog) PIN-ului, aa cum se arat n Figura 4-32. Putem
introduce o nou referin de tensiune la conectarea tensiunii n
PIN-ul AREF i o potrivire GND la GND ul Arduino. Reinei c acest
lucru poate reduce tensiunea de referin, dar nu se va ridica,
pentru c tensiunea de referin conectat la un Arduino Uno nu trebuie
s depeasc 5 V. Un mod simplu de a stabili o tensiune de referin
inferioar este prin crearea unei divizor de tensiune cu dou
rezistene, aa cum se arat n Figura 4-33.
Figura 4-33: Divizor de tensiune
Valorile R1 i R2 va determina tensiunea de referin conform
urmtoarei formule:
V out este tensiunea de referin, i V in este tensiunea de
intrare n acest caz de 5 V. R1 i R2 sunt valorile rezistorilor n
ohmi. Cel mai simplu mod de a mpri tensiunea este de a diviza V la
jumtate prin stabilirea R1 i R2 dup acelai exemplu avnd valoarea
pentru fiecare de 10 kW . Cnd faci acest lucru, cel mai bine este s
utilizai rezistene de toleran mai mici, cum ar fi de 1; se confirma
valorile lor de rezisten reale cu un multimetru. Valorile sunt
confirmate n calcul. Mai mult dect att, este, de asemenea, o idee
foarte bun de a plasa un condensator nF de 100 dintre AREF i GND,
pentru a evita un AREF zgomotos i pentru a preveni instabilitatea
analogului readings. Cnd folosim o tensiune de referin extern,
introducei urmtoarea linie n partea de void setup () din schia
dumneavoastr:
analogReference(EXTERNAL); // select AREF pin for reference
voltage
Utilizarea referinei de tensiune intern
Arduino Uno are, de asemenea, un 1.1 V tensiune de referin
intern. Dac aceast satisface nevoile dumneavoastra, sunt necesare
modificri hardware. Doar adugai aceast linie la void setup():
analogReference(INTERNAL); // select internal 1.1 V reference
voltage
Rezistori variabiliRezistorii variabili, de asemenea, cunoscui
sub numele de poteniometre, pot fi, n general, ajustai de la 0 W pn
la valoarea lor nominal. Simbol lor schematic este prezentat n
Figura 4-34. Rezistenele variabile au trei conexiuni cu pini: unul
din PIN centru i unul pe fiecare parte. Pe msur ce arborele de un
rezistor variabil transform, aceasta crete rezistena ntre o parte i
centru i scade rezistena ntre centru i n partea opus.
Rezistene variabile sunt disponibile ca liniar i logaritmic.
Rezistena de modele liniare se schimb ntr-un ritm constant, atunci
cnd ia o cotitur, n timp ce rezistena de modele logaritmice se
schimb ncet la nceput i apoi crete repede. Poteniometre logaritmice
sunt folosite mai des ca amplificator audio n circuite, pentru a
modela rspunsul auzului uman. Proiectele Arduino folosesc cele mai
variabile rezistene liniare, cum ar fi cel prezentat n figura
4-35.
Figura 4-34:
Figura 4-35:
Simbolul unui rezistor variabil
Poteniometru
Putei obine, de asemenea, versiuni in miniatura ale rezistene
variabile, cunoscut sub numele de trimpots sau trimmere (a se vedea
figura 4-36). Din cauza dimensiunii lor, trimpots sunt mai utili
pentru a face ajustri n circuite, dar sunt, de asemenea, foarte
utili pentru munca breadboard, deoarece acestea pot fi crestate
.
Figura 4-36: Diferite tipuri de trimmeri
Buzzere piezoelectrice
Un element piezoelectric (piezo pentru scurt), sau soneria, este
un dispozitiv mic, rotund care poate fi folosit pentru a genera
zgomote puternice i enervante, care sunt perfecte pentru alarme-sau
pentru distracie. Figura 4-37 prezint un exemplu comun, TDK PS1240,
alturi de un sfert american, pentru a v oferi o idee de dimensiunea
sa. Figura 4-37: TDK PS1240 Piezo conine o plac foarte subire n
interiorul carcasei care se mic atunci cnd o se aplic curent
electric.
Figura 4-37: Buzzer Piezoelectric
Cnd curentul alternativ este aplicat (cum ar fi pe. . . off. . .
pe. . . off), placa vibreaz i genereaz unde sonore. Este simplu de
utilizat piezos cu Arduino, deoarece acestea pot fi pornite i de pe
la fel ca un LED. Elementele piezo nu sunt polarizate i poate fi
conectate n orice direcie. Simbolul schematic pentru piezo arata ca
un difuzor (Figura 4-38), ceea ce l face uor de recunoscut.
Figura 4-38 - Simbolul unui Buzzer Piezoelectric
Proiectul # 7: ncercarea unui buzzer piezo
#define PIEZO 3 // pin 3 PWM
int del = 500;
void setup()
{
pinMode(PIEZO, OUTPUT);
}
void loop()
{
analogWrite(PIEZO, 128); //
delay(del);
digitalWrite(PIEZO, LOW); //
delay(del);
}
Aceast schi utilizeaz modulaie puls-lime pe trei date digitale.
Dac modificai ciclul de lucru n funcia de analogWrite () (n prezent
este 128, care este de 50 la sut pe) la u puteti modifica volumul
buzzer.To creterea volumului piezo ta, crete tensiunea aplicat ea.
Tensiunea este n prezent limitat la 5 V, dar soneria ar fi mult mai
tare la 9 sau 12 V. Pentru tensiuni mai mari nu pot fi obinute de
la Arduino, va trebui s utilizai o surs de alimentare extern pentru
buzzer, cum ar fi o baterie de 9 V, iar apoi trece puterea n
soneria cu ajutorul unui tranzistor ca un comutator electronic.
Putei folosi aceeai schita prezentat schematic n figura 4-39.
Figura 4-39
Schema electric a Proiectului 7.
Proiectul # 8: Crearea unui termometru cu citire rapid
Temperatura poate fi reprezentat de un semnal analogic. Putem
msura temperatura folosind tensiunea TMP36 Senzor de temperatur de
ieire fcute de Analog Devices (http://www.analog.com/tm 36/), se
arat n figura 4-40. Observai c TMP36 arata la fel ca BC548
tranzistor am lucrat cu n circuitul de comand al releului n
Capitolul 3. TMP36 emite o tensiune care este proportional cu
temperatura, astfel nct s putei stabili temperatura curent folosind
o conversie simpl. De exemplu, la 25 de grade Celsius, tensiunea de
ieire este de 750 mV, iar fiecare schimbare a temperaturii de 1
grad conduce la o schimbare de 10 mV.TMP36 poate msura temperaturi
cuprinse ntre -40 i 125 de grade Celsius. Funcia analogRead () va
ntoarce o valoare ntre 0 i 1023, ceea ce corespunde la o tensiune
ntre 0 i aproape 5.000 mV (5 V). Dac ne multiplica producia de
analogRead () cu (5.000 / 1.024), atunci vom primi tensiunea
efectiv returnat de senzor. Mai departe, scdem 500 (un offset
utilizate de TMP36 pentru a permite temperaturi sub zero) i apoi
mprii cu 10, care ne las cu temperatura n grade Celsius. Dac lucrai
n Fahrenheit, apoi multiplica valoarea cu 1.8 grade Celsius i se
adaug 32 la rezultat.
Figura 4-40
Senzor de temperatur
Obiectivul
n acest proiect, vom folosi TMP36 pentru a crea un termometru
rapid de citit. Cnd temperatura scade sub 20 de grade Celsius, un
LED albastru se transform pe. Cnd temperatura este cuprins ntre 20
i 26 de grade, un LED verde se aprinde, iar cnd temperatura este de
peste 26 de grade, un LED rou se aprinde.
Hardware
Iat ce vei avea nevoie pentru a crea acest proiect:
Trei 560 W rezistori (R1 la R3)
Un LED rou (LED1)
Un LED verde (LED2)
Un LED albastru (LED3)
Un senzor de temperatur TMP36
Un breadboard
Diverse fire de conectare
Arduino i USB cableThe schematic
Circuitul este simplu. Cnd te uii la partea inscripionat a
TMP36,
pinul din stnga se conecteaz la intrarea 5 V, pinul central este
tensiunea
ieire, iar tiftul din dreapta se conecteaz la GND aa cum se arat
n Figura 4-41.
Figura 4-41
Schema electric a Proiectului 8
#define HOT 6
#define NORMAL 4
#define COLD 2
float voltage = 0;
float celsius = 0;float hotTemp = 26;
float coldTemp = 20;
float sensor = 0;
void setup()
{
pinMode(HOT, OUTPUT);
pinMode(NORMAL, OUTPUT);
pinMode(COLD, OUTPUT);
}
void loop()
{
// citirea temperaturii
sensor = analogRead(0);
voltage = (sensor*5000)/1024; //
voltage = voltage-500; //
celsius = voltage/10; //
// act on temperature range
v if ( celsius < coldTemp )
{
digitalWrite(COLD, HIGH);
delay(1000);
digitalWrite(COLD, LOW);
}
w else if ( celsius > coldTemp && celsius hotTemp
digitalWrite(HOT, HIGH);
delay(1000);
digitalWrite(HOT, LOW);
}
}.
Schia citete mai nti tensiunea de la TMP36 i l transform n
Temperatura n grade Celsius, la u. Urmatoarea, utiliznd,
dac-altceva funcioneaz la v i w, codul compar temperatura curent
mpotriva valorile pentru cald i la rece i apoi pe corespunztoare
LED. ntrziere (1000) situaiile sunt folosite pentru a preveni
luminile de intermitent pe i n afara prea repede daca Temperatura
fluctueaz rapid ntre dou intervale. Hacking Sketch Dei aceast schi
a fost destul de simplu, ai putea folosi ca baz pentru ING alte
tipuri de lecturi. S-ar putea aduga o coada PowerSwitch, de
exemplu, aa cum se arat n Figura 4-42.
Figura 4-42
Power Switch
Cu cu PowerSwitch, putei controla n condiii de siguran un aparat
care ruleaza de la priza de perete, cum ar fi o surs de nclzire,
lamp, sau un alt dispozitiv cu o ieire digital de la Arduino ta.
(Pentru mai multe informaii, vizitai
http://www.adafruit.com/products/268/.)
De exemplu, ai putea utiliza un PowerSwitch pentru a construi un
sistem de nclzire cu temperatur controlat sau ventilator, controla
o lumin garaj astfel, ruleaza un timp i apoi se stinge, sau
controla de la distan n aer liber Lumini de Craciun.
Privind n perspectiv
Cu aceasta se ncheie i capitolul 4. Acum avei mult mai multe
instrumente pentru a lucra cu, inclusiv intrri i ieiri digitale,
noi tipuri de variabile, si diverse funcii matematice. n capitolul
urmtor, vei avea o mult mai distractiv cu LED-uri, s nvee s creai
propriile funcii, s construiasc un joc pe calculator i zaruri
electronice, si multe altele.