Tutorial de Arduino PDF
Tutorial de Arduino PDF
Introduccin
Bienvenidos a este tutorial sobre Arduino. La primera entrega se compondr de una
serie de post's muy sencillos y fciles de seguir con los que se pretende acercar y
dar una introduccin a Arduino.
Si eres de los que no tienes ni idea de programacin y electrnica... ste es tu
tutorial. Para seguirlos no necesitas conocimientos previos ya que se explica todo
paso a paso apoyado con imgenes y vdeos. Adems, cuando hayas seguido este
tutorial, no slo podrs realizar por ti mismo los ejemplos aqu realizados sino que
tambin podrs llevar a cabo proyectos compartidos por la comunidad de usuarios
de Arduino y, porqu no? alguno de tu propia invencin.
2
Qu es Arduino?
Arduino es una placa controladora y su entorno de programacin que permiten de
manera rpida y sencilla realizar proyectos de electrnica, automatismo, control,
domtica, etc. Arduino naci en el Instituto IVREA (Italia) para facilitar a sus
alumnos las tareas de programacin de microcontroladores. Es ese uno de los
motivos de su xito: cualquier persona con pocos conocimientos de informtica y
electrnica puede programarlo e implementarlo.
Existen varios modelos de Arduino como son Uno, Leonardo, Mega... pero este
tutorial se limitar salvo que se diga lo contrario al modelo Uno por ser el ms
comn y econmico.
Hardware libre
El otro motivo del gran xito de esta plataforma podemos encontrarlo en que es
desarrollado como hardware libre. qu es eso de hardware libre? Pues es lo
anlogo al software libre. Sus esquemas, especificaciones y planos estn
disponibles al pblico, por tanto cualquiera que acceda a ellos puede fabricarse una
copia idntica al original.
3
Pero no slo eso, adems, cualquier usuario o fabricante puede crear accesorios
compatibles con lo que las posibilidades de realizar nuevos proyectos se
multiplican. Esto atrae nuevos usuarios, algunos de los cuales crean nuevos
accesorios y tienen nuevas ideas con lo que estamos realimentando una comunidad
de usuarios y fabricantes que no para de crecer.
Para qu sirve?
Si ests leyendo esto seguramente es porque ya le has visto alguna aplicacin y te
ha picado el gusanillo. Aqu veremos algunas aplicaciones aunque las posibilidades
son tantas como las que permite cualquier placa con microcontrolador: infinitas.
En general, podemos decir que un microcontrolador se utiliza para ordenar una serie
de acciones en funcin de las entradas que le lleguen. Por ejemplo, encender un
ventilador cuando la lectura de temperatura supere un cierto valor. Otras veces su
tarea es realizar una serie de acciones sucesivamente sin hacer ninguna lectura.
ste caso sera el de utilizar Arduino para encender alternativamente las luces de un
semforo.
Cuando acabes el tutorial seguro que se te ocurren decenas de proyectos que
podrs realizar.
4
Partes de Arduino
En este apartado veremos las distintas partes que conformar nuestro Arduino como
son entradas, salidas, alimentacin, comunicacin y shields.
Entradas: son los pines de nuestra placa que podemos utilizar para hacer
lecturas. En la placa Uno son los pines digitales (del 0 al 13) y los analgicos
(del A0 al A5).
Salidas: los pines de salidas se utilizan para el envo de seales. En este caso
los pines de salida son slo los digitales (0 a 13).
Otros pines: tambin tenemos otros pines como los GND (tierra), 5V que
proporciona 5 Voltios, 3.3V que proporciona 3.3 Voltios, los pines REF de
referencia de voltaje, TX (transmisin) y RX (lectura) tambin usados para
5
comunicacin serial, RESET para resetear, Vin para alimentar la placa y los
pines ICSP para comunicacin SPI.
Alimentacin: Como hemos visto el pin Vin sirve para alimentar la placa pero
lo ms normal es alimentarlo por el jack de alimentacin usando una tensin
de 7 a 12 Voltios. Tambin podemos alimentarlo por el puerto USB pero en la
mayora de aplicaciones no lo tendremos conectado a un ordenador.
Shields: traducido del ingls significa escudo. Se llama as a las placas que se
insertan sobre Arduino a modo de escudo ampliando sus posibilidades de
uso. En el mercado existen infinidad de shields para cada tipo de Arduino.
Algunas de las ms comunes son las de Ethernet, Wi-Fi, Ultrasonidos,
Pantallas LCD, rels, matrices LED's, GPS...
6
Todo lo que necesitas para empezar
Una de las primeras cosas que se pregunta uno antes de empezar en este mundo es
si el equipo es demasiado caro. La respuesta es que no, todo lo contrario.
Una placa Arduino Uno original cuesta 20,00 y lo podis pedir desde la propia web
de Arduino. Tambin tenemos placas de otros fabricantes por unos 11 igualmente
vlidas gracias al carcter hardware libre de esta plataforma. Si no tenis prisa,
desde china tambin las podemos encontrar por unos 5, pero pueden tardar ms
de un mes en llegarnos.
El entorno de programacin IDE es totalmente gratuito y podemos descargarlo
pinchando aqu.
Es muy aconsejable una protoboard o placa de prototipos para realizar las pruebas y
montajes. Suelen valer entre 5 y 10.
7
Tambin nos facilitar el trabajo un juego de cables con pines macho para insertar
en Arduino y en la protoboard. No suelen costar ms de 3. Una alternativa es pelar
cables y estaarles las puntas para que no se deshilachen al meterlos en los
agujeros.
Las shield tienen precios muy dispares y van desde los 5 a 200 o ms, pero en
este tutorial no haremos uso de ninguna de ellas.
Los componentes electrnicos adicionales de cada proyecto, como pueden ser
resistencias, condensadores, fotoresistencias, led's, zumbadores... tienen en su
mayora precios de pocos cntimos y rara vez superan el euro.
En definitiva, por menos de 30 podemos hacernos con un equipo que nos permitir
realizar multitud de proyectos.
Esto es todo de momento. En el siguiente post encontrars toda la informacin para
manejarte por el entorno de programacin de Arduino y ejecutar tu primer programa.
8
IDE Aruduino
Qu es y para qu sirve?
Dado que el Arduino es como un pequeo ordenador que ejecuta una serie de
cdigos que previamente le hemos introducido, necesitaremos un programa para
poder meter estos cdigos a la propia placa. Este programa se llama IDE, que
significa "Integrated Development Environment" ("Entorno de Desarrollo Integrado").
Este IDE estar instalado en nuestro PC, es un entorno muy sencillo de usar y en l
escribiremos el programa que queramos que el Arduino ejecute. Una vez escrito, lo
cargaremos a travs del USB y Arduino comenzar a trabajar de forma autnoma.
9
Descarga e instalacin
Para instalar este IDE en vuestro sistema operativo solo tendris que seguir unos
sencillos pasos:
10
Hacis clic en vuestro sistema operativo, despus en guardar archivo y lo
descargis.
11
Ilustracin 3 Aceptacin de condiciones.
Pulsamos en "I Agree". En este cuadro dejamos todas las opciones marcadas,
pero hay que prestar especial atencin a la opcin de instalar los USB driver,
ya que esto es muy importante para que la placa Arduino se pueda comunicar
con el PC. Pulsamos en Next e Install
12
Ilustracin 5 Seleccin de carpeta de instalacin.
Y esperaremos que termine de instalar (si pregunta si deseamos instalar el
software Arduino USB le damos a instalar)
13
3. Instalacin en Linux
Hay dos formas de hacerlo:
14
Ilustracin 8 Apartado de descargas de Arduino
Descargamos la versin 32 o 64 bits dependiendo del sistema
operativo. Despus abrimos terminal y nos vamos a la carpeta donde
lo hemos descargado. En nuestro caso lo descargamos en el Escritorio
as que usamos el comando "cd Escritorio".
15
Ilustracin 9 Cambiando el directorio de trabajo
Una vez que estemos en la carpeta donde lo hemos descargado,
escribimos el comando "tar -zxvf arduino-1.0.6-linux32.tgz". (En general
es "tar -zxvf nombrearchivo.tgz")
16
Ilustracin 10 Cambiando el directorio de trabajo 2
Despus de pulsar intro, empieza la instalacin que dura pocos
segundos. Al finalizar podemos comprobar que se ha creado un
directorio llamado arduino1.0.6 (o versin descargada). Entramos y
tenemos un ejecutable llamado "arduino"
17
Ilustracin 11 Captura explorador de archivos
Hacemos doble clic en ese archivo y, en la ventana que se abre,
pulsamos "Ejecutar".
Entorno de programacin y configuracin
Al abrir el programa veremos cmo nos aparece la consola principal
del IDE Arduino en la cual podemos ver las siguientes zonas
18
Ilustracin 12 Zonas del IDE Arduino
En la parte de men tenemos una zona para acceder a funciones como
carga de archivos, edicin del texto del cdigo, carga de libreras y
ejemplos, configuracin, herramientasetc.
En los botones de acceso rpido tenemos los siguientes iconos:
19
Carga el programa a la placa de Arduino tras
compilarlo.
Abre un programa.
20
Ilustracin 13 Seleccin de Tarjeta
Despus vamos a la opcin Puerto Serial y elegimos el COM en el que tenemos
conectado nuestro Arduino.
21
Ilustracin 14 Seleccin de puerto COM
Si nos aparecieran varios COM activos, porque estemos usando otros dispositivos
serial o por otro motivo, para saber cul de ellos es el que se comunica con nuestra
placa, solo tenemos que irnos a Panel de control/Hardware/Administrador de
dispositivos.Miramos la pestaa (Puertos COM y LPT) y ah nos aparecer nuestro
Arduino y el COM en el que est conectado. Con esto, ya podemos empezar a
programar nuestro Arduino.
22
Programa de testeo: "HELLO WORLD"
Para finalizar, probaremos que todo est correctamente instalado y configurado
ejecutando nuestro primer programa, el ms simple, el tpico "HELLO WORLD"
("HOLA MUNDO"). Para ello solo tenis que pegar el siguiente cdigo en la zona del
editor de texto del IDE Arduino:
void setup() {
Serial.begin(9600); // iniciamos el serial
pinMode(13, OUTPUT); // se declara pin 13 como salida
}
void loop() {
digitalWrite(13, HIGH); // se enciende el LED
Serial.println("HOLA MUNDO"); // Escribe por el monitor serial
delay(1000); // espera 1 segundo
digitalWrite(13, LOW); // se apaga el LED
delay(1000); // espera 1 segundo
}
Ejemplo semforo
23
En este nuevo post daremos unas pautas sobre cmo debe estructurarse un
programa en Arduino, tambin veremos cmo son las sentencias bsicas usadas
con esta IDE, cmo cargar nuestro programa a la placa y para finalizar, realizaremos
un ejemplo con el que encenderemos leds con Arduino montando nuestro propio
semforo.
24
Ilustracin 1 Partes bsicas de un cdigo
Primero void setup() . Dentro de esta funcin principal escribiremos las sentencias
de configuracin que necesitaremos para que Arduino trabaje correctamente. stas
se ejecutarn al iniciar Arduino y una nica vez. Con ellas, por ejemplo, asignaremos
la caracterstica de entrada/salida a los pines, el modo de comunicacin serial,
activaremos los sensores que vayamos a necesitar, escribiremos rdenes de inicio
del programaetc. Algunas de estas sentencias pueden ser: pinMode( , ),
Serial.begin(), sensors.begin()
25
La segunda funcin principal es void loop() . sta debe ir siempre despus de void
setup(). En ella escribiremos todas las sentencias, bucles y llamadas a funciones
que necesitemos que nuestro Arduino repita constantemente. Se escribirn en orden
de ejecucin. Ejemplo de stas pueden ser digitalWrite( , ), Serial.print( ), if( )
Existen otras partes del cdigo que no son obligatorias pero que podemos
necesitar, segn el cdigo lo requiera, para organizarlo todo.
Estas zonas pueden ser un espacio para el ttulo, el autor, libreras, definiciones
(variables que vayamos a usar en el programa), una zona para funciones a las que el
programa ir llamandoCada uno es libre de organizarlo como quiera, pero cuanto
ms ordenado est todo, ms difcil ser perdernos cuando los cdigos se
compliquen.
Abajo podemos ver un ejemplo simple de cmo debe estructurarse un cdigo.
26
Ilustracin 2 Como debe estructurarse un cdigo
27
Sentencias bsicas, funciones y libreras
Para poder realizar un cdigo Arduino debemos tener las herramientas con las que
decirle a nuestro microcontrolador que es lo que debe hacer en cada momento.
Estas herramientas son las sentencias y funciones.
Arduino usa una serie de sentencias y comandos bsicos muy sencillitos pero a la
vez muy potentes. Combinndolos crearemos programas para decirle a nuestra
placa que haga prcticamente cualquier cosa que queramos.
Las sentencias se dividen por su manera de funcionar dentro del programa,
pudiendo dividirlas en 3 grades grupos:
28
Cmo explicar qu accin concreta realiza cada sentencia o funcin sera muy
extenso, os dejamos este enlace para que podis consultarlos. Nosotros iremos
comentando todos los que vayamos usando en nuestros ejemplos.
Otra cosa importante son las libreras. Son una serie de sentencias y funciones
especficas de cada elemento o shield que conectemos a Arduino, que no estn
dentro de las propias de la IDE, y que realizarn acciones especficas de cada uno
facilitndonos mucho la programacin.
Por ltimo nombraremos un par de pequeos detalles necesarios para poder
programar nuestro cdigo. Para que cada sentencia o funcin se ejecute debe llevar
al final de cada orden el signo de puntuacin punto y coma ; y al utilizar la doble
barra // le decimos al cdigo que lo que se escriba a la derecha es un comentario
y que no debe ejecutarlo (Arduino lo colorear en gris). Esto veris que es muy til
para explicar que estamos haciendo en cada momento.
Compilacin y carga.
Una vez que hayamos escrito nuestro cdigo en la IDE Arduino procederemos a
verificar que est correctamente escrito. Para ello pulsamos el botn arriba
a la izquierda. Arduino leer el texto y nos dir si es correcto o no. Para ello lo que
har ser compilarlo, que significa traducir el cdigo del lenguaje de programacin a
un lenguaje que entienda el microcontrolador directamente.
En el caso de contener un error nos aparecer en la consola una explicacin
orientativa del error.
29
Ilustracin 3 Verificando el cdigo
30
Ilustracin 4 Cdigo correcto
31
Ilustracin 5 Error en el cdigo. Falta un ";"
32
Si la compilacin ha sido correcta, ya podremos cargar nuestro programa al Arduino.
Para ello, con la placa conectada por USB, pulsamos el botn de carga y
esperamos a que termine.
33
Ilustracin 6 Carga de programa terminada
34
Ejemplo: Semforo
Como primer proyecto, realizaremos un semforo con unos Leds. Es ideal para
iniciarnos en la programacin y el montaje de circuitos porque, como veris, es muy
fcil.
Empezaremos nuestro primer proyecto describiendo los elementos que vamos a
necesitar:
1 x Arduino UNO R3
1 x Protoboard
3 x resistencias de 220.
35
Ilustracin 7 Esquema de montaje del semforo
Utilizaremos los pines digitales 2 (rojo), 4 (amarillo) y 7 (verde). Al conectar los Leds
debis tener en cuenta que tienen polaridad, por lo que tenis que colocarlos bien
para que funcionen. En los Leds la patilla corta, o el lado que est achatado, es el
negativo e ir conectado a tierra (GND en la placa) a travs de una resistencia. La
patilla larga, o lado redondeado, es el positivo y se conectar al pin del Arduino
correspondiente.
36
Ilustracin 8 Protoboard del proyecto semforo
/*************/
/* SEMAFORO */
/*************/
void setup() {
pinMode(verde,OUTPUT); //declaramos el pin verde como salida
pinMode(amarillo,OUTPUT);//declaramos el pin amarillo como salida
pinMode(rojo,OUTPUT); //declaramos el pin rojo como salida
}
37
void loop() {
digitalWrite(verde,HIGH); //encendemos el led rojo
delay(2000); //esperamos 2 segundos
digitalWrite(verde,LOW); //apagamos el led rojo
delay(500); //esperamos medio segundo
Con la sentencia int estamos declarando una variable numrica entera, para poderla
usar despus en nuestro cdigo.
El comando delay hace que el programa pare un tiempo determinado. ste lo
definiremos, en milisegundos, dentro de los parntesis.
Las funciones pinMode y digitalWrite se explicarn en el siguiente post, salidas, con
detalle.
Salidas
Pines de salida
Arduino utiliza sus pines de salida para enviar seales elctricas. stas seales
pueden utilizarse para alimentar otros dispositivos (led's, zumbadores...) o para
comunicarse enviando una serie de pulsos que el receptor debe entender.
Las salidas se dividen en dos niveles o estados: HIGH a 5 V y LOW a 0 V. Por
defecto, y sin ningn programa cargado en nuestra tarjeta controladora, las salidas
38
estn a nivel LOW. Para valores intermedios veremos los pines con funcin PWM en
el punto 2.
Para valores constantes de 5V, 3.3V y 0V (GND) podemos utilizar los pines
correspondientes del apartado POWER de nuestro Arduino.
39
Por defecto estos pines estn configurados como entradas as que lo primero que
tenemos que hacer para utilizar un pin como salida es configurarlo como tal. Para
ello escribimos esta sentencia dentro del apartado setup del programa.
40
pinMode(pin,OUTPUT);
Donde sustituiremos "pin" por el nmero del pin que queremos configurar como
salida. Tambin podemos almacenar el nmero de ese pin en una variable, por
ejemplo el pin 10 en la variable llamada "pinsalida" y escribirla dentro de la funcin
pinMode.
en cuyo caso se volver al valor de 0 V. Podemos poner los pines a HIGH o LOW
tantas veces como queramos.
IMPORTANTE: hay que tener en cuenta que estos pines tienen una intensidad
limitada a 40 mA, por tanto no ser suficiente para alimentar a algunos rels,
motores, bombillas y todo aquello que necesite mayor corriente. En otros post
veremos cmo solucionamos este "problema".
41
PWM
La funcin PWD nos permite obtener valores intermedios de salidas entre 0 y 5V
escalados en en 255 niveles, siendo 0 el ms bajo (0 V) y 255 el ms alto (5 V).
Lo que en realidad sucede es que el microcontrolador alterna rapidsimamente
estados HIGH y LOW un tiempo proporcional al valor requerido. As, con 127 estara
el 50% del tiempo a HIGH y el otro 50% restante a LOW. Nosotros no lo notamos
porque todo ello sucede a una frecuencia superior a la que captan nuestros ojos.
Los pines que permiten esta funcin estn sealados con el smbolo ~ . En la placa
Uno son los pines 3, 5, 6, 9, 10 y 11.
Si como vimos en en anterior apartado ya tenemos nuestro pin configurado como
salida, para obtener un nivel de salida de 75% escribiremos en nuestro programa
analogWrite(pinsalida,191);
42
Seguidamente unimos mediante cables el pin 10 con la fila del nodo (pata larga) y
el GND con la fila del extremo libre de la resistencia. Si el led tiene las patas iguales,
una forma de distinguir el ctodo del nodo es fijndose en el borde del led que no
es completamente circular. Pues la parte biselada corresponde al ctodo.
Ahora vamos con el programa. En la primera parte declaramos las variables.
void setup()
43
pinMode(pinsalida,OUTPUT); // configura "pinsalida" como salida
En la funcin loop hacemos uso del PWM. Escribimos un bucle for que dar a la
variable pwm un valor inicial de 0 y lo ir incrementando en una unidad hasta que
alcance el valor mximo de 255. A continuacin ponemos otro bucle for que ir
decrementando el valor desde el mximo hasta el mnimo.
void loop()
{
for(pwm=0;pwm<256;pwm++) // desde pwm valiendo 0; hasta que valga 255; incrementa
pwm
{
analogWrite(pinsalida,pwm); // pone el "pinsalida" a el valor que almacena la variable
"pwm"
delay(1000/velocidad); // espera (1000/velocidad) milisegundos
}
for(pwm=255;pwm>-1;pwm--) // este bucle hace lo mismo pero decrementando pwm
{
analogWrite(pinsalida,pwm);
delay(1000/velocidad);
}
}
44
El programa entero quedara as.
/***********************/
/* ejemplo led pwm */
/***********************/
void setup()
{
pinMode(pinsalida,OUTPUT); // configura "pinsalida" como salida
digitalWrite(pinsalida,HIGH); // pone el "pinsalida" a nivel alto
delay(2000); // espera 2000 milisegundos (2 segundos)
pinMode(pinsalida,LOW); // pon "pinsalida a nivel bajo
delay(1000); // espera 1 segundo
}
void loop()
{
for(pwm=0;pwm<256;pwm++) // desde pwm valiendo 0; hasta que valga 255; incrementa
pwm
{
analogWrite(pinsalida,pwm); // pone el "pinsalida" a el valor que almacena la variable
"pwm"
delay(1000/velocidad); // espera (1000/velocidad) milisegundos
}
for(pwm=255;pwm>-1;pwm--) // este bucle hace lo mismo pero decrementando pwm
{
analogWrite(pinsalida,pwm);
delay(1000/velocidad);
}
}
45
Entradas Analgicas y Digitales
Entradas analgicas
Las entradas analgicas del modelo Uno son las correspondientes a los pines de A0
a A5. Se caracterizan por leer valores de tensin de 0 a 5 Voltios con una resolucin
de 1024 (10 bits). Si dividimos 5 entre 1024 tenemos que es capaz de detectar
variaciones en el nivel de la seal de entrada de casi 5 mV.
46
Para hacer la lectura de uno de estos pines escribiremos en nuestro cdigo
lectura = analogRead(pinentrada);
47
Entradas digitales
Las entradas digitales son las mismas que las salidas digitales, es decir, los pines
que van del 1 al 13. Se diferencian de las analgicas porque stas son capaces de
entender slo dos niveles de seal, LOW o valores cercanos a 0 V y HIGH o valores
cercanos a 5 V. Puede parecer una desventaja pero en realidad puede ser todo lo
contrario. Y no slo porque a veces nicamente necesitamos saber dos estados
(interruptor, pulsador, sensor de presencia, final de carrera....) sino porque as es
capaz de leer seales de pulsos digitales. Esto significa que puede comunicarse .
48
Por poner un ejemplo, un sensor analgico de temperatura como es el LM35
incrementara el nivel de la tensin que llega a la placa de forma proporcional a la
temperatura. Sin embargo, uno digital como el ds18b20 lo que hara es cambiar la
sucesin de pulsos y por tanto el mensaje que contiene el valor de la temperatura.
Aunque los pines digitales por defecto vienen configurados como entrada, si
queremos hacerlo manualmente escribimos en nuestro cdigo
pinMode(pinentrada,INPUT);
Para almacenar los dos valores posibles LOW o HIGH en una variable llamada
lectura escribimos
lectura = digitalRead(pinentrada);
49
Vamos a hacer un pequeo proyecto para medir la temperatura ambiente y
visualizarla en nuestro PC. Su montaje no lleva ms de un par de minutos y podemos
verlo claramente en el esquema. La pata +Vs va al pin 5V, la pata Vout al pin que
utilicemos para la lectura, en este caso el 0, y la restante GND al pin GND. Tened en
cuenta que el dibujo del LM35 est hecho con vista desde las patas . CUIDADO con
colocarlo al revs porque si lo hacis mal el sensor se calentar rpidamente y a
parte de estropearlo os quemaris al tocarlo.
50
El programa para este ejemplo es tambin muy simple y corto. Como siempre
empezamos con la declaracin de las variables. Esta vez, para almacenar la
temperatura no utilizaremos una variable del tipo int sino float para poder almacenar
decimales.
51
Lo siguiente es abrir el puerto serial en la funcin setup . sto se hace para poder
comunicarnos desde nuestro ordenador con el controlador y as poder mostrar los
datos por pantalla.
void setup()
En el cdigo quedara as
void loop()
{
temperatura = analogRead(pinentrada); // lectura del pin A0
temperatura = (temperatura / 1023 * 5 / 0.01); // "traduce" el valor ledo a grados
Serial.print(temperatura); // escribe el valor de la temperatura por el
puerto serial
Serial.print(" grados centigrados \n"); // escribe las unidades
delay(1000); // espera 1 segundo
}
52
Cargamos el cdigo en la placa y slo tenemos que pinchar en el icono del monitor
serial
Si nos muestras caracteres extraos es que la configuracin del monitor serial est
comunicndose con una tasa bps distinta a los 9600 con los que hemos
configurado nuestro puerto serial. Para corregirlo slo tenemos que seleccionar el
valor adecuado de la pestaa desplegable como se puede ver en la siguiente
imagen.
53
54
Os dejo el programa entero para que slo tengis que copiar y pegar a vuestro IDE.
/*****************************/
/* Medicion de Temperatura */
/* con el sensor LM35 */
/*****************************/
void setup()
{
Serial.begin(9600); // abrimos el puerto serial a 9600 bps
}
void loop()
{
temperatura = analogRead(pinentrada); // lectura del pin A0
temperatura = (temperatura / 1023 * 5 / 0.01); // traduce el valor a C
Serial.print(temperatura); // escribe el valor por el puerto serial
Serial.print(" grados centigrados \n"); // escribe las unidades de C
delay(1000); // espera un segundo
}
55
imaginar son parte fundamental de casi cualquier proyecto y son muy fciles de usar
y programar, aunque hay que tener en cuenta un par de detalles a la hora de usarlos.
Para comprender bien cmo funcionan en los distintos casos y como solucionar
algunos problemillas propios de los botones, realizaremos 3 ejemplos para verlos
detalladamente y en los que usaremos el mismo circuito/esquema y solo iremos
variando su programacin.
Esquema comn
Para realizar todos los ejemplos necesitaremos los siguientes elementos:
1 x Arduino UNO R3
1 X Protoboard
1 x led (usaremos rojo pero vale cualquier color)
1 x Botn
1x Resistencia de 220 (puede valer de 330)
1 x Resistencia de 10k (puede valer de 1 5 k)
Cables para conectar todo
Con todo comenzaremos a montar nuestro circuito como se describe en el siguiente
esquema.
56
57
Ilustracin 1 Esquema de montaje del interruptor.
Usaremos el pin 2 para encender el led y el 4 para saber el estado del botn. Al
montarlo debemos tener en cuenta un par de detalles. Primero, que conectemos
correctamente la polaridad del led, siguiendo las indicaciones que os dimos en el
ejemplo del semforo. Segundo, que usemos laresistencia de 10k para conectar el
botn a tierra. Esto es muy importante, ya que con eso protegemos a nuestra placa
de crear un cortocircuito a tierra que podra deteriorarla. La resistencia de 220,
como en ejemplos anteriores, la usaremos para conectar el led a tierra.
58
59
Ilustracin 2 Montaje real para ejemplos de botones e interruptores
Pulsador
Empezaremos con el botn ms sencillo de programar y usar que tenemos, el
pulsador. ste nos permite realizar una accin mientras mantengamos pulsado
nuestro botn, por ejemplo que un led se quede encendido mientras estemos
pulsando.
Para nuestro programa declararemos una variable llamada pulsador que usaremos
para saber si nuestro botn est pulsado o no.
int pulsador=0;
60
Dentro del setup, configuraremos el pin digital 2 como salida para poder dar la orden
de encender o apagar.
pinMode(2, OUTPUT);
Finalmente nuestro cdigo loop lo que har ser, primero leer del pin 4 en qu
estado est el botn mediante la sentencia digitalRead. Este valor lo
almacenaremos en la variable pulsador que declaramos anteriormente.
pulsador = digitalRead(4);
Una vez que sepa cmo se encuentra el botn, mediante una funcin if, si el
pulsador est HIGH (pulsado) encender el led y si el pulsador est en LOW (sin
pulsar) lo apagar.
if(pulsador==HIGH) {
digitalWrite(2, HIGH);
}
else{
digitalWrite(2, LOW);
/**************************/
/* Encender LED con Botn */
/* Pulsador */
/**************************/
61
int pulsador=0; //almacena el estado del botn
void loop() {
pulsador = digitalRead(4); //lee el estado del botn
if(pulsador==HIGH) { //si el estado es pulsado
digitalWrite(2, HIGH); //se enciende el led
}
else{ //si el estado es no pulsado
digitalWrite(2, LOW); //se apaga el led
}
}
Interruptor
Con este tipo, podremos usar un botn de la misma manera que si usramos un
interruptor de los que conocemos comnmente. Cuando pulsemos, se realizar la
accin programada (encender el led) y se mantendr en este estado hasta que
volvamos a pulsar nuevamente (se apagar el led).
Para obtener este tipo de botn solo haremos una pequea modificacin del cdigo
anterior. Introduciremos una nueva variable llamada estado que almacene el
estado en el que se dej el led tras la ltima pulsacin. De esta forma cuando
pulsemos, Arduino se acordar si el led estaba encendido o apagado.
int estado=0;
Usaremos esta memoria de Arduino para alternar entre encendido y apagado cada
vez que pulsemos. Esto lo haremos modificando el cdigo en la zona de void loop().
62
Primero introducimos un if que har que cuando pulsemos el botn alterne el valor
de la variable estado entre 0 y 1.
if(pulsador==HIGH){
estado=1-estado;
}
if(estado==1) {
digitalWrite(2, HIGH);
}
else{
digitalWrite(2, LOW);
Os dejamos el cdigo completo para que solo tengis que copiar y pegar en el IDE.
/**************************/
/* Encender LED con Botn */
/* Interruptor 1 */
/**************************/
63
int pulsador=0; //almacena el estado del botn
int estado=0; //0=led apagado, 1=led encendido
void setup() {
pinMode(2, OUTPUT); //declaramos el pin 2 como salida
pinMode(4, INPUT); //declaramos el pin 4 como entrada
}
void loop() {
pulsador = digitalRead(4); //lee si el botn est pulsado
64
Uno de los motivos de este efecto, es que Arduino repite nuestro loop de
instrucciones miles de veces cada segundo. Esto provoca que cuando pulsamos el
botn una sola vez, Arduino leer cientos de veces seguidas que hemos pulsado e
interpretar que hemos pulsado todas esas veces. Por eso, la accin de encender y
apagar se repetir muy rpidamente, sin que lo apreciemos, hasta dejar el led en la
ltima posicin leda.
Solucionar esto es sencillo. Solo tenemos que introducir una nueva variable
pulsadorAnt donde almacenemos en qu estado anterior se encontraba el botn,
pulsado o no, antes de nuestra pulsacin.
int pulsadorAnt=0;
if((pulsador==HIGH)&&(pulsadorAnt==LOW)){
estado=1-estado;
}
65
lminas, el resorte provoca una serie de rebotes entre las lminas que Arduino es
capaz de detectar.
Para evitar este problema, una solucin sencilla es meter una pequesima pausa al
programa justo despus de que Arduino detecte nuestra pulsacin. De esta forma,
cuando el cdigo retome su funcionamiento, los rebotes habrn terminado y no
sern detectados. En nuestro caso introduciremos una pausa de 40 milisegundos,
aunque podis probar a variar este valor a vuestro gusto para afinar el resultado.
delay(40);
Podris observar que an falla alguna vez pero que su funcionamiento es bastante
ms preciso que antes.
66
Esto es todo. Esperamos que se haya entendido bien y que no quede muy lioso. Al
seguir los pasos veris que es muy fcil y divertido. Os dejamos el cdigo completo.
/**************************/
/* Encender LED con Botn */
/* Interruptor sin rebote */
/**************************/
void setup() {
pinMode(2, OUTPUT); //declaramos el pin 2 como salida
pinMode(4, INPUT); //declaramos el pin 4 como entrada
}
void loop() {
pulsador = digitalRead(4); //lee si el botn est pulsado
67
else{ //si el estado es 0
digitalWrite(2, LOW); //se apaga el led
}
}
Comunicacin serie
Qu es la comunicacin serie?
68
Para poder establecer esta comunicacin usaremos el monitor serial que tenemos
69
Ilustracin 1 Botn de Monitor Serial
70
podremos, por ejemplo, conectar 2 Arduinos entre s, conectndolos de manera
cruzada, para que trabajen en paralelo o conectar un Arduino con otro dispositivo
que tambin se comunique con este protocolo. Por razones obvias no podremos
usar estos pines como salidas digitales mientras los usemos como conexin serial.
En segundo lugar, tenemos los puertos USB (Universal Serial Bus) propios de las
placas Arduino. Estos puertos, al trabajar con protocolo serial, los podemos usar
para conectarnos al PC directamente y facilitarnos as el conexionado de Arduino
con ste.
71
Ilustracin 3 Montaje para encender Led
72
Una vez hemos montado el circuito, nos dirigimos al IDE y escribimos el siguiente
cdigo, lo enviamos a nuestro Arduino y una vez terminado el proceso haremos click
en el botn del monitor serial.
/********************************/
/* Ordenar Parpadeos de un Led */
/********************************/
int parpadeos;
int led = 2;
void setup(){
Serial.begin(9600); // Inicia la comunicacin serial
pinMode(led, OUTPUT);
}
void loop(){
if (Serial.available()>0){ // Comprueba si el serial est
disponible
parpadeos = Serial.read()-48; // leemos el nmero de parpadeos
if (parpadeos >= 1 && parpadeos <= 9) // Si el valor introducido est
entre 1 y 9
{
Serial.print("Se van a dar ");
Serial.print(parpadeos);
Serial.println(" parpadeos");
delay(1500);
for(int i=0;i<parpadeos;i++){ // Realiza los parpadeos
digitalWrite(led, HIGH);
73
delay(100);
digitalWrite(led, LOW);
delay(200);
}
}
else { // Si introducimos un valor
erroneo
Serial.println("El dato introducido es incorrecto");
}
}
}
Este programa lo que hace es que nuestro Led parpadee el nmero de veces que le
digamos. Para ello introduciremos valores, entre 1 y 9, por el monitor serial y
pulsamos enter.
Para realizar el cdigo, en primer lugar, hemos declarado las variables que vamos a
usar, como en anteriores ejemplos. En la zona de setup hemos iniciado la
comunicacin serial con el comando Serial.begin(9600) para que Arduino sepa que
nos comunicaremos con l a la velocidad de 9600 bits/seg (la velocidad es variable
siempre que se establezca la misma en el cdigo y en el receptor de la seal). Esto
es necesario ponerlo siempre que vayamos a usar el monitor serial, ya que sin esta
lnea Arduino no se comunicar por serial. Tambin hemos configurado nuestro pin
del Led como salida. Usaremos el pin 2.
En el cuerpo de la funcin loop, comenzamos con la funcin if (Serial.available()>0)
que comprueba si hemos enviado datos por serial para que, en nuestro caso, solo
nos devuelva datos cuando los pedimos. Una vez enviado el nmero, con la
expresin parpadeos = Serial.read()-48 almacenaremos el valor que hemos
enviado en la variable parpadeos. Como habris observado, al valor que lee del
serial le restamos 48. Esto es debido a que Arduino lee los caracteres en cdigo
ASCII, el cual podis ver aqu, y en este cdigo el nmero cero equivale al valor 48.
De esta forma transformamos los nmeros de ASCII a decimales.
74
EnOpenWebinars.nettenemostodosestos
cursosatuenteradisposicin
AppsMvilescon Desarrollo
TitaniumAlloy Backendcon
Django
16
Continuaremos con if (parpadeos >= 1 && parpadeos <= 9) imponiendo que el
programa solo funcione si introducimos un nmero mayor o igual 1 y menor o igual
9, en caso contrario nos devolver el mensaje El dato introducido es incorrecto.
Mediante la funcin Serial.print() Arduino nos imprimir en el monitor serial lo que
pongamos dentro del parntesis. Ya sea una frase, que habremos de introducir entre
comillasSerial.print(frase), o una variable, para lo que pondremos directamente su
nombre sin comillasSerial.print(variable). Escrito as nos ir imprimiendo todo en la
misma lnea, pero si escribimos Serial.println() lo que haremos ser que, tras esa
impresin, la siguiente se empezar a escribir en la lnea de abajo. Usaremos esta
funcin para que Arduino se comunique con nosotros.
Finalmente definiremos un bucle for. En nuestro caso for (int i=0;i<parpadeos;i++),
para que iniciando el valor de i en 0, si i es menor que el valor de parpadeos
introducido, encender y apagar el Led una vez e incrementar el valor de i en 1
cada vez que pase por el bucle. De esta forma conseguimos que el Led parpadee las
veces que le hemos ordenado.
Divertido verdad?.
75
Con este circuito, controlaremos qu cantidad de rojo, verde y azul dar nuestro Led
y adems, gracias a la comunicacin serial, Arduino nos dir que color exacto est
dando y podremos usar estos datos con otros programas o decirle nosotros al
sistema que d un color exacto que queremos.
Antes de comenzar, explicaremos que es un Led RGB. Es un Led que dentro lleva 3
colores independientes que mezclan su intensidad para proporcionar casi toda la
gama de colores. Existen de dos tipos, de ctodo comn y de nodo comn. Esto
solo quiere decir que los 3 Leds internos que lleva el RGB comparten una de las
conexiones, ya sea el ctodo que se conecta a tierra o el nodo que se conecta a la
alimentacin. Es fcil identificar cual es la conexin compartida, ya que estos Leds
tienen 4 filamentos y el ms largo es el comn. Los otros 3 filamentos son los que
controlan cada color. Da igual el tipo que usemos, siempre que los conectemos
correctamente.
76
Ilustracin 4 Conexiones de Led RGB (arduino utfsm)
77
78
Ilustracin 5 Montaje de control de Led RGB
Hay que resaltar, que conectaremos cada nodo a pines digitales PWM del Arduino
para controlar la intensidad que enviamos a cada uno. Nosotros usaremos los pines
digitales 3, 5 y 6, y los analgicos 0, 1, y 2.
Finalmente nos dirigiremos al IDE, escribiremos el siguiente cdigo y lo cargaremos
a nuestro Arduino. Una vez cargado pulsaremos en el botn de monitor serial.
/**********************************/
/* Control de Led RGB con Serial */
/**********************************/
const int ledRojo=3; // definimos los pines digitales para el Led RGB
const int ledVerde=5;
const int ledAzul=6;
const int potRojo=0; // definimos los pines analogicos para los
potenciometros
const int potVerde=1;
const int potAzul=2;
int rojo; // definimos variables para los valores de cada
potenciometro
int verde;
int azul;
void setup(){
Serial.begin(9600); // inicia la comunicacin serial
pinMode(ledRojo, OUTPUT); // configuramos los pines digitales como salida
pinMode(ledVerde, OUTPUT);
79
pinMode(ledAzul, OUTPUT);
}
void loop(){
rojo=analogRead(potRojo) / 4; // leemos el valor de cada potencimetro
verde=analogRead(potVerde) / 4; // y lo almacenamos
azul=analogRead(potAzul) / 4;
analogWrite(ledRojo,rojo);
analogWrite(ledVerde,verde);
analogWrite(ledAzul,azul);
Serial.print("ROJO: ");
Serial.print(rojo); // si fuese nodo comn sera 255-rojo
Serial.print(" / ");
Serial.print("VERDE: ");
Serial.print(verde); // si fuese nodo comn sera 255-verde
Serial.print(" / ");
Serial.print("AZUL: ");
Serial.println(azul); // si fuese nodo comn sera 255-azul
delay(300);
}
80
estos valores podemos dirigirnos a cualquier programa de edicin grfica y utilizar
ese color exacto, o viceversa.
Probaremos a conseguir el color del logo de OpenWebinars.net. Primero, abrimos el
logo con Paint y haremos clic en la herramienta Selector de color. Picaremos en el
color del logo y despus pulsaremos en Editar colores. En la ventana emergente ya
podremos ver los valores RGB de nuestro color.
81
Ilustracin 6 Seleccin de valores RGB de una imagen usando Paint
82
tone(pinsalida,frecuencia);
Tenemos que tener en cuenta que slo es capaz de generar un nico tono a la vez.
Si llamamos a la funcin tone para que genere sonidos en otro pin sin haber
detenido el que est sonando no ocurrir nada.
Zumbador
Un zumbador es un elemento parecido a un altavoz pero slo emite zumbidos (tpico
sonido que emiten los electrodomsticos). Su precio suele rondar los 2.
Para hacerlo sonar utilizaremos los pines 13 y GND. El montaje no merece ms
explicacin que la de la imagen
83
84
Ya slo falta crear el cdigo y cargarlo. En la funcin loop hacemos la llamada a
tone para que suene y noTone para detener el sonido. Cambiando los valores de la
funcin delay haremos que suene durante ms o menos tiempo.
void setup()
{
}
void loop()
{
tone(pinzumbador,frecuencia); // inicia el zumbido
85
delay(2000);
noTone(pinzumbador); // lo detiene a los dos segundos
delay(1000);
}
Msica
En este punto utilizaremos un pequeo altavoz. Podis aprovechar uno que tengis
en algn aparato que no utilicis.
El mismo montaje servir para los dos ejemplos siguientes. El primero consistir en
reproducir una escala de 220 a 440 HZ con todos sus semitonos. En el segundo
reproduciremos msica.
86
Si os fijis en el esquema he puesto un condensador (~0.20) en serie con el
altavoz. sto es para eliminar cualquier componente de continua. Tened en cuenta
que si elegs valores muy pequeos puede recortar las frecuencias ms bajas. Con
valores de 47 uF o mayores va bien. IMPORTANTE:Si usis condensadores
electrolticos (los cilndricos) tenis que tener en cuenta que tienen polaridad y si lo
colocis al revs pueden explotar. Fijaros que tienen una franja con signos - en la
pata negativa.
87
88
Vamos con el primer ejemplo. Para no almacenar todas las frecuencias y tener que
escribir la funcin tone en nuestro cdigo cada vez que queramos una nueva nota,
haremos un pequeo truco. Almacenaremos slo el valor de la frecuencia inicial, y
las sucesivas notas tendrn la frecuencia de la anterior multiplicada por 1,059. De
este modo escribiremos una sola vez la funcin para hacerlo sonar y un bucle for
ser el encargado de ir incrementando el valor de la frecuencia.
89
/***********************/
/* recorrido de octava */
/***********************/
void setup()
{
}
void loop()
{
for(contador=0,frecuencia=220;contador<12;contador++)
{
frecuencia=frecuencia*m; // actualiza la frecuencia
tone(pinaltavoz,frecuencia); // emite el tono
delay(1500); // lo mantiene 1.5 segundos
noTone(pinaltavoz); // para el tono
delay(500); // espera medio segundo
}
}
90
La ventaja es que nos ahorrar escribir decenas de veces la funcin delay para para
indicar el tiempo que debe durar la nota. Cada vez que llamemos a esa funcin se
ejecutar esta parte del cdigo
/**************************/
/* popurri para Arduino */
/**************************/
/* declaracin de variables */
int spk=13; // altavoz a GND y pin 13
int c[5]={131,262,523,1046,2093}; // frecuencias 4 octavas de Do
int cs[5]={139,277,554,1108,2217}; // Do#
int d[5]={147,294,587,1175,2349}; // Re
int ds[5]={156,311,622,1244,2489}; // Re#
int e[5]={165,330,659,1319,2637}; // Mi
int f[5]={175,349,698,1397,2794}; // Fa
int fs[5]={185,370,740,1480,2960}; // Fa#
int g[5]={196,392,784,1568,3136}; // Sol
int gs[5]={208,415,831,1661,3322}; // Sol#
int a[5]={220,440,880,1760,3520}; // La
int as[5]={233,466,932,1866,3729}; // La#
int b[5]={247,494,988,1976,3951}; // Si
91
void nota(int a, int b); // declaracion de la funcion auxiliar. Recibe dos numeros
enteros.
void setup()
{
/**************************************/
/* HARRY POTTER */
/**************************************/
nota(b[2], 500);
nota(e[3],1000);
nota(g[3], 250);
nota(fs[3],250);
nota(e[3],1000);
nota(b[3],500);
nota(a[3],1250);
nota(fs[3],1000);
nota(b[2], 500);
nota(e[3],1000);
nota(g[3],250);
nota(fs[3],250);
nota(d[3],1000);
nota(e[3],500 );
nota(b[2],1000 );
noTone(spk); delay(1000);
nota(b[2], 500);
nota(e[3],1000);
nota(g[3], 250);
nota(fs[3],250);
nota(e[3],1000);
nota(b[3],500);
nota(d[4],1000);
nota(cs[4],500);
nota(c[4],1000);
nota(a[3],500);
nota(c[4],1000);
nota(b[3],250);
nota(as[3],250);
92
nota(b[2],1000);
nota(g[3],500);
nota(e[3],1000);
noTone(spk);
delay(2000);
/*******************/
/* STAR WARS */
/*******************/
/**** tema principal ****/
nota(d[1],150);noTone(spk);delay(50);
nota(d[1],150);noTone(spk);delay(50);
nota(d[1],150);noTone(spk);delay(50);
nota(g[1],900);noTone(spk);delay(150);
nota(d[2],900);noTone(spk);delay(50);
nota(c[2],150);noTone(spk);delay(50);
nota(b[1],150);noTone(spk);delay(50);
nota(a[1],150);noTone(spk);delay(50);
nota(g[2],900);noTone(spk);delay(150);
nota(d[2],900);noTone(spk);delay(100);
nota(c[2],150);noTone(spk);delay(50);
nota(b[1],150);noTone(spk);delay(50);
nota(a[1],150);noTone(spk);delay(50);
nota(g[2],900);noTone(spk);delay(150);
nota(d[2],900);noTone(spk);delay(100);
nota(c[2],150);noTone(spk);delay(50);
nota(b[1],150);noTone(spk);delay(50);
nota(c[2],150);noTone(spk);delay(50);
nota(a[1],1200);noTone(spk);delay(2000);
93
nota(ds[2],500);noTone(spk);delay(1);
nota(as[2],125);noTone(spk);delay(25);
nota(g[2],500);
noTone(spk);delay(2000);
/**********************/
/* entre dos aguas */
/**********************/
nota(a[1],400);noTone(spk);delay(400);
nota(e[1],400);noTone(spk);delay(400);
nota(a[1],400);noTone(spk);delay(200);
nota(e[1],200);noTone(spk);delay(200);
nota(a[1],200);noTone(spk);delay(200);
nota(as[1],100);noTone(spk);delay(100);
nota(b[1],400);noTone(spk);delay(400);
nota(fs[1],400);noTone(spk);delay(400);
nota(b[1],400);noTone(spk);delay(200);
nota(fs[1],200);noTone(spk);delay(200);
nota(b[1],200);noTone(spk);delay(200);
nota(as[1],100);noTone(spk);delay(100);
nota(a[1],400);noTone(spk);delay(400);
nota(e[1],400);noTone(spk);delay(400);
nota(a[1],400);noTone(spk);delay(400);
}
void loop()
{
}
94
Qu es el sistema OneWire?
95
principio de nuestro cdigo la sentencia #include <librera.h>repitiendo con todas las
libreras que necesitemos.
96
En este ejemplo vamos a usar las libreras propias del sensor en cuestin, en
nuestro caso usaremos las libreras DallasTemperature y OneWire. Para instalar las
libreras propias, o de terceros, una vez descargadas existen 2 mtodos:
1. Mtodo normal: Dentro del IDE, nos dirigimos a Sketch->Importar librera->Ad
library. Se nos abrir una ventana de exploracin en la que debemos buscar el
archivo rar/zip que hemos descargado. Lo seleccionamos y ya la tendremos
instalada.
97
Ilustracin 2 Instalacin de libreras en IDE Arduino
98
2. Mtodo manual: Si el mtodo anterior no funciona, utilizaremos la instalacin
manual. Para proceder, descomprimiremos el rar/zip descargado y copiamos la
carpeta de la librera en la ruta Documentos\Arduino\libraries . Quedando, por
ejemplo, de la siguiente manera.
99
Ilustracin 3 Ejemplo de carpeta de librera instalada
Una vez instaladas las libreras que vayamos a usar, podremos usar los ejemplos
que traen cada una para probar sus accesorios. Es interesante echarles un ojo antes
de ponernos a programar como locos, porque de estos ejemplos podemos
100
aprovechar partes de cdigo o ver cmo usa las funciones y as ahorrarnos mucho
trabajo. Para abrir estos ejemplos solo tendremos que dirigirnos dentro del IDE a
Archivo->Ejemplos y ah veremos todas las libreras disponibles y dentro de cada
una, sus ejemplos correspondientes.
101
102
Ilustracin 4 Cargar ejemplos
1 x Arduino UNO R3
1 x Protoboard
1 x Sensor de Temperatura ds18b20 (versin sumergible)
1 x Resistencia de 4,7k
Cables para conectar todo
En esta ocasin, es muy importante que prestis atencin al montaje del circuito. No
es para nada difcil, pero si no est correcto el sensor dar medidas errneas o
incluso puede estropearse. El esquema es el siguiente.
103
Ilustracin 5 Montaje para el sensor ds18b20
104
Como observamos en el circuito, alimentaremos a travs del pin DATA, por medio de
la resistencia de 4,7k, y los pines VCC y GND van conectados entre s y a tierra.
Aqu en el datasheet del sensor podis ver cmo va el patillaje, o bien si usis la
versin sumergible, como nosotros, la correspondencia de los 3 cables sera:
[Rojo]=VCC, [Azul o Negro] = GND y [Amarillo o Blanco] = DATA.
Una vez conectado todo correctamente, nos dirigiremos al IDE y escribiremos el
siguiente cdigo.
/******************************/
/* Medir Temperatura ds18b20 */
/******************************/
void setup() {
delay(1000);
Serial.begin(9600);
sensors.begin(); //Se inician los sensores
105
}
void loop() {
sensors.requestTemperatures(); //Prepara el sensor para la lectura
(Panama hiteck)
106
lneaSerial.print(sensors.getTempCByIndex(0)) tomar la medida y la imprimir, por
el monitor serial y en grados centgrados, en una nica sentencia. Finalmente
aadiremos la impresin del texto Grados Centgrados y haremos una pausa de 1
segundo para que el sensor no est realizando miles de medidas constantemente.
Como habis podido comprobar, es muy sencillo y prctico utilizar este sistema.
Solo hay que familiarizarse con las funciones especficas de la librera de cada
sensor para sacarles el mximo provecho. Os recomendamos que leis que
funciones especficas trae cada librera y juguis un poco con ellas antes de poneros
107
a programar vuestro proyecto, seguro que encontraris algunas funciones o
ejemplos propios que os simplifican el cdigo bastante.
108
Ilustracin 7 Montaje para el sensor ds18b20
Pantalla LCD
En este ltimo post del primer tutorial veremos cmo mostrar a travs de una
pantalla LCD la temperatura medida con el sensor LM35 que ya aprendimos a
utilizar en el post 5. una pantalla LCD? S, pero no la confundamos con la pantalla
de nuestra televisin o la de nuestro smartphone, esas son pantallas LCD-TFT,LCD-
SPI... nosotros usaremos una LCD simple y a un slo color del tipo de las que
podemos encontrar en calculadoras y algunos electrodomsticos.
Material necesario
Suponiendo que ya tenemos nuestra placa Arduino Uno, nuestra protoboard y un
juego de cables, tendremos que hacernos con el siguiente material:
Montaje
Viendo la foto puede parecer complicado por la cantidad de cables que tiene, pero
en realidad tener ms conexiones no lo hace ms difcil. Si hacemos las conexiones
paso a paso nos funcionar a la primera. La que vamos a ver no es la nica forma de
conectar la pantalla, pero as podemos utilizar los cdigos de ejemplo de la IDE para
109
EnOpenWebinars.nettenemostodosestos
cursosatuenteradisposicin
AppsMvilescon Desarrollo
TitaniumAlloy Backendcon
Django
16
LCD sin cambiar ninguna lnea. Tambin tenis que tener en cuenta que las pantallas
las suelen vender con el agujero para soldarle un pin macho o un cable. Yo le he
soldado una tira de pines macho para poder insertarla en la protoboard pero si no
queris soldar podis meter los cables en los agujero con cuidado de que las puntas
no se toquen entre s. Ahora vamos a ver de izquierda a derecha como se conecta
cada pin de la pantalla. Como los pines 5V y GND los vamos a utilizar en ms de una
conexin, los conectamos a las filas largas de nuestra protoboard y cuando un pin
de la pantalla se corresponda con 5V o GND lo conectaremos con su fila
correspondiente.
VDD a la fila 5 V
110
RS al pin 12
RW a la fila GND
E al pin 11
D0 a D3 sin conexin
D4 al pin 5
D5 al pin 4
D6 al pin 3
D7 al pin 2
A a la fila 5 V
K a la fila GND
111
No debemos olvidar que la primera vez que se conecta, tras alimentarla debemos
ajustar el potencimetro hasta encontrar el contraste ptimo. Antes de seguir
podemos verificar que funciona perfectamente cargando uno de los cdigos de
ejemplo de la IDE como el que encontramos en Archivo Ejemplos LiquidCrystal
HelloWorld.
Cdigo
Slo vamos a tratar en profundidad la parte del cdigo que tiene que ver con el LCD
y no con el sensor ya que est visto anteriormente. Al final del post est el cdigo
112
completo. En primer lugar teneos que aadir la librera para LCD en Esketch
Importar librera LiquidCrystal o escribiendo
#include <LiquidCrystal.h>
Pero ojo, empieza a contar desde cero, es decir, si queremos el cursor en la primera
columna de la primera fila tendremos que escribir
let.setCursor(0,0)
lcd.print(temp);
Y con esto escribir el nmero que almacena la variable temp. Para que nuestro
proyecto quede ms esttico escribiremos la cadena de caracteres C en la octava
columna de la segunda fila (el smbolo no se muestra correctamente).
lcd.setCursor(7, 1);
lcd.print(C);
113
Aunque es este cdigo no vamos a tener problemas al sobrescribir, tenemos que
tener en cuenta que slo se borran las posiciones en las que se escriben, el resto
sigue manteniendo los caracteres que mostraban anteriormente. Para limpiar la
pantalla utilizaremos la opcin clear que borrar toda la pantalla.
lcd.clear();
Por ltimo, introducimos un delay al gusto para evitar que refresque tan rpido que
no nos de tiempo a leer los datos antes de que cambien.
114
EnOpenWebinars.nettenemostodosestos
cursosatuenteradisposicin
AppsMvilescon Desarrollo
TitaniumAlloy Backendcon
Django
16