Está en la página 1de 23

UNIVERSIDAD NACIONAL DE SAN

ANTONIO ABAD DEL CUSCO


FACULTAD DE INGENIERÍA, ELECTRÓNICA,
INFORMÁTICA Y MECÁNICA
ESCUELA PROFESIONAL DE INGENIERÍA INFORMÁTICA
Y DE SISTEMAS

ROBÓTICA Y PROCESAMIENTO DE SEÑALES

“SENSOR DE LUZ, PROXIMIDAD, TEMPERATURA, HUMEDAD Y GAS

CON SERVO MOTOR”

DOCENTE: Ing. Jose Mauro Pillco Quispe


PRESENTADO POR:
CARBAJAL BACILIO KAREN ALEXSANDRA 130734
PACCO QUISPE DEIVE 113564
PIMENTEL CRUZ JIMMY 103646
PUCLLA SEGARRA ERWIN 133582

CUSCO-PERÚ
2017-II
Índice
1. COMPONENTES...............................................................................................................3
1.1. Arduino ........................................................................................................................3
1.2. Servo motor ................................................................................................................3
1.3. Sensor de Proximidad ...............................................................................................4
1.4. Sensor de Luz ............................................................................................................5
1.5. Sensor de Temperatura ............................................................................................5
1.6. Sensor de Humedad .....................................................................................................6
1.7. Sensor de Gas ...........................................................................................................6
2. SENSOR DE PROXIMIDAD CON SERVO MOTOR ....................................................7
2.1. Diagrama del circuito.................................................................................................7
2.2. Código Fuente ............................................................................................................7
2.2.1. Código Arduino...................................................................................................7
2.2.2. Código Aplicación ............................................................................................10
2.3. Video tutorial.............................................................................................................15
3. SENSOR DE LUZ CON SERVO MOTOR ...................................................................16
3.1. Diagrama del circuito...............................................................................................16
3.2. Código Fuente ..........................................................................................................16
3.3. Video tutorial.............................................................................................................17
4. SENSOR DE GAS CON SERVO MOTOR ..................................................................18
4.1. Diagrama del circuito...............................................................................................18
4.2. Código Fuente..........................................................................................................18
4.3. Video tutorial.............................................................................................................19
5. SENSOR DE TEMPERATURA CON SERVO MOTOR .............................................20
5.1. Diagrama del circuito...............................................................................................20
5.2. Código Fuente ..........................................................................................................20
5.3. Video tutorial.............................................................................................................21
6. SENSOR DE HUMEDAD CON SERVO MOTOR .......................................................22
6.1. Diagrama del circuito...............................................................................................22
6.2. Código Fuente ..........................................................................................................22
6.3. Video tutorial.............................................................................................................23
1. COMPONENTES
1.1. Arduino
Arduino es una plataforma de hardware libre, basada en una placa con un
microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso
de la electrónica en proyectos multidisciplinares.
El hardware de Arduino es básicamente una placa con un
microcontrolador. Un microcontrolador (abreviado µC, UC o MCU) es un
circuito integrado programable, capaz de ejecutar las órdenes grabadas
en su memoria. Está compuesto de varios bloques funcionales, los cuales
cumplen una tarea específica. Un microcontrolador incluye en su interior
las tres principales unidades funcionales de una computadora: unidad
central de procesamiento, memoria y periféricos de entrada/salida.
Las shields se pueden comunicar con el arduino bien por algunos de los
pines digitales o analógicos o bien por algún bus como el SPI, I2C o puerto
serie, así como usar algunos pines como interrupción. Además estas
shields se alimentan generalmente a través del Arduino mediante los
pines de 5V y GND. Cada Shield de Arduino debe tener el mismo factor
de forma que el estándar de Arduino con un espaciado de pines concreto
para que solo haya una forma posible de encajarlo.

1.2. Servo motor


