You are on page 1of 3

Semaforo Inte|||gente con Ardu|no

A coto Jel ptof. Closeppe 5lAllkNO - J0/12/2011





ln quesLa appllcazlone Ardulno plloLa l Lre colorl dl un semaforo vlncolando la duraLa del rosso
all'lnLenslLa lumlnosa rllevaLa da una foLoreslsLenza.
La presenza dl un'auLo sulla foLoreslsLenza rlduce la lumlnoslLa acqulslLa dal sensore e la duraLa del
rosso, nell'eserclLazlone proposLa, vlene rldoLLa a 2s. anzlche l normall 10s., come la duraLa del verde.
rlma dl meLLere a punLo sla l'hardware da collegare ad Ardulno che ll sofLware dl gesLlone
dell'appllcazlone ln llnguagglo C, sl e dlsegnaLo ll clrculLo da reallzzare su breadboard grazle al sofLware
free lrlLzlng" - www.frlLzlng.org che consenLe dl dlsegnare clrculLl eleLLrlcl ed eleLLronlcl
esLeLlcamenLe molLo accaLLlvanLl.



ll sofLware meLLe a dlsposlzlone una breadboard d una serle dl componenLl eleLLrlcl ed eleLLronlcl: dalle
sempllcl reslsLenze, condensaLorl, dlodl, LranslsLor, lnLerruLLorl, LLu, dlsplay, sensorl, clrculLl lnLegraLl
slno a modull dl noLevole complesslLa come Ardulno.
L'aspeLLo lnLeressanLe e la posslblllLa dl dlsegnare ll clrculLo cosl come lo sl reallzza su breadboard,
vlsuallzzando la sagoma reale Lrldlmenslonale del componenLe olLre al caveLLl coloraLl dl collegamenLo.
La cosLruzlone del clrculLo e assal sempllce: sl preleva dalla llbrerla CCMCnLn1l l'elemenLo deslderaLo
e lo sl poslzlona su breadboard. L posslblle ruoLare ll componenLe selezlonaLo e modlflcarne le
caraLLerlsLlche, ad esemplo ll valore della reslsLenza, condensaLore, colore del LLu, ecc. ln quesLa
eserclLazlone sl uLlllzzano, al posLo delle lampade semaforlche, Lre dlodl LLu dl colore verde, glallo e
rosso. Cll alLrl componenLl uLlllzzaLl sono 3 reslsLenze da 220U per llmlLare l'lnLenslLa dl correnLe
eleLLrlca ln clascuno del Lre LLu, una reslsLenza da 1kU da lnserlre ln serle al sensore dl lumlnoslLa
lmplegaLo che conslsLe ln una foLoreslsLenza che presenLa una reslsLenza dl bulo dl 300kU ed una
reslsLenza dl 16kU a 10lux ed un valore lnferlore a 1 kU ln condlzlonl dl forLl lumlnoslLa.
ll sofLware consenLe dl lnserlre del caveLLl dl collegamenLo Lra l varl componenLl ed e ln grado dl
vlsuallzzare ll clrculLo non solo ln modallLa breadboard ma anche ln vlsLa schema" ed ln vlsLa C8" per
la reallzzazlone del clrculLo sLampaLo.


nel programma reallzzaLo ln Ardulno 1.0 (scarlcablle dal slLo hLLp://ardulno.cc/en/Maln/SofLware), ln
slnLonla alle scelLe hardware, sl lmposLano le cosLanLl verde, Clallo e 8osso rlspeLLlvamenLe sulle porLe
ulCl1AL 8, 9 e 10 e la cosLanLe Sonda sulla llnea 0 del canale AnALCC ln.
ll blocco vo|d setup() consenLe dl lmposLare verde, Clallo e 8osso come llnee dl usclLa e Sonda come
llnea dl lngresso. ll segnale analoglco dl lngresso deve essere conLenuLo nell'lnLervallo compreso Lra 0 e
+3v ed ll codlce corrlspondenLe dl usclLa e un valore compreso Lra 0 e 1023 polche ll converLlLore A/u
lnLerno al mlcroconLrollore presenLe sulla scheda Ardulno e a 10blL (2
10
= 1024).
vlene, lnolLre, lnlzlallzzaLa la porLa serlale alla veloclLa dl 9600bps (blL/s).
ll blocco vo|d |oop() pone sulle usclLe verde, Clallo e 8osso l valorl, rlspeLLlvamenLe, AlLo-8asso-8asso
per 10s, AlLo-AlLo-8asso per 2s e 8asso-8asso-AlLo per 10s se ll valore acqulslLo dalla foLoreslsLenza
corrlsponde ad un numero lnferlore a 300 (condlzlone dl luce) alLrlmenLl per 2s. (condlzlone dl bulo).


er compllare ll programma e Lrasferlrlo su Ardulno sl fa cllck sul pulsanLe freccla a desLra che compare
soLLo la barra del menu nella precedenLe flgura.
ALLlvando la flnesLra serlal-monlLor" (lenLe dl lngrandlmenLo a desLra nella barra degll sLrumenLl) sara
posslblle vlsuallzzare ll valore acqulslLo duranLe clascun clclo grazle all'lsLruzlone Ser|a|.pr|nt|n(va|) ove
val e ll codlce numerlco assoclaLo alla Lenslone acqulslLa sulla llnea 0 dl AnALCC ln.
Sl rlporLa, dl segulLo, ll llsLaLo del programma.


// Semaforo lnLelllgenLe
// La duraLa del rosso dlpende dalla presenza dl un'auLo ferma
consL lnL verde=8,
consL lnL Clallo=9,
consL lnL 8osso=10,
consL lnL Sonda=0,

vold seLup()
[
plnMode(verde, Cu1u1),
plnMode(Clallo, Cu1u1),
plnMode(8osso, Cu1u1),
plnMode(Sonda, lnu1),
Serlal.begln(9600),
}

vold loop()
[
dlglLalWrlLe(verde, PlCP),
dlglLalWrlLe(Clallo, LCW),
dlglLalWrlLe(8osso, LCW),
delay(10000),
dlglLalWrlLe(verde, PlCP),
dlglLalWrlLe(Clallo, PlCP),
dlglLalWrlLe(8osso, LCW),
delay(2000),
dlglLalWrlLe(verde, LCW),
dlglLalWrlLe(Clallo, LCW),
dlglLalWrlLe(8osso, PlCP),
lnL val=analog8ead(Sonda),
Serlal.prlnLln(val),
lf (val<300) [
delay(10000), }
else [
delay(2000), }
}