Sunteți pe pagina 1din 30

Arduino

Nivel Pardillo
Apuntes de
ARDUINO
Nivel Pardillo
Daniel Gallardo Garca
Profesor de Tecnologa del IES Laguna de Tolln
DGG 1 de 30
Arduino
Nivel Pardillo
1. QU ES ARDUINO?
Arduino es una placa o tarjeta controladora, con una serie de entradas salidas,
!ue se progra"a a trav#s del ordenador "ediante un lenguaje de progra"acin$
%ea"os !u# ele"entos co"ponen una Arduino UNO&
Alimentacin: Arduino puede estar ali"entado por dos vas&
cone'in USB (!ue proporciona ) %*$
ac! de ali"entacin (!ue nor"al"ente ser+ una pila de , % o fuente de
ali"entacin, !ue se reco"ienda !ue est# entre - . /0 %*$
Los "ine# de alimentacin son para ali"entar los circuitos la placa de prototipos o
breadboard o protoboard&
$.$ % proporciona una tensin de 1,1 %, una intensidad "+'i"a de )2 "A$
& % proporciona una tensin de ) %, una intensidad "+'i"a de 122 "A$
'ND es la to"a de tierra, o nivel 2 % de referencia$
%in proporciona la tensin "+'i"a con la !ue est+ ali"entado Arduino$
%alore# de entrada ( de #alida: en funcin de c"o est# siendo utili3ado en pin,
tendre"os&
Salida ( entrada di)ital: los valores de salida pueden ser o 2 % (LOW* o ) %
(HIGH*, se interpretar+ una entrada de entre 2 0 % co"o LOW de entre
1 ) % co"o HIGH$
Salida anal)ica: los valores de salida van desde 2 % a ) % en un rango de
* a +&& (precisin de 4 5its* valores inter"edios$
Entrada anal)ica: los valores de entrada van desde 2 % a ) % en un rango
de * a 1*+$ (precisin de /2 5its* valores inter"edios$
La intensidad "+'i"a de todos estos pines es de 62 "A$
DGG 2 de 30
Arduino
Nivel Pardillo
Nor"al"ente, todo el circuito electrnico !ue Arduino controlar+ se "onta so5re
una placa de prototipos o breadboard, el cone'ionado se reali3a con ca5les tipo
jumper (es i"portante utili3ar este tipo de ca5les por!ue no suelen ro"perse en los
3calos*&
+. ,RO'RA-ANDO ARDUINO
Todo progra"a para Arduino presenta una e#tructura ./#ica&
10 "arte int x=0; Declarar las 1aria.le#$
+0 "arte void setup() {} 2on3i)uracin de Arduino$
$0 "arte void loop() {} 2omando# !ue regir+n el
co"porta"iento de Arduino$
10 parte: Declarar la# 1aria.le# int x=0;
7na varia5le es un valor !ue Arduino puede al"acenar en su "e"oria, !ue
posterior"ente podr+ ser utili3ado o "odificado$
Los ti"o# de 1aria.le# "+s utili3ados son&
int& al"acena un n4mero entero entre 810-9, 10-9- (0 5tes*$
long& al"acena un n4mero entero "u largo, entre 80/6-641964
0/6-64196- (6 5tes*$
float& al"acena un n4mero decimal con un rango entre 81$620401):/2
38

1$620401):/2
38
(6 5tes*$
const& especifica !ue la varia5le definida no podr+ ser ca"5iada durante el
progra"a, siendo un sie"pre un 1alor con#tante&
const float pi=3.1415;
Es i"portante sa5er !ue es posi5le declarar una varia5le sin asignarle un valor
inicial, ;acerlo posterior"ente durante el transcurso del progra"a&
int x;

x=4;
DGG 3 de 30
Arduino
Nivel Pardillo
Dominio de una 1aria.le& si declaro una varia5le al co"ien3o del progra"a, podr#
e"plear dic;a varia5le en cual!uier "o"ento (dentro de cual!uier funcin o 5lo!ue
de progra"a*, pero si declaro una varia5le dentro de una funcin, slo se podr+
utili3ar en dic;a funcin$
,oner nom.re a la# 1aria.le#& Por <lti"o, una <lti"a consideracin& a la ;ora de
poner un no"5re a una varia5le es reco"enda5le utili3ar alguna pala5ra !ue nos
aude a reconocer !u# se est+ al"acenando en ella, en caso de utili3ar dos o "+s
pala5ras se suele e"plear la notacin de oro.a de camello (poner en "a<scula
la pri"era letra de las siguientes pala5ras*$ Eje"plos son&
ledPin estadoAnterior cuentaPulsaciones
miVariable lecturaensor ledPinA!ul
+0 parte: 2on3i)uracin de Arduino void setup() {}
En este 5lo!ue ;a5r+ !ue especificar&
=u# "ine# van a ser e"pleados co"o entrada cu+les co"o #alida$
pin"ode#$%&'(P'(); >>utili3ar# el pin 0 co"o salida Digital$
pin"ode#3%&'(P'(); >>utili3ar# el pin 1 co"o salida Digital o Analgica$
pin"ode#*%+,P'(); >>utili3ar# el pin /2 co"o entrada Digital$
Las entradas analgicas no ;acen falta incluirlas en el setup, puesto !ue
esos pines (A2, A/, A0, A1, A6, A)* solo pueden ser entradas analgicas$
Si va"os a !uerer esta5lecer una cone5in con el ordenador$
Serial.begin#-.00); >?;a !ue especificar los 5audios (5its por
segundo* a la !ue va a reali3arse dic;a
co"unicacin Arduino8P@ ?>
Si va"os a !uerer utili3ar n4mero aleatorio#$
randomeed#0); >>se inicia la generacin de n<"ero aleatorios$
$0 parte: 2omando# 6ue re)ir/n el com"ortamiento de Arduino
void loop () {}
En este 5lo!ue se de5er+ escri5ir todas a!uellas instrucciones, rdenes, pri"itivas,
co"andos o funciones necesarias para !ue Arduino funcione seg<n nuestro deseo$
Aeal"ente, este 5lo!ue constitue un 5ucle infinito, a !ue Arduino, "ientras est#
ali"entada con energa, funcionar+ ;aciendo el progra"a loo" una otra ve3$
Ire"os viendo cu+les son estas funciones durante el desarrollo de estos apuntes$
DGG 4 de 30
Arduino
Nivel Pardillo
$. SA7IDAS DI'I8A7ES digitalWrite(4,HIGH);
Pode"os indicar a Arduino !ue en un pin deter"inado colo!ue un B*C o un B1C lgico
(!ue ser+n 2 % o ) %* "ediante los siguientes co"andos, respectiva"ente&
digital/rite#1$%0&/); digital/rite#1$%1+21);
Ejemplo 1. Parpadeo de un LED
@onectare"os un diodo LED en el pin 1$ Sie"pre !ue conecte"os un LED a una
salida de Arduino de5e"os ;acerlo en serie con una resistencia de valor
co"prendido entre /22 /D para evitar !ue una intensidad de"asiado elevada
destrua dic;o LED&
El progra"a !ue utili3are"os ser+ el siguiente&
%e"os !ue ;a aparecido una nueva instruccin& dela( 9"ilisegundos:;
dela3#1000); >>reali3a una pausa en el progra"a de /222 "s
DGG 5 de 30
Arduino
Nivel Pardillo
Es "u c"odo utili3ar 1aria.le# para luego "odificar r+pida"ente los par+"etros
del progra"a, co"o por eje"plo el tie"po de espera o el pin donde conecto el LED&
int pin0ed=3; 44conectar5 el 067 en el pin 3
int t=1000; 44t ser8 el tiempo de espera
void setup#) 9
pin"ode#pin0ed%&'(P'(); 4:configuro el pin 3
como pin de salida :4
;
void loop#) 9
digital/rite#pin0ed%1+21); 44enciendo el 067
dela3#t); 44espero un segundo
digital/rite#pin0ed%0&/); 44apago el 067
dela3#t); 44espero otro segundo
;
Asi"is"o, es "u <til e"plear comentario# dentro de un progra"a, !ue facilitan
"uc;o su lectura co"prensin$ A la ;ora de escri5ir co"entarios pode"os
e"plear dos opciones&
44 per"ite escri5ir un co"entario en una lnea de cdigo$
4: :4 per"ite escri5ir un co"entario en varias lneas de cdigo$
Ejemplo 2. Luz que avanza a travs de LEDs
Para este "ontaje utili3are"os ) LEDs, conectados en pines consecutivos (del - al
//, por eje"plo*$ Los LEDs se ir+n encendiendo consecutiva"ente, e"pe3ando por
el - ter"inado en el //$
int i=<;
void setup#) 9
pin"ode#<%&'(P'();
pin"ode#*%&'(P'();
pin"ode#-%&'(P'();
pin"ode#10%&'(P'();
pin"ode#11%&'(P'();
;
void loop#) 9
for#i=<; i==11; i>>)9
digital/rite#i%1+21); 44enciendo el 067 i
digital/rite#i?1%0&/); 44apago el 067 anterior
dela3#1000);
;
digital/rite#11%0&/); 4:apago el @ltimo 067 puesto Aue
nunca se llega a i?1=11 :4
;
A!u ;a aparecido una nueva estructura& 3or 9incio; condicin; incre"ento: < E =
La estructura for repite un n<"ero de veces las instrucciones !ue est#n contenidas
entre llaves, la lgica !ue sigue es la siguiente&
DGG 6 de 30
Arduino
Nivel Pardillo
E"plea una varia5le (en este caso i* !ue se inicia (asign+ndole un valor
inicial, en este eje"plo i=<*$
Dic;a varia5le va incre"ent+ndose cada ve3 !ue se repite el for$ El
incre"ento puede e'presarse as&
i=i>5 >>el valor de i se incre"enta en )
i>=5 >>el valor de i se incre"enta en ) (es otra for"a*
i=i>1 >>el valor de i se incre"enta en /
i>=1 >>el valor de i se incre"enta en / (es otra for"a*
i>> >>el valor de i se incre"enta en / (slo para incre"ento F/*
i=i?1 >>el valor de i dis"inue en /
i?=1 >>el valor de i dis"inue en / (es otra for"a*
i?? >>el valor de i dis"inue en / (slo para incre"ento 8/*
i=i:3 >>el valor de i se "ultiplica por 1
i:=3 >>el valor de i se "ultiplica por 1 (es otra for"a*
i=i4$ >>el valor de i se divide entre 0
i4=$ >>el valor de i se divide entre 0 (es otra for"a*
El 5ucle for se repetir+ sie"pre cuando se siga cu"pliendo la condicin$
for#i=<; i==11; i >>) 9 ; ;ar+ un pri"er ciclo con el valor i=<$ Despu#s
de ;acer todo lo !ue est+ entre las llaves, incre"entar+ en / el valor de i$ GEs i
(a;ora 4* "enor o igual !ue //H @o"o la respuesta es s, volver+ a ;acer el 5lo!ue$
@uando ter"ine el ciclo con valor i=11, la i se incre"entar+ en / (valdr+ /0*$ En
ese "o"ento a no cu"plir+ la condicin el progra"a se saldr+ del 5ucle for$
Itra o5servacin es !ue, co"o la varia5le i solo se va a utili3ar dentro del for ( en
ninguna otra parte del progra"a* puedo declararla en ese "is"o "o"ento&
for#int i=<; i==11; i>>) 9 ;
>. SA7IDAS ANA7?'I2AS analogWrite(5,!");
Pode"os indicar a Arduino !ue en un pin deter"inado colo!ue un valor de tensin
co"prendido entre 2 % ) %, pudiendo seleccionar entre 0)9 valores inter"edios
posi5les (de * a +&&*, e"pleando la siguiente orden&
analog/rite#11%$14); >? coloca en el pin // un valor de salida de
0/6, !ue e!uivale a unos 6,0 % ?>
Aeal"ente, la seJal analgica de salida no es analgica en s, sino un PKL$ Esto
significa !ue la salida es una seJal "odulada por pulsos, for"ada por una serie de
pulsos (de valor ) %* repartidos durante un tie"po deter"inado de tal for"a !ue el
valor pro"edio de la seJal de salida se ;ace coincidir con el de la seJal analgica
!ue se persigue i"itar$ Es i"portante tener esto presente para co"prender el
funciona"iento de Arduino , por eje"plo, de los transistores conectados a ella$
DGG 7 de 30
Arduino
Nivel Pardillo
Ejemplo !. Parpadeo de un LED "u#a intensidad ser$ %radual
Se trata a;ora de !ue el LED 5rille de for"a gradual& de "enos intensidad a "+s,
cuando alcance su "+'i"o 5rillo co"ience a dis"inuir, as sucesiva"ente$
El progra"a ser+ el siguiente&
int brillo=0; 44declaro la variable brillo% con valor inicial=0
int incremento=5; 44declaro la variable incremento% con valor=5
int ledPin=-;
void setup#) 9
pin"ode#ledPin%&'(P'(); 44el pin - ser8 la salida
;
void loop#) 9
analog/rite#ledPin% brillo); 44coloca el valor brillo en el pin -
brillo = brillo > incremento; 44brillo aumenta su valor en 5
if#brillo==0 BB brillo==$55) 9 44si brillo llega a sus lCmites...
incremento = ?incremento; 44...pasamos de ir creciendo a pasar...
44...a ir decreciendo 3 al rev5s
;
dela3#30); 4:Da3 Aue dar un peAueEo tiempo entre valor 3 valor
de brillo para Aue la variaciFn no sea instant8nea :4
;
%e"os !ue ;a aparecido una nueva e#tructura, la condicional& i3 9condicin: <$$$=
if#xG=5) 9;
Entre los par#ntesis pondre"os una condicin, en caso de cu"plirse, se
ejecutar+n los co"andos !ue est#n dentro de las llaves$
Si sola"ente se va a escri5ir un <nico co"ando, pueden o"itirse las llaves&
if#xH=4) digital/rite#pin0ed%1+21);
DGG 8 de 30
Arduino
Nivel Pardillo
A la ;ora de co"pro5ar si una condicin se cu"ple o no, pode"os utili3ar los
siguientes o"eradore# de com"aracin dentro del par#ntesis&
x == 3 si x es igual a 1
x H= 3 si x es distinto de 1
x = 3 si x es "enor !ue 1
x G 3 si x es "aor !ue 1
x ==3 si x es "enor o igual !ue 1
x G= 3 si x es "aor o igual !ue 1
x = $ BB x G 5 si x es "enor !ue 0 o "aor !ue )
x == 4 II ! == * si x es igual a 6 ( ! es "enor o igual !ue 4
H x G 0 si x no es "aor !ue 2 (si es "enor o igual !ue 2*
MI"portanteN No confundir @ (!ue es para asignar* con @@ (!ue es para co"parar*$
7na variante a esta estructura es la for"ada por& i3 9condicin: <E= el#e <E=
if #xG=5) 9;
else 9; >>correspondera al caso para 'O)
Per"ite !ue el progra"a coja uno de los dos ca"inos& si se cu"ple la condicin
(!ue ser+ lo !ue aco"paJe al if*, o si no lo cu"ple (!ue ser+ lo !ue aco"paJe a
else*$
Itra variante es la siguiente& i3 9cond/: <E= el#e i3 9cond0: <E= E el#e <E=
if #condiciFn1) 9;
else if #condiciFn$) 9;
else if #condiciFn3) 9;

else if #condiciFn,) 9;
else 9;
La <nica precaucin a to"ar en esta estructura es !ue no ;aa dos condiciones !ue
sean co"pati5les, es decir& todas las condiciones de5en ser e'cluentes (en caso
de ;a5er "+s de una condicin verdadera, Arduino ejecutar+ la pri"era !ue
encuentre*$
A la ;ora de escri5ir la condicin dentro de los par#ntesis de un if ca5e una
posi5ilidad de no utili3ar operadores co"paradores, escri5ir <nica"ente una orden
de lectura o una varia5le$ En estos casos, la estructura if solo interpretar+ co"o
condicin de no cum"limiento un valor de return de dic;o valor de #, LOW o $%LS&&
if#digitalJead#4))9; es lo "is"o !ue if#digitalJead#4)'=0&/)
if#Hvalor)9; solo se ejecutar+ si la varia5le valor es 0, 0&/ o
false (por!ue as Hvalor dar+ un valor de true*
DGG 9 de 30
Arduino
Nivel Pardillo
&. EN8RADAS DI'I8A7ES digital(ead(5);
De5e"os indicar a Arduino !u# pin va"os a e"plear co"o entrada digital$ Dic;a
seJal de entrada podr+ tener dos valores& 0&/ o 1+21$
x = digitalJead(3); >>asigna a x el valor lgico !ue Arduino lee en el pin 1
@ual!uier sensor !ue tenga dos posi5les valores distintos puede e"plearse co"o
entrada digital$
Pode"os ;acer una entrada digital con
un "ul#ador o interruptor a trav#s de
una resistencia de drenaje (pull doPn*,
nor"al"ente de /2D$ De5e"os tener
en cuenta !ue Arduino va a perci5ir
todo el transitorio (so5reoscilacin o
5ouncing* cada ve3 !ue el pulsador
sea accionado, en el ca"5io de 2 a )
%$ Eso significa !ue durante un "u
5reve periodo de tie"po, el valor en la
entrada puede oscilar$
El es!ue"a de un pulsador do5le es el siguiente&
Ejemplo &. 'ontador de pulsa"iones "on "odi(i"a"i)n *inaria en ! LEDs
Este "ontaje consta de 1 LEDs, !ue reflejar+n el n<"ero de veces !ue ;a sido
accionado un pulsador, codificando dic;o n<"ero en 5inario, es decir, contar+
desde 2 a -$ El progra"a !ue controla este proecto es el siguiente&
DGG 10 de 30
Arduino
Nivel Pardillo
int val; 44no Dace falta asignarle un valor inicial
int x=0; 44ser8 el n@mero de pulsaciones
void setup#) 9
pin"ode#.%&'(P'();
pin"ode#<%&'(P'();
pin"ode#*%&'(P'();
pin"ode#13%+,P'(); 44configuro el pin 13 como entrada digital
;
void loop#) 9
val=digitalJead#13); 44asigno a val el valor de lectura del pin 13
if#val==1+21) x=x>1; 44detecta una pulsaciFn 3 la suma a la cuenta
if#x==*) x=0; 44si llegamos a *% Dacemos Aue inicie la cuenta
if#x==1 BB x==3 BB x==5 BB x==<) digital/rite#.%1+21);
44condiciFn para encender el tercer bit
else 9digital/rite#.%0&/);;
if#x==$ BB x==3 BB x==. BB x==<) digital/rite#<%1+21);
44condiciFn para encender el segundo bit
else 9digital/rite#<%0&/);;
if#x==4 BB x==5 BB x==. BB x==<) digital/rite#*%1+21);
44condiciFn para encender el primer bit
else 9digital/rite#*%0&/);;
dela3#$00); 4:espero $00ms para Aue no cuente m8s de una ve! la
misma pulsaciFn :4
;

@o"o ve"os, se suele utili3ar estas entradas con la funcin if (condicionante*$
Aecorde"os !ue la lectura digital de una entrada slo puede to"ar dos valores&
0&/ 1+21$
Ejemplo . 'am*iar el estado de un LED +ON,O--. "on un pulsador
7n "ontaje "u sencillo sera controlar el encendido de LED con un pulsador si el
funciona"iento fuera !ue "ientras est# pulsado el 5otn, est# encendido el LED,
cuando se deje de accionar el LED se apagara$ Pero este es otro ejercicio "+s
co"plicado& sera utili3ar el pulsador a "odo de interruptor$
En este caso el LED pasar+ a estar encendido o a estar apagado cada ve3 !ue
accione"os el pulsador$ Para deter"inar esto, creare"os una varia5le (estado* !ue
de5er+ ca"5iar cada ve3 !ue aprete"os el pulsador, peroE G!u# ocurre si esto
apretando el 5otn 5astante tie"poH Qasta !ue no vuelva a apretar no de5era
ca"5iar el estado, la solucin no puede ser introducir un dela3#1000) por!ue
puede darse el caso de !ue se apriete dos veces el 5otn en un intervalo de tie"po
"u pe!ueJo el progra"a no reconociera las dos pulsaciones$
La solucin a esto es crear dos varia5les& val valAnterior, !ue per"itir+n
deter"inar si ;a ;a5ido o no una accin de ca"5iar el estado del pulsador o no$ El
progra"a puede ser el siguiente&
int val=0; 44almacenar8 la lectura del pulsadorK &, u &LL
int valAnterior=0; 44almacenar8 una lectura Mustamente anterior
int estado=0; 44NAu5 toca aDora% encender o apagar el 067O
DGG 11 de 30
Arduino
Nivel Pardillo
void setup#)9
pin"ode#13%&'(P'();
pin"ode#<%+,P'();
;
void loop#)9
val=digitalJead#<);
if#val==1+21 II valAnterior==0&/) 9 4:detecta el cambio del estado
del pulsador de no estar pulsando
a estar pulsando :4
estado = 1 P estado; 44si De pulsado% Aue cambie el estado del 067
dela3#$0); 44elimino los efectos de bouncing
;
valAnterior=val; 44el valor del pulsador pasa a ser valor pasado
if#estado==1) digital/rite#13%1+21);
44el 067 encender8 cuando el estado sea 1
else 9
digital/rite#13%0&/);
;
;
A. EN8RADAS ANA7?'I2AS analog(ead(%#);
Aecorde"os !ue las entradas analgicas en Arduino no ;a !ue configurarlas en el
setup$ Dic;a seJal analgica de entrada podr+ tener valores co"prendidos entre *
1*+$, correspondientes a los valores inter"edios de un rango de 2 a ) %$
x = analogJead#A3); >>asigna a x el valor analgico !ue Arduino lee en
el pin A3
@o"o los <nicos pines v+lidos para una entrada analgica son los A2$$$A), no ;a
posi5ilidad de confusin, puede o"itirse la A& x = analogJead#3);
Evidente"ente, para e"plear una entrada analgica necesita"os un sensor
analgico, es decir, !ue sus valores el#ctricos varen en un rango significativo, no
li"it+ndose a dos posi5les valores$ Sensores analgicos pueden ser& LDA
(fotorresistencia*, NT@ (ter"oresistencia*, potenci"etro, sensor de sonido
(pie3oresistencia*, sensor de ultrasonido, etcE
Ejemplo /. 'am*iar el *rillo de un LED en (un"i)n de la luz am*iente re"i*ida
Para este "ontaje necesitare"os un LED conectado a un pin de salida analgica
(pues !uere"os controlar la intensidad de lu3, una 7DR conectada a una entrada
analgica$ La for"a de conectar una resistencia varia5le (co"o la LDA* a una
entrada analgica de Arduino es a trav#s de un divisor de tensin, o5teni#ndose el
"aor rango de lectura si utili3a"os una resistencia pull doPn con un valor
se"ejante al valor "+'i"o !ue puede ad!uirir la resistencia varia5le (para este dato
puede ser "u <til un pol"etro*&
DGG 12 de 30
Arduino
Nivel Pardillo
El progra"a para este circuito puede ser el siguiente&
int val;
int ledPin=-;
void setup#)9
pin"ode#ledPin%&'(P'();
;
void loop#)9
val=analogJead#A0); 44Dago la lectura analFgica en el pin A0
val=val44; 44divido entre 4 dicDo valor
analog/rite#ledPin%val); 44pongo en la salida este @ltimo valor
dela3#100);
;
Es i"portante conocer el "otivo de por !u# se divide entre 6 el valor de la lectura
antes de ponerlo en la salida& recorde"os !ue un valor de entrada puede oscilar
entre 2 /201 (es decir, /2 5its*, pero la salida de5e"os li"itarnos a un valor
co"prendido entre 2 0)) (es decir, 4 5its*$
G=u# ocurrira si no ;ago esta escala de valoresH Pues !ue el valor de salida, una
ve3 so5repasado el valor 0)), pasara al otro e'tre"o del intervalo, es decir,
volvera al 2&
0)9R2, 0)-R0, 0)4R1, 0),R6, 092R), E, )/2R0)6, )//R0))$
De igual "odo, una salida por de5ajo de cero volvera a dar la vuelta al intervalo&
8/R0)), 80R0)6, 81R0)1, E, 80)9R2$
Itra for"a de ;acer este escalado (o "apeo* de valores, es a trav#s de la funcin
ma", !ue "apea un rango inicial de valores a otro rango final de valores&
x = map#val%0%10$3%0%$55);
DGG 13 de 30
Arduino
Nivel Pardillo
Si no !uiero utili3ar una nueva varia5le, puedo reasignar la varia5le val al nuevo
valor "apeado&
val = map#val%0%10$3%0%$55);
Itro aspecto a tener en cuenta es !ue nuestra entrada, tal co"o est+ construida
(con un divisor de tensin* nunca alcan3ara los valores "+'i"o "ni"o (!ui3+s
tenga un rango entre 16) 41/, por eje"plo*$ Si !uere"os !ue la intensidad de
5rillo de nuestro LED pueda oscilar entre todo su rango posi5le, se ;ace necesario
la funcin "ap (no sera suficiente dividir entre 6*&
val = map#val%345%*31%0%$55);
De5o tener presente !ue cuando realice un "apeo, "e salga fuera del rango de
entrada, Arduino da la vuelta aparece por el otro e'tre"o, es decir, si considero el
eje"plo&
val = map#val%50%<0%0%$55);
un valor de entrada de 6), dara el e!uivalente a una entrada de 9)$
Ta"5i#n puede ser "u <til, a la ;ora de evitar salirnos de los rangos ;a5ituales de
uso, la funcin con#train 9varia5leB valorLni"oB valorL+'i"o:&
x = constrain#val%a%b);
asigna a x el valor de val sie"pre cuando val est# co"prendido entre a b$ En
el caso de !ue val salga de dic;o intervalo, to"ar+ los valores e'tre"os de este&
si aOvalOb, entonces x = val
si valOa, entonces x = a
si valSb, entonces x = b
Ejemplo 0. La luz avanza por & LEDs en (un"i)n de un poten"i)metro
El potenci"etro es otro sensor de entrada "u usado$ @onsta de una resistencia
varia5le, !ue depender+ de la posicin de giro en !ue se encuentre su consola (o
"ango*$ Es "u i"portante conectar el potenci"etro de "anera correcta para
DGG 14 de 30
Arduino
Nivel Pardillo
evitar !ue #ste se estropee (en caso de dejar pasar toda la corriente por una
seccin del potenci"etro de "u 5aja resistencia*$
7n potenci"etro posee tres patas&

De5e"os conectar la entrada analgica del potenci"etro de la siguiente "anera&
Ta"5i#n es i"portante recalcar la necesidad de insertar este tipo de potenci"etros
de "anera !ue las patas no daJen las ;ileras de las .read.oard (por!ue una patilla
de"asiado anc;a puede daJar irrepara5le"ente la ;ilera de cone'iones de la
placa*$ Es conveniente "ontarla de la siguiente "anera&
El truco para ca5lear dic;as patillas es insertar el ca5le ju"per para la patilla 0
previa"ente antes de intentar conectar el potenci"etro$
Itra for"a "+s c"oda es utili3ando conectores para placas 5read5oard (MojoN,
de5en ser de ) ""*
El progra"a !ue controla este circuito es el siguiente&
int led1=5;
int led$=.;
int led3=-;
int led4=10;
int led5=11;
int val;
DGG 15 de 30
Arduino
Nivel Pardillo
void setup#)9
pin"ode#led1%&'(P'();
pin"ode#led$%&'(P'();
pin"ode#led3%&'(P'();
pin"ode#led4%&'(P'();
pin"ode#led5%&'(P'();
;
void loop#)9
val=analogJead#A0); 44repartir5 los 10$3 valores posibles en 5 tramos
if#valG=0 II val=$04) 9
digital/rite#led1%1+21); digital/rite#led$%0&/);
digital/rite#led3%0&/); digital/rite#led4%0&/);
digital/rite#led4%0&/);
;
if#valG=$04 II val=40*) 9
digital/rite#led1%0&/); digital/rite#led$%1+21);
digital/rite#led3%0&/); digital/rite#led4%0&/);
digital/rite#led4%0&/);
;
if#valG=40* II val=.1$) 9
digital/rite#led1%0&/); digital/rite#led$%0&/);
digital/rite#led3%1+21); digital/rite#led4%0&/);
digital/rite#led4%0&/);
;
if#valG=.1$ II val=*1.) 9
digital/rite#led1%0&/); digital/rite#led$%0&/);
digital/rite#led3%0&/); digital/rite#led4%1+21);
digital/rite#led4%0&/);
;
if#valG=*1. II val=10$3) 9
digital/rite#led1%0&/); digital/rite#led$%0&/);
digital/rite#led3%0&/); digital/rite#led4%0&/);
digital/rite#led4%1+21);
;
;
@o"o ve"os, es un si"ple progra"a !ue divide el rango de entrada (!ue va desde
2 ;asta /201* en ) posi5ilidades$ En funcin del valor de lectura del potenci"etro,
encender+ el LED correspondiente$
Itra estructura !ue se podra ;a5er utili3ado es& #CitcD
sQitcD#val) 9 >?el progra"a coger+ un ca"ino u otro en funcin
del valor de la varia5le val ?>
case 3K R; >>en caso de !ue valRR1 E
breaS; >>provoca la salida del 5lo!ue sQitcD (opcional*
case 1$K R; >>ta"5i#n se puede poner co"o case#val==1$)&
breaS;
R
defaultK R; >?en caso de no cu"plirse ning<n case, ejecutar+
las funciones !ue se incluan en el default ?>
;
DGG 16 de 30
Arduino
Nivel Pardillo
En el caso de !ue tenga !ue com"arar la 1aria.le con un caracter, de5er#
ponerlo de la siguiente for"a&
case#val==TAT)K >>es el caso en el !ue la varia5le es igual a la letra A
%ea"os c"o !uedara el void loop#) del proecto anterior utili3ando la
estructura sQitcD&
void loop#)9
val=analogJead#A0);
val=map#val%0%10$3%0%4);
sQitcD#val) 9
case 0K
digital/rite#led1%1+21); digital/rite#led$%0&/);
digital/rite#led3%0&/); digital/rite#led4%0&/);
digital/rite#led4%0&/); breaS;
case 1K
digital/rite#led1%0&/); digital/rite#led$%1+21);
digital/rite#led3%0&/); digital/rite#led4%0&/);
digital/rite#led4%0&/); breaS;
case $K
digital/rite#led1%0&/); digital/rite#led$%0&/);
digital/rite#led3%1+21); digital/rite#led4%0&/);
digital/rite#led4%0&/); breaS;
case 3K
digital/rite#led1%0&/); digital/rite#led$%0&/);
digital/rite#led3%0&/); digital/rite#led4%1+21);
digital/rite#led4%0&/); breaS;
case 4K
digital/rite#led1%0&/); digital/rite#led$%0&/);
digital/rite#led3%0&/); digital/rite#led4%0&/);
digital/rite#led4%1+21); breaS;
;
;
E.2O-UNI2A2I?N ARDUINOF,2Serial)*egin(+,##);
En "uc;as ocasiones es "u <til poder visuali3ar a trav#s del ordenador los valores
de lectura en los pines de entrada de salida de Arduino$ Asi"is"o, ta"5i#n puede
ser necesario "andar infor"acin a Arduino desde el teclado del P@$ %ea"os c"o
poner en contacto a"5os aparatos&
Antes de nada, de5e"os configurar en el void setup#) !ue va"os a esta5lecer
dic;a co"unicacin, utili3ando la orden Serial..e)in9 :
void setup# ) 9
Serial)begin#-.00); >>se especifica los 5audios, nor"al"ente ,922
; >>recorde"os !ue / 5audio R / 5it>segundo
Luego, dentro del void loop#) pode"os utili3ar las siguientes funciones&
DGG 17 de 30
Arduino
Nivel Pardillo
Serial)print#val); >>i"pri"e el valor de la varia5le val
Serial)println#val); >>i"pri"e el valor de val e inserta una lnea nueva
Serial)print#UDola% amigosV); >>i"pri"e el te'to hola, amigos
Serial)print#WXtW); >>i"pri"e una ta5ulacin
Serial)print#val%TASE); >?i"pri"e el valor de la varia5le val pero pasando la
varia5le en la 5ase !ue le especifi!ue"os& 76Y,
16Z, &Y(, [+,, [\(6, !ue corresponden a&
Decimal, Hexadecimal, Base 8, Binario, caracter
del cdigo ASCII respectiva"ente ?>
x = Serial)available#); >?asigna a x el n<"ero de 5tes disponi5les en el
puerto serie !ue a<n no ;an sido ledos$ Despu#s
de ;a5erlos ledos todos, la funcin
Serial$availa5le(* devuelve un valor 2 ;asta !ue
lleguen nuevos datos al puerto serie ?>
3 = Serial)read#); >?asigna a y el valor disponi5le en el puerto serie,
!ue lo introduci"os desde el teclado del ordenador
en la 3ona de te'tos del Serial onitor ?>
Serial)flusD#); >?por!ue los datos pueden llegar al puerto serie a
"+s velocidad !ue la del proceso del progra"a,
Arduino puede guardar todos los datos de entrada
en un 5uffer$ Si es necesario li"piar el 5uffer para
llenarlo de datos nuevos, de5e"os usar la funcin
flusD#); ?>
@uando Arduino esta5lece co"unicacin con el P@ necesita utili3ar los pines 2 /
(RG 8G*, por lo tanto no de5e"os utili3arlos co"o entradas o salidas para nuestro
circuito$
Para poder visuali3ar en pantalla los datos !ue Arduino va i"pri"iendo, de5e"os
a5rir la ventana de i"presin en el siguiente 5otn (Serial Lonitor*&
!"er #jemplo 8$%
DGG 18 de 30
Arduino
Nivel Pardillo
H. -O8ORES DE 2ORRIEN8E 2ON8INUA 9D2 motor:
7n "otor de corriente continua es un actuador !ue
consu"e una intensidad relativa"ente elevada$ La
intensidad de corriente "+'i"a !ue Arduino puede
su"inistrar por un pin de salida es de 62 "A$ As
pues, para poder go5ernar a un D@ "otor, as co"o
a cual!uier otro actuador de considera5le potencia,
pode"os utili3ar&
un tran#i#tor$
un relI$
un integrado 7+J$D (consiste en un puente Q de diodos, especfico para el
control de "otores de corriente continua, inclusive el ca"5io de giro*$
1. 8ran#i#tor BD1$&
Uste es un transistor npn de "ediana potencia, a diferencia del T@)6-, puede
soportar intensidades "aores$ De5e"os sa5er "u 5ien en !u# patilla est+ situado
el E"isor, el @olector la Tase (la pala5ra Es'o1a nos audar+ a recordarlo*$
Pode"os reali3ar las siguientes cone'iones&
=ui3+s, la "+s reco"endada sea la pri"era opcin (utili3ando una resistencia de
5ase*$
DGG 19 de 30
Arduino
Nivel Pardillo
El diodo se utili3a para evitar las corrientes inducidas por las 5o5inas del "otor, as
!ue, en la "edida de lo posi5le, de5e"os ponerlo (recorde"os !ue la lnea
plateada corresponde al c+todo del diodo*$
@on este "ontaje pode"os controlar, tanto el encendido co"o el a"a)ado del
"otor, as co"o su 1elocidad (utili3ando un PKL co"o salida*, sie"pre )irando
en el mi#mo #entido$ Aecorde"os !ue la salida "odulada por pulsos es una
i"itacin a una seJal analgica for"ada por una serie de pulsos repartidos durante
un tie"po deter"inado (los pulsos de salida son de 644 Q3*$ Esto supone !ue en
este "ontaje del control de un "otor a trav#s de un transistor, si real"ente se
tratara de una salida analgica, o 5ien se coloca al transistor en corte o 5ien en
saturacin (no se podra controlar la velocidad del "otor, slo ponerlo en IN en
IVV*W pero lo !ue ocurre real"ente es !ue el Bvalor analgicoC de la salida se
transfor"a en una serie de pulsos ()%* repartidos durante cada pulso para !ue
resulte un e!uivalente en su %"edia, durante esos picos, el transistor se satura e
ir+ dando Bi"pulsos de corrienteC al "otor, cuo efecto final ser+ el de girar a una
velocidad controlada$
+. RelI
7n rel# es un dispositivo electro"ec+nico !ue
per"ite go5ernar el paso o no de corriente en un
circuito independiente al circuito !ue utili3a"os
para el control$
La cone'in de5e reali3arse de la siguiente for"a&
DGG 20 de 30
Arduino
Nivel Pardillo
En esta ocasin, este "ontaje slo per"ite controlar el encendido a"a)ado del
"otor, sie"pre )irando en el mi#mo #entido (no tiene sentido controlar la
velocidad, pues el rel# no tiene velocidad de ca"5io de posicin de sus contactores
co"o para BseguirC un PKL*$
$. Inte)rado 7+J$D
@on este integrado s va"os a poder )o.ernar el
#entido de )iro del "otor, as co"o su
1elocidadB pudiendo ade"+s un "is"o
integrado controlar dos "otores
si"ult+nea"ente$
El cone'ionado para este integrado es el siguiente&
Ejemplo 2. 'ontrol de un motor "on el te"lado
@on este progra"a va"os a poder "odificar la velocidad de un "otor, conectado
con un transistor TD/1), desde el teclado$ Para ello, podre"os ir introduciendo a
trav#s de la 3ona de te'tos del Serial Lonitor n<"eros del / al ,, !ue
corresponder+n a los , niveles de potencia !ue se pueden aplicar al "otor$
I5servar !ue Arduino "anejar+ el valor de la entrada por teclado (/, 0, 1, E , ,* por
sus cdigos AS@II (!ue son, respectiva"ente, 6,, )2, )/, E , )4*$
El progra"a es el siguiente&
int valor; 44controlo la velocidad del motor por el teclado
int salida;
DGG 21 de 30
Arduino
Nivel Pardillo
void setup#)9
pin"ode#11%&'(P'();
Serial.begin#-.00);
;
void loop#)9
if#Serial.available#)) 9 4:solo reali!ar8 el if si Da3 algo en la !ona
de textos del erial "onitor :4
valor=Serial.read#);
Serial.print#valor);
Serial.print#WXtW); 44pongo una tabulaciFn para Dacer dos columnas
salida=map#valor%4-%5*%0%$55);
Serial.println#salida); 44Auiero ver el valor de salida
analog/rite#11%salida);
;
;
J. RE,RODU2IR SONIDO tone(-,!5##);
Itro dispositivo de salida "u utili3ado puede ser un ti"5re pie3oel#ctrico, un
3u"5ador o un altavo3$ Estos dispositivos se pueden usar en salidas digitales
(Auido o NoAuido*, pero presentan su "+'i"a aplica5ilidad en salidas analgicas,
pues podre"os reproducir distintas notas "usicales$
Los dispositivos de salida "+s e"pleados son&
Alta1oce#
8ran#ductore# ,ieKo#
Para ello utili3are"os la funcin tone9pinBfrecuencia:;
tone#.%1350); >>el altavo3 conectado al pin 9 e"itir+ un sonido de /1)2
Q3$ Tras un tone se suele poner un dela3#) !ue
per"ita escuc;ar esa frecuencia ;aciendo una pausa en
el progra"a?>
DGG 22 de 30
Arduino
Nivel Pardillo
Para !ue deje de sonar un tone de5o utili3ar no8one9pin:;
no(one#.); >>el altavo3 conectado al pin 9 dejar+ de sonar
Itra posi5ilidad es la de especificar la duracin del tono&
tone9pinBfrecuenciaBduracin:;
tone#-%4500%$00); >?el altavo3 conectado al pin , e"itir+ un sonido de
6)22 Q3 durante un tie"po de 022 "ilisegundos
luego se para ?>
MIjoN @uidado con esta opcin por!ue s es verdad !ue el sonido durar+ 022 "s
pero el progra"a no se detiene para escuc;arlo, sino !ue sigue corriendo, si antes
de !ue pasen 022 "s el cdigo vuelve a toparse con un tone, este <lti"o sonido
pisar+ al anterior$
Las 3recuencia# audi.le# por el odo ;u"ano van de los +* LK a los +* MLK$
Ejemplo 3. 4nstrumento musi"al invisi*le +56eremin.
@reare"os un instru"ento "usical !ue se controla con la posicin de la "ano ("+s
o "enos cerca de una LDA, !ue ser+ e"pleada co"o sensor de pro'i"idad*$
@uanto "+s cerca est# la "ano de la LDA, "aor oscuridad "enor ser+ "aor
ser+ su resistencia, le asociare"os una nota "usical agudaW cuanto "+s
separada est# la "ano, "+s grave ser+ el sonido$
El progra"a puede ser el siguiente&
int lu!; 44ser8 el valor de entrada de la 07J
int sonido; 44ser8 el valor de la frecuencia del altavo!
int ldr=A5; 44conectar5 la 07J al pin A5
int altavo!=5; 44conectar5 el altavo! al pin 5
void setup#)9
pin"ode#altavo!%&'(P'();
Serial.begin#-.00); 44interesa ver los valores de la 07J
;
void loop#)9
lu!=analogJead#ldr);
Serial.print#Ulu! recibidaK V);
Serial.print#lu!);
Serial.print#WXtW);
sonido=map#lu!%$0%500%3000%$0);
sonido=constrain#sonido%$0%3000); 44obligo a Aue no salga de esos valores
Serial.print#Ufrecuenca sonidoK V);
Serial.println#sonido);
tone#altavo!%sonido%$00);
dela3#$50); 44do3 tiempo a Aue suene la nota 3 a una peAueEa pausa
;
DGG 23 de 30
Arduino
Nivel Pardillo
Puede ser "u <til sa5er !u# frecuencia, en ;ert3ios, corresponde a cada nota
"usical por si !uere"os !ue Arduino nos recite alguna cancin (se recuerda !ue
para e'presar los deci"ales se e"plea el punto no la co"a*$ Es 5ueno sa5er !ue
ta"poco se va a notar "uc;o si redondeo estas frecuencias a n<"eros enteros$
Nrecuencia# 9LK: de la# nota# mu#icale#

ES2A7A
NO8A 1 + $ > & A E H
Do
9)$629 /12$4/1 09/$909 )01$0)/ /269$)20 02,1$22) 6/49$22, 41-0$2/4
DoO
9,$0,9 /14$),/ 0--$/41 ))6$19) //24$-1/ 00/-$69/ 6616$,00 449,$466
Re
-1$6/9 /69$410 0,1$99) )4-$11 //-6$9), 016,$1/4 69,4$919 ,1,-$0-1
ReO
--$-40 /))$)91 1//$/0- 900$0)6 /066$)24 064,$2/9 6,-4$210 ,,)9$291
-i
40$62- /96$4/6 10,$904 9),$0)) /1/4$)/ 091-$20 )0-6$26/ /2)64$240
Na
4-$12- /-6$9/6 16,$004 9,4$6)9 /1,9$,/1 0-,1$409 ))4-$9)0 ///-)$121
NaO
,0$6,, /46$,,- 19,$,,6 -1,$,4, /6-,$,40 0,),$,)) ),/,$,// //41,$400
Sol
,-$,,, /,)$,,4 1,/$,,) -41$,,/ /)9-$,40 1/1)$,91 90-/$,0- /0)61$4)6
SolO
/21$409 02-$9)0 6/)$12) 412$92, /99/$0/, 1100$614 9966$4-) /104,$-)
7a
//2 002 662 442 /-92 1)02 -262 /6242
7aO
//9$)6/ 011$240 699$/96 ,10$104 /496$9)) 1-0,$1/ -6)4$90 /6,/-$06
Si
/01$6-/ 069$,60 6,1$441 ,4-$-9- /,-)$)11 1,)/$299 -,20$/11 /)426$099
Sen#or de 1i.racin
El transductor pie3o, ade"+s de utili3arse para reproducir sonidos ta"5i#n puede
e"plearse co"o sensor de vi5racin (co"o sensor de sonido no funciona 5ien,
pues necesita !ue sus dos c;apas vi5ren lo suficiente*$ Para ello, lo de5ere"os
conectar de la siguiente "anera&
DGG 24 de 30
Arduino
Nivel Pardillo
1*. APAR rando.Seed(#);
En "uc;as ocasiones es "u <til utili3ar n<"eros aleatorios, seleccionados al a3ar$
@o"porta"ientos inesperados, suerte, espontaneidad,E son fruto de e"plear
n<"eros aleatorios$ %ea"os c"o tra5ajarlos con Arduino&
Antes de nada, de5e"os configurar en el setup !ue Arduino co"ience a generar
n<"eros aleatorios, utili3ando la orden randomSeed9 :
void setup#) 9
randomeed#0); >>activa la generacin de n<"eros se"i8aleatorios
;
Ta"5i#n es posi5le iniciar la generacin de n<"eros aleatorios de una "anera "+s
i"predeci5le, utili3ando las seJales recogidas en un pin flotante de entrada
analgica, !ue recoja el ruido de fondo electro"agn#tico (ondas de radio, raos
cs"icos, interferencias electro"agn#ticas de tel#fonos "viles luces
fluorescentes, etcE*$ En este caso utili3ara"os&
randomeed#analogJead#A5)); >>rando"i3a usando el ruido del pin A)
Luego, dentro del void loo"( * pode"os utili3ar las siguientes funciones&
val = random#100%$00); >?asigna a la varia5le val un valor aleatorio
co"prendido entre /22 /,, ?>
val = random#$00); >?asigna a la varia5le val un valor aleatorio
co"prendido entre 2 /,, ?>
Ejemplo 17. LED imitando una "andela
7tili3are"os n<"eros aleatorios para deter"inar la intensidad de 5rillo la duracin
de dic;o destello de un LED para conseguir el efecto de una candela (co"o por
eje"plo se e"plea en "uc;os portales de Tel#n*$ Slo necesita"os "ontar un LED
(naranja, "ejor !ue rojo*$
El progra"a es el siguiente&
int brillo;
int tiempo;
void setup#)9
prandomeed#analogJead#A0));
pin"ode#11%&'(P'(); 44interesa ver los valores de la 07J
;
void loop#)9
brillo=arandom#100%$5.); 44el valor de salida oscila entre 100 3 $55
analog/rite#11%brillo);
tiempo=random#50%151); 44el destello oscila entre 10 3 150 ms
dela3#tiempo);
;
DGG 25 de 30
Arduino
Nivel Pardillo
11. O,ERADORES -A8E-Q8I2OS
Los operadores arit"#ticos !ue se utili3an en Arduino son&
asignacin =
su"a >
resta ?
"ultiplicacin /
divisin 4
resto o "dulo 0 >>no funciona con datos en co"a flotante
%ea"os los siguientes supuestos&
float x;
int 3;
int !;
x = <1$; >>' to"ar+ el valor de $.& puesto !ue est+ declarado co"o float
3 = <1$; >> to"ar+ el valor de $ puesto !ue no puede tener deci"ales
! = <0$; >>3 to"ar+ el valor 1 puesto !ue es el resto de dividir - > 0
Ejemplo 11. 5erm)metro de luz
@onstruire"os un ter""etro a trav#s de 1 LEDs alineados, a "edida !ue la
te"peratura au"ente, la lu3 ir+ su5iendo por los distintos LEDs de "anera gradual$
Para convertir la te"peratura en una seJal el#ctrica e"pleare"os una NT@, !ue se
conectar+ de igual "odo !ue se ;i3o con la LDA&
El progra"a ser+ el siguiente&
void setup#) 9
pin"ode#-%&'(P'();
pin"ode#10%&'(P'();
pin"ode#11%&'(P'(); 44utili!ar5 los pines -%10 3 11 para los 067s
Serial.begin#-.00);
;
DGG 26 de 30
Arduino
Nivel Pardillo
void loop#) 9
int lectura=analogJead#A0);
Serial.println#lectura); 44me interesa conocer los valores m8x 3 min
44para Dacer bien el programa
lectura=constrain#lectura%$*$%345); 44impido Aue lectura salga del rango
int x=map#lectura%$*$%345%0%30);
int entero=x410; 44solo podr8 Daber 4 casosK =1% =$% =3% =3
int resto=x]10; 44podr8 Daber 10 casosK 0% 1% $% R% -
int brillo=map#resto%0%-%0%$55); 44valores medios para el brillo del 067
if#entero=1) 9
analog/rite#-%brillo);
digital/rite#10%0&/);
digital/rite#11%0&/);
;
else if#entero=$)9
digital/rite#-%1+21);
analog/rite#10%brillo);
digital/rite#11%0&/);
;
else if#entero=3)9
digital/rite#-%1+21);
digital/rite#10%1+21);
analog/rite#11%brillo);
;
else 9
digital/rite#-%1+21);
digital/rite#10%1+21);
digital/rite#11%1+21);
;
dela3#$00);
;

Ejemplo 12. 'ontrol del "olor # la intensidad de un LED 8G1
7n LED AGT (Aed, Green, Tlue* es un diodo LED !ue contiene 1 LED en s "is"o&
uno rojo, otro verde otro a3ul, presenta 6 patas& un +nodo co"<n (la parte del
tri+ngulo, !ue corresponde a la pata larga de un
LED* un c+todo (la parte del palo, !ue
corresponde a la pata corta de un LED* para
cada uno de los tres diodos$ @onectare"os el
+nodo co"<n a ) %, los 1 c+todos a 1
respectivos pines de Arduino, de "odo !ue un
LED estar+ encendido cuando en estos pines
;aa "enos de ) % (un valor de 0&/ si se trata
digital"ente, o un valor de "enos de $55 para
el caso analgico*$ Ade"+s, para este "ontaje
utili3are"os 1 pulsadores& uno para el control
del color dos para variar la intensidad de 5rillo
del LED$
El progra"a podra ser el siguiente&
int pinYolor=<%pin[aMar=.%pinubir=5%roMo=11%verde=-%a!ul=10;
int contador=0%brillo=1$*; 44al principio el 067 iluminar8 a media potencia
int cambioYolor%baMar0uminosidad%subir0uminosidad;
DGG 27 de 30
Arduino
Nivel Pardillo
void setup#)9
for#int i=5;i=*;i>>) pin"ode#i%+,P'(); 44configuro los pines de entrada
for#int M=-;M=1$;M>>) pin"ode#M%&'(P'(); 44...3 los de salida
;
void loop#)9
cambioYolor=digitalJead#pinYolor); 44lecturas de los pulsadores
baMar0uminosidad=digitalJead#pin[aMar);
subir0uminosidad=digitalJead#pinubir);
if#cambioYolor==1+21) contador>>; 44contar5 el n@mero de pulsaciones
if#baMar0uminosidad==1+21) brillo=brillo?10; 44disminu3o el brillo
if#subir0uminosidad==1+21) brillo=brillo>10; 44aumento el brillo
if#brillo=0) brillo=0;
if#brilloG$55) brillo=$55; 44evito Aue brillo salga del rango 0 ? $55
for#int i=-;i=1$;i>>) digital/rite#i%1+21); 44apago los 3 067s
if#contador]3==0) analog/rite#roMo%$55?brillo);
44un valor de brillo=$55 debe traducirse a una salida de 0 V
else if##contador>1)]3==0) analog/rite#verde%$55?brillo);
else analog/rite#a!ul%$55?brillo); 4:como solamente Auiero
distinguir 3 opciones% considerar5 Aue en 3 n@meros consecutivos
sFlo Da3 uno Aue es m@ltiplo de 3% 3 dar8 resto=0 :4
dela3#$00); 4:deberCa Daberlo DecDo como en el eMemplo anterior% pero
con esta espera% va bien. i Dubiera puesto menos tiempo% DabrCa
problemas% pues tardamos unos $00ms en apretar 3 soltar el pulsador:4
;
1+. SER%O-O8ORES 2in3lude 4Ser5o)67
7n servo"otor es un "otor !ue se caracteri3a
por su "reci#inB pues puede situarse en
cual!uier posicin dentro de un rango de giro,
nor"al"ente de *R a 1H*R$ As pues no son
"otores pensados para ;acer "over un
ve;culo !ue recorra cierta distancia, sino
para "ovi"ientos de precisin co"o pudiera
ser el de un 5ra3o ro5ot, cuo "argen de
"anio5ra no e'ceda dic;o rango de giro$
Son tres los ca5les de !ue dispone el servo"otor, de5e"os conectarlos de
"anera correcta&
@a5le roo: se conectar+ a la tensin de & %$
@a5le ne)ro& se conectar+ a tierra (* %*$
@a5le .lanco o narana& se conectar+ al "in de control (del 2 al /1*$
Este dispositivo se controla ;a5itual"ente a trav#s del envo pulsos de anc;ura (en
el tie"po* deter"inada$ As, para nuestro servo"otor tene"os !ue&
DGG 28 de 30
Arduino
Nivel Pardillo
Duracin del pulso Posicin del eje
Aango de duracin del pulso de control&
,22 Xs . 0/22 Xs
Posicin=
3 duracin2700
20
,22 Xs 2Y
/022 Xs 6)Y
/)22 Xs ,2Y
/422 Xs /1)Y
0/22 Xs /42Y
Las duraciones del pulso pueden ca"5iar en funcin del "odelo del servo"otor$
Aun!ue no es "u co"plicado s ;a !ue ser cuidadoso, es relativa"ente f+cil
daJar al servo"otor$
Para el control de los servo"otores Arduino posee una li.rerSa especfica$ 7na
li5rera es una coleccin de funciones !ue est+n especial"ente creadas para
facilitar el "anejo de ciertos dispositivos, !ue no son cargadas por defecto a
Arduino para a;orrar espacio en su "e"oria$ Algunas de las li5reras "+s utili3adas
son las de control uso de& servo"otores, "otores paso a paso, pantallas de cristal
l!uido, "atri3 de LEDs, "e"orias SD, sensor de ultrasonido$$$
%ea"os c"o controlar nuestro servo"otor con Arduino&
En pri"er lugar de5e"os a5rir la li5rera ervo.D, a trav#s de&
SZetc; > I"port Li5rar > Servo
Luego de5e"os declarar, co"o si de una varia5le fuera, nuestro servo"otor,
asign+ndole un no"5re$ [ lo ;ace"os con el siguiente co"ando&
ervo nombreervo;
Dentro del void setup(* de5e"os configurar el pin de salida !ue Arduino va a
utili3ar para controlar el servo"otor$ Para ello se utili3a la funcin attacD9pin::
nombreervo.attacD#10); >> ser+ controlado por el pin /2
E'iste una variante en la !ue se especifica la duracin "ni"a "+'i"a de
los pulsos de control attacD9pin,duracinLn,duracinL+'::
nombreervo.attacD#10%-00%$100);
DGG 29 de 30
Arduino
Nivel Pardillo
Para controlar el servo"otor, utili3are"os la funcin Crite9+ngulo:&
nombreervo.Qrite#45);>> sit<a el eje del servo en la posicin de 6)Y
MIjoN Entre posicin posicin de5e"os poner alguna pausa para dar tie"po al
servo"otor a "overse$
Nota& el funciona"iento de los servo"otores BloP costC puede !ue no se ajuste
e'acta"ente a lo esperado$
Ejemplo 1!. Le9ador de un portal de 1eln
7tili3are"os nuestro servo"otor para ani"ar una figura de
nuestro portal de Tel#n& se trata de un leJador !ue est+
cortando un tronco$ Para ello el 5ra3o articulado !ue sujeta el
;ac;a de5er+ estar acoplado al servo"otor$ Lo
progra"are"os de "anera !ue el "ovi"iento de 5ajada (el
corte* sea r+pido, despu#s de una pe!ueJa pausa ;aga un
retroceso lento$
El progra"a ser+ el siguiente&
^include =ervo.DG
ervo bra!o;
void setup#)9
bra!o.attacD#*);
;
void loop#)9
bra!o.Qrite#$0); 44corresponde a la posiciFn de DacDa baMada
dela3#$000);
for#int i=1;i==1$0;i>>) 9 44levanto el DacDa lentamente
bra!o.Qrite#i);
dela3#50);
;
dela3#$000); 44tomo aliento
bra!o.Qrite#1.0); 44coMo impulso antes de asestar el DacDa!o
dela3#500);
;
Bibliogra&'a( ) Curso de Arduino de *rancis +erea$
) ,etting Started -ith Arduino !assimo Ban.i%$
) Beginning Arduino +rogramming !Brian #/ans%$
) 01 Arduino +rojects &or he #/il ,enios !Simon on2%$
DGG 30 de 30