Anda di halaman 1dari 48

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-215-

4- SENSORES
SENSORES Sensor De Wikipedia, la enciclopedia libre

Sensor de efecto Hall.

Un sensor es un dispositivo capaz de detectar magnitudes fsicas o qumicas, llamadas


variables de instrumentacin, y transformarlas en variables elctricas. Las variables de
instrumentacin pueden ser por ejemplo: temperatura, intensidad lumnica, distancia,
aceleracin, inclinacin, desplazamiento, presin, fuerza, torsin, humedad,
movimiento, pH, etc. Una magnitud elctrica puede ser una resistencia elctrica (como
en una RTD), una capacidad elctrica (como en un sensor de humedad), una tensin
elctrica (como en un termopar), una corriente elctrica (como en un fototransistor),
etc.
Un sensor se diferencia de un transductor en que el sensor est siempre en contacto
con la variable de instrumentacin con lo que puede decirse tambin que es un
dispositivo que aprovecha una de sus propiedades con el fin de adaptar la seal que
mide para que la pueda interpretar otro dispositivo. Como por ejemplo el termmetro de
mercurio que aprovecha la propiedad que posee el mercurio de dilatarse o contraerse
por la accin de la temperatura. Un sensor tambin puede decirse que es un dispositivo
que convierte una forma de energa en otra.
reas de aplicacin de los sensores: Industria automotriz, robtica, industria
aeroespacial, medicina, industria de manufactura, etc.
Los sensores pueden estar conectados a un computador para obtener ventajas como
son el acceso a una base de datos, la toma de valores desde el sensor, etc

ndice

Caractersticas de un sensor[editar]

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-216-

Rango de medida: dominio en la magnitud medida en el que puede aplicarse el


sensor.
Precisin: es el error de medida mximo esperado.
Offset o desviacin de cero: valor de la variable de salida cuando la variable de
entrada es nula. Si el rango de medida no llega a valores nulos de la variable de
entrada, habitualmente se establece otro punto de referencia para definir el
offset.
Linealidad o correlacin lineal.
Sensibilidad de un sensor: suponiendo que es de entrada a salida y la variacin
de la magnitud de entrada.
Resolucin: mnima variacin de la magnitud de entrada que puede detectarse a
la salida.
Rapidez de respuesta: puede ser un tiempo fijo o depender de cunto vare la
magnitud a medir. Depende de la capacidad del sistema para seguir las
variaciones de la magnitud de entrada.
Derivas: son otras magnitudes, aparte de la medida como magnitud de entrada,
que influyen en la variable de salida. Por ejemplo, pueden ser condiciones
ambientales, como la humedad, la temperatura u otras como el envejecimiento
(oxidacin, desgaste, etc.) del sensor.
Repetitividad: error esperado al repetir varias veces la misma medida.

Un sensor es un tipo de transductor que transforma la magnitud que se quiere medir o


controlar, en otra, que facilita su medida. Pueden ser de indicacin directa (e.g. un
termmetro de mercurio) o pueden estar conectados a un indicador (posiblemente a
travs de un convertidor analgico a digital, un computador y un visualizador) de modo
que los valores detectados puedan ser ledos por un humano.
Por lo general, la seal de salida de estos sensores no es apta para su lectura directa y
a veces tampoco para su procesado, por lo que se usa un circuito de
acondicionamiento, como por ejemplo un puente de Wheatstone, amplificadores y
filtros electrnicos que adaptan la seal a los niveles apropiados para el resto de los
circuitos.

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-217-

cual es frecuente en errores accidentales, es decir, no sistemticos, la repetitividad


podra ser de un valor inferior a la precisin.
Sin embargo, la precisin no puede ser de un valor inferior a la resolucin, pues no
puede asegurarse que el error en la medida sea menor a la mnima variacin en la
magnitud de entrada que puede observarse en la magnitud de salida.

Tipos de sensores

En la siguiente tabla se indican algunos tipos y ejemplos de sensores electrnicos.

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