Es un motor eléctrico pero con dos características especiales. Por un lado,
nos permite mantener una posición que indiquemos, siempre que esté
dentro del rango de operación del propio dispositivo. Por otro lado nos
permite controlar la velocidad de giro, podemos hacer que antes de que
se mueva a la siguiente posición espere un tiempo. El ejemplo más típico
es un coche teledirigido, esos que utilizan los niños y no tan niños. Estos
juguetes suelen tener un mando a distancia donde podemos controlar la
velocidad y el giro del coche. Precisamente el giro se suele hacer con un
servomotor donde indicamos, en cada momento, la posición o el ángulo
de giro que queremos que tenga en un preciso momento.
Cosas a tener en cuenta con este dispositivo. Lo primero, el ángulo de
giro, en este caso nos permite hacer un barrido entre -90º y 90º. Lo que
viene a ser un ángulo de giro de 180º. Tiene una precisión de un grado es
decir, podemos mover de grado en grado. Estos motores funcionan con
una señal PWM, con un pulso de trabajo entre 1 ms y 2 ms y con un
periodo de 20 ms (50 Hz).

1.3. Sensor de Proximidad


El HC-SR04 es un sensor de distancias por ultrasonidos capaz de
detectar objetos y calcular la distancia a la que se encuentra en un rango
de 2 a 450 cm. El sensor funciona por ultrasonidos y contiene toda la
electrónica encargada de hacer la medición. Su uso es tan sencillo como
enviar el pulso de arranque y medir la anchura del pulso de retorno. De
muy pequeño tamaño, el HC-SR04 se destaca por su bajo consumo,
gran precisión y bajo precio por lo que está reemplazando a los sensores
polaroid en los robots más recientes.
De fácil uso y programación con las placas de Arduino y
microcontroladores.
Características

 Dimensiones del circuito: 43 x 20


x 17 mm
 Tensión de alimentación: 5 Vcc
 Frecuencia de trabajo: 40 KHz
 Rango máximo: 4.5 m
 Rango mínimo: 1.7 cm
 Duración mínima del pulso de disparo (nivel TTL): 10 μS.
 Duración del pulso eco de salida (nivel TTL): 100-25000 μS.
 Tiempo mínimo de espera entre una medida y el inicio de otra 20
mS.
Pines de conexión:

 VCC
 Trig (Disparo del ultrasonido)
 Echo (Recepción del ultrasonido)
 GND
1.4. Sensor de Luz
Un sensor de luz detecta la iluminancia. Miden la cantidad de luz que llega
a una célula fotoeléctrica (básicamente una resistencia). La resistencia es
baja con luz y alta con oscuridad.
Es decir, Un Sensor fotoeléctrico es un dispositivo electrónico que
responde al cambio en la intensidad de la luz. Estos sensores requieren
de un componente emisor que genera la luz, y un componente receptor
que “ve” la luz generada por el emisor. Están diseñados especialmente
para la detección, clasificación y posicionado de objetos; la detección de
formas, colores y diferencias de superficie, incluso bajo condiciones
ambientales extremas.

1.5. Sensor de Temperatura


Los sensores de temperatura son dispositivos que transforman los
cambios de temperatura en cambios en señales eléctricas que son
procesados por equipo eléctrico o electrónico.

Hay tres tipos de sensores de temperatura, los termistores, los RTD y los
termopares.

El sensor de temperatura típicamente suele estar formado por el elemento


sensor, de cualquiera de los tipos anteriores, la vaina que lo envuelve y
que está rellena de un material muy conductor de la temperatura, para
que los cambios se transmitan rápidamente al elemento sensor y del cable
al que se conectarán el equipo electrónico.

El LM35 es un sensor de temperatura digital. A


diferencia de otros dispositivos como los
termistores en los que la medición de
temperatura se obtiene de la medición de su
resistencia eléctrica, el LM35 es un integrado
con su propio circuito de control, que
proporciona una salida de voltaje proporcional
a la temperatura.

