En este tutorial veremos tres proyectos muy simples con el sensor ultrasónico HC-SR04 y arduino. El primer proyectos es una barrera para autos automática, donde al retirarse del lugar se abrirá la barrera, pero no mientras esté hablando con el guardia. El segundo proyecto, es un detector de presencia, que sonará cuando detecte la presencia de una persona, muy últi, en un negocio, o en lugar donde no deba circular las personas, de esa forma nos va advertir de la presencia de alguien con un sonido. El tercer proyecto, es un detector de distancia, que nos va a indicar a que distancia hay un objeto, como una pared, mediante un tono, que mientras más cercano esté el objeto más continuo el tono y entre más discontinuo el tono más lejano el objeto.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Componentes electrónicos
Circuito electrónico del proyecto
Materiales del proyecto
Srrvo sg90: Características
- Dimensiones (L x W xH) = 22.0 x 11.5 x 27 mm (0.86 x 0.45 x 1.0 pulgadas)
- Peso: 9 gramos
- Peso con cable y conector: 10.6 gramos
- Torque a 4.8 volts: 16.7 oz/in o 1.2 kg/cm
- Voltaje de operación: 4.0 a 7.2 volts
- Velocidad de giro a 4.8 volts: 0.12 seg / 60 º
- Conector universal para la mayoría de los receptores de radio control
- Compatible con tarjetas como Arduino y microcontroladores que funcionan a 5 volts.
¿Cómo controlar un servomotor?
Puede colocar el eje del servo en varios ángulos de 0 a 180º. Los servos se controlan utilizando una señal de modulación de ancho de pulso (PWM). Esto significa que la señal PWM enviada al motor determinará la posición del eje.
Arduino Nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Modulo Sensor Ultrasonido HC-SR04
El sensor HC-SR04 es una excelente opción como sensor de distancia ultrasónico. Su relación de costo/beneficio lo hace óptimo para un
gran abanico de aplicaciones. El uso de este módulo es bastante sencillo debido a que se toda la electrónica de control, transmisión y
recepción se encuentra contenida en PCB. El usuario solamente debe enviar un pulso de disparo y medir en tiempo alto del pulso de
respuesta. Solamente se requieren 4 cables para completar la interfaz con el módulo de sensor HC-SR04. El HC-SR04 es compatible con la
mayoría de los microcontroladores del mercado, incluyendo el Arduino UNO, Arduino MEGA y otras tarjetas compatibles que funcionen con
5 volts. Existen librerías para este módulo que hacen que la parte del software quede resuelta de manera muy sencilla. Recomendamos
adquirir algunos cables tipo Dupont para poder usar este sensor sin necesidad de realizar soldaduras.
Posee dos transductores: un emisor y un receptor piezoeléctricos, además de la electrónica necesaria para su
operación. El funcionamiento del sensor es el siguiente: el emisor piezoeléctrico emite 8 pulsos de ultrasonido(40KHz) luego de
recibir la orden en el pin TRIG, las ondas de sonido viajan en el aire y rebotan al encontrar un objeto, el sonido de rebote es
detectado por el receptor piezoeléctrico, luego el pin ECHO cambia a Alto (5V) por un tiempo igual al que demoró la onda desde que
fue emitida hasta que fue detectada, el tiempo del pulso ECO es medido por el microcontrolador y asi se puede calcular la distancia al
objeto. El funcionamiento del sensor no se ve afectado por la luz solar o material de color negro (aunque los materiales blandos
acusticamente como tela o lana pueden llegar a ser difíciles de detectar).
Especificaciones:
-Interfaz sencilla: Solamente 4 cables
-Voltaje de Operación: 5V DC
-Corriente de reposo: < 2mA
-Corriente de trabajo: 15mA
-Rango de medición: 2cm a 450cm
-Precisión: +- 3mm
-Ángulo de apertura: 15°
-Frecuencia de ultrasonido: 40KHz
-Duración mínima del pulso de disparo TRIG (nivel TTL): 10 µS
-Duración del pulso ECO de salida (nivel TTL): 100-25000 µS
-Dimensiones: 45mm x 20mm x 15mm
-Tiempo mínimo de espera entre una medida y el inicio de otra 20ms (recomendable 50ms)
Conexion:
-VCC (+5V DC)
-TRIG (Disparo del ultrasonido)
-ECHO (Recepción del ultrasonido)
-GND (0V)
Un Resistor de 1K
Un diodo led rojo de 5 mm
Un palito de helado
Pines hembra
Un Zócalo para arduino
Circuito Impreso PCB
Archivo Gerber –> Gerber_CESTO_DE_RESIDUOS
Código fuente de la barrera para autos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <Servo.h> const int Trigger = 2; //Pin 2 para el Trigger del sensor ultrasónico const int Echo = 3; //Pin 3 para el Eco del sensor ultrasónico int estado = 0; Servo servoMotor1; // crear un objeto servo para controlar el servo void setup() { Serial.begin(9600);//iniciailzamos la comunicación a 9600 bps pinMode(Trigger, OUTPUT); //Se configura como salida pinMode(Echo, INPUT); //Se configura como entrada digitalWrite(Trigger, LOW);//Inicializamos el pin con estado BAJO o LOW servoMotor1.attach(4); // Asignamos el pin 4 para el control del servo servoMotor1.write(21); //Posisción inicial del servo para que quede la tapa cerrada } void loop() { long tiempo; //tiempo que demora en llegar el eco long distancia; //distancia en centimetros digitalWrite(Trigger, HIGH);//Activamos el pin 2 delayMicroseconds(10); //Enviamos un pulso durante 10us digitalWrite(Trigger, LOW); //Desactivamos el pin 2 tiempo = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso y lo asignamos a la variable tiempo distancia = tiempo/59; //Convertimos el tiempo a distancia en cm Serial.print("Distancia: ");//Imprimimos en el terminal serial el valor de la distancia en centímetros Serial.print(distancia); Serial.print("cm"); Serial.println(); delay(100); if(distancia<15 ){// estado = 1; } if(distancia>16 && estado == 1){ servoMotor1.write(110);//Barrera abierta delay(10000);//La tapa estrá abierta 10 segundos servoMotor1.write(21);//Barrera cerrada estado = 0; } delay(100); //Esperamos un tiempo breve antes de empezar de nuevo } |
Código Fuente detector de presencia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
const int Trigger = 2; //Pin 2 para el Trigger del sensor ultrasónico const int Echo = 3; //Pin 3 para el Eco del sensor ultrasónico int estado = 0; int buzzer = 4; void setup() { Serial.begin(9600);//iniciailzamos la comunicación a 9600 bps pinMode(Trigger, OUTPUT); //Se configura como salida pinMode(Echo, INPUT); //Se configura como entrada digitalWrite(Trigger, LOW);//Inicializamos el pin con estado BAJO o LOW pinMode(buzzer, OUTPUT); } void loop() { long tiempo; //tiempo que demora en llegar el eco long distancia; //distancia en centimetros digitalWrite(Trigger, HIGH);//Activamos el pin 2 delayMicroseconds(10); //Enviamos un pulso durante 10us digitalWrite(Trigger, LOW); //Desactivamos el pin 2 tiempo = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso y lo asignamos a la variable tiempo distancia = tiempo/59; //Convertimos el tiempo a distancia en cm Serial.print("Distancia: ");//Imprimimos en el terminal serial el valor de la distancia en centímetros Serial.print(distancia); Serial.print("cm"); Serial.println(); if(distancia<15 ){//Si es menor a 15 sonará el buzzer durante 3 segundos digitalWrite(buzzer, HIGH); delay(3000); digitalWrite(buzzer, LOW); } delay(10); //Esperamos un tiempo breve antes de empezar de nuevo } |
Código fuente detector de distancia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
const int Trigger = 2; //Pin 2 para el Trigger del sensor ultrasónico const int Echo = 3; //Pin 3 para el Eco del sensor ultrasónico int estado = 0; int buzzer = 4; void setup() { Serial.begin(9600);//iniciailzamos la comunicación a 9600 bps pinMode(Trigger, OUTPUT); //Se configura como salida pinMode(Echo, INPUT); //Se configura como entrada digitalWrite(Trigger, LOW);//Inicializamos el pin con estado BAJO o LOW pinMode(buzzer, OUTPUT); } void loop() { long tiempo; //tiempo que demora en llegar el eco long distancia; //distancia en centimetros digitalWrite(Trigger, HIGH);//Activamos el pin 2 delayMicroseconds(10); //Enviamos un pulso durante 10us digitalWrite(Trigger, LOW); //Desactivamos el pin 2 tiempo = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso y lo asignamos a la variable tiempo distancia = tiempo/59; //Convertimos el tiempo a distancia en cm Serial.print("Distancia: ");//Imprimimos en el terminal serial el valor de la distancia en centímetros Serial.print(distancia); Serial.print("cm"); Serial.println(); if(distancia<60 ){//Si la condición se cumple movemos el servo con eso abriemos la tapa del cesto de basura digitalWrite(buzzer, HIGH); delay(distancia); digitalWrite(buzzer, LOW); delay(distancia); } delay(10); //Esperamos un tiempo breve antes de empezar de nuevo } |
PROYECTO RECOMENDADO