Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivo:
Tras finalizar el curso, los alumnos contarán con las habilidades, recursos y conocimientos
necesarios para poder planificar, diseñar, prototipar y construir por su propia cuenta
circuitos con Arduino de una complejidad intermedia.
Materiales:
1 Sensor HL-69
1 Arduino Mega o un Arduino Uno
Características
Posee dos tipos de salidas, una analógica y una digital. La salida digital entregará un pulso
bajo cuando haya conductividad suficiente entre cada una de las puntas. El umbral de
disparo se puede establecer moviendo el potenciómetro del circuito de control. En la salida
analógica el nivel de voltaje dependerá directamente de cuanta humedad haya en el suelo.
Es decir, dependiendo de cuanta conductividad (producto del agua en el suelo) haya entre
las puntas del módulo, así variará el valor entregado por Arduino (entre 0 y 1023).
Nosotros en este ejemplo, solo hemos conectado a la salida analógica, ya que queremos
saber si el suelo está seco, húmedo o muy mojado:
Una anotación muy importante es que depende el módulo que tengamos, posiblementelos
valores cercanos a 0 es porque la planta está seca y los cercanos a 1023 es porque está muy
humedad. Les recomiendo que al cargar el programa prueben como actúa el sensor
metiéndolo en un vaso de agua.
Curso de Intermedio de Arduin
Código:
// Sensor de Humedad
// Conectamos el sensor de la siguiente forma:
// GND -> GND
// VCC -> 5V
// DAT -> A0
int Valor;
void setup() {
Serial.begin(9600);
}
voidloop(){
Serial.print("Sensor de Humedad valor:");
Valor = analogRead(0);
Serial.print(Valor);
En esta ocasión escribiré acerca del DHT11 que es un sensor de temperatura muy
económico y muy utilizado por los amantes de la electrónica y los microcontroladorescomo
Arduino.
El DHT11 es un sensor que proporciona una salida de datos digital. Entre sus ventajas
podemos mencionar el bajo coste y el despliegue de datos digitales. Esto supone una gran
ventaja frente a los sensores del tipo análogo, como el LM335 por ejemplo, en los cuales
las fluctuaciones en el voltaje alteran la lectura de datos.
Entre las desventajas pues, el DHT11 solo lee enteros, no podemos leer temperaturas con
decimales por lo que tenemos que pensarlo muy bien a la hora de utilizar este sensor para
trabajos en los que se requieran lecturas precisas de temperatura y/o humedad. En fin,
Curso de Intermedio de Arduin
vamos a lo que vamos. Para poder leer datos desde este sensor de una forma sencilla
necesitamos descargar una librería que ha sido escrita para este propósito.
Hay tutoriales que explican cómo leer este sensor sin dicha librería, sin embargo el tema es
bastante complicado para alguien que no esté acostumbrado a programar. Se necesita leer
una onda cuadrada en la cual se envían los bits con separaciones de unos cuantos
microsegundos. La verdad prefiero usar la librería DHT11.
Primero descargamos los archivos que conforman esta librería. Los podemos encontrar en:
https://docs.google.com/folderview?usp=sharing&id=0B0hsUkhqWH97dHFBeTNZd2ZyR
jQ. Ahora que hemos descargado, nos vamos a la carpeta de nuestro Arduino IDE,
buscamos una carpeta llamada “libraries” y ahí descomprimimos el archivo *.rar. Nos
debe quedar así:
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para
comunicarse con el sensor
voidsetup() {
voidloop() {
Serial.println("Humedad: ");
Serial.println(h);
Serial.println("Temperatura: ");
Serial.println(t);
Como podemos observar, no es difícil obtener lecturas de humedad y temperatura con este
sensor. Ahora solo necesitamos conectarlo a Arduino e iniciar la lectura de datos.
Curso de Intermedio de Arduin
El GND y el VCC del sensor se conectan en sus correspondientes pines en Arduino (GND y
+5V, respectivamente). El pin “data” se conecta al pin 2, que ya declaramos en el código.
Entre los múltiples módulos que se puede encontrar en el mercado para Arduino está el YL-
83, un módulo de detección de lluvia.
Este módulo consiste en una serie de pistas conductoras impresas sobre una placa de
baquelita. La separación entre las pistas es muy pequeña. Lo que este módulo hace es crear
Curso de Intermedio de Arduin
un corto circuito cada vez que las pistas se mojan. El agua hace que se cree un camino de
baja resistencia entre las pistas con polaridad positiva y las pistas conectadas al GND. La
corriente que fluye a través de estas pistas se ve limitada por resistencias de 10K en cada
conductor, lo que impide que el corto circuito que se genera cuando se moja la placa vaya a
estropear el micro controlador.
Este módulo consta de dos partes, la placa que se muestra en la imagen de arriba y un
pequeño circuito de control.
Para utilizar el módulo basta con conectar el circuito de control a los pines que se indican
en la imagen de arriba (la salida analógica a A0 y la salida digital al pin 10). El código a
utilizar es muy sencillo.
void setup() {
Serial.begin(9600);
pinMode(10, INPUT);
Voidloop() {
delay(100);
Cuando caigan gotas de agua sobre las pistas de la placa YL-83 se mostrarán resultados en
el Monitor Serial de Arduino.
Curso de Intermedio de Arduin
Todos los seres vivos desprenden calor y lo mismo ocurre con los automóviles y cualquier
otra maquinaria, y ese calor se emite en forma de radiación infrarroja que podemos detectar
con los dispositivos adecuados, como los sensores PIR.
En esta sesión nos vamos a centrar en los sensores PIR, que son elementos que detectan
cambios en la radiación infrarroja que reciben y que disparan una alarma al percibirlo.
Materiales:
1 Una Protoboard
1 Arduino Mega o un Arduino Uno
1 Led
1 PIR HC-SR501
1 Resistencia de 330 Ω
Sensor PIR
Pero naturalmente siempre es más cómodo de manejar con un pequeño circuito de
estabilización y control, que nos permita usarlo como un sensor digital directo.
Lo normal además es que estos sensores se recubran con pequeñas lentes de plástico
que mejoren su ángulo de detección
La imagen que se anexa, nos muestra el sensor HC-SR501 con la lente puesta y
quitada para que veamos el sensor montado (Podemos sacarla nosotros mismos, va
a presión)
Antes de buscar nuestro Arduino, debemos saber que estos sensores PIR pueden disparar
directamente una alarma con una señal de 3.3V y son capaces de excitar pequeños relés, de
modo que no necesitamos micro controladores, si lo único que queremos es encender una
luz o dispara una alarma.
Por eso vamos a hacer, en primer lugar, un pequeño circuito de prueba como este, de modo
que nos sirva para probar el sensor, y veamos que se puede usar directamente.
Vamos a montar un circuito sencillo de detección de movimiento que encienda una LED
cuando perciba algo:
Debemos fijarnos que hay 3 pines en el lateral, que usaremos para pinchar el sensor PIR
HC-SR501 a nuestra protoboard, y aquí debajo pongo el esquema de conexiones:
Curso de Intermedio de Arduin
Diagrama de pines
Como podemos ver enseguida, hay un par de potenciómetros que podemos usar para
ajustarlo además de un jumper para elegir modo. Vamos con ello.
Diagrama:
Código:
Curso de Intermedio de Arduin
Características
Alimentación: 5Vdc
Materiales:
1 Una Protoboard
1 Arduino Mega o un Arduino Uno
1 Sensor MQ-3
Curso de Intermedio de Arduin
Diagrama:
Int lectura=0;
void setup()
{
Serial.begin(9600);
}
void loop(){
lectura=analogRead(A0);
Serial.println(lectura);
Curso de Intermedio de Arduin
delay(100);
}
Curso de Intermedio de Arduin
Materiales:
Arduino Mega o Arduino Uno
Un Potenciómetro
Un display LCD, de 16×2 o 16×4.
Una protoboard
Diagrama:
Curso de Intermedio de Arduin
LCD viene del inglés LiquidCrystalDisplay, o sea Pantalla de cristal liquido. Son faciles de
encontrar en diversos formatos: 16×2 (16 caracteres x 2 líneas) o LCD 16×4 (16 caracteres
x4 líneas).
Son una opción muy sencilla de usar, y además, dan un toque muy pro a nuestros proyectos,
y por eso, en los últimos años los displays LCD han ganado mucha aceptación en productos
comerciales de todo tipo.
Básicamente porque:
Son baratos.
Curso de Intermedio de Arduin
Aunque, últimamente, estos displays suelen venir con los pines soldados, todavía hay
muchos sitios que cuando compras uno de estos, te lo envían en kit, con los pines aparte
para que los sueldes.
Lo primero que tienes que saber, es que tienes que soldarlos, y que no vale sujetar los pines
de algún modo más o menos extravagante. Las sueldas y punto. Hazte a la idea. Cualquier
otra solución acabara funcionando mal, o directamente con el display quemado.
Cuando lo tengas listo, pincha el display en la protoboard, dejando sitio para el resto de
componentes y cables, recuerda que habrá muchos, así que se generoso con el espacio que
dejas.
La conexión no es complicada, pero requiere ser cuidadoso. Así que vamos a ir paso a paso
con los diferentes cables. Empieza conectando tensión y GND a la protoboard.
Curso de Intermedio de Arduin
Vamos ahora a a conectar la alimentación el panel LCD. Conecta el pin16 del LCD a Ground y
el 15 a 5V:
Si conectas ahora el cable USB a tu Arduino, el LCD debería iluminarse, si no, revisa tus
cables antes de seguir.
Vamos a conectar ahora, el potenciómetro de ajuste. Para ello conecta uno de los extremos
del potenciómetro a GND y el otro a 5V. El centro al pin 3 del LCD.
Aprovechemos también para dar tensión al panel LCD, El pin 1 va a GND y el 2 a tensión:
Curso de Intermedio de Arduin
Si todo ha ido bien, ya podemos encender el dispay y probarlo. Conecta el USB a tu Arduino y
veamos. Si vas girando el potenciómetro, en algún momento tienes que ver unos cuadraditos
en la pantalla, en caso contrario revisa las conexiones. No sigas, si no ves esto.
Vamos a conectar ya los pines de datos y control. Sin entrar en muchos detallas, no vamos a
usar todos los pines disponibles, porque no los necesitamos. Solo usaremos dos pines de
control, RS y EN y los 4 pines de datos D7, D6, D5, y D4 . No necesitamos más por ahora.
Vamos a usar una librería de control del panel LCD, que viene incluida en nuestro Arduino.
#include<LiquidCrystal.h>
Después, hay que inicializar la librería. Creamos una instancia llamada lcd, de la clase
LiquidCrystal y le pasamos como parámetros los pines que hemos usado:
LiquidCrystallcd(7, 8, 9, 10, 11, 12); // ( RS, EN, d4, d5, d6, d7)
Debemos tener cuidado porque los pines que hemos usado, no corresponden a los ejemplos
de Arduino, así que podremos cargarlos, pero asegurarse de cambiar la línea de definición
de los pines, o no correrán.
Curso de Intermedio de Arduin
El resto es sencillo
void setup()
{
lcd.begin(16, 2); // Fijar el numero de caracteres y de filas
lcd.print("Prometec.net"); // Enviar el mensaje
}
void loop()
{
lcd.setCursor(0, 8); // set the cursor to column 0, line 1
lcd.print(millis() / 1000); // print the number of seconds since reset:
}
Estos display son muy pesados de cablear, pero muy sencillos de utilizar.
Vamos a probar sacando un reloj (muy sencillo de momento). Si recordamos las funciones
que usamos en las últimas sesiones, podemos recuperar alguna para presentar el valor de
millis() como un reloj
#include <LiquidCrystal.h>
LiquidCrystallcd(7, 8, 9, 10, 11, 12);
void setup()
{
lcd.begin(16, 2); // Fijamos el numero de caracteres y filas
lcd.print("ITRoque"); // Aqi va el mensaje
}
void loop()
{
lcd.setCursor(6, 1); // Ponte en la line 1, posicion 6
String s = reloj() ;
lcd.print(s) ;
}
Curso de Intermedio de Arduin
String reloj()
{
int n = millis() / 1000 ; // Lo pasamos a segundos
int segundos = n % 60 ;
int minutos = n / 60 ;
String reloj()
Eso significa que vamos a devolver un parámetro tipo String a quien nos haya llamado. En
algún punto de la función habrá que hacer un return(String).
En esta línea no hay que confundir (aunque se escriben exactamente igual), el tipo String
para definir S, con la función String(n) que convierte un numero n en un string de texto
para que pueda mezclar el número de los minutos y los segundos separados por un símbolo
de “:”.
Quita los espacios y miro lo que pasa en el cambio de minuto. ¿Cómo lo arreglarías, sin el
truco de poner esos espacios al final? Piensalo.
lcd.print(s) ;
Curso de Intermedio de Arduin
Para sacar el mensaje de texto. Todo lo que ya sabemos de Serial.print() se usa exactamente
igual con esta instrucción. Y por último, tenemos una línea como esta:
Que lo que hace es posicionar el cursor del panel, en la posición 6 de la segunda línea, para
escribir la hora centrada.
La librería LCD, viene con varios ejemplos muy interesantes, que nos conviene probar.
Recuerda, simplemente, que tenemos que cambiar las definiciones de los pines para que
corra.
Sin llegar a tanta sofisticación, es muy interesante que veamos cómo definir algunos
caracteres especiales, porque en la tabla base del LCD, no están incluidas ñ, acentos,
grados, o €. Así que dependiendo del uso que le deis pude seros de interés saber cómo
definir tus propios símbolos.
Vamos a definir un carácter propio, para digamos, el símbolo de grados centígrados, por
ejemplo.
Lo primero que tenemos que saber, es que los caracteres se definen con un array( si, de
nuevo) de 8×8, como si los dibujarais en una cuadricula de ese tamaño, y rellenando el
cuadradito completo.
byte grado[8] =
{
0b00001100, // Los definimos como binarios 0bxxxxxxx
0b00010010,
0b00010010,
0b00001100,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};
lcd.createChar(0, euro);
lcd.createChar(1, grado);
Y ahora ya están disponibles. Debemos tener en cuenta que solo podemos definir 8
caracteres especiales en un momento dado (Aunque podemos definir 30 arrays, de caracteres
y crearlos y meterlos sobre la marcha).
#include<LiquidCrystal.h>
LiquidCrystallcd(7, 8, 9, 10, 11, 12);
byte grado[8] =
{
0b00001100,
0b00010010,
Curso de Intermedio de Arduin
0b00010010,
0b00001100,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};
void setup()
{
lcd.begin(16, 2); // Hay que inicializar el LCD
lcd.createChar(1, grado);
lcd.setCursor(0, 0);
lcd.print("Estamos a 25");
lcd.write(1);
}
voidloop()
{
}
Se utiliza la interfaz I2C para comunicación. Las conexiones de este sensor son muy sencillas:
Para el uso de este sensor existe una librería llamada BMP180, la cual podemos descargar aquí.
Curso de Intermedio de Arduin
Vamos a probar nuestro sensor. Primero hacemos las conexiones siguiendo la tabla de la parte
superior.
El sensor BMP180 es capaz de leer presión barométrica (absoluta) y temperatura. Por medio de
cálculos matemáticos es capaz de detectar diferencias de alturas. ¿Cómo? Pues como ya
mencionamos la Presión Atmosférica o Barométrica es inversamente proporcional a la altura sobre
el nivel del mar, es decir, a medida que nos elevamos decrece la presión. Por eso es que cuando
viajamos por carreteras que atraviesan colinas o montañas sentimos que nuestros oídos se tapan al
descender. Esto se debe a que la presión atmosférica aumenta y sentimos el efecto del aumento en
la presión. En el código que presentaré se hará una lectura inicial de la presión barométrica,
expresada en milibares. A medida que nos desplacemos hacia un punto más alto o más bajo el
sensor medirá la diferencia en la presión y la expresará como una variación en la altitud a la cual se
encuentra el sensor con respecto a la medición inicial que será considerada como 0.
Curso de Intermedio de Arduin
Código
// Se importan las librerías
#include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 pressure;
//Se declaran las variables. Es necesario tomar en cuenta una presión inicial
double PresionBase;
double Presion = 0;
double Altura = 0;
double Temperatura = 0;
char status;
void setup() {
Serial.begin(9600);
SensorStart();
void loop() {
ReadSensor();
Serial.print("Temperatura: ");
Serial.print(Temperatura);
Serial.print("Presion: ");
Serial.print(Presion);
Serial.println(" milibares");
Serial.print(Altura);
Serial.println(" metros");
delay(2000);
void SensorStart() {
if (pressure.begin())
else
while (1);
status = pressure.startTemperature();
if (status != 0) {
delay(status);
status = pressure.getTemperature(Temperatura);
if (status != 0) {
status = pressure.startPressure(3);
if (status != 0) {
delay(status);
void ReadSensor() {
//En este método se hacen las lecturas de presión y temperatura y se calcula la altura
status = pressure.startTemperature();
if (status != 0)
delay(status);
status = pressure.getTemperature(Temperatura);
if (status != 0)
status = pressure.startPressure(3);
if (status != 0)
Curso de Intermedio de Arduin
delay(status);
if (status != 0)
Este adaptador funciona directamente con las bibliotecas incluidas en el Arduino para tarjetas SD .
Incluye un regulador de tensión y cambio a nivel local, por lo que puede operar a partir de 3 - 5
voltios de forma segura.
Dependiendo del módulo y el modelo de Arduino que vayamos a usar tendremos que realizar unas
conexiones u otras:
· Para el módulo ethernet solo es necesario encajarlo correctamente sobre la placa Arduino y
conectar el potenciómetro al Pin analógico 0.
· En el caso del módulo MICRO SD CARD Adapter es necesario hacer las siguientes conexiones:
- MOSI –> Pin 11 (La mayoría de las placas Arduino), para Arduino Mega: 51
– MISO –> Pin 12 (La mayoría de las placas Arduino), para Arduino Mega: 50
– CLK —-> Pin 13 (La mayoría de las placas Arduino), para Arduino Mega: 52
– CS ——> Pin 4
– 5V ——> 5V
– GND –> GND
– Potenciómetro conectado al Pin analógico 0
#include <SD.h>
void setup(){
Serial.begin(9600);
// El pin CS por defecto de la placa arduino debe ser configurado como salida
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)){
return;
void loop(){
Curso de Intermedio de Arduin
int pot=0;
pot=analogRead(0);
// Abrimos el fichero donde vamos a guardar los datos (Si no existe se crea automaticamente).
if (dataFile) {
dataFile.print("POT: ");
dataFile.println(pot);
dataFile.println("-----5s-----");
// Cerramos el archivo.
dataFile.close();
Serial.println("impresion correcta");
}else{
delay(5000);