Posicin lineal y angular

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

Sensores tctiles
Visin artificial

Capacitivos
pticos
Matriz de contactos
Piel artificial
Cmaras de video
Cmaras CCD o CMOS

Sensor de proximidad

Sensor final de carrera


Sensor capacitivo
Sensor inductivo
Sensor fotoelctrico

Sensor acstico (presin


micrfono
sonora)
Sensores de acidez
ISFET
fotodiodo
Fotorresistencia
Sensor de luz
Fototransistor
Clula fotoelctrica
Sensores
captura
de
Sensores inerciales
movimiento

-218-

I/0
I/0 y Analgica
I/0
Analgica
Procesamiento
digital
Procesamiento
digital
Analgica
Analgica
Analgica
Analgica
Analgica
Analgica
Analgica
Analgica

Algunas magnitudes pueden calcularse mediante la medicin y clculo de otras, por


ejemplo, la velocidad de un mvil puede calcularse a partir de la integracin numrica
de su aceleracin. La masa de un objeto puede conocerse mediante la fuerza
gravitatoria que se ejerce sobre l en comparacin con la fuerza gravitatoria ejercida
sobre un objeto de masa conocida (patrn).
Interruptor con sensor o fotoresistencia en proteus

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-219-

Ver sensores en el libro de

SENSORES DE LUZ VISIBLE Fotorresistores PAG 391 ( ejercicio en proteus)


El sensor digital TSL2561
Adems de los fotorresistores (que son sensores analgicos), tambin existen
sensores de luz que son digitales,
El sensor analgico TEMT6000 404
SENSORES DE LUZ INFRARROJA Fotodiodos y fototransistores
Un fotodiodo es un dispositivo que, cuando es excitado por la luz, produce en el circuito
una circulacin de corriente proporcional (y medible). De esta manera, pueden hacerse

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-223-

/TMP36 Pin Variables


int sensorPin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to
//the resolution is 10 mV / degree centigrade with a
//500 mV offset to allow for negative temperatures
/* * setup() - this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer */
void setup()
{ Serial.begin(9600);
}
void loop()
// run over and over again
{
int reading = analogRead(sensorPin);
// converting that reading to voltage, for 3.3v arduino use 3.3
float voltage = reading * 5.0 / 1024;
Serial.print(voltage); Serial.println(" volts");
// now print out the temperature
float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500
mV offset
//to degrees ((volatge - 500mV) times 100)
Serial.print(temperatureC); Serial.println(" degress C");
// now convert to Fahrenheight
float temperatureF = (temperatureC * 9 / 5) + 32;
Serial.print(temperatureF); Serial.println(" degress F");
delay(1000);
}
CODIGO MAS ELEMENTAL DE SENSOR DE TEMPERATURA
int sensorTemp=A1;
void setup() {
pinMode(sensorTemp, INPUT);
Serial.begin(9600);
}
void loop() {
int temperatura = analogRead(sensorTemp);
delay(10);

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-224-

temperatura = 5.0*temperatura*100.0/1024.0;
Serial.println(temperatura);
delay(100);
}

SIMULACION DE SENSOR DE TEMPERATURA CON LM35 Y PROTEUS

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;

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

Serial.print(" Grados F ");Serial.println(temperatureF);


delay(400);
}
SENSOR DE TEMPERATURA CON LCD

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-

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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-

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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()
{

int temperatura = analogRead(sensorTemp);


delay(10);
temperatura = 5.0*temperatura*100.0/1024.0;
Serial.println(temperatura);
int Unidades = temperatura %10 ;
int Decenas = (temperatura % 100) / 10 ;
int
Centenas = (temperatura % 1000) / 100 ;
for (i=1;i<=10;i++)
{ imprimir( Unidades, 0);//unidades
delay(2);
imprimir( Decenas, 1);//unidades//
delay(2);
imprimir( Centenas, 2);//unidades//
delay(2);
}
}
SENSORES DE DISTANCIA

