tutorial!ii

Anuncio
!
!
!
!
!
!
!
!
TUTORIAL!II:!
COMUNICÁNDONOS!
CON!EL!MUNDO!
REAL
!
!
!
!
Carmen!López!de!la!Torre!(Universidad+de+Cantabria)! !
Ignacio!Elicegui!Maestro!(Universidad+de+Cantabria)!
!
TUTORIAL!II:!COMUNICÁNDONOS!CON!EL!MUNDO!REAL!
Objetivo!de!este!tutorial!
Una!vez!que!ya!nos!hemos!introducido!en!el!mundo!Arduino!y!que!hemos!aprendido!qué!es!y!
cómo!cargar!programas!sencillos!en!nuestra!placa,!llega!el!momento!de!permitirla!interactuar!
con!el!exterior.!Esto!se!puede!hacer!de!diferentes!maneras,!como!por!ejemplo!leyendo!a!través!
de!sensores!o!controlando!actuadores.!En!el!caso!de!los!sensores,!existen!infinidad!de!ejemplos!
(temperatura,! humedad,! presión,! luminosidad,! presencia,! etc.)! y! en! Internet! se! pueden!
encontrar!muchos!tutoriales!sobre!cómo!conectarlos!y!obtener!información!de!ellos.!Aunque!
normalmente! no! es! complicado! interactuar! con! ellos,! es! importante! que! antes! de! comenzar!
conozcamos! tres! de! los! aspectos! más! básicos! sobre! nuestras! placas:! pines! digitales,! pines!
analógicos,! y! el! modo! de! comunicar! la! placa! con! el! ordenador! (Figura! 1).! Los! dos! primeros!
aspectos! tienen! que! ver! con! cómo! nuestra! placa! se! comunicará! con! los! dispositivos! que! le!
conectemos,!y!el!tercero!con!cómo!se!comunicará!con!nuestro!ordenador!(en!el!caso!de!que!
queramos! interactuar! con! ella! a! través! del! pc).! Una! vez! que! estos! aspectos! estén! claros,!
abordaremos! cuál! es! la! forma! general! de! conectar! sensores! digitales! y! analógicos,! y! para!
practicar!aprenderemos!a!utilizar!el!sensor!de!temperatura!DHT22!y!jugaremos!con!un!sensor!
analógico!de!luminosidad.!
!
!
Figura+1.+Arduino+YUN:+pines+digitales+y+analógicos,+y+puerto+serial+
Entradas!Digitales!
!
Figura+2.+Pines+digitales+
!
1!
!
!
Una! entrada! digital! es! una! variación! de! voltaje! entre! OVcc! a! +Vcc! sin! pasar! por! los! valores!
intermedios,!por!lo!que!únicamente!tendremos!dos!estados:!el!valor!–Vcc!que!será!el!valor!bajo!
LOW!(“0”),!y!+Vcc!que!será!el!valor!superior!HIGH!(“1”)![1]![2].!!
!
Lo!que!realmente!hacen!los!pines!digitales!a!los!que!conectamos!nuestros!dispositivos!es!recoger!
el! voltaje! y! compararlo! con! un! valor! umbral! que,! en! general! aunque! no! siempre,! estará!
comprendido!alrededor!del!punto!medio!entre!–Vcc!y!+Vcc.!Si!el!valor!recogido!es!mayor!que!el!
valor!umbral!el!valor!devuelto!será!HIGH!y!en!caso!contrario!será!LOW.!En!el!primer!tutorial!
vimos!cómo!la!alimentación!ideal!de!nuestras!placas!estaba!entre!0V!y!5V,!por!lo!tanto,!podemos!
calcular! que! el! umbral! estará! sobre! los! 2.5V,! esto! es,! cuando! el! valor! que! recibamos! en! una!
entrada!sea!superior!a!2.5V!obtendremos!un!valor!“1”!o!HIGH!y!en!caso!contrario,!si!es!menor!
que!2.5V,!obtendremos!un!valor!“0”!o!LOW.!
!
El!número!de!entradas!digitales!puede!variar!de!unas!placas!a!otras.!En!el!caso!del!Arduino!YUN,!
que! es! la! placa! con! la! que! estamos! trabajando,! disponemos! de! 20! entradas! (las! que! están!
marcadas! como! digitales! en! la! placa! +! las! que! están! marcadas! como! analógico! que! también!
pueden!funcionar!como!digitales)!Figura!2.!Estas!entradas!se!denominan!I/O!(entrada/salida)!ya!
que!cada!una!de!ellas!puede!funcionar!como!entrada!o!como!salida.!Por!ello,!cuando!en!el!código!
queramos!trabajar!con!esas!entradas!habrá!que!especificar!en!cada!momento!en!calidad!de!qué!
queremos!que!funcionen.!
!
Los!comandos!básicos!para!manejar!los!pines!digitales!son:!
o! pinMode(pin,[INPUT,OUTPUT]);!!
Configura!el!pin!especificado!para!comportarse!como!una!entrada!(INPUT)!o!una!salida!
(OUTPUT).!Ejemplo:!pinMode+(3,+OUTPUT)!
o! digitalWrite(pin,![HIGH,!LOW]);!
Escribe!un!valor!HIGH!o!LOW!hacia!un!pin!digital.!Si!el!pin!ha!sido!configurado!como!
OUTPUT!con!pinMode(),!su!voltaje!será!establecido!al!correspondiente!valor:!5V!(!o!3.3V!
en!tarjetas!de!3.3V)!para!HIGH,!ó!0V!(tierra)!para!LOW.!Ejemplo:!digitalWrite(5,+HIGH)!
o! digitalRead(pin);!
Lee!el!valor!de!un!pin!digital!especificado,!HIGH!o!LOW.!Ejemplo:!digitalRead(4)!
!!
En!la!Figura!3!se!muestra!un!sketch!en!el!que!se!manejan!pines!digitales.!Más!concretamente,!
tenemos!un!botón!que!cuando!no!le!presionemos!nos!dará!un!valor!alto!(“1”!o!HIGH)!y!cuando!
le!presionemos!obtendremos!un!valor!bajo!(“0”o!LOW).!Nuestro!código,!recibirá!la!información!
(sobre!si!el!botón!está!o!no!apretado)!por!el!pin!digital!2!y!encenderá!el!LED!13!de!la!placa!si!el!
valor!es!HIGH!y!lo!apagará!si!es!LOW.!En!la!zona!de!inicializaciones!(la!primera)!definimos!los!
pines!que!se!van!a!utilizar,!en!este!caso!utilizaremos!el!pinDigital!2!y!el!LED!13!(que!está!integrado!
en!la!placa).!El!siguiente!paso,!dentro!del!setup!es!indicar!a!esos!pines!en!calidad!de!qué!van!a!
trabajar,!si!de!entrada!o!de!salida.!El!pinDigital!2!actuará!como!entrada!(INPUT)!ya!que!será!el!
que!reciba!el!valor!del!exterior.!El!LED!actuará!como!salida!ya!que!su!trabajo!es!encender!un!
LED.! Para! ejecutar! el! ejemplo,! preparamos! el! circuito! mostrado! en! la! Figura! 4! (la! resistencia!
puede!estar!entre!1k!y!10k),!cargamos!el!programa!y!lo!ejecutamos.!!
2!
!
!
!
Figura+3.+Manejo+de+pines+digitales+
!
Figura+4.+Esquema+ejemplo+utilización+pines+digitales+
3!
!
!
Entradas!Analógicas!
!
Figura+5.+Pines+analógicos+
Al!contrario!que!las!señales!digitales,!las!señales!analógicas!puede!tomar!cualquier!valor!dentro!
de!un!intervalo!–Vcc!y!+!Vcc![3]![4].!En!realidad,!lo!que!ocurre!es!que!la!placa!recoge!el!voltaje!y!
transforma!el!valor!analógico!a!digital!con!una!codificación!que!en!el!caso!del!Arduino!YUN!es!
de!10!bits!(1024!posibles!valores),!lo!que!nos!ofrece!una!precisión!a!la!hora!de!devolvernos!el!
valor! de! ±2.44mV.! Como! podemos! ver! en! la! Figura! 5! las! placas! Arduino! YUN! tienen! 6! pines!
analógicos! y! funcionan! todos! como! entrada.! Por! ello,! no! tendremos! que! preocuparnos! de!
asignarles!un!modo!de!funcionamiento!y!sólo!podremos!leer!de!ellos.!
El!comando!básico!para!manejar!las!entradas!analógicas!es:!!
o! analogRead(pin);!
Lee!el!valor!de!un!pin!analógico!especificado.!En!el!caso!de!Arduino!YUN!ofrecerá!un!
valor!comprendido!entre!0!y!1023.!
En! la! Figura! 6! se! muestra! un! sketch! en! el! que! se! manejan! pines! analógicos.! En! este! caso!
conectaremos!un!LDR!(resistencia!que!cambia!dependiendo!de!la!luz!que!le!incida)!y!si!el!valor!
recibido!es!mayor!que!un!umbral!encenderemos!el!LED!13.!En!nuestro!sketch,!en!primer!lugar!
se!inicializa!el!pin!analógico!A0!y!el!pin!digital!LED!13.!En!el!área!de!setup!definimos!el!pin!digital!
como! OUTPUT! ya! que! se! encargará! de! encender! un! LED.! En! el! ciclo! loop! (que! se! ejecutará!
continuamente)!leemos!el!pin!analógico!y!comprobamos!si!el!valor!que!nos!ofrece!es!mayor!que!
un!umbral!(por!ejemplo!512),!en!ese!caso!encenderemos!el!LED.!En!el!caso!de!que!el!valor!sea!
inferior!al!umbral,!el!LED!se!apagará.!La!Figura!7!muestra!el!esquema!del!circuito!que!tendremos!
que!realizar!para!poder!probar!el!ejemplo.!
4!
!
!
!
Figura+6.+Manejo+de+pines+analógicos+
!
!
Figura+7.+Esquema+ejemplo+pines+analógicos+
5!
!
!
Debemos!tener!en!cuenta,!a!partir!de!lo!que!hemos!explicado!antes,!que!lo!que!obtendremos!
será!un!valor!entre!0!y!1023.!Si!lo!que!realmente!nos!interesara!fuera!el!voltaje,!el!código!debería!
de!añadir!la!función!“map”![5]!que!lo!que!hace!es!convertir!un!rango!de!variación!en!otro.!En!el!
caso!particular!de!nuestro!código!queremos!convertir!nuestro!“valor”!que!está!en!una!escala!de!
0!a!1023!a!una!escala!0.0!a!5.0!(Figura!8).!Esta!función!tiene!la!siguiente!sintaxis:!
valorEscalado!=!map(valor_a_escalar,!escala_vieja_min,!escala_vieja_max,!escala_nueva_min,!escala_nueva_max)!
!
Figura+8.+Uso+de+la+función+map+
!
Puerto!Serie,!conexión!del!Arduino!con!el!ordenador!
El!puerto!serie!es!una!de!las!principales!formas!que!tenemos!para!comunicar!nuestra!placa!con!
el!ordenador.!Serán!muchas!las!veces!que!tendremos!que!utilizar!este!interfaz,!sobre!todo!para!
encontrar!errores,!por!ello!es!importante!aprender!a!sacarle!partido.!Por!ejemplo,!podremos!
mostrar!mensajes!por!pantalla,!introducir!datos!que!la!placa!tendrá!que!manejar,!enviar!alertas,!
etc.!
El!puerto!serie!es!una!interfaz!que!envía!la!información!mediante!una!secuencia!de!bits,!y!para!
ello!utiliza!(principalmente)!dos!conectores:!uno!para!transmitir!(TX)!y!otro!para!recibir!(RX).!!En!
Arduino! YUN! el! puerto! serie! es! el! microUSB! (por! donde! alimentamos! la! placa)! que! está!
conectado! con! los! dos! primeros! pines! digitales! (0! y! 1)! que! son! RX! y! TX! respectivamente.! En!
general,!utilizaremos!el!microUSB!para!trabajar.!
6!
!
!
Los!comandos!básicos!!(el!resto!los!podéis!encontrar!en![6])!!son!los!siguientes:!
o! Serial.begin(9600);+
Establece! la! velocidad! de! datos! en! bits! por! segundo! para! la! transmisión! de! datos! en!
serie,!normalmente!utilizaremos!9600!(aunque!se!pueden!poner!otros).!Este!comando!
lo!tendremos!que!añadir!en!la!zona!de!setup!en!el!código,!y!es!la!forma!de!inicializar!el!
puerto!serie.!
o! Serial.print(“Texto+que+quiero+pintar”);+
!
+
+
Imprime!los!datos!al!puerto!serie!como!texto!ASCII.!Algunos!ejemplos!pueden!ser:!
Serial.print(78);!!!el!resultado!será!"78"!
Serial.print(1.23456)+;!!!!el!resultado!será!"1.23"!
Serial.print("Hola+mundo.")+;!!!!el!resultado!será!"Hola!mundo."!
También!podemos!imprimir!variables,!por!ejemplo:!
+
int+variable+=+35;+
+
Serial.print(variable);+!+el+resultado+sería+“35”!
!
De! forma! opcional! podemos! usar! un! segundo! parámetro! para! especificar! la! base!
(formato)!que!queremos!utilizar.!Los!valores!permitidos!son!BYTE,!BIN!(binarios!o!base!
2),!OCT!(octales!o!base!8),!DEC!(decimales!o!base!10),!HEX!(hexadecimales!o!base!16).!
Para! números! de! coma! flotante,! este! parámetro! especifica! el! número! de! posiciones!
decimales!a!usar.!Algunos!ejemplos:!
!
Serial.print(78,+BIN)!!!imprime!"1001110"!
Serial.print(78,+DEC)!!!imprime!"78"!
Serial.print(1.23456,+0)!!!imprime!"1"!
Serial.print(1.23456,+2)!!!imprime!"1.23"!
Serial.print(1.23456,+4)!!!imprime!"1.2346"!
!
o! Serial.println(“Texto+que+quiero+pintar+y+salto+de+línea”);+
Lo!mismo!que!el!anterior!con!la!diferencia!de!que!éste!añade!un!salto!de!línea!al!final.!
o! Serial.available();+
Devuelve!el!número!de!bytes!(caracteres)!disponibles!para!ser!leídos!por!el!puerto!serie.!
Se!refiere!a!datos!ya!recibidos!y!disponibles!en!el!buffer!de!recepción!del!puerto!(que!
tiene!una!capacidad!de!128!bytes).!Para!que!os!hagáis!una!idea,!para!el!micro!de!Arduino!
un!float!equivale!a!4!bytes,!un!int!a!2!bytes,!un!char!a!1!bytes,!etc.!!
A! veces! también! nos! puede! resultar! interesante! concatenar! un! string! (texto)! con! un!
valor!e!imprimirlo,!en!ese!caso!haremos!lo!siguiente:!
int valorSensor = analogRead(A0); //leemos el valor
String cadena1 = "Valor del sensor es= ";
String cadena2 = cadena1 + valorSensor;
Serial.println(cadena2);
También!podríamos!hacerlo!sin!concatenar!de!la!siguiente!forma:!
int valorSensor = analogRead(A0); //leemos el valor
7!
!
!
Serial.print("Valor del sensor es= " );
Serial.println(valorSensor);
!
!
Para! conectar! nuestra! placa! con! el! ordenador! comenzamos! abriendo! el! IDE.! Cargamos! el!
programa!que!hayamos!escrito!(y!que!tenga!llamadas!al!Serial)!y!hacemos!click!en!el!monitor!
serie!(Figura!9).!Una!vez!hayamos!hecho!click!nos!aparecerá!una!nueva!ventana!(Figura!10)!en!
la!que!podremos!ver!en!la!parte!superior!una!caja!donde!introducir!los!datos!(si!el!programa!lo!
requiere).! Debajo! podremos! ver! una! caja! más! grande! donde! aparecerán! todos! los! datos! que!
recibe!la!placa!por!el!puerto!serie.!!
!
Figura+9.+Botón+de+apertura+del+monitor+serie+
8!
!
!
+
Figura+10.+Ventana+monitor+serie+
Conectando!un!sensor!Digital!–!DHT22!
Llega! la! hora! de! ponernos! manos! a! la! obra! y! empezar! a! conectar! sensores! a! nuestra! placa.!
Comenzaremos!conectado!un!sensor!digital.!En!este!caso!utilizaremos!el!sensor!de!temperatura!
y!humedad!DHT22!(Figura!11)![7].!Este!sensor!tiene!un!precio!medio!(alrededor!de!los!15!€)!y!!
tiene!una!precisión!de!0.5°C!y!2%.!Si!nuestro!presupuesto!es!menor,!podemos!utilizar!su!versión!
inferior!(el!DHT11)!que!tiene!un!precio!alrededor!de!los!6€!aunque!su!precisión!es!bastante!peor,!
de! 2°C! y! 5%.! Sin! embargo,! si! queremos! mejores! prestaciones! una! opción! interesante! sería!
utilizar!el!SHT15,!que!cuenta!con!una!precisión!de!0.3°C!y!2%.!!
!
Figura+11.+Sensor+DHT22+
La! conexión! no! es! complicada,! este! sensor! tiene! 3! pines! (normalmente! tiene! 4! y! uno! no! se!
conecta).!Tendremos!que!conectar!Vcc!(cable!rojo)!a!los!5V!de!nuestra!placa!y!GND!(cable!negro)!
a!la!tierra.!El!otro!pin!(DATA)!le!conectaremos!a!un!pin!digital!de!la!placa.!En!nuestro!caso!lo!
hemos!conectado!al!pin!9.!En!la!Figura!12!mostramos!un!esquema!del!conexionado.!
Una!vez!que!ya!tenemos!todo!bien!conectado!llega!la!hora!de!programar!lo!que!queremos!que!
haga! nuestra! placa.!A! la! hora! de! utilizar! sensores! se! nos! presentan! dos! casos,! uno! en! el! que!
tendremos!librerías!para!trabajar!con!ellos!y!otro!en!el!que!no.!En!el!último!caso,!recogeríamos!
el!valor!y!lo!interpretaríamos,!es!decir,!si!tuviéramos!un!sensor!de!temperatura!recogeríamos!el!
valor! digital! y! a! partir! de! las! hojas! de! características! del! sensor! transformaríamos! el! valor!
obtenido!en!temperatura.!En!este!caso,!con!el!sensor!DHT22,!podemos!encontrar!por!Internet!
“librerías”! que! nos! ahorran! este! trabajo,! es! decir,! unas! funciones! que! recogerán! el! dato! y! lo!
transformarán! a! valores! reales! de! temperatura! y! humedad.! En! este! tutorial! utilizaremos! la!
librería!que!podéis!encontrar!en![8].!Una!vez!que!hemos!descargado!la!librería!la!tendremos!que!
9!
!
!
colocar!en!la!carpeta!que!contiene!las!librerías!dentro!de!la!carpeta!de!Arduino,!normalmente!
situada! en! C:/Archivos! de! programa/Arduino/Libraries.! Con! este! sensor! y! esta! librería! las!
funciones! de! lectura! de! temperatura! y! humedad! se! llaman! “dht.readTemperature()”! y!
“dht.readHumidity()”. Para!que!nuestro!sketch!entienda!lo!que!tiene!que!hacer!cuando!
se! encuentre! con! estas! dos! funciones! tenemos! que! indicarle! con! la! siguiente! instrucción!
“#include "DHT.h"” que! tiene! que! utilizar! dicha! librería! para! encontrar! algunas! de! las!
funciones!del!programa.!El!código!a!utilizar!se!muestra!en!la!Figura!13.!!
!
Figura+12.+Conexionado+DHT22+
!
!
!
!
!
!
!
!
!
!
!
10!
!
!
!
#include "DHT.h"
#define DHTPIN 9 //Definimos el pin digital que leerá del sensor
// Descomentar el tipo de sensor que estemos usando
//#define DHTTYPE DHT11
// DHT 11
#define DHTTYPE DHT22
// DHT 22
//#define DHTTYPE DHT21
// DHT 21
// Inicializamos el sensor pasando como parámetros el pin y el
tipo de sensor.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600); // Abrimos el puerto serie
dht.begin();
}
void loop(){
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" Humedad: ");
Serial.println(humedad);
delay(2000); //Esperamos 2 segundos antes de volver a medir
}
!
Figura+13.+Código+para+la+lectura+del+sensor+DHT22+
!
Conectando!un!sensor!Analógico!–!LDR!
En!este!punto!nos!dispondremos!a!conectar!un!sensor!analógico.!En!este!ejercicio!utilizaremos!
un!sensor!de!luminosidad!muy!sencillo,!un!LDR!Figura!14![9].!Sin!embargo,!cualquier!otro!sensor!
analógico! tendrá! un! funcionamiento! similar! (o! incluso! más! sencillo)! y! en! Internet! se! pueden!
encontrar!múltiples!ejemplos.!Para!que!este!ejemplo!sea!un!poco!más!entretenido!que!detectar!
luz!o!no!luz!conectaremos!tres!LEDs!que!se!irán!iluminando!dependiendo!de!la!cantidad!de!luz!
que!le!llegue!al!LDR.!
!
!
!
!
Figura+14.+LDR+
Un!LDR!es!una!resistencia!que!cambia!de!valor!dependiendo!de!la!cantidad!de!la!cantidad!de!luz!
que! incida! sobre! él,! cuanta! más! luz! incida! menor! será! la! resistencia! (dejando! pasar! mayor!
cantidad!de!corriente).!Para!conectar!el!LDR!con!nuestra!placa!crearemos!un!divisor!de!tensión!
11!
!
!
y!analizaremos!en!la!placa!el!voltaje!que!le!llega,!y!dependiendo!de!la!cantidad!de!tensión!que!
llegue!encenderemos!más!o!menos!LEDs.!
Antes!de!realizar!el!conexionado!es!interesante!que!conozcamos!lo!que!es!un!divisor!de!tensión,!
ya!que!nos!permitirá!saber!cómo!funcionará!nuestro!LDR![10].!
Un!divisor!de!tensión,!cuyo!esquema!puede!verse!en!la!Figura!15,!
se! utiliza! cuando! queremos! regular! el! voltaje! que! le! tienen! que!
llegar!a!un!punto!en!un!circuito.!Como!puede!verse,!está!formado!
por!dos!resistencias!en!serie!entre!una!fuente!y!tierra,!y!el!punto!
que!se!quiere!controlar!es!el!punto!entre!las!dos!resistencias!en!
serie.!Podremos!obtener!el!valor!requerido!en!el!punto!medio!a!
partir! de! la! utilización! de! diferentes! valores! de! resistencias.! En!
nuestro!caso!particular,!una!de!esas!dos!resistencias!será!el!LDR,!y!
nuestros! resultados! variarán! dependiendo! de! dónde! lo!
Figura+15.+Esquema+de+un+divisor+
coloquemos!y!del!valor!que!le!pongamos!a!la!otra!resistencia.!!
de+tensión+
Anteriormente!hemos!dicho!que!cuando!incide!más!luz!tendremos!
más!corriente,!pero!ahora!nos!centramos!en!el!valor!de!voltaje!que!recogerá!nuestra!placa.!!
•! A!mayor!luz,!mayor!voltaje!
Si!conectamos!nuestro!LDR!justo!después!de!la!fuente!(como!se!muestra!en!la!Figura!16)!
cuando! incida! mucha! luz! la! resistencia! será! menor! y! la! caída! de! tensión! sobre! Vout! será!
mayor.!Además,!si!la!otra!resistencia!tiene!un!valor!alto,!ya!que!está!conectada!con!la!tierra,!
mayor!será!el!valor!de!tensión!en!Vout.!
Si! pensamos! en! términos! de! intensidad,! si! al! LDR! le! incide! mucha! luz! y! su! resistencia! es!
menor!dejará!pasar!una!corriente!mayor,!por!lo!que!la!corriente!que!llega!a!la!placa!será!
mayor.!Además,!si!la!otra!resistencia!la!escogemos!con!un!valor!alto,!no!dejará!pasar!mucha!
corriente!hacia!tierra!y!pasará!más!a!la!placa.!!
!
!
!
!
!
!
!
!
Figura+16.+Esquema+mayor+luz+d+mayor+
voltaje+
!
•! A!mayor!luz,!menor!voltaje!
Este!caso!es!contrario!al!anterior,!si!utilizamos!una!resistencia!alta!junto!a!la!fuente,!la!caída!
de!tensión!en!Vout!será!menor!(Figura!17).!Además,!cuando!incide!mucha!luz!la!resistencia!
12!
!
!
del!LDR!será!menor,!y!por!lo!tanto!la!tensión!que!le!llega!a!la!placa!a!través!de!Vout!también!
será!menor.!
En!términos!de!intensidad!podemos!ver!que!si!la!resistencia!junto!a!la!fuente!es!mayor!!la!
intensidad!encuentra!mayor!dificultad!para!atravesarla!por!lo!que!en!Vout!encontraremos!
menor! intensidad.! Además,! si! incide! mayor! luz! sobre! el! LDR! y! la! resistencia! es! menor,! la!
intensidad!podrá!pasar!a!través!de!ella!hacia!tierra!y!llegará!menos!a!nuestra!placa.!!
!
Figura+17.+Esquema+mayor+luz+d+menor+voltaje+
Para! nuestro! conexionado! vamos! a! utilizar! la! primera! configuración! y! utilizaremos! una!
resistencia!de!10K!Ω!(o!un!valor!aproximado!de!resistencias!en!serie)!entre!el!LDR!y!tierra.!Para!
conectar!los!LEDs!lo!haremos!como!en!ocasiones!anteriores,!conectaremos!las!patitas!cortas!de!
los!LEDs!(cátodo)!a!resistencias!de!330!Ω!que!conectaremos!a!tierra,!y!las!patitas!largas!de!los!
LEDs!a!entradas!digitales!de!nuestra!placa.!En!la!Figura!19!se!muestra!el!esquema!de!nuestro!
conexionado.!Si!no!habéis!trabajado!anteriormente!con!una!protoboard!(placa!de!prototipado),!
en!la!Figura!18!se!muestra!cómo!funciona,!pudiendo!ver!que!todos!los!puntos!!de!cada!línea!de!
las! dos! superiores! e! inferiores! tienen! el! mismo! voltaje! que! se! le! ponga! en! cualquiera! de! los!
puntos!y!se!suelen!utilizar!para!alimentación!y!tierra.!Las!líneas!de!colores!verticales!indican!que!
todos! los! puntos! de! cada! línea! estarán! al! mismo! voltaje! que! se! las! imponga.! Si! queréis!
profundizar!más!podéis!encontrar!información!más!detallada!en!Internet,!como!en![11]!o![12].!
En! la! Figura! 20! se! presenta! el! código! que! utilizaremos! para! nuestro! ejemplo,! el! código! está!
comentado!para!una!mejor!compresión!del!mismo.!
!
!
Figura+18.+Esquema+de+una+protoboard+
!
13!
!
!
!
!
Figura+19.+Cableado+del+ejemplo+
Para! recoger! el! valor! del! sensor! utilizaremos! el! comando! para! leer! entradas! analógicas!
“analogRead(pinAnalógico)”.! Como! explicamos! anteriormente,! lo! que! recibimos! es! un!
valor!entre!0!y!1023,!y!ese!valor!identificará!la!cantidad!de!luz!recibida!por!el!LDR.!A!partir!de!
nuestro!conexionado!sabemos!que!si!el!valor!recibido!es!mayor!es!porque!tenemos!más!luz,!por!
lo!tanto,!cuanto!mayor!sea!el!valor!entre!0!y!1023!será!porque!mayor!luz!está!incidiendo!sobre!
el!LDR.!Destacar!en!este!punto!que!es!recomendable!que!calibremos!nuestro!sensor,!esto!es,!
dependiendo!de!la!habitación!en!la!que!vayamos!a!colocar!nuestro!sensor,!el!valor!mínimo!de!
luz!será!uno!y!el!valor!máximo!de!luz!será!otro,!si!queréis!calibrarlo!podréis!encontrar!el!código!
en![4].!
!
14!
!
!
#define LED1 2 //pin
#define LED2 3 //pin
#define LED3 4 //pin
#define LDR 0 // Pin
int valorLDR = 0; //
para conectar el LED1
para conectar el LED2
para conectar el LED3
para recoger el valor del LDR
Variable para almacenar el valor del LDR
void setup()
{
pinMode(LED1, OUTPUT); //configuramos el pin LED1 como salida
pinMode(LED2, OUTPUT); //configuramos el pin LED2 como salida
pinMode(LED3, OUTPUT); //configuramos el pin LED3 como salida
Serial.begin(9600); //Configuramos el puerto serie
}
void loop(){
digitalWrite(LED1, LOW); //Apagamos LED1
digitalWrite(LED2, LOW); //Apagamos LED2
digitalWrite(LED3, LOW); //Apagamos LED3
valorLDR= analogRead(LDR); //Recogemos el valor del LDR en la
variable valorLDR
Serial.println(valorLDR); //pintamos el valor recogido en el
monitor serie
// A continuación encenderemos cada
se reciba
if(valorLDR > 256){
digitalWrite(LED1, HIGH); //Si el
256 encendemos el LED1
}
if(valorLDR > 512){
digitalWrite(LED2, HIGH); //Si el
512 encendemos el LED2
}
if(valorLDR > 768){
digitalWrite(LED3, HIGH); //Si el
768 encendemos el LED3
}
LED dependiendo del valor que
valor recibido es mayor que
valor recibido es mayor que
valor recibido es mayor que
delay(200); //esperamos 200 milisegundos antes de volver a recoger
el valor del LDR
}
Figura+20.+Código+para+la+lectura+del+LDR+y+encendido+de+LEDs+dependiendo+de+la+luz+recibida+
!
Siguientes!pasos…!
A! lo! largo! del! primer! tutorial! aprendimos! los! primeros! pasos! para! manejar! nuestro! Arduino.!
Durante!este!segundo!tutorial!hemos!ido!un!poco!más!allá!y!hemos!comenzado!a!interactuar!
con!nuestro!entorno!gracias!a!los!sensores!que!hemos!instalado!a!través!de!los!pines!analógicos!
y! digitales! de! nuestra! placa! y! que! medían! una! serie! de! parámetros! físicos! del! exterior.!
Accedíamos!a!estos!valores!de!forma!local!en!nuestro!ordenador!a!través!del!puerto!serie.!!
15!
!
!
El!siguiente!paso!natural!será!el!de!abrir!más!nuestro!horizonte!y!conectar!nuestras!placas!a!
Internet!ya!que!acceder!a!nuestros!sensores!sólo!a!través!de!una!comunicación!por!puerto!serie!
es!muy!limitado.!!
Durante!el!siguiente!tutorial!aprenderemos!a!conectar!nuestra!placa!(nuestros!dispositivos)!a!
Internet!y!a!gestionar!la!información!que!éstos!produzcan,!introduciéndonos!de!lleno!en!lo!que!
realmente!está!detrás!del!concepto!de!Internet!de!las!Cosas.!De!esta!forma,!podremos!consultar!
nuestra!información!sin!la!necesidad!de!estar!frente!a!nuestro!ordenador!así!como!compartir!la!
información!con!quien!nosotros!deseemos,!etc.!!
Este! paso! lo! realizaremos! utilizando! la! plataforma! ofrecida! por! el! proyecto! SocIoTal!
(www.sociotal.eu).! Ésta! nos! ofrecerá! (tanto! a! usuarios! comunes! como! a! desarrolladores)! las!
herramientas!necesarias!para!gestionar!tanto!nuestros!dispositivos!IoT!como!la!información!que!
estos!generan.!El!objetivo!es!que!estos!procesos!se!puedan!llevar!a!cabo!de!una!forma!amigable!
y! sobre! todo,! segura.! Además,! la! plataforma! nos! ofrecerá! herramientas! para! poder! crear!
servicios!relacionados!con!el!IoT.!!
De!este!modo,!durante!el!siguiente!taller!aprenderemos!a:!
•! utilizar!el!entorno!de!usuario!ofrecido!por!SocIoTal,!gracias!al!cual!podremos!de!forma!
sencilla!y!segura!registrar!nuestros!dispositivos,!
•! gestionar!la!información!que!generan!(por!ejemplo!creando!alertas!cuando!el!valor!de!
un!sensor!supere!cierto!valor),!
•! compartir! la! información! con! los! usuarios! que! nosotros! queramos! sin! que! el! resto!
puedan!acceder!a!ella.!
Todo!ello,!manteniendo!un!control!total!sobre!nuestros!dispositivos.!
Referencias!
1.! !
2.! !
3.! !
4.! !
5.! !
6.! !
7.! !
8.! !
9.! !
10.!!
11.!!
12.!!
!
http://www.arduino.cc/es/pmwiki.php?n=Tutorial/DigitalPins!
http://www.luisllamas.es/2014/05/entradasOdigitalesOenOarduino/!
http://www.arduino.cc/es/pmwiki.php?n=Tutorial/AnalogInputPins!
http://www.luisllamas.es/2014/09/entradasOanalogicasOenOarduino/!
http://www.arduino.cc/es/pmwiki.php?n=Reference/Map!
http://arduino.cc/es/pmwiki.php?n=Reference/Serial!
http://www.adafruit.com/datasheets/DHT22.pdf!
https://github.com/adafruit/DHTOsensorOlibrary!
http://descargas.cetronic.es/LDR.pdf!
http://www.educachip.com/utilizarOldrOarduino/!
http://www.tutoelectro.com/tutoriales/otros/usoOdelOprotoboard/!
http://www.circuitoselectronicos.org/2007/10/elOprotoboardOtabletaOdeO
experimentacin.html!
!
Agradecimientos!
Este!tutorial!ha!sido!realizado!dentro!del!proyecto!europeo!SocIoTal!(www.sociotal.eu).!Este!
proyecto!ha!recibido!financiación!del!Séptimo!Programa!Marco!de!la!Unión!Europea!para!
investigación,!desarrollo!tecnológico!y!demostración!bajo!el!acuerdo!de!concesión!nº!609112.!
16!
!
!
!
!
!
!
!
17!
!
Descargar