0% encontró este documento útil (0 votos)
339 vistas36 páginas

Prácticas de Sensores Con Arduino H.M

- Los sensores de inclinación permiten detectar la orientación o inclinación de un objeto al cerrar o abrir un circuito eléctrico internamente según su posición. - Los sensores de temperatura como el LM35 y TMP36 devuelven una tensión proporcional a la temperatura que puede ser leída por Arduino para calcular el valor en grados centígrados. - El documento explica cómo conectar y programar Arduino para leer los valores de los sensores de inclinación y temperatura y encender un LED cuando se supera un umbral
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
339 vistas36 páginas

Prácticas de Sensores Con Arduino H.M

- Los sensores de inclinación permiten detectar la orientación o inclinación de un objeto al cerrar o abrir un circuito eléctrico internamente según su posición. - Los sensores de temperatura como el LM35 y TMP36 devuelven una tensión proporcional a la temperatura que puede ser leída por Arduino para calcular el valor en grados centígrados. - El documento explica cómo conectar y programar Arduino para leer los valores de los sensores de inclinación y temperatura y encender un LED cuando se supera un umbral
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 36

Prácticas de

sensores con
arduino

Prof. Héctor Mojica


2

1. SENSOR DE INCLINACIÓN
Los sensores de inclinación (interruptor de bola de inclinación) le permiten
detectar orientación o inclinación. Son pequeños, económicos, de bajo
consumo y fáciles de usar. Si se usan correctamente, no se desgastarán. Su
simplicidad los hace populares para los juguetes, los adminículos y los
aparatos. A veces, se conocen como "interruptores de mercurio", "interruptores
de inclinación" o "sensores de bola rodante" por razones obvias. Se componen
generalmente de una cavidad de una cierta clase (cilíndrica es popular, aunque
no siempre) con una masa libre conductora adentro, tal como una gota del
mercurio o bola rodante. Un extremo de la cavidad tiene dos elementos
conductores (polos). Cuando el sensor está orientado de tal manera que dicho
extremo está hacia abajo, la masa rueda sobre los polos y los cortocircuitos,
actuando como un interruptor de tiro. Aunque no es tan preciso ni flexible como
un acelerómetro completo, los interruptores de inclinación pueden detectar
movimiento u orientación. Otro beneficio es que los grandes pueden cambiar
de energía por su cuenta. Los acelerómetros, por otro lado, producen voltaje
digital o analógico que luego deben analizarse utilizando circuitos extra.

Son sensores de unos pocos milímetros de longitud, que llevan


en su interior una o dos pequeñas bolas conductoras, capaces
de cerrar el circuito con los pines metálicos inferiores del cilindro.

Cuando hacen contacto permiten el paso de la corriente y cierran


el contacto exactamente igual que si fueran un interruptor (Y de

Héctor Mojica 2017


3

hecho se manejan igual) pero que a partir de un cierto Angulo de inclinación


dejan de hacer contacto y abren el contacto.

No es una tecnología reciente, pues llevan en uso mucho tiempo, pero antes se
hacían con una gotita de mercurio líquido, que es conductor y que al desplazarse
por el interior del cilindro acababa por cerrar el circuito entre un par de contactos
en el fondo.

Pero dado que el mercurio es sumamente toxico para el entorno y para las
personas que lo manejan, hace ya bastante tiempo que se han reemplazado por
el modelo que vamos a usar, aunque aún es fácil encontrarnos con que se siguen
llamando interruptores de mercurio.

ESQUEMA DE CONEXIÓN

Vamos a usar el mismo esquema de conexión que con un interruptor normal. Por
ello necesitamos usar una resistencia de pullup, y según el valor que leamos
encendemos o apagamos un LED conectado al pin 13.

• Por una vez, y sin que sirva de precedente conectaremos el LED al pin 13
sin resistencia, porque este pin ya lleva una en serie. Para cualquier otro pin
deberíamos poner una resistencia de limitación o veremos un bonito plof con el
LED.

• Vamos a usar lógica negativa. Esto es una manera complicada de decir


que puesto que en condiciones normales, el interruptor está cerrado, la señal de
disparo será cuando leamos un LOW en el pin 2.

El diagrama de conexión será:

Héctor Mojica 2017


4

PROGRAMA DE CONTROL

int inPin = 2;
int outPin = 13;
int lectura;
int previo = LOW;
long time = 0; // Para guardar la hora de la inversion de valor
long debounce = 50; // Tiempo de rebote
void setup()
{
pinMode(inPin, INPUT_PULLUP);
pinMode(outPin, OUTPUT);
}
void loop()
{
lectura = digitalRead(inPin);
if (lectura = previo) // Si hay cambio en la lectura
time = millis();
if ((millis() - time) > debounce)
digitalWrite(outPin, lectura);
previo = lectura ;
}

Héctor Mojica 2017


5

2. ARDUINO Y LOS SENSORES DE TEMPERATURA


