Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
-215-
4- SENSORES
SENSORES Sensor De Wikipedia, la enciclopedia libre
ndice
Caractersticas de un sensor[editar]
-216-
Resolucin y precisin[editar]
La resolucin de un sensor es el menor cambio en la magnitud de entrada que se
aprecia en la magnitud de salida. Sin embargo, la precisin es el mximo error
esperado en la medida.
La resolucin puede ser de menor valor que la precisin. Por ejemplo, si al medir una
distancia la resolucin es de 0,01 mm, pero la precisin es de 1 mm, entonces pueden
apreciarse variaciones en la distancia medida de 0,01 mm, pero no puede asegurarse
que haya un error de medicin menor a 1 mm. En la mayora de los casos este exceso
de resolucin conlleva a un exceso innecesario en el coste del sistema. No obstante,
en estos sistemas, si el error en la medida sigue una distribucin normal o similar, lo
-217-
Tipos de sensores
Magnitud
Transductor
Potencimetro
Encoder
Sensor Hall
Transformador
diferencial
variacin lineal
Desplazamiento
y Galga extensiomtrica
deformacin
Magnetoestrictivos
Magnetorresistivos
LVDT
Dinamo tacomtrica
Encoder
Detector inductivo
Velocidad lineal y angular
Servo-inclinmetros
RVDT
Girscopo
Acelermetro
Aceleracin
Servo-accelermetros
Galga extensiomtrica
Fuerza y par (deformacin)
Triaxiales
Membranas
Presin
Piezoelctricos
Manmetros Digitales
Turbina
Caudal
Magntico
Termopar
RTD
Temperatura
Termistor NTC
Termistor PTC
[Bimetal - Termostato
Sensores de presencia
Inductivos
Caracterstica
Analgica
Digital
Digital
de
Analgica
Analgica
A/D
Analgica
Analgica
Analgica
Digital
Digital
A/D
Analgica
Analgico
Analgico
A/D
Analgica
Analgica
Digital
Analgica
Analgica
Analgica
Analgica
Analgica
Analgica
I/0
I/0
Sensores tctiles
Visin artificial
Capacitivos
pticos
Matriz de contactos
Piel artificial
Cmaras de video
Cmaras CCD o CMOS
Sensor de proximidad
-218-
I/0
I/0 y Analgica
I/0
Analgica
Procesamiento
digital
Procesamiento
digital
Analgica
Analgica
Analgica
Analgica
Analgica
Analgica
Analgica
Analgica
-219-
-220-
servir como sensores de luz, aunque, si bien es cierto que existen fotodiodos
especialmente sensibles a la luz visible, la gran mayora lo son sobre todo a la luz
infrarroja
los sensores de distancia. Control remoto
Una utilidad prctica inmediata de una pareja emisor-receptor de infrarrojos (como un
LED y un fotodiodo/fototransistor) ubicados a una cierta distancia es el envo de
mensajes entre ellos. Es decir, ya que la luz infrarroja no es visible (y por
tanto, no molesta).
SENSORES DE TEMPERATURA
Termistores
Un termistor es un resistor que cambia su resistencia con la temperatura.
Tcnicamente, todos los resistores son termistores ya que su resistencia siempre
cambia ligeramente con la temperatura, pero este cambio es usualmente muy pequeo
y difcil de medir.
Hay dos tipos de termistores, los llamados NTC (del ingls negative
temperature coefficient) y los PTC (de positive temperature coefficient).
El chip analgico TMP36
Este chip utiliza una tecnologa de estado slido para medir la temperatura: a medida
que la temperatura crece, la cada de potencial entre la Base y el Emisor de un
transistor incrementa tambin una cantidad conocida. Amplificando este cambio de
voltaje, se genera una seal analgica que es directamente 427
El chip digital DS18B20 y el protocolo 1-Wire El fabricante Maxim (anteriormente
conocido como Dallas Semiconductor) produce una familia de componentes
electrnicos que pueden ser controlados mediante un protocolo de comunicacin
propietario llamado 1-Wire, el cual permite conectar a nuestra placa Arduino multitud
de estos componentes mediante un solo cable de datos
La plaquita breakout TMP421 Modern Device distribuye una plaquita que incluye el
chip analgico TMP421. Debemos conectarla a los pines analgicos 433
SENSOR DE TEMPERATURA
El Sensor de Temperatura LM35
Es un sensor de temperatura con una precisin calibrada de 1C y un rango que abarca
desde -55 a +150C.
El sensor se presenta en diferentes encapsulados pero el ms comn es el to-92 de
igual forma que un tpico transistor con 3 patas, dos de ellas para alimentarlo y la
tercera nos entrega un valor de tensin proporcional a la temperatura medida por el
dispositivo.
Con el LM35 sobre la mesa las patillas hacia nosotros y las letras del encapsulado
hacia arriba tenemos que de izquierda a derecha los pines son: VCC Vout GND.
La salida es lineal y equivale a 10mV/C por lo tanto:
-221-
+1500mV = 150C
+250mV = 25C
-550mV = -55C
Funcionamiento: Para hacernos un termmetro lo nico que necesitamos es un
voltmetro bien calibrado y en la escala correcta para que nos muestre el voltaje
equivalente a temperatura.
El LM35 funciona en el rango de alimentacin comprendido entre 4 y 30 voltios.
Podemos conectarlo a un conversor Analgico/Digital y tratar la medida digitalmente,
almacenarla o procesarla con un Controlador o similar.
Usos: El sensor de temperatura puede usarse para compensar un dispositivo de
medida sensible a la temperatura ambiente, refrigerar partes delicadas del robot o bien
para loggear temperaturas en el transcurso de un trayecto de exploracin.
-222-
Size: TO-92 package (about 0.2" x 0.2" x 0.2") with three leads
Price: $2.00 at the Adafruit shop
Temperature range: -40C to 150C / -40F to 302F
Output range: 0.1V (-40C) to 2.0V (150C) but accuracy decreases after 125C
Power supply: 2.7V to 5.5V only, 0.05 mA current draw
Datasheet
-223-
-224-
temperatura = 5.0*temperatura*100.0/1024.0;
Serial.println(temperatura);
delay(100);
}
int sensorPin = A0; //the analog pin the TMP36's Vout (sense) pin is connected to
void setup()
{ //pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop()
// run over and over again
{ int reading = analogRead(sensorPin);
delay(10);
Serial.print("Lectura "); Serial.println(reading);
// converting that reading to voltage, for 3.3v arduino use 3.3
float voltage = reading * 5.0 / 1024;
float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500
mV offset
Serial.print(" Voltios ");Serial.println(voltage);
Serial.print(" Grados C ");Serial.println(temperatureC);
float temperatureF = (temperatureC * 9 / 5) + 32;
CODIGO EN ARDUINO
#include <LiquidCrystal.h>
int sensorTemp=0;
LiquidCrystal lcd(11, NULL, 12, 7, 8, 9, 10);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,0);
pinMode(sensorTemp, INPUT);
lcd.println("GRADOS CENTIGRADOS");
Serial.begin(9600);
}
void loop() {
int temperatura = analogRead(sensorTemp);
delay(10);
temperatura = 5.0*temperatura*100.0/1024.0;
lcd.setCursor(0, 1);
// Serial.println(temperatura);
lcd.print(temperatura);
-225-
delay(100);
}
MEDIDOR DE TEMPERATURA CON DISPLAY DE 7 SEGMENTOS
CODIGO EN ARDUINO
int A[11][7]={1,1,1,1,1,1,0,//0
0,1,1,0,0,0,0, // 1
1,1,0,1,1,0,1, // dos
1,1,1,1,0,0,1, // 3
0,1,1,0,0,1,1, //4
1,0,1,1,0,1,1, //5
1,0,1,1,1,1,1,// 6
1,1,1,0,0,0,0,// 7
1,1,1,1,1,1,1,// 8
1,1,1,1,0,1,1,// 9
0,0,0,0,0,0,0 // para borrar el cero
};
int CUnidades = 11; // unidades
int CDecenas = 10;// decenas
int CCentenas= 9; // centenas poner en su lugar para que funcinone
int pulsador=12;
int lectura =0,i;
int sensorTemp=A1;
void setup() {
for (i=2; i<9;i++)
pinMode(i, OUTPUT);
pinMode(sensorTemp, INPUT);
pinMode(CUnidades, OUTPUT); // unidades
pinMode(CDecenas, OUTPUT);//decenas
-226-
pinMode(CCentenas, OUTPUT);//centenas
pinMode(pulsador, INPUT);
Serial.begin(9600);
}
void imprimir(int fnro, int valor)
{
switch(valor) // si es unidades , decenas, o cengenas
{case 0: // unidades
digitalWrite(CUnidades,1); // turn the LED on (HIGH is the voltage level)
digitalWrite(CDecenas,0); // turn the LED on (HIGH is the voltage level)
digitalWrite(CCentenas,0); // turn the LED on (HIGH is the voltage level)
break;
case 1: //DECENA
digitalWrite(CUnidades,0); // turn the LED on (HIGH is the voltage level)
digitalWrite(CDecenas, 1); // turn the LED on (HIGH is the voltage level)
digitalWrite(CCentenas, 0); // turn the LED on (HIGH is the voltage level)
break;
case 2: //centenas
digitalWrite(CUnidades,0); // turn the LED on (HIGH is the voltage level)
digitalWrite(CDecenas, 0); // turn the LED on (HIGH is the voltage level)
digitalWrite(CCentenas, 1); // turn the LED on (HIGH is the voltage level)
break;
}
digitalWrite(2, A[fnro][0]);
digitalWrite(3, A[fnro][1]);
digitalWrite(4, A[fnro][2]);
digitalWrite(5, A[fnro][3]);
digitalWrite(6, A[fnro][4]);
digitalWrite(7, A[fnro][5]);
digitalWrite(8, A[fnro][6]);
}
void loop()
{
-227-
-228-
-229-
Qu recibimos en el sensor?
El tiempo que transcurre entre el envo y la recepcin del ultrasonido.
Cmo vamos a traducir dicho tiempo en distancia?
Aprovechando que la velocidad de dicho ultrasonido en el aire es de valor 340 m/s, o
0,034 cm/microseg (ya que trabajaremos con centmetros y microsegundos). Para
calcular la distancia, recordaremos que v=d/t (definicin de velocidad: distancia
recorrida en un determinado tiempo).
De la frmula anterior despejamos d, obteniendo d=vt, siendo v la constante
anteriormente citada y t el valor devuelto por el sensor a la placa Arduino.
Tambin habr que dividir el resultado entre 2 dado que el tiempo recibido es el tiempo
de ida y vuelta.
Material
Sensor ultrasonidos HC-SR04 de Electrohobby
Placa Arduino UNO
Cables
Cable USB
Protoboard
Conexiones
El sensor consta de 4 pines: "VCC" conectado a la salida de 5V de la placa, "Trig"
conectado al pin digital de la placa encargado de enviar el pulso ultrasnico, "Echo" al
pin de entrada digital que recibir el eco de dicho pulso y "GND" a tierra.
-230-
/*
Sensor de proximidad y al ser inferior a 10cm envia un pulso de alarma por el pin
13
-231-
-232-
Serial.println("---");
// no mide nada
}
if (distancia >= 0 && distancia < 5){
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, distancia*50); analogWrite(Verde, 0); analogWrite(Azul,0);
}
if (distancia >= 5 && distancia < 10){
Serial.print(distancia); Serial.println("cm");
valor=distancia-5;
analogWrite(Rojo, 0); analogWrite(Verde, valor*50); analogWrite(Azul,0);
}
if (distancia >= 10 && distancia < 15){
valor=distancia-10;
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, 0); analogWrite(Verde, 0); analogWrite(Azul,valor*50);
}
if (distancia >= 10 && distancia < 15){
valor=distancia-10; // azul
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, 0); analogWrite(Verde, 0);
analogWrite(Azul,valor*50);
}
if (distancia >= 15 && distancia < 20){ //amarillo
valor=distancia-15;
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, valor*50); analogWrite(Verde, valor*50);
analogWrite(Azul,0);
}
if (distancia >= 20 && distancia < 25){ //magenta
valor=distancia-20;
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, 0); analogWrite(Verde, valor*50);
analogWrite(Azul,valor*50);
}
if (distancia >= 25 && distancia < 30){
valor=distancia-25; // violeta
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, 0); analogWrite(Verde, 0);
analogWrite(Azul,valor*50);
}
if (distancia >= 30 && distancia < 35){
valor=distancia-10;
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, valor*50); analogWrite(Verde, 0);
analogWrite(Azul,valor*50);
}
if (distancia >= 30 && distancia < 500){
// valor=distancia-10;
Serial.print(distancia); Serial.println("cm");
analogWrite(Rojo, valor*50); analogWrite(Verde, valor*50);
analogWrite(Azul,valor*50);
}
delay(400);
// espera 400ms para que se logre ver la distancia en la consola
}
-233-
int Pecho= 6;
int Ptrig= 7;
long duracion, distancia;
int buzzer = 9; //Pin del buzzer
int tono = 0; //Pin del potenciometro
void setup() // Se ejecuta cada vez que el Arduino se inicia
{ pinMode(Pecho, INPUT); // define el pin 6 como entrada (echo)
pinMode(Ptrig, OUTPUT); // define el pin 7 como salida (triger)
Serial.begin(9600);
}
void loop()
{ digitalWrite(Ptrig, LOW);
delayMicroseconds(10);
digitalWrite(Ptrig, HIGH); // genera el pulso de triger por 10ms
delayMicroseconds(10);
digitalWrite(Ptrig, LOW);
duracion = pulseIn(Pecho, HIGH);
distancia = (duracion/2) / 29;
// calcula la distancia en centimetros
if (distancia >= 500 || distancia <= 0){ // si la distancia es mayor a 500cm o menor a
0cm
Serial.println("---");
// no mide nada
}
else {
Serial.print(distancia);
// envia el valor de la distancia por el puerto serial
Serial.println("cm");
// le coloca a la distancia los centimetros "cm"
int frecuencia = map(distancia,0,100,0,5000);
int duracion = 250;
tone(buzzer, frecuencia, duracion);
}
delay(40);
// espera 400ms para que se logre ver la distancia en la consola
}
-234-
-235-
digitalWrite(CUnidades,0);
digitalWrite(CDecenas, 1);
digitalWrite(CCentenas, 0);
break;
case 2: //centenas
digitalWrite(CUnidades,0);
digitalWrite(CDecenas, 0);
digitalWrite(CCentenas, 1);
break;
}
digitalWrite(2, A[fnro][0]);
digitalWrite(3, A[fnro][1]);
digitalWrite(4, A[fnro][2]);
digitalWrite(5, A[fnro][3]);
digitalWrite(6, A[fnro][4]);
digitalWrite(7, A[fnro][5]);
digitalWrite(8, A[fnro][6]);
}
-236-
void loop() {
digitalWrite(Penviado, LOW);
delayMicroseconds(10);
digitalWrite(Penviado, HIGH); // genera el pulso de triger por 10ms
delayMicroseconds(10);
digitalWrite(Penviado, LOW);
duracion = pulseIn(Peco, HIGH);
distancia = (duracion/2) / 29;
// calcula la distancia en centimetros
if (distancia >= 500 || distancia <= 0){ // si la distancia es mayor a 500cm o menor a
0cm
Serial.println("---");
// no mide nada
}
else {
Serial.print(distancia);
// envia el valor de la distancia por el puerto serial
Serial.println("cm");
// le coloca a la distancia los centimetros "cm"
digitalWrite(13, 0);
// en bajo el pin 13
}
if (distancia <= 10 && distancia >= 1){
digitalWrite(13, 1);
// en alto el pin 13 si la distancia es menor a 10cm
Serial.println("Alarma.......");
// envia la palabra Alarma por el puerto serial
}
int Unidades = distancia %10 ;
int Decenas = (distancia % 100) / 10 ;
int
Centenas = (distancia % 1000) / 100 ;
for (i=1;i<=10;i++)
{ imprimir( Unidades, 0);//unidades
delay(10);
imprimir( Decenas, 1);//unidades//
delay(10);
imprimir( Centenas, 2);//unidades//
delay(10);
}
// delay(200);
// espera 400ms para que se logre ver la distancia en la consola
-237-
}
El sensor LV-EZ0
Otro sensor de distancia que utiliza ultrasonidos es el sensor LV-EZ0 de Maxbotix. No
obstante, a diferencia de los anteriores, el LV-EZO es un sensor analgico. Por ello,
para usarlo con nuestra placa Arduino deberemos conectar (adems del pin +5 V a la
alimentacin de 5V proporcionada por la placa Arduino y del pin GND a la tierra
comn) el pin etiquetado como AN a una entrada analgica de nuestra placa Arduino
445
Los sensores GP2Yxxx Existe una familia de sensores analgicos de distancia
fabricados por Sharp y cuyo nombre empieza por GP2Y que, a diferencia de los
anteriormente descritos, utilizan ondas infrarrojas. Su funcionamiento genrico es el
siguiente: el chip contiene en su parte frontal
El sensor IS471F
Este sensor no es un detector de distancia propiamente sino simplemente de
presencia; concretamente detecta la existencia o no de un obstculo entre 1 cm y 15
cm. Funciona emitiendo un haz infrarrojo y comprobando si le llega rebotado. Si es
as, el sensor generar una seal LOW (que podr ser leda por una placa Arduino
conectada a l convenientemente) y si no se detecta ningn objeto, el sensor
generar 450
Los sensores QRD1114 y QRE1113
El sensor QRD1114 (cdigo de producto 246 de Sparkfun) en realidad no es ms que
un emisor de infrarrojos y un fototransistor bajo el mismo encapsulado, por
lo que el principio de funcionamiento
SENSOR DE INCLINACIN
Los sensores de inclinacin son pequeos, baratos, y fciles de usar. Pueden trabajar
con voltajes de hasta 24 V e intensidades de 5 mA. Constan de una cavidad y de una
masa libre conductiva 451
SENSORES DE HUMEDAD
El sensor DHT22/RHT03
En este apartado hablaremos concretamente del sensor digital de temperatura y
humedad RHT03 de Maxdetect (http://www.humiditycn.com) , el cual se distribuye
(adems de muchos otros) en Sparkfun con n de producto 10167 y en Adafruit (aqu
con el nombre de DHT22 y con n de producto n 385). Tambin se le puede encontrar
con el nombre de AM2302. Este sensor es muy bsico y lento (solo se pueden obtener
datos como mnimo cada 2 segundos), pero es de bajo coste y muy manejable para
obtener datos bsicos en proyectos caseros.
SENSORES DE HUMEDAD El sensor DHT22/RHT03
https://paruro.pe/cat%C3%A1logo/sensores
-238-
http://www.blogginred.com/2015/05/como-usar-el-sensor-dht11-temperatura-y.html
Cmo usar el sensor DHT11 (Temperatura y humedad) con Arduino Uno
Un post ms para BR, en estas palabras explicar como configurar, programar y
controlar el mdulo sensor DHT11 el cual se encarga de medir la Temperatura y la
Humedad en nuestro ambiente, dicho control lo haremos programando nuestro Arduino
para el ejemplo usar un Arduino Uno, pero, la diferencia con los otros no es mucha as
que no hay de que preocuparse.
Muy bien veamos que es lo que se debe hacer:
Sensor DHT11
Lo primero y ms lgico es tener nuestro Arduino y posteriormente el sensor DHT11 de
ah que ms necesitemos ser una protoboard y algunos Jumpers o cables para
conexin. Luego:
Instalar librera de sensor DHT11
Instalaremos la librera del sensor DHT11 esta (el .ZIP) lo pueden descargar aqu.
CLICK AQU PARA DESCARGAR LIBRERA
Una vez descargada, en el IDE de Arduino vamos a "Sketch > Importar Librera > Add
Library" y agregamos el .ZIP que descargamos:
-239-
Hecho esto procedemos a conectar nuestro arduino al PC, para, enviarle el cdigo
dicho cdigo ser el siguiente:
//Sensor de temperatura y humedad DHT11 -Blogginred.com
#include "DHT.h" //cargamos la librera DHT
#define DHTPIN 2 //Seleccionamos el pin en el que se //conectar el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 que se va usar
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que ser usada por Arduino para
comunicarse con el sensor
void setup() {
Serial.begin(9600); //Se inicia la comunicacin serial
dht.begin(); //Inicio del sensor
}
void loop() {
float h = dht.readHumidity(); //Se lee la humedad
float t = dht.readTemperature(); //Se lee la temperatura
//Se imprimen las variables
Serial.println("Humedad: ");
Serial.println(h);
Serial.println("Temperatura: ");
Serial.println(t);
delay(2000); //Se espera 2 segundos para seguir leyendo //datos
}
DESCARGAR EL CDIGO CLICK AQU
Enviamos a la placa para compilar y listo.
Diagrama para conectar sensor DHT11 al arduino
Ahora veamos como conectar el sensor al Arduino:
Cable verde es
la
seal
conectado
- Cable negro es la tierra o GND
- Cable rojo ir conectado a los 5v (5 voltios)
al
PIN
del
arduino
-240-
Al final slo queda visualizar en el monitor serial y vemos que visualiza la humedad y la
temperatura cada 2 segundos.
Los sensores DHT11 o DHT22 son unos pequeos dispositivos que nos permiten medir
la temperatura y la humedad. A diferencia de otros sensores, stos los tendremos que
conectar a pines digitales, ya que la seal de salida es digital. Llevan un pequeo
microcontrolador interno para hacer el tratamiento de seal.
Se componen de un sensor capacitivo para medir la humedad y de un termistor. Ambos
sensores estn calibrados por lo que no es necesario aadir ningn circuito de
tratamiento de seal. Esto sin duda es una ventaja porque nos simplifica las cosas en
la protoboard. Adems, como los DHTxx han sido calibrados en laboratorios, presentan
una gran fiabilidad.
Parmetro
DHT11
DHT22
Alimentacin
Seal de Salida
Digital
Digital
De 0 a 50 C
De -40C a 80 C
Precisin Temperatura
2 C
<0.5 C
Resolucin Temperatura
1C
0.1C
De 20% a 90% RH
De 0 a 100% RH
-241-
Precisin Humedad
4% RH
2% RH
Resolucin Humedad
1%RH
0.1%RH
Tiempo de sensado
1s
2s
Tamao
12 x 15.5 x 5.5mm
14 x 18 x 5.5mm
_
El DHT22 tarda 1 segundo mas en los datos, pero posee mayor rango en ambas
mediciones como tambien mayor definicion (eldht11 solo mide datos exactos) El resto
de sus caracteristicas son similares a las de su antecesor, tanto en alimentacion,
consumo, conexion Y HASTA PROGRAMACION.
Si utilizamos la libreria DHT con solo hacer un cambio podemos usar el mismo
programa para ambos sensores:
Programa:
#include DHT.h
#define DHTPIN 2 // what pin were connected to
// Uncomment whatever type youre using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println(DHTxx test!);
dht.begin();
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds old (its a very slow sensor)
-242-
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went
wrong!
if (isnan(t) || isnan(h)) {
Serial.println(Failed to read from DHT);
} else {
Serial.print(Humidity: ); Serial.print(h);
Serial.print( %t); Serial.print(Temperature: );
Serial.print(t);
Serial.println( *C);
}
}
Conexion:
SENSORES DE MOVIMIENTO
Los sensores PIR (del ingls
Pyroelectric passive InfraRed sensors). La
piroelectricidad es la capacidad que tienen ciertos materiales para generar un cierto
voltaje cuando sufren un cambio de temperatura. Pero ojo, si su temperatura (sea alta o
baja) se mantiene constante, ese voltaje poco a poco ir desapareciendo.453
-243-
SENSORES DE MOVIMIENTO
de sensores PIR vienen en plaquitas con 3 pines de conexin a un
lado o al fondo: alimentacin, tierra
Sensor
PIR
[P555-28027]
de
movimiento
#P555-2802711.00
(IVA y portes no incluidos)
-244-
Digo esto aunque se trata de un ejemplo muy sencillo, el color del cableado del sensor
no se corresponde con el del datasheet (hoja de caractersticas) del producto. Esto lo
comentan en la propia web.
Por lo que he podido ver en la red este sensor ha dado unos cuantos quebraderos de
cabeza, tanto por el cableado como por las tensiones de alimentacin.
La solucin no es nada difcil. El esquema que os muestro est comprobado que
funciona.
La resistencia es de 10K.
-245-
la mayoria de los PIR tienen 3 pin, un pin es tierra (-) otro ser la seal que emite
(OUT) y el otro la potencia (+).
Aqui mostramos el esquema para conectarlo a un Arduino, adems aadimos un LED
que se activa cuando el sensor detecta movimiento
El Pin del sensor a ground, el + a 5V y la salida, el pin OUT a a un pin digital del
Arduino
El codigo para probar el PIR es muy sencillo, aqu lo tienes, sbelo al Arduino y abre el
monitor Serial para ver los mensajes que aparecen.
-246-
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}
Cuando se detecta movimiento, incluso cuando este no ha parado, el sensor PIR tiene
unas fases LOW, son pequeos intervalos de tiempo en los que el sensor indicara que
no hay movimiento, aunque lo haya. Para corregirlo, en el siguiente cdigo se
considera que el movimiento ha parado cuando no se detecta movimiento durante ms
de un cierto tiempo (valor de pause).
-247-
El proposito de todo esto es conseguir que ocurra algo cuando el PIR detecte
movimiento, que se encienda una luz, que suene una alarma, para conseguir esto
-248-
hemos escrito un script en Ruby que lee el estado del sensor y realiza una accin
cuando se detecta movimiento.Gracias a la GEM serialport, podemos leer con nuestro
script Ruby la salida del puerto Serie del Arduino igual que la vemos en el monitor serial
de Arduino, as podemos lanzar acciones cada vez que el estado sea el indicado,en el
ejemplo hacemos que suene una cancin mediante la interfaz de linea de comandos de
VLC.
Y en este ejemplo siguiente hemos conseguido que el script ruby envie un email a
travs de una cuenta de Gmail cada vez que el sensor detecte que alguien ha entrado
en la habitacin.
Por cada accin que lanzamos desde el script Ruby, creamos un nuevo hilo, sino lo
hacemos as, no podemos seguir leyendo la salida del Arduino mientras no termine la
accin, si hacemos sonar una cancin,no podramos hacer nada mientras no termine la
cancin, de hecho, no podramos hacer nada mientras no cerremos el VLC porque ste
se queda abierto esperando una nueva orden.
-249-
end
#params for serial port
port_str = "/dev/tty.usbmodem1d11" #may be different for you
baud_rate = 9600
data_bits = 8
stop_bits = 1
parity = SerialPort::NONE
sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity)
play = "/Applications/VLC.app/Contents/MacOS/VLC --intf=rc 'ruta de la cancion'"
puts "empezamos, alarma armada"
playing = 'no'
# recieve part
Thread.new do
while TRUE do
while (i = sp.gets.chomp) do # viene con salto de linea al final, chomp lo elimina
#puts i.class #String
if i == 'salta'
if playing == 'si'
puts 'alarma sonando'
else
playing = 'si'
send_email('salto la alarma')
Thread.new do
puts 'hay alguien guey !!'
system(play)
end
end
else
if playing == 'si'
puts 'alarma sonando'
else
puts "todo en orden"
playing = 'no'
end
end
end
end
end
# send part
begin
while TRUE do
sp.print STDIN.gets.chomp
end
rescue Interrupt
sp.close
puts
#insert a newline character after ^C
end
-250-
Fcil y bonito, un sensor manda seales al Arduino, nosotros leemos la salida a travs
del puerto serie y ejecutamos una accin cada vez que pase algo serio, las
posibilidades de esto, son infinitas, los tipos de sensor son miles, yo quiero intentar
enviar mensajes a Twitter o mensajes de mvil, no s hasta dnde se puede pero creo
que hasta dnde yo quiera.
Si no lo has sospechado ya, lo que quiero es hacerme una alarma y no tener que pagar
una cuota mensual a ninguna compaa, no por el hecho de no pagarlo sino porque
realmente ellos no le dan valor, pagas por nada. Cuando contratas una alarma, cada
vez que salta, la compaa te llama por telfono para comprobar que no ha sido un
error, si t confirmas que no debiera haber nadie en tu local, entonces llaman a la
polica. Pero y si mi sistema de alarma me avisa directamente a m y si veo que hay
algo raro soy yo el que llamo a la polica ? no hay ninguna diferencia verdad ? bueno s
la hay, haba una cuota mensual que ya no est.
SENSORES DE CONTACTO
Sensores de fuerza
Estos sensores (tambin llamados FSRs, del ingls, Force Sensitive Resistor)
permiten detectar fuerza. Son bsicamente un resistor que cambia su resistencia
dependiendo de la fuerza a la que es sometido (concretamente, su resistencia
disminuye a mayor fuerza recibida). Estos sensores son muy baratos y fciles de usar
pero no demasiado precisos: una misma medida puede variar entre un sensor y otro
hasta un 10%. As que lo que uno puede esperar de un FSR es conseguir medir rangos
de respuesta; es decir: aunque los FSRs sirven para detectar peso, son mala eleccin
460
-251-
fuente
http://hetpro-store.com/TUTORIALES/sensor-de-fuerza-o-presion-mf01/
Sensor de Fuerza o Presin MF01
DESCRIPCIN
Este sensor de fuerza o presin autoadherible es ideal para detectar una fuerza
aplicada en la membrana. Al detectar una flexin en la membrana el sensor cambia su
resistencia interna. Est hecha de 2 capas separadas por un espaciador, cuanto ms
se presiona, ms puntos de elemento activo tocan el semiconductor y eso hace que la
resistencia disminuya. Cuando no es presionado, su resistencia es de aprox. 20M. Su
rango de presin vara de 30 gramos a 10kg. Por lo que basta con ponerlo en un
divisor de tensin, para poder medir la salida en voltaje con algn ADC.
Este sensor lo puedes encontrar en nuestra pagina oficial https://hetprostore.com/arduino/shield-sensores/sensor-de-presion-fuerza-mf01.html
VENTAJAS
Estos sensores son de bajo costo, funciona con cualquier tarjeta de desarrollo o
microcontrolador con etapa de ADC. Tiene una extensin que termina en dos puntas
que se pueden soldar cmodamente. Es muy sencillo de utilizar y puede tener multitud
de aplicaciones en muchos proyectos electrnicos. Sirve para la mayora de las
aplicaciones sensibles al tacto. Puede utilizar cualquier fuente de alimentacin ya que
utiliza menos de 1 mA de corriente.
DESVENTAJAS
Estos sensores son raramente precisos. As que, bsicamente, cuando se utiliza este
sensor slo se debe esperar para obtener rangos de respuesta. Estos sensores
pueden detectar el peso, pero son una mala eleccin para detectar exactamente
cuntas libras de peso hay en ellos.
ESPECIFICACIONES
-252-
MATERIALES
1 Led
1 Protoboard
Cable UTP o Dupont
Tarjeta Arduino UNO
1 resistencia de 10 K
1 Sensor MF01 (Fuerza o Presin)
1 resistencia de 220 o 330 (De preferencia para no daar el Led)
La conexin del sensor de presin, el led y sus respectivas resistencias con el Arduino,
se observan en el siguiente diagrama.
-253-
Diagrama de Conexin.
Como muestra en el diagrama, el cable rojo representa VCC que va conectado en el
pin de 5V del Arduino, el Cable negro a GND, Los cables amarillos son de seal, al Pin
A0 (Sensor) y el Pin 6 (Led).
El sensor de fuerza o presin conectado a Arduino UNO quedar como se muestra en
la Figura Reperesentativa.
Figura Representativa
Programa en C++ para Sensor de Presin o Fuerza, en Arduino UNO
Una vez conectado el sensor de presin o fuerza a Arduino UNO, el siguiente paso
ser realizar un programa que modifique la intensidad de brillo del led con la presin o
-254-
fuerza aplicada en el sensor y lo muestre por el puerto serial, de esta forma podremos
verificar que los componentes funcionan correctamente.
Instalaremos los drivers necesarios, instalaremos el IDE de desarrollo de Arduino y
conectaremos Arduino al PC por el puerto USB.
A continuacin escribiremos el siguiente programa:
int AnalogPin = 0; // Sensor conectado a Analog 0
int LEDpin = 6;
// LED conectado a Pin 6 (PWM)
int ResRead;
// La Lectura de la Resistencia por Divisin de Tensin
int BrilloLED;
void setup()
{
Serial.begin(9600); // Enviaremos la informacin de depuracin a travs del Monitor de
Serial
pinMode(LEDpin, OUTPUT);
}
void loop()
{
ResRead = analogRead(AnalogPin); // La Resistencia es igual a la lectura del sensor
(Analog 0)
Serial.print("Lectura Analogica = ");
Serial.println(ResRead);
BrilloLED = map(ResRead, 0, 1023, 0, 255);
// Cambiar el rango de la lectura analgica (0-1023)
// Utilizamos en analogWrite 8 bits (0-255) configurados en el map
analogWrite(LEDpin, BrilloLED);
delay(100); //Cien ms de espera en cada lectura
}
Lo compilaremos para verificar que la sintaxis del cdigo C++ es correcta, para ello
pulsaremos el botn Verificar. Si el cdigo es correcto devolver Compilacin
Terminada, si hay algn error en el cdigo lo indicar.
Una vez verificado el cdigo pulsaremos en el botn Cargar para enviar el programa a
Arduino UNO. Si Arduino est correctamente conectado al PC por el puerto USB, el
programa ser subido y el IDE de Arduino mostrar Carga Terminada
-255-
IDE Arduino
Si tenemos correctamente conectado el sensor de presin a la tarjeta Arduino y si el
programa enviado es correcto, los datos actuales aparecen en la ventana de puerto
serial.
-256-
Es importante notar que el grfico no es muy lineal (es un grfico log / log) y que en las
medidas de fuerza especialmente bajas va rpidamente de infinito para 100K.
Fuerza (N) Resistencia Corriente a
Voltaje a
Fuerza (lb)
Sensor
travs del
travs del
sensor
sensor
Ninguno
Ninguno
Infinito
0 mA
0V
0.04
0,2 N
30 K
0,13 mA
1,3 V
0.22
1N
6 K
0,31 mA
3,1 V
2,2 libras
10 N
1 K
0,45 mA
4,5 V
22 libras
100 N
250
0,49 mA
4,9 V
Fotos de los sensores probados
Sensores de golpes
Debido a su constitucin elctrica interna, los zumbadores tambin pueden utilizarse,
adems de como emisores de sonidos, como sensores de golpes. El mecanismo es
justo a la inversa del convencional: los golpes (suaves) recibidos por el zumbador se
traducen en vibracin de su lmina interna, la cual genera una serie de pulsos
elctricos que pueden 466
SENSORES DE SONIDO
En realidad, un sensor de sonido no es ms que un sensor de presin que convierte las
ondas de presin de aire (las ondas sonoras) en seales elctricas de tipo analgico;
es decir, un micrfono.
Existen muchos tipos de micrfonos segn el mecanismo fsico que utilizan para
realizar esa conversin: los de tipo inductivo (tambin llamados dinmicos), los de
condensador, los piezoelctricos, etc. Dependiendo del tipo, unos tendrn u 469
Plaquitas breakout
Existen plaquitas breakout que incorporan un micrfono electret y un preamplificador
todo en uno, de manera que podamos empezar a utilizar el kit completo micrfono+preamplificador al instante. Un ejemplo es el Microphone Sound Input
Module de Freetronics 470
-257-
Reconocimiento de voz
Nuestra placa Arduino es capaz de responder a rdenes expresadas mediante voz
gracias al EasyVR Shield de Veear (distribuido entre otros por Sparkfun con producto
n 10963), el cual incorpora un mdulo de reconocimiento de voz diseado y fabricado
por la misma empresa Veear (tambin disponible de forma autnoma).
Este shield tambin incluye un micrfono, una salida para conectar 478
SENSOR CNY70 ( SENSOR DE presencia blanco y negro)
CNY70 Sensor de infrarrojos CNY70 como entrada digital
-258-
Descripcin
El dispositivo CNY70 es un sensor ptico infrarrojo, de un rango de corto alcance
(menos de 5 cm) que se utiliza para detectar colores de objetos y superficies. Su uso
ms comn es para construir pequeos robots siguelneas. Contiene un emisor
de radiacin infrarroja -fotodiodo- y un receptor -fototransistor-. El fotodiodo emite un
haz de radiacin infrarroja, el fototransistor recibe ese haz de luz cuando
se refleja sobre alguna superficie u objeto.
Dependiendo de la cantidad de luz recibida por el fototransistor el dispositivo enva una
seal de retorno a Arduino.
El sensor CNY70 Puede utilizarse como entrada digital o analgica. . Cuando el
sensor est orientado hacia una superficie u objeto de color negro ste absorbe gran
parte de la luz emitida por el diodo. Entonces el sensor enviar un valor alto (HIGH
1) a Arduino. A su vez cuando el sensor se sita sobre una superficie u objeto
de color blanco gran parte de la luz emitida por el diodo ser reflejada al fototransistor.
Entonces, el sensor enviar un valor alto (LOW- 0) a Arduino.
Caracteristicas Tcnicas
Alimentacion: 5v.
Consumo: 1mA.
Tamao: (L x W x H in mm): 7mm x 7mm x 6mm.
Distancia de sensado: menos de 5cm.
Conexionado
-259-
-260-
A photoelectric sensor, or photo eye, is a device used to detect the distance, absence,
or presence of an object by using a light transmitter, often infrared, and a photoelectric
receiver. They are used extensively in industrial manufacturing. There are three different
functional types: opposed (through beam), retro-reflective, and proximity-sensing
(diffused).
Medidores varios
Deteccion de movimiento
/* * PIR sensor tester */
int ledPin = 13;
// pin para el LED
int inputPin = 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);
// declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin); // read input value
delay(10);
if (val == HIGH) {
// check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
-261-
-262-