-227-

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-228-

El sensor Ping))) El sensor digital de distancia Ping))). De Parallax es capaz de medir


distancias entre aproximadamente 3 cm y 3 m. Esto lo consigue enviando un
ultrasonido (es decir, un sonido de una frecuencia demasiado elevada para poder ser
escuchado por el odo humano) a traves de un transductor (uno de
los cilindros que se aprecian en la figura lateral) y espera a que este ultrasonido rebote
sobre un objeto y vuelva, retorno que es detectado por el otro transductor. El sensor
devuelve el tiempo transcurrido entre el envio y la posterior recepcion del ultrasonido.
Como la velocidad de propagacin de cualquier (ultra)sonido en un medio como el aire
es de valor conocido (consideraremos que es de 340 m/s .o lo que es lo mismo, 0,034
cm/s., aunque esta sea solo una aproximacion) este tiempo transcurrido lo podremos
utilizar para determinar la distancia entre el sensor y el objeto que ha provocado su
rebote.
EJERCICIOS CON SENSORES
Sensor de distancias ULTRASONICO HC-SR04
Fuente
http://elcajondeardu.blogspot.pe/2014/03/tutorial-sensor-ultrasonidoshc-sr04.html
Sensor de distancias ULTRASONICO HC-SR04
El sensor HC-SR04
Este sensor es muy parecido a los anteriores. Dispone de cuatro pines: VCC (se ha
de conectar a una fuente de 5 V), Trig (responsable de enviar el pulso ultrasnico; por
tanto, se deber conectar a un pin de salida digital de la placa Arduino), Echo
(responsable de recibir el eco de ese pulso; luego se deber conectar a un pin de
entrada digital de la placa Arduino) y GND (a tierra). Se puede
adquirir en IteadStudio o Elecfreaks por menos de diez euros.
El sensor de ultrasonidos se enmarca dentro de los sensores para medir distancias o
superar obstculos, entre otras posibles funciones.
En este caso vamos a utilizarlo para la medicin de distancias. Esto lo consigue
enviando un ultrasonido (inaudible para el odo humano por su alta frecuencia) a travs
de uno de la pareja de cilindros que compone el sensor (un transductor) y espera a que
dicho sonido rebote sobre un objeto y vuelva, retorno captado por el otro cilindro.
Este sensor en concreto tiene un rango de distancias sensible entre 3cm y 3m con una
precisin de 3mm.

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-230-

