! ! ! ! ! ! ! ! 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! !