La salida del LM35 es lineal con la temperatura, incrementando el valor a


razón de 10mV por cada grado centígrado. El rango de medición es de -
55ºC (-550mV) a 150ºC (1500 mV). Su precisión a temperatura ambiente
es de 0,5ºC.
1.6. Sensor de Humedad
El DHT11 permite realizar la medición simultánea de temperatura y
humedad.

Este sensor dispone de un procesador interno que realiza el proceso de


medición, proporcionando la medición mediante una señal digital, por lo
que resulta muy sencillo obtener la medición desde un microprocesador
como Arduino.

Las características del DHT11 son realmente escasas, especialmente en


rango de medición y precisión.
 Medición de temperatura entre 0 a 50, con una precisión de 2ºC
 Medición de humedad entre 20 a 80%, con precisión del 5%.
 Frecuencia de muestreo de 1 muestras por segundo (1 Hz)

El DHT11 es un sensor muy limitado que podemos usar con fines de


formación, pruebas, o en proyectos que realmente no requieran una
medición precisa.

1.7. Sensor de Gas


El sensor de gas analógico (MQ2) es adecuado para la detección de gas
LP, i-butano, propano, metano, alcohol, hidrógeno, tiene una alta
sensibilidad, un tiempo de respuesta rápido y dicha sensibilidad puede ser
ajustada por el potenciómetro.
Este pequeño sensor de gas detecta la presencia de gas combustible y
humo en concentraciones de 300 a 10.000 ppm. Incorpora una sencilla
interfaz de tensión analógica que únicamente requiere un pin de entrada
analógica del microcontrolador. Con la conexión de cinco voltios en los
pines el sensor se mantiene lo suficientemente caliente para que funcione
correctamente. Solo tiene que conectar 5V a cualquiera de los pines (A o
B) para que el sensor emita tensión. La sensibilidad del detector se ajusta
con una carga resistiva entre los pines de salida y tierra.
2. SENSOR DE PROXIMIDAD CON SERVO MOTOR
2.1. Diagrama del circuito

2.2. Código Fuente


2.2.1. Código Arduino
// Incluye la biblioteca Servo //
Includes the Servo library

#include <Servo.h>

// Define los pines Tirg y Echo del sensor ultrasónico

const int trigPin = 10;

const int echoPin = 11;

// Variables para la duración y la distancia

long duration;

int distance;

Servo myServo; // Crea un objeto servo para controlar el servomotor

void setup()

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

pinMode(7,OUTPUT);

pinMode(trigPin, OUTPUT); // Establece el trigPin como salida

pinMode(echoPin, INPUT); // Establece el echoPin como entrada

Serial.begin(9600);
myServo.attach(12); // Define en qué pin está el servomotor conectado

void loop()

digitalWrite(5,LOW);//ROJO

digitalWrite(7,LOW);//VERDE

// gira el servomotor de 15 a 165 grados

for(int i=0;i<=180;i+=5)

digitalWrite(5,LOW); //ROJO

digitalWrite(7,HIGH); //ROJO

myServo.write(i);

delay(500);

distance = calculateDistance();// Llama a una función para calcular la distancia


medida por el sensor ultrasónico para cada grado

Serial.print(i); // Envía el grado actual en el puerto serie

Serial.print(","); // Envía el carácter de adición justo al lado del valor anterior


necesario más tarde en el IDE de procesamiento para la indexación

Serial.print(distance); // Envía el valor de la distancia al puerto serie

Serial.print("."); // Envía el carácter de adición justo al lado del valor anterior


necesario más tarde en el IDE de procesamiento para la indexación

if(i==90)

digitalWrite(5,LOW);

digitalWrite(7,LOW);

digitalWrite(6,HIGH);

else

digitalWrite(6,LOW);

}
// Repite las líneas anteriores de 165 a 15 grados

for(int i=180;i>0;i-=5)