/*
Sensor de proximidad y al ser inferior a 10cm envia un pulso de alarma por el pin
13

CODIGO DEL ARDUINO


int Pecho= 6;
int Ptrig= 7;
long duracion, distancia;
void setup() {
Serial.begin (9600);
// inicializa el puerto seria a 9600 baudios
pinMode(Pecho, INPUT); // define el pin 6 como entrada (echo)
pinMode(Ptrig, OUTPUT); // define el pin 7 como salida (triger)
pinMode(13, 1);
// Define el pin 13 como salida
}
void loop() {
digitalWrite(Ptrig, LOW);
delayMicroseconds(10);

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-231-

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"
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
}
delay(400);
// espera 400ms para que se logre ver la distancia en la consola
}
Sensor de distancia
Elaborar una Aplicacion que cambie el color de las luces RGB de acuerdo a la altura
detectada . por ejemplo al mover la mano
int Rojo=11;
int Verde=10;
int Azul=9;
int valor=0;
int Pecho= 6;
int Ptrig= 7;
long duracion, distancia;
void setup() {
pinMode(Rojo,OUTPUT);//D
pinMode(Verde,OUTPUT);//D
pinMode(Azul,OUTPUT);//D
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()
{ int valor=10;
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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-233-

Modificar el ejercicio anterior al mover la mano que varie el sonido de acuerdo a


una altura se puede un guitarra elctrica con luces de colores

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
}

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-234-

Mostrar las distancias en un LCD


CODIGO DEL ARDUINO
#include <LiquidCrystal.h>
LiquidCrystal lcd(11, NULL, 12, 7, 8, 9, 10);
int Pecho= 5;
int Ptrig= 6;
long duracion, distancia;
void setup() {
lcd.begin(16, 2);
Serial.begin (9600);
// inicializa el puerto seria a 9600 baudios
pinMode(Pecho, INPUT); // define el pin 6 como entrada (echo)
pinMode(Ptrig, OUTPUT); // define el pin 7 como salida (triger)
}
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"
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DIST CM");
lcd.setCursor(0,1);
lcd.print(distancia);
}
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
}
delay(400);
// espera 400ms para que se logre ver la distancia en la consola
}
MOSTRAR LAS DISTANCIAS SENSADAS EN CONTADOR DE 3 DIGITOS

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

int Peco=A1;// eco al lado de la tierralado del fuente v era 6


int Penviado=12; // el que envia al lado del fuentes;
long duracion, distancia;
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 lectura =0,i;
void setup() {
for (i=2; i<9;i++)
pinMode(i, OUTPUT);
pinMode(CUnidades, OUTPUT); // unidades
pinMode(CDecenas, OUTPUT);//decenas
pinMode(CCentenas, OUTPUT);//centenas
Serial.begin (9600);
// inicializa el puerto seria a 9600 baudios
pinMode(Peco, INPUT); // define el pin 6 como entrada (echo)
pinMode(Penviado, OUTPUT); // define el pin 7 como salida (triger)
}
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

-235-

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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-

// turn the LED on (HIGH is the voltage level)


// turn the LED on (HIGH is the voltage level)
// turn the LED on (HIGH is the voltage level)
// turn the LED on (HIGH is the voltage level)
// turn the LED on (HIGH is the voltage level)
// turn the LED on (HIGH is the voltage level)

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-240-

Al final slo queda visualizar en el monitor serial y vemos que visualiza la humedad y la
temperatura cada 2 segundos.

Otro documento de internet

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

3Vdc Vcc 5Vdc

3.3Vdc Vcc 6Vdc

Seal de Salida

Digital

Digital

Rango de medida Temperatura

De 0 a 50 C

De -40C a 80 C

Precisin Temperatura

2 C

<0.5 C

Resolucin Temperatura

1C

0.1C

Rango de medida Humedad

De 20% a 90% RH

De 0 a 100% RH

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Descargar Libreria DHT11

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)

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Haga Click para agrandar


Este sensor es capaz de detectar un movimiento a una distancia de unos 20 pies (6
metros) del mismo. Emplea lentes Fresnel y sensores infra rojos para detectar los
cambios de infra rojos pasivos emitidos por cualquier objeto. Es extremadamente fcil
de usar e ideal para aplicaciones de control de presencia, sistemas de alarmas,
deteccin de movimiento, robtica, etc.. Se alimenta con una nica tensin de
alimentacin de +5Vcc y dispone de una salida que se activa al detectar el movimiento.
Esta salida se puede conectar con la entrada de cualquier controlador o
microcontrolador.
Sus reducidas dimensiones (32 x 24 x 25 mm) permiten instalar el sensor en cualquier
tipo de estructura.

Aqu se puede descargar la informacin tcnica facilitada por Parallax.

Antes de nada, decir que el sensor lo he adquirido en la tienda:


http://www.bricogeek.com/shop/42-sensor-de-movimiento-pir.html

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

El cdigo asociado al ejemplo es:


int pirPin = 6; //Pin digital 6
int ledPin = 13; //Led de alarma
void setup(){
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
int pirVal = digitalRead(pirPin);
if(pirVal == LOW)
{
//Movimiento detectado
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
}
}
Conexion

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

/* * 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
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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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).

/* * @ Autor: Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at


* Publicado bajo Creative Commons "Reconocimiento-No comercial-Compartir bajo la
misma de 2,0" de licencia
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
* http://www.ladyada.net/learn/sensors/pir.html
*
* la salida del PIR es HIGH cuando se detecta movimiento, pero a veces va a LOW
incluso cuando hay movimiento,
* para arreglar esto, no le hacemo caso a fases LOW mas cortas que un tiempo dado
PAUSE y suponemos que sigue habiendo movimiento
* Solo me creo que no hay moviemiento cuando no lo detecto mas de PAUSE
segundos (5 secs default)
* */
/////////////////////////////
//VARS
//El tiempo que nos da el sensor a calibrar (10-60 segundos de acuerdo con la hoja de
datos)
int calibrationTime = 10;
// si no hay movimiento en este tiempo me creo de verdad que no lo hay
long unsigned int pause = 4000;
long unsigned int lowIn; // el sensor detecta que no hay movimiento
boolean lockLow = true; // mientras sea false estoy decidiendo si ha parado el
movimiento de verdad o no
boolean takeLowTime;
int pirPin = 2; //pin digital conectado a la salida del sensor PIR
int ledPin = 13;
/////////////////////////////
//SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(pirPin, LOW);
//Dar el sensor de un cierto tiempo para calibrar
Serial.print(" calibrando sensor ");

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-247-