QUE ES UN SENSOR DE TEMPERATURA
Un sensor de temperatura es simplemente un chip que nos devuelve un valor de
tensión proporcional a la temperatura a la que está sometido. En esta sesión
vamos a utilizar unos modelos comerciales muy extendidos y fáciles de encontrar
por muy poco dinero: TMP36 o LM35DZ.
Vamos a ver como los usamos. Lo primero, tenéis que buscar la hoja de
especificaciones del fabricante. (Busca TMP36 o LM35DZ data sheet)Aunque al
principio no es fácil acostumbrarse a leer este tipo de documentación (y que
encima vienen en inglés), en último término es a donde hay que ir cuando queráis
saber exactamente las características de su funcionamiento.
¿QUE ES UN SENSOR LM35?
El LM35 es un sensor de temperatura digital. A diferencia de otros dispositivos
como los termistores en los que la medición de temperatura se obtiene de la
medición de su resistencia eléctrica, el LM35 es un integrado con su propio
circuito de control, que proporciona una salida de voltaje proporcional a la
temperatura.
La salida del LM35 es lineal con la temperatura, incrementando el valor a razón
de 10mV por cada grado centígrado. El rango de medición es de -55ºC (-550mV)
a 150ºC (1500 mV). Su precisión a temperatura ambiente es de 0,5ºC.

Los sensores LM35 son relativamente habituales en el mundo de los aficionados


a la electrónica por su bajo precio, y su sencillez de uso.
Pero el resumen podría ser más o menos así:
 Mide la temperatura en grados centígrados.
 Funciona entre -50º C y 125ºC para el TMP36.
 Funciona entre 0º C y 100ºC para el LM35DZ.
 No es especialmente preciso, ya que tiene ± 1ºC de incertidumbre, pero
normalmente nos sobra para proyectos sencillos y es muy barato.
 EL encapsulado es similar al de un transistor y también tiene tres patas,
así que mucho cuidado con confundirlos. Intentad leer las letras que lleva
serigrafiadas

Héctor Mojica 2017


6

El pin central es el de señal, pero para saber cuál es GND y 5V, el encapsulado
tiene una cara plana y otra curva. Poniendo la cara plana mirando hacia vosotros
con las patas hacia abajo, el pin de la izquierda es alimentación 5V y
naturalmente el otro es GND.
• SI conectáis la tensión al revés, Tendréis tiempo de reaccionar y
cambiarla, pero mucho cuidado porque se calentará más que suficiente para
haceros una quemadura dolorosa.
• Si veis que está caliente no tratéis de sacarlo con los dedos, simplemente
desconectad el Arduino y dadle un rato para que se enfríe.
ESQUEMA ELECTRÓNICO DEL CIRCUITO
Vamos a montar un pequeño circuito que lea la temperatura de un sensor,
imprima el valor en el monitor serial y encienda un diodo cuando esta sobrepase
un cierto umbral. Aquí tenemos el esquema electrónico:

Héctor Mojica 2017


7

CALCULANDO LA TEMPERATURA.
El fabricante del LM35DZ nos dice que la salida de tensión será de 10 mV (mili
voltios) por cada grado de temperatura y además sabemos que
nuestro Arduino mide en las puertas analógicas una máximo de 1.024 para 5V
(y 0 para 0V), por tanto, para una lectura dada, el valor en voltios de la medida
será:

Y como cada voltio equivale a 100ºC (1V / 10mv = 100), la temperatura en grados
Celsius es resultado de multiplicar esto por 100. El LM35DZ empieza en 0º
Resumiendo. Para calcular la temperatura en ºC a partir de la lectura de Arduino:
Puedes encontrar cantidad de sensores similares a estos con diferentes rangos
de medida, , pero puedes usar este mismo método para calibrar la medida.
Así pues, ya tenemos claro como calcular la temperatura, pero como vemos por
ahí que tenemos divisiones, nos conviene utilizar nuestra primera variable de tipo
float, o sea que va a tener decimales.
 La tendencia natural es usar int para todo, pero normalmente en cuanto
haya una división de por medio conviene usar un float.
Cada vez que tomemos una muestra de nuestra entrada analógica vamos a
calcular la temperatura y si sobrepasa el umbral definido, damos orden de
activar la alarma, en caso contrario la apagamos.

Héctor Mojica 2017


8

Como la temperatura es algo que varía lentamente usaremos un delay para que
solo nos dé una medida por segundo.
EL PROGRAMA DE CONTROL
En primer lugar vamos a definir un par de variables:
int Sensor = 0 ;
int umbral = 25 ;
Sensor es el pin analógico (A0) al que conectamos el sensor de temperatura y
umbral el valor a partir del cual disparamos la alarma de temperatura.
 El valor de umbral habrá que ajustarlo en función de la temperatura
ambiente donde esté montando el circuito.
 En principio 25ºC son buenos para que si quieres subir la temperatura, lo
puedes hacer simplemente soplando o manteniendo entre los dedos el
sensor. Otro sistema de subir la temperatura rápido, es poner el sensor al
lado de la salida de refrigeración de un portátil.

Y pasando los cálculos de la página anterior al IDE de arduino nos quedaría algo
parecido a:
void loop ()
{
int lectura = analogRead(Sensor);
float voltaje = 5.0 /1024 * lectura ;
float temp = voltaje * 100 ;
Serial.println(temp) ;
delay(1000);
}
Importante: En la línea donde calculamos el voltaje hemos escrito 5.0 y no
5. Esto es para evitar que IDE de arduino intente hacer una división entre
enteros y nos desprecie los decimales.
Ya solo nos resta comprobar si la temperatura alcanza el umbral y encender el
LED o apagarlo.

Héctor Mojica 2017


9

Digitar el siguiente programa:


int Sensor = 0 ;
int umbral = 25 ;
void setup()
{
Serial.begin(9600);
pinMode(11,OUTPUT);
}
void loop()
{
int lectura = analogRead(Sensor);
float voltaje = 5.0 /1024 * lectura ;
float temp = voltaje * 100 ;
Serial.println(temp) ;
if (temp >= umbral)
digitalWrite(11, HIGH) ;
else digitalWrite(11,LOW);
delay(1000);
}