digitalWrite(7,LOW); //ROJO

digitalWrite(5,HIGH);

myServo.write(i);

delay(500);

distance = calculateDistance();

Serial.print(i);

Serial.print(",");

Serial.print(distance);

Serial.print(".");

if(i==90)

digitalWrite(5,LOW);

digitalWrite(7,LOW);

digitalWrite(6,HIGH);

else

digitalWrite(6,LOW);

// Función para calcular la distancia medida por el sensor ultrasónico

int calculateDistance(){

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

// Establece el trigPin en estado ALTO durante 10 micro segundos

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH); // Lee el echoPin, devuelve el tiempo de viaje de


la onda de sonido en microsegundos

distance= duration*0.034/2;

return distance;

2.2.2. Código Aplicación


import processing.serial.*; // importa la biblioteca para comunicación serial

import java.awt.event.KeyEvent; // importa la biblioteca para leer los datos del puerto
serial

import java.io.IOException;

Serial myPort;// define el objeto en la serie

// de sus variables

String angle="";

String distance="";

String data="";

String noObject;

float pixsDistance;

int iAngle, iDistance;

int index1=0;

int index2=0;

PFont orcFont;

void setup()

size (720, 480); // *** CAMBIE ESTO A SU PANTALLA RESOLUCIÓN ***

smooth();

myPort = new Serial(this,"COM3", 9600); // inicia la comunicación serial


myPort.bufferUntil('.'); // lee los datos del puerto serie hasta el caracter '.'. Entonces
realmente lee esto: ángulo, distancia.

//orcFont = loadFont("OCRAExtended-30.vlw");

void draw()

fill(209, 242, 235); // 98,245,31

//textFont(orcFont);

// simulando el desenfoque de movimiento y el desvanecimiento lento de la línea de


movimiento

noStroke();

fill(0,4);

rect(0, 0, width, height-height*0.065);

fill(192, 192, 192); // color verde 98,245,31

// llama a las funciones para dibujar el radar

drawRadar();

drawLine();

drawObject();

drawText();

void serialEvent (Serial myPort) { // comienza a leer datos del puerto serie

// lee los datos del puerto serie hasta el caracter '.' y lo pone en la variable "datos" de
String.

data = myPort.readStringUntil('.');

data = data.substring(0,data.length()-1);

index1 = data.indexOf(",");// encuentra el caracter ',' y lo pone en la variable "index1"

angle= data.substring(0, index1); // lee los datos de la posición "0" a la posición de la


variable índice1 o el valor del ángulo que la placa Arduino envió al puerto serie

distance= data.substring(index1+1, data.length());// lee los datos de la posición


"index1" al final de los datos pr ese es el valor de la distancia
// convierte las variables String en Entero

iAngle = int(angle);

iDistance = int(distance);

void drawRadar() {//dibujarRadar

pushMatrix();

translate(width/2,height-height*0.074); // mueve las coordinadas iniciales a la nueva


ubicación

noFill();

strokeWeight(1);

stroke(255,255,255);//98,245,31

// dibuja las líneas de arco

arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);

arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);

arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);

arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);

// dibuja las líneas de ángulo

line(-width/2,0,width/2,0);

line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));

line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));

line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));

line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));

line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));

line((-width/2)*cos(radians(30)),0,width/2,0);

popMatrix();

void drawObject() {

pushMatrix();
translate(width/2,height-height*0.074); // mueve las coordinadas iniciales a la nueva
ubicación

strokeWeight(3);

stroke(255,10,10); // red color 255,10,10

pixsDistance = iDistance*((height-height*0.1666)*0.025); // cubre la distancia desde


el sensor de cm a píxeles

// limitando el rango a 40 cms

if(iDistance<40)

// dibuja el objeto según el ángulo y la distancia

line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-
width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));

//***********************************

textSize(15);

fill(255,10,10);