for(int i = 0; i < calibrationTime; i++){


Serial.print(".");
delay(1000);
}
Serial.println("SENSOR ACTIVADO");
delay(50);
}
////////////////////////////
//LOOP
void loop(){
if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH); //LED visualiza el estado de la salida del sensor
if(lockLow){
// solo paso por aqui cuando la deteccion es nueva, es decir cuando lockLow es
TRUE, y solo es TRUE cuando pasa por la deteccion de NO movimiento
lockLow = false;
Serial.println("---");
Serial.print("movimiento encontrado a los ");
Serial.print(millis()/1000);
Serial.println(" segundos ");
delay(50);
}
takeLowTime = true; // Si lockLow no esta bloqueado
}
else{
digitalWrite(ledPin, LOW); //LED visualiza el estado de la salida del sensor
if(takeLowTime){
// solo paso por aqui despues de haber detectado
movimiento
//en las siguientes vueltas si sigue sin haber movimiento ya no
necesito guardar el timepo en el que el movimiento par
lowIn = millis();
// guardar el momento de la transicin de alta a baja
takeLowTime = false;
// asegurarse de que esto slo se hace al comienzo
de una fase de baja
}
//Si el sensor esta LOW mas tiempo que PAUSE, es que el movimiento ha
parado de verdad
if(!lockLow && millis() - lowIn > pause){
// lockLow solo es FALSE cuando se ha detectado movimiento de nuevo, es
decir solo paso por aqui cuando hay nueva deteccion
lockLow = true;
Serial.print("movimiento detenido a los ");
Serial.print((millis() - pause)/1000);
Serial.println(" segundos ");
delay(50);
}
}
}

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

#simplest ruby program to read from arduino serial,


#using the SerialPort gem
#(http://rubygems.org/gems/serialport)
require "rubygems"
require "serialport"
require 'net/smtp'
def send_email(txt)
from_email = "from@prueba.es"
from_name = "desde"
pass = "12345"
to_email = "parati@ejemplo.es"
to_name = "tunombre"
from = "From: #{from_name}<#{from_email}>"
to = "To: #{to_name}<#{to_email}>"
headers = "MIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8"
subject = "Subject: #{txt}"
body = "<html>\n<body>\n<div style='fontsize:20px;color:#cc6600;'>alarma</div>texto<br>firmado, yo\n</body>\n</html>"
msg = "#{from}\n#{to}\n#{headers}\n#{subject}\n\n#{body}"
smtp = Net::SMTP.new 'smtp.gmail.com', 587
smtp.enable_starttls
smtp.start('gmail.com', from_email, pass, :login) do
smtp.send_message(msg, from_email, to_email)
end

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