3. SENSOR DE TEMPERATURA Y VENTILADOR


En esta sesión haremos un pequeño ejemplo de control, usando un
sensor LM35DZ para determinar la temperatura y un ventilador de 5V, para que
cuando la primera alcance un valor crítico, usemos el segundo a fin refrigerar el
circuito.
Como no disponemos de ningún sistema a refrigerar, nos conformaremos con
enfriar el propio sensor, lo que no resulta especialmente provechoso, pero sin
duda, nos servirá para mostraros un ejemplo de control y reacción, en el mejor
espíritu de un sistema automático, tal como un regulador de temperatura con
nuestros Duinos.
Veremos que la regulación de un sistema tan sencillo no tiene grandes
problemas y por eso esta sesión esta mas pensada como un ejercicio de control
sencillo y que como una regulación en toda regla.

Héctor Mojica 2017


10

Además el parámetro que buscamos controlar, la temperatura, tiene la virtud de


variar con lentitud, lo que nos deja mucho tiempo para reaccionar y no tener que
preocuparnos por cuestión de reaccionar con precisión en tiempo real.
Vamos por tanto a montar un circuito sencillo con el sensor de temperatura y otro
independiente con un transistor para controlar el motor del ventilador en la misma
protoboard.
ESQUEMA ELECTRÓNICO DEL CIRCUITO.
Vamos a montar un pequeño circuito que lea la temperatura de un sensor,
imprima el valor en el monitor serial y encienda un diodo cuando esta sobrepase
un cierto umbral.
Para conectar el sensor de temperatura LM35DZ y el transistor 2N2222, se
incluye el detalle de sus pines aquí.

¿QUÉ ES UN VENTILADOR?
Un ventilador es una máquina hidráulica que incrementa la energía cinética de
un gas, normalmente aire. Los ventiladores son objetos comunes en nuestra vida
cotidiana y, al igual que otros muchos dispositivos, podemos controlarlos desde
un procesador como Arduino.
Un ventilador dispone de un rotor con alabes (o aspas) accionado,
habitualmente, por un motor eléctrico. Al rotar, los alabes impulsan las moléculas
de aire aumentando su energía cinética sin apenas variación de volumen, motivo
por el cual se consideran máquinas hidráulicas en lugar de turbo máquinas.
En el campo de la electrónica casera es frecuente emplear ventiladores como
los utilizados en informática para disipación de calor en ordenadores. Estos
ventiladores se encuentran disponibles en una gran variedad de tamaños, siendo
frecuentes 40x40mm, 80x80mm y 120x120mm. La tensión de alimentación
normalmente es 12V.
Industrialmente los ventiladores se emplean en todo tipo de aplicaciones, como
control de temperatura, instalaciones de climatización, homogenización de
gases, evacuación de humos, refrescamiento de maquinaria, o disipación de
calor en sistemas de refrigeración.

Héctor Mojica 2017


11

En nuestros proyectos de electrónica caseros podemos emplear ventiladores,


por ejemplo, para controlar la temperatura de un dispositivo en combinación con
un sensor de temperatura, refrigerar junto con una placa peltier o evacuación de
gases en combinación con un sensor de gases.

Héctor Mojica 2017


12

PROBANDO EL SENSOR DE TEMPERATURA


Vamos a empezar probando el sensor para comprobar que funciona
correctamente, y para ello vamos a usar este programa:
Digitar el siguiente programa:
const int Sensor = 0 ; // Pin que lee la temperatura
void setup() {
Serial.begin(115200);
}
void loop() {
int lectura = analogRead(Sensor);
float voltaje = 5.0 /1024 * lectura ;
float temp = voltaje * 100 ;
Serial.println(temp) ;
delay(200);
}

Usamos la puerta Analog 0 que definimos como una constante sensor, y en el


loop leemos la puerta y convertimos el valor de la lectura a grados centígrados
e imprimimos sin más el valor de la temperatura. Deberías ver algo parecido a
esto:

El sensor LM35DZ tiene un margen de error de alrededor de ± 0,5 grados y por


eso las lecturas tienen oscilación, dando diferencias de hasta un grado.

Héctor Mojica 2017


13

Digitar el siguiente programa:


int Sensor = 0 ; // Pin que lee la temperatura
int umbral = 30 ; // Temparatura que arranca el ventilador
const int control = 9 ; // Gobierna el ventilador

void setup()
{ Serial.begin(115200);
pinMode(control, OUTPUT) ;
}

void loop()
{ int lectura = analogRead(Sensor);
float voltaje = 5.0 /1024 * lectura ;
float temp = voltaje * 100 -5 ;
Serial.println(temp) ;

if (temp >= umbral)


digitalWrite(control, HIGH);
else
digitalWrite(control, LOW);

delay(200);
}

La única novedad es que comprobamos que la temperatura medida es inferior


al umbral prefijado y si no es así, arrancamos el ventilador para refrescar el
sensor. Ver que al alcanzar el umbral, disparamos el ventilador a tope de modo
digital. Es decir todo o nada.

Héctor Mojica 2017


14

4. DETECTOR DE OBSTÁCULOS CON SENSOR INFRARROJO Y ARDUINO

¿QUÉ ES UN DETECTOR DE OBSTÁCULOS IR?


Un detector de obstáculos infrarrojo es un dispositivo que detecta la presencia
de un objeto mediante la reflexión que produce en la luz. El uso de luz infrarroja
(IR) es simplemente para que esta no sea visible para los humanos.
Constitutivamente son sensores sencillos. Se dispone de un LED emisor de luz
infrarroja y de un fotodiodo (tipo BPV10NF o similar) que recibe la luz reflejada
por un posible obstáculo.

Los detectores de obstáculo suelen proporcionarse con una placa de medición


estándar con el comparador LM393, que permite obtener la lectura como un valor
digital cuando se supera un cierto umbral, que se regula a través de un
potenciómetro ubicado en la placa. Este tipo de sensores actúan a distancias
cortas, típicamente de 5 a 20mm. Además la cantidad de luz infrarroja recibida
depende del color, material, forma y posición del obstáculo, por lo que no
disponen de una precisión suficiente para proporcionar una estimación de la
distancia al obstáculo.

Héctor Mojica 2017


15

Pese a esta limitación son ampliamente utilizados para la detección de


obstáculos en pequeños vehículos o robots. Su bajo coste hace que sea
frecuente ubicarlos en el perímetro, de forma que detectemos obstáculos en
varias direcciones. También son útiles en otro tipo de aplicaciones como, por
ejemplo, detectar la presencia de un objeto en una determinada zona, determinar
una puerta está abierta o cerrada, o si una máquina ha alcanzado un cierto punto
en su desplazamiento.
ESQUEMA ELÉCTRICO
El montaje es sencillo. Alimentamos el módulo a través de Vcc y GND
conectándolos, respectivamente, a la salida de 5V y GND en Arduino.

Finalmente, conectamos la salida digital del sensor a una entrada digital para
leer el estado del sensor.

Héctor Mojica 2017


16

Opcionalmente, calibramos el umbral de disparo acercando un objeto al detector


de obstáculos y regulando la salida digital con el potenciómetro. Si queréis
saltaros este paso, dejar el potenciómetro en un valor medio.

Digitar el siguiente programa:

const int sensorPin = 9;

void setup() {
Serial.begin(9600); //iniciar puerto serie
pinMode(sensorPin , INPUT); //definir pin como entrada
}

void loop(){
int value = 0;
value = digitalRead(sensorPin ); //lectura digital de pin

if (value == HIGH) {
Serial.println("Detectado obstaculo");
}
delay(1000);
}

5. MEDIR NIVEL DE LUZ CON ARDUINO Y FOTORESISTENCIA LDR

¿QUÉ ES UN FOTORESISTOR LDR?


Un fotoresistor, o LDR (light-dependent resistor) es un dispositivo cuya
resistencia varia en función de la luz recibida. Podemos usar esta variación para
medir, a través de las entradas analógicas, una estimación del nivel del luz. Un
fotoresistor está formado por un semiconductor, típicamente sulfuro de cadmio
CdS. Al incidir la luz sobre él algunos de los fotones son absorbidos, provocando
que electrones pasen a la banda de conducción y, por tanto, disminuyendo la
resistencia del componente.

Héctor Mojica 2017


17

Por tanto, un fotoresistor disminuye su resistencia a medida que aumenta la luz


sobre él. Los valores típicos son de 1 Mohm en total oscuridad, a 50-100 Ohm
bajo luz brillante. Por otro lado, la variación de la resistencia es relativamente
lenta, de 20 a 100 ms en función del modelo. Esta lentitud hace que no sea
posible registrar variaciones rápidas, como las producidas en fuentes de luz
artificiales alimentadas por corriente alterna. Este comportamiento puede ser
beneficioso, ya que dota al sensor de una gran estabilidad.
Finalmente, los fotoresistores no resultan adecuados para proporcionar una
medición de la iluminancia, es decir, para servir como luxómetro Esto es debido
a su baja precisión, su fuerte dependencia con la temperatura y, especialmente,
a que su distribución espectral no resulta adecuada para la medición de
iluminancia. Por tanto, un LDR es un sensor que resulta adecuado para
proporcionar medidas cuantitativas sobre el nivel de luz, tanto en interiores como
en exteriores, y reaccionar, por ejemplo, encendiendo una luz, subiendo una
persiana, u orientando un robot.
Se les suele utilizar como sensores de luz, para arrancar luces automáticamente
cuando la oscuridad sobrepasa un cierto umbral, o como detectores de
movimiento próximo (Cuando algo se interpone).
Vamos a utilizar para esta práctica un típico LDR, que es bastante fácil de
conseguir y es sensible a los cambios de luz ambiente. Montaremos un circuito
con un LDR y el zumbador (BUZZER), que vimos en la última sesión, para
construir un theremin. Un theremin es un sintetizador rudimentario que genera
audio variable de espectro continuo, analógico, en función de una señal de
control.
El circuito utiliza un LDR como señal de control y calcularemos una frecuencia
en función de la caída de tensión que leamos en nuestra fotorresistencia.
• Recuerda que los convertidores ADC como los de Arduino no pueden leer
resistencia sino tensión.
• Los LDR no son precisamente rápidos en reaccionar a la luz, y puedan
tardar hasta algunas décimas de segundo en reaccionar. Esto no es importante
para una alarma de luz, pero hace imposible que se puedan utilizar para enviar
información mediante la luz.
DIVISORES DE TENSIÓN

Hablamos en su momento de la ley e Ohm:

V=R*I

Pero no hablamos de cómo se combinan las resistencias y ha llegado el


momento de hacerlo, para desesperación de los que odian las mates. Podemos
combinar un par de resistencias R1 y R2 de dos maneras. En serie y en paralelo:

Héctor Mojica 2017


18

EN SERIE EN PARALELO

Cuando ponemos las dos resistencias en serie, la resistencia resultante es la


suma de ambas:

Y cuando las ponemos en paralelo, podemos calcular la resistencia equivalente


así:

Imaginemos ahora un circuito como este:

Héctor Mojica 2017


19

Como las resistencias están en serie el valor total es R1 + R2. Si Vin es de 5V


la intensidad que circulará por el circuito será:

La pregunta del millón ahora es ¿Si medimos entre las dos resistencias cuanto
es Vout? Pues igual de fácil:

Si todavía queda alguien despierto, se habrá dado cuenta que si R1 y R2 son


iguales Vout será exactamente la mitad de Vin pero si R1 o R2, fuese un
potenciómetro (o un LDR) cualquier variación en el ajuste, causaría una
modificación en el valor de salida de tensión Vout. Esto es lo que se conoce como
un divisor de tensión y es un circuito de lo más práctico para rebajar una señal
de entrada, y podéis apostar a que lo usareis más de una vez. Por ejemplo, los
convertidores analógicos de Arduino aceptan un máximo de 5V, pero muchas
señales industriales son de entre 0 y 12V.Si lo conectas sin más al A0, por
ejemplo, freirás el chip de largo.

Pero con el truco del divisor de tensión y calculando adecuadamente las


resistencias (Que sí, que tú puedes con lo que hay en la página anterior) puedes
adaptarlo tranquilamente para que tu Arduino viva feliz con una señal que
originalmente le hubiera chamuscado.
Los divisores de tensión son un circuito muy sencillo y que conviene que sea
parte de vuestro arsenal electrónico. Resuelven cantidad de problemas con una
resistencia y un potenciómetro y son ideales para tratar señales, que por exceso
de tensión, quedarían fuera del alcance de tu Arduino. De hecho en esta práctica
vamos a montar un divisor de tensión con una resistencia y un LDR y leeremos
la caída de tensión en él. Nos va a servir como ejemplo de los divisores de
tensión y además nos servirá como señal de control para calcular la frecuencia
a la que haremos vibrar el buzzer

Héctor Mojica 2017


20

EL CIRCUITO PARA UN THEREMIN ÓPTICO

Fíjate que el LDR R1, junto con R2 forma un divisor de tensión. La lectura de
A0 dependerá de la luz que incida en el LDR. El esquema de protoboard es
igual de fácil:

Héctor Mojica 2017


21

El programa es muy sencillo. Leemos la caída de tensión en A0 y lo usamos para


mapear una frecuencia entre 20 y 5.000 Hz para llamar a la función tone() y eso
es todo.
Digitar el siguiente programa:
const int pinBuzzer = 13 ;
void setup()
{
pinMode (pinBuzzer , OUTPUT) ;
}
void loop()
{
int p = analogRead(A0) ;
int n = map (p, 0,1024, 20, 5000) ;
tone ( pinBuzzer, n) ;
}

 Para probar el circuito se recomienda que pongás un foco potente a 50


cm por encima del LDR y probéis a mover la mano por delante y
especialmente de arriba abajo y viceversa.
 Escucharas un tono continuo más o menos agudo, que ira variando su
frecuencia en función de la luz que incida en el LDR.
 Se acepta que el oído humano puede escuchar sonidos de 20 Hz y 20Khz,
para los que peinan canas entre 40Hz y 10Khz ya es un rango optimista.
Por eso, mapeamos los valores del potenciómetro, que van de 0 a 1024,
entre 20 y 5Khz.
Digitar el siguiente programa:
const int pinLDR = 0 ;
const int pinBuzzer = 13 ;

int tono[ ] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440,466, 494};

void setup()
{
pinMode (pinBuzzer , OUTPUT) ;
}

void loop()
{
int p = analogRead(A0) ;
int n = map (p, 500,1024, 0, 12) ; // El array solo tiene 12 notas
tone(pinBuzzer, tono[n]);
delay(300);
}

Héctor Mojica 2017


22

6. ARDUINO Y LOS SENSORES DE FUEGO


DETECTOR DE LLAMA
No resulta extraño que los sensores de llamas se encuentren entre los más
vendidos. La industria los suministra de todos los tipos, tamaños y precios,
porque la idea de que se te queme la casa o la empresa es algo que ayuda
mucho a sacar la cartera y buscar un detector que sea capaz de avisarte con
tiempo de que hay llamas cerca de tus cosas.
En realidad, es muy probable que tengas varios de estos detectores en tu casa.
Imagínate, por ejemplo, los calentadores de gas, los hornos domésticos de gas,
o un sencillo calentador de agua y calefacción. Todos ellos requieren una llama
quemando gas. Si por cualquier motivo, la llama se extingue y no lo detectases,
el gas seguiría fluyendo y causando un embalsamiento, listo para causar un
disgusto explosivo.
Por eso, todos estos electrodomésticos, y sus equivalentes industriales,
incorporan por ley, un detector de llama, que pueda cortar el gas en cuanto
detecte falta de llama. Lo sensores más sencillos (y baratos), suelen ser del tipo
de detectores de ultravioletas, o sensores de infrarrojos.
 El mercado ofrece, también, un amplio espectro de sensores del tipo de
detectores de humo y de gases nocivos como monóxido de Carbono (CO)
típico de la combustión, Dióxido de Carbono (CO2), detectores de humo,
o de gases peligrosos libres, como hidrocarburos (Propano, Butano y
demás).
 Si tenemos ocasión en el futuro hablaremos de ellos.
En un entorno normal, la ignición de una llama provoca una ionización potente
de gases comunes (En realidad un plasma ionizado, similar al que ilumina una
lámpara halógena), que generan un patrón típico de frecuencia en el rango del
ultravioleta. El detector es un semiconductor sensible a este rango de
frecuencias. Cuando la llama se estabiliza, es relativamente sencillo detectar
su espectro infrarrojo, con una fotorresistencia LDR, pero diseñada para ser
específicamente sensible a un rango característico.
Nosotros vamos a usar un sensor muy sencillo y fácil de manejar que es un
sensor infrarrojo de llamas. Funcionan detectando una longitud de onda
especifica (de unos 760 nm) que son características de las llamas, aunque son
relativamente fáciles de engañar y pueden dar falsos positivos con ciertas luces.
Este sensor se encuentra muy frecuentemente encapsulado con un soporte y un
potenciómetro para ajustar la sensibilidad, por poco dinero. Incluso se vende en
formato múltiple, con varias cabezas apuntando en distintas direcciones

Héctor Mojica 2017


23

En principio siempre es recomendable usar uno montado (Porque dan menos


trabajo y a la hora de la verdad no se suelta un cable).
ESQUEMA DE CONEXIÓN
Lo normal para leer este sensor de llamas, seria usar un divisor de tensión como
este:

Héctor Mojica 2017


24

PROGRAMA DE CONTROL
El programa es de lo más simple. Solo tenemos que leer la caída de tensión en
el divisor y mandar una señal acústica con el buzzer en cuanto el valor de la
lectura en A0 sobrepase un cierto umbral. Vamos a recuperar, además, la
función Beep () que escribimos en la sesión Buzzers o zumbadores, para dar el
tono de alarma cuando se detecte una llama. Lo que hace el programa es leer el
pin A0 y si su valor sobrepasa un mínimo (para evitar los falsos positivos) llama
a la función beep () para dar la alarma.
 Nota: Normalmente hay que calibrar la sensibilidad del sensor. Para ello
hay que ver que valores te devuelve en tu caso concreto y afinar este valor
umbral, para que no esté pitando continuamente.
 Los sensores en placa, suelen venir con un potenciómetro, que hay que
ajustar para calibrar la sensibilidad el detector.
Digitar el siguiente programa:
int flame=A5;//Define flame interface as analog interface
int Beep=8;//Define buzzer interface as digital interface
int val=0; //Define digital variables.
val void setup()
{
pinMode(Beep,OUTPUT);//Set LED as output
pinMode(flame,INPUT);//Set buzzer as input
Serial.begin(9600);//Set baud rate as 9600
}
void loop()
{
val=analogRead(flame);//Read the analog value
from flame sensor
Serial.println(val);//Output analog value and print it out
if(val>=600)//When analog value ¡µ600£¬buzzer make sound
{
digitalWrite(Beep,HIGH);
}
else
{
digitalWrite(Beep,LOW);
}
}

Héctor Mojica 2017


25

7. LOS SENSORES PIR


Detección de movimiento mediante sensor piroeléctrico PIR

¿QUE ES UN SENSOR PIR?


Los sensores infrarrojos pasivos (PIR) son dispositivos para la detección de
movimiento. Son baratos, pequeños, de baja potencia, y fáciles de usar. Por esta
razón son frecuentemente usados en juguetes, aplicaciones domóticas o
sistemas de seguridad. Los sensores PIR se basan en la medición de la radiación
infrarroja. Todos los cuerpos (vivos o no) emiten una cierta cantidad de energía
infrarroja, mayor cuanto mayor es su temperatura. Los dispositivos PIR disponen
de un sensor piezo eléctrico capaz de captar esta radiación y convertirla en una
señal eléctrica.
En realidad cada sensor está dividido en dos campos y se dispone de un circuito
eléctrico que compensa ambas mediciones. Si ambos campos reciben la misma
cantidad de infrarrojos la señal eléctrica resultante es nula. Por el contrario, si los
dos campos realizan una medición diferente, se genera una señal eléctrica. De
esta forma, si un objeto atraviesa uno de los campos se genera una señal

eléctrica diferencial, que es captada por el sensor, y se emite una señal digital.
El otro elemento restante para que todo funcione es la óptica del sensor.
Básicamente es una cúpula de plástico formada por lentes de fresnel, que divide
el espacio en zonas, y enfoca la radiación infrarroja a cada uno de los campos
del PIR. De esta manera, cada uno de los sensores capta un promedio de la
radiación infrarroja del entorno. Cuando un objeto entra en el rango del sensor,
alguna de las zonas marcadas por la óptica recibirá una cantidad distinta de
radiación, que será captado por uno de los campos del sensor PIR, disparando
la alarma.

Héctor Mojica 2017


26

ESQUEMA DE CONEXIÓN
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 necesitáis micro
controladores, si lo único que queréis 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 percibas que se puede usar
directamente. Vamos a montar un circuito sencillo de detección de movimiento
que encienda una LED cuando perciba algo:

Precisar que hay 3 pines en el lateral, que usaremos para pinchar el sensor
PIR HC-SR501 a nuestra protoboard, y aquí debajo os pongo el esquema de
conexiones:

Héctor Mojica 2017


27

Como puedes ver, hay un par de potenciómetros que podemos usar para
ajustarlo además de un jumper para elegir el modo de funcionamiento.
AJUSTANDO EL SENSOR

Iniciamos colocando el sensor en la misma posición que la imagen de arriba se


recomienda poner el jumper en la posición H para las primeras pruebas que
arriba está rotulado como Auto Reset.

Héctor Mojica 2017


28

Precisar que el modelo de la imagen este jumper no existe, pero la mayor parte
de los modelos que veras por ahí puedes seleccionar H o L, conectando el
jumper entre el pin central y la selección deseada o bien dejarlo sin conectar.
Cuando colocamos el sensor en la posición L, al detectar algo el LED se
encenderá, y al poco se apagará y hará una cadencia tipo blinking LED
dependiendo de lo que detecte. A este modo se le llama no retriggering y no
suele ser demasiado interesante.
Si lo ponemos en H, cuando detecte movimiento se encenderá y mantendrá así
durante un tiempo (Llamado retrigger mode) y suele ser más conveniente en
buena parte de los circuitos prácticos. Para ajustar la sensibilidad podemos usar
uno de los potenciómetros que incluye el sensor, fijaras en la imagen de arriba.
(Girando a favor del reloj aumentamos la sensibilidad). El segundo
potenciómetro ajusta el tiempo que estará activa la señal de detección después
de que esta haya desaparecido. Pero parece que también afecta al retraso con
que inicia la alarma, así que es cuestión de que vayas jugando para encontrar
un punto adecuado para vuestra alarma.
ESQUEMA MONTAJE

Héctor Mojica 2017


29

EJEMPLO DE CÓDIGO
El código necesario para realizar la lectura es simple. Simplemente leemos la
salida del PIR, y hacemos parpadear el LED mientras la señal esté activa.
Digitar el siguiente programa:
const int LEDPin= 13;
const int PIRPin= 2;
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
}
void loop()
{
int value= digitalRead(PIRPin);
if (value == HIGH)
{

Héctor Mojica 2017


30

digitalWrite(LEDPin, HIGH);
delay(50);
digitalWrite(LEDPin, LOW);
delay(50);
}
else
{
digitalWrite(LEDPin, LOW);
}
}
const int LEDPin= 13;
const int PIRPin= 2;
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
}
void loop()
{
int value= digitalRead(PIRPin);
if (value == HIGH)
{
digitalWrite(LEDPin, HIGH);
delay(50);
digitalWrite(LEDPin, LOW);
delay(50);
}
else
{
digitalWrite(LEDPin, LOW);
}
}
Si quisiéramos ejecutar una acción una única vez al detectar movimiento, en
lugar de todo el tiempo que la señal este activa, usaríamos el siguiente
código.
const int LEDPin = 13; // pin para el LED
const int PIRPin = 2; // pin de entrada (for PIR sensor)

int pirState = LOW; // de inicio no hay movimiento


int val = 0; // estado del pin
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
Serial.begin(9600);
}
void loop()
{
val = digitalRead(PIRPin);
if (val == HIGH) //si está activado

Héctor Mojica 2017


31

{
digitalWrite(LEDPin, HIGH); //LED ON
if (pirState == LOW) //si previamente estaba apagado
{
Serial.println("Sensor activado");
pirState = HIGH;
}
}
else //si esta desactivado
{
digitalWrite(LEDPin, LOW); // LED OFF
if (pirState == HIGH) //si previamente estaba encendido
{
Serial.println("Sensor parado");
pirState = LOW;
}
}
}
const int LEDPin = 13; // pin para el LED
const int PIRPin = 2; // pin de entrada (for PIR sensor)
int pirState = LOW; // de inicio no hay movimiento
int val = 0; // estado del pin
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode(PIRPin, INPUT);
Serial.begin(9600);
}
void loop()
{
val = digitalRead(PIRPin);
if (val == HIGH) //si está activado
{
digitalWrite(LEDPin, HIGH); //LED ON
if (pirState == LOW) //si previamente estaba apagado
{
Serial.println("Sensor activado");
pirState = HIGH;
}
}
else //si esta desactivado
{
digitalWrite(LEDPin, LOW); // LED OFF
if (pirState == HIGH) //si previamente estaba encendido
{
Serial.println("Sensor parado");
pirState = LOW;
}
}
}

Héctor Mojica 2017


32

8. MEDIR DISTANCIA CON ARDUINO Y SENSOR DE ULTRASONIDOS HC-


SR04

COMO FUNCIONA UN SENSOR ULTRASÓNICODE DISTANCIA


Hemos visto, en los documentales, que los murciélagos son capaces de volar en
completa oscuridad y sin embargo, sortear obstáculos o atrapar insectos en
vuelo. Sabemos que lo hacen, pero rara vez pensamos como. Tenemos una
vaga idea de que se llama ecolocalización y que más o menos tiene que ver con
unos sonidos agudos que emiten y que después recogen con esas enormes
orejas que Dios les ha dado, pero rara vez nos planteamos cómo es esto posible.
Delfines y ballenas utilizan un sistema similar para atrapar a sus presas, y hasta
hemos visto que, en cualquier película de submarinos, en el momento álgido el
capitán ordena emitir un pulso único de sonar para localizar al enemigo.
El concepto básico, es siempre el mismo, sabiendo a qué velocidad viaja el
sonido, si emitimos un pulso sónico corto y escuchamos cuanto tiempo tarda en
regresar el eco podemos calcular la distancia a la que se encuentra el objeto en
el que ha rebotado la señal. El radar funciona de modo similar aunque usando
ondas de radio frecuencia muy cortas y con una problemática propia
descomunal. Un pulso de radiofrecuencia se emite desde la antena y se recoge
el eco que vuelve a la velocidad de la luz. Lo que haremos en esta sesión es
utilizar un sensor de distancia sencillo HC-SR04 (y muy parecido a los sensores
de aparcamiento de los coches modernos), que nos permite enviar estos pulsos
ultrasónicos y escuchar el eco de retorno. Midiendo este tiempo, podemos
calcular la distancia hasta el obstáculo.
El oído humano no percibe sonidos por encima de 20kHz. Por eso, a las ondas
de mayor frecuencia las llamamos ultrasonidos (más allá del sonido). Los
sensores de ultrasonidos funcionan sobre los 40 kHz. No son perfectos, les
influye la temperatura ambiente, la humedad y los materiales en los que reflejan,
lo que genera una cierta incertidumbre. Pero a cambio son baratos y efectivos
hasta un poco más de 3 metros en condiciones normales si la precisión no es un
problema determinante

Héctor Mojica 2017


33

¿QUE ES UN SENSOR DE ULTRASONIDOS?


Un sensor de ultra sonidos es un dispositivo para medir distancias. Su
funcionamiento se base en el envío de un pulso de alta frecuencia, no audible
por el ser humano. Este pulso rebota en los objetos cercanos y es reflejado hacia
el sensor, que dispone de un micrófono adecuado para esa frecuencia. Midiendo
el tiempo entre pulsos, conociendo la velocidad del sonido, podemos estimar la
distancia del objeto contra cuya superficie impacto el impulso de ultrasonidos.
Los sensores de ultrasonidos son sensores baratos, y sencillos de usar. El rango
de medición teórico del sensor HC-SR04 es de 2cm a 400 cm, con una resolución
de 0.3cm. En la práctica, sin embargo, el rango de medición real es mucho más
limitado, en torno a 20cm a 2 metros.
Los sensores de ultrasonidos son sensores de baja precisión. La orientación de
la superficie a medir puede provocar que la onda se refleje, falseando la
medición. Además, no resultan adecuados en entornos con gran número de
objetos, dado que el sonido rebota en las superficies generando ecos y falsas
mediciones. Tampoco son apropiados para el funcionamiento en el exterior y al
aire libre. Pese a esta baja precisión, que impide conocer con precisión la
distancia a un objeto, los sensores de ultrasonidos son ampliamente empleados.
En robótica es habitual montar uno o varios de estos sensores, por ejemplo, para
detección de obstáculos, determinar la posición del robot, crear mapas de
entorno, o resolver laberintos. En aplicaciones en que se requiera una precisión
superior en la medición de la distancia, suelen acompañarse de medidores de
distancia por infrarrojos y sensores ópticos.

¿CÓMO FUNCIONA UN SENSOR DE ULTRASONIDOS?

El sensor se basa simplemente en medir el tiempo entre el envío y la


recepción de un pulso sonoro. Sabemos que la velocidad del sonido es 343 m/s
en condiciones de temperatura 20 ºC, 50% de humedad, presión atmosférica a
nivel del mar. Transformando unidades resulta

Es decir, el sonido tarda 29,2 microsegundos en recorrer un centímetro. Por


tanto, podemos obtener la distancia a partir del tiempo entre la emisión y
recepción del pulso mediante la siguiente ecuación.

Héctor Mojica 2017


34

El motivo de dividir por dos el tiempo (además de la velocidad del sonido en las
unidades apropiadas, que hemos calculado antes) es porque hemos medido el
tiempo que tarda el pulso en ir y volver, por lo que la distancia recorrida por el
pulso es el doble de la que queremos medir.

ESQUEMA ELÉCTRICO

Héctor Mojica 2017


35

ESQUEMA MONTAJE

EJEMPLO DE CÓDIGO

Para activar el sensor necesitamos generar un pulso eléctrico en el pin


Trigger (disparador) de al menos 10us. Previamente, pondremos el pin a Low
durante 4us para asegurar un disparo limpio.

Héctor Mojica 2017


36

Posteriormente usamos la función “pulseIn” para obtener el tiempo


requerido por el pulso para volver al sensor. Finalmente, convertirmos el tiempo
en distancia mediante la ecuación correspondiente.

Observar que intentamos emplear siempre aritmética de enteros, evitando


usar números en coma flotante. Esto es debido a que las operaciones en coma
flotante ralentizan mucho el procesador, y suponen cargar un gran número de
librerías en memoria.

Digitar el siguiente programa:


const int EchoPin = 5;
const int TriggerPin = 6;
const int LedPin = 13;

void setup() {
Serial.begin(9600);
pinMode(LedPin, OUTPUT);
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
int cm = ping(TriggerPin, EchoPin);
Serial.print("Distancia: ");
Serial.println(cm);
delay(1000);
}
int ping(int TriggerPin, int EchoPin)
{
long duration, distanceCm;

digitalWrite(TriggerPin, LOW); //para generar un pulso limpio pon


emos a LOW 4us
delayMicroseconds(4);
digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de
10us
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pu
lsos, en microsegundos
distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, e
n cm
return distanceCm;
}

Héctor Mojica 2017

También podría gustarte