text(str(iDistance),(width-width*0.505)*cos(radians(iAngle))+10,-(width-
width*0.505)*sin(radians(iAngle))-5);

popMatrix();

void drawLine() {

pushMatrix();

strokeWeight(1);

stroke(30,250,60);

translate(width/2,height-height*0.074); // mueve las coordinadas iniciales a la nueva


ubicación

line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-
height*0.12)*sin(radians(iAngle))); // dibuja la línea según el ángulo

popMatrix();

void drawText()

{ // dibuja los textos en la pantalla


pushMatrix();

if(iDistance>40)

noObject = "";

else

noObject = "";

fill(0,0,0);

noStroke();

rect(0, height-height*0.0648, width, height);

fill(192, 192, 192);

textSize(12);

text("10cm",width-width*0.3854,height-height*0.0833);

text("20cm",width-width*0.281,height-height*0.0833);

text("30cm",width-width*0.177,height-height*0.0833);

text("40cm",width-width*0.0729,height-height*0.0833);

textSize(15);

text("Objecto: " + noObject, width-width*0.875, height-height*0.0277);

text("Angulo: " + iAngle +" °", width-width*0.48, height-height*0.0277);

text("Distancia: ", width-width*0.26, height-height*0.0277);

if(iDistance<40)

text(" " + iDistance +" cm", width-width*0.225, height-height*0.0277);

textSize(12);//////////////////////////

fill(255,255,255);//98,245,60
translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-
width/2*sin(radians(30)));

rotate(-radians(-60));

text("30°",0,0);

resetMatrix();

translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-
width/2*sin(radians(60)));

rotate(-radians(-30));

text("60°",0,0);

resetMatrix();

translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-
width/2*sin(radians(90)));

rotate(radians(0));

text("90°",0,0);

resetMatrix();

translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-
width/2*sin(radians(120)));

rotate(radians(-30));

text("120°",0,0);

resetMatrix();

translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-
width/2*sin(radians(150)));

rotate(radians(-60));

text("150°",0,0);

popMatrix();

2.3. Video tutorial


https://www.youtube.com/watch?v=9L7EQg3pvg8&feature=youtu.be
3. SENSOR DE LUZ CON SERVO MOTOR
3.1. Diagrama del circuito

3.2. Código Fuente


#include <Servo.h>

Servo servoMotor;

void setup()

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

pinMode(7,OUTPUT);

//Configurar el puerto serial

Serial.begin(9600);

// Iniciamos el servo para que empiece a trabajar con el pin 9

servoMotor.attach(12);

// the loop function runs over and over again forever

void loop()

digitalWrite(7,LOW);//verde

digitalWrite(6,LOW);//amarillo

digitalWrite(5,LOW);//rojo

int valorLDR = analogRead(1); //sensor de luz


Serial.print(valorLDR);

Serial.print(",");

Serial.print(valorLDR);

Serial.print(".");

if(valorLDR < 150)

servoMotor.write(0);

digitalWrite(5,HIGH);//No hay luz

//Serial.println(" Muy poca luz");

else if(valorLDR <300)

servoMotor.write(90);

digitalWrite(6,HIGH);//Transicion

//Serial.println(" Luz en transicion");

else

servoMotor.write(180);

digitalWrite(7,HIGH);//Luz

//Serial.println(" Mucha luz");

delay(2000);

3.3. Video tutorial


https://www.youtube.com/watch?v=lm8Pm_FVjjM
4. SENSOR DE GAS CON SERVO MOTOR
4.1. Diagrama del circuito

4.2. Código Fuente


#include <Servo.h>

Servo servoMotor;

int rojo=5; //definimos el valor del pin para el led rojo

int amarillo=6; //definimos el valor del pin para el led amarillo

int verde=7; //definimos el valor del pin para el led verde

void setup()

Serial.begin(9600);

pinMode(rojo,OUTPUT); //declaramos el pin rojo como salida

pinMode(amarillo,OUTPUT);//declaramos el pin amarillo como salida

pinMode(verde,OUTPUT); //declaramos el pin verde como salida Iniciamos el servo


para que empiece a trabajar con el pin 9

servoMotor.attach(12);

void loop()

digitalWrite(rojo,LOW);

digitalWrite(verde,LOW);

digitalWrite(amarillo,LOW);
int gas = (analogRead(0));

Serial.print(gas);

Serial.print(",");

Serial.print(gas);

Serial.print(".");

if(gas < 90)

digitalWrite(verde,HIGH);//Sin presencia de gas

servoMotor.write(0);

}else if (gas <150)

digitalWrite(amarillo,HIGH);//Con poca presencia de gas

servoMotor.write(90);

}else

digitalWrite(rojo,HIGH);//Alta presencia de gas

servoMotor.write(180);

delay(2000);

4.3. Video tutorial


https://www.youtube.com/watch?v=9e4A4yrYc1w
5. SENSOR DE TEMPERATURA CON SERVO MOTOR
5.1. Diagrama del circuito

5.2. Código Fuente


#include <Servo.h>

Servo servoMotor;

void setup() {

// initialize digital pin 13 as an output.

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

pinMode(7,OUTPUT);

//Configurar el puerto serial

Serial.begin(9600);

// Iniciamos el servo para que empiece a trabajar con el pin 9

servoMotor.attach(12);

// the loop function runs over and over again forever

void loop()

digitalWrite(7,LOW);//verde

digitalWrite(6,LOW);//amarillo

digitalWrite(5,LOW);//rojo

int lectura = analogRead(2);


int F = (lectura/1023.0)*5000; //(value / 1023.0) * 5000 //celsius = millivolts / 10;

int temperatura = F/10;

Serial.print(temperatura);

Serial.print(",");

Serial.print(temperatura);

Serial.print(".");

//Serial.println(" grados centigrados");

if(temperatura < 21)

servoMotor.write(temperatura);

digitalWrite(7,HIGH);//Verde Temperatura Baja

else

if(temperatura < 27)

servoMotor.write(temperatura);

digitalWrite(6,HIGH);//Amarillo Temperatura Ambiente

else

servoMotor.write(temperatura);

digitalWrite(5,HIGH);//Rojo Temperatura Alta

delay(1000);

5.3. Video tutorial


https://www.youtube.com/watch?v=5qQnPMUAHfo
6. SENSOR DE HUMEDAD CON SERVO MOTOR
6.1. Diagrama del circuito

6.2. Código Fuente


#include <DHT.h>

#include <Servo.h>

#define DHTTYPE DHT11

Servo servoMotor;

int PinDHT = 10;

DHT dht(PinDHT,DHTTYPE);

void setup()

//Configurar los puertos de salida

pinMode(7,OUTPUT);

pinMode(6,OUTPUT);

pinMode(5,OUTPUT);

//Configurar el puerto serial

Serial.begin(9600);

// Iniciamos el servo para que empiece a trabajar con el pin 9

servoMotor.attach(12);

// the loop function runs over and over again forever


void loop()

digitalWrite(7,LOW);//verde

digitalWrite(5,LOW);//rojo

digitalWrite(6,LOW);//amarillo

int hum = dht.readHumidity();

//Serial.print("Humedad: ");

Serial.print(hum);

Serial.print(",");

Serial.print(hum);

Serial.print(".");

if(hum < 60)

servoMotor.write(hum);

digitalWrite(7,HIGH);//Verde Humedad Baja

}else if(hum < 65)

servoMotor.write(hum);

digitalWrite(6,HIGH);//Amarillo Humedad Promedio

}else

servoMotor.write(hum);

digitalWrite(5,HIGH);//Rojo Humedad Alta

delay(1000);

6.3. Video tutorial


https://www.youtube.com/watch?v=fABZ7bRxZXs