rangos de fuerza (productos n 11207, 8685, 8712 o 8713, entre otros).


Implementar un piano elctrico ( las teclas son sensores de fuerza)

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-252-

Fuerza de actuacin: 30g min.


Rango de sensibilidad: 30 a 10,000g.
Repetitividad: 5%.
Resistencia sin carga: 20 MOhms.
Histresis: 10%.
Tiempo de respuesta: <1ms.
Rango de temperatura: -30C a 70C.
Ancho: 0.05 mm.
Rendimiento: 100 K (presin ligera) a 200 (mx. presin)
Gama Fuerza: 0 a 20 libras (0 a 100 Newtons)
Sensor de Fuerza o Presin con Arduino UNO
El objetivo de esta prctica es verificar la funcionalidad del sensor de presin, poniendo
un led que amplifique su intensidad, dependiente de la presin en el sensor, y haciendo
la medicin del voltaje aplicado.

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.

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Vista de Monitor Serial


Cmo se mide la fuerza / presin con este Sensor?
Como hemos dicho, la resistencia del sensor cambia a medida que se aplica ms
presin. Cuando no hay presin, el sensor se parece a una resistencia infinita (circuito
abierto), ya que la presin aumenta, la resistencia disminuye. Este grfico indica
aproximadamente la resistencia del sensor en diferentes mediciones de la
fuerza. (Tenga en cuenta que la fuerza no se mide en gramos y lo que realmente quiere
decir es Newtons * 100)

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-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

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. En este
ejemplo se ha utilizado como entrada digital para distinguir dos colores: blanco o negro.
Cando 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. El CNY70
tiene cuatro terminales.

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

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

Productos Necesarios para la Utilizacin}


Arduino Uno
Sensor CNY70
Cdigo de Programacion
//Sketch de deteccin por infrarrojo //27 de mayo de 2013 www.archiduke.net
int pinReceptor = A0; //Guardamos en esta variable el pin Analgico
int sensorVal;
void setup(){
Serial.begin(9600); // Abrir comunicacin por Serial
}
void loop(){
sensorVal = analogRead(pinReceptor);
Serial.println(sensorVal); // Leer el valor del Pin y escribirlo
delay(500);
}
Photoelectric sensor

-259-

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-260-

From Wikipedia, the free encyclopedia


Jump to: navigation, search

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).

Conceptual through-beam system to detect unauthorized access to a secure door. If the


beam is broken, the detector triggers some remote alerting device.
Contents
[hide]
1 Types
2 Sensing modes
o 2.1 Difference Between Modes
3 See also
4 References
Types[edit]
A self-contained photoelectric sensor contains the optics, along with the electronics. It
requires only a power source. The sensor performs its

Medicin de distancias con una


cmara web y un puntero lser
Basado en el artculo original de Todd Danko, con ttulo
Webcam Based DIY Laser Rangefinder,
que a su vez se basa en el tutorial
Details of the Laser Range finder.
Traducido con autorizacin del autor.
Introduccin

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

Existen en el mercado muchos medidores de distancia (o telmetros) en


base a ultrasonido, infrarrojo y hasta con sistema lser. Todos estos
dispositivos cumplen bien su funcin, pero en el campo de la robtica
area, el peso del dispositivo es
una cuestin primordial. Cada
componente que se agrega a la
estructura de un avin debe tener
un mximo de utilidad y eficiencia.
Una nave area robtica miniatura
puede llevar apenas 100 gramos de
carga til.
(Esto es vlido, tambin, para
cualquier robot mvil, aunque
sea terrestre, porque en estos
casos tambin es

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-

Gua de practica ai2015B \Motores paso a paso \Ismael Vliz Vilca

-262-

// We only want to print on the output change, not state


pirState = LOW;
}
}
delay(10);
}
C:\Users\ismael\AppData\Local\Temp\build3123681151247002939.tmp\MANEJO_DE_
CADENAS.cpp.hex

Anda mungkin juga menyukai