SENSOR DE DISTANCIA HC-sr04
OBJETIVO:
Controla, verificar el funcionamiento correcto del sensor HC-sr04
junto a los motores DC, para que el prototipo pueda reconocer objetos
a determinada distancia.
DESARROLLO:
Después
de
haber realizado la primera entrega del prototipo sobre el
funcionamiento de los motores DC, ahora realizo una segunda entrega en la misma que he
utilizado los sensores de distancia HC-sr04 los cuales se
enmarcan dentro
de los sensores para medir distancias o superar obstáculos, entre
otras funciones posibles.
Yo los he utilizado para la medición de distancias, esto lo consigue enviando un ultrasonido (el cual no puede ser oído por una persona) a través de uno de la pareja de cilindros que compone el sensor y espera a que dicho sonido rebote sobre el objeto y vuelta, retorno captado por el cilindro.
Este sensor tiene 4 pines de conexión: un VCC, Trigger (disparo del ultrasonido), Echo (recepción del sonido), y GND. Además, este sensor en concreto tiene un rango de distancias sensibles entre 3 cm y 3 m.
Se puede expresar matemáticamente como d=170(m*s)/t partiendo de la ecuación de velocidad v=2d/t donde la d es igual a distancia que le tarda a la señal en llegar al objeto dividida por el tiempo, entonces con la fórmula mencionada se puede obtener la distancia a la cual esta el objeto.
Teniendo en cuenta todo lo mencionado permitirá que el prototipo pueda detectar obstáculos a los 10 cm y pueda girar hacia la izquierda, derecha, haciendo uso de los motores DC y así evitar chocar con los objetos detectados a la distancia establecida la cual puede variar dependiendo del rango establecido para el sensor de distancia.
Esto es en cuanto puedo compartir con ustedes sobre el sensor de distancia que he utilizado después de haber realizado la investigación pertinente en función al tema planteado. A continuación, colocaré los materiales utilizados, el código desarrollado para el funcionamiento de los mismos y por último un vídeo explicativo.
Yo los he utilizado para la medición de distancias, esto lo consigue enviando un ultrasonido (el cual no puede ser oído por una persona) a través de uno de la pareja de cilindros que compone el sensor y espera a que dicho sonido rebote sobre el objeto y vuelta, retorno captado por el cilindro.
Este sensor tiene 4 pines de conexión: un VCC, Trigger (disparo del ultrasonido), Echo (recepción del sonido), y GND. Además, este sensor en concreto tiene un rango de distancias sensibles entre 3 cm y 3 m.
Se puede expresar matemáticamente como d=170(m*s)/t partiendo de la ecuación de velocidad v=2d/t donde la d es igual a distancia que le tarda a la señal en llegar al objeto dividida por el tiempo, entonces con la fórmula mencionada se puede obtener la distancia a la cual esta el objeto.
Teniendo en cuenta todo lo mencionado permitirá que el prototipo pueda detectar obstáculos a los 10 cm y pueda girar hacia la izquierda, derecha, haciendo uso de los motores DC y así evitar chocar con los objetos detectados a la distancia establecida la cual puede variar dependiendo del rango establecido para el sensor de distancia.
Esto es en cuanto puedo compartir con ustedes sobre el sensor de distancia que he utilizado después de haber realizado la investigación pertinente en función al tema planteado. A continuación, colocaré los materiales utilizados, el código desarrollado para el funcionamiento de los mismos y por último un vídeo explicativo.
MATERIALES:
- Placa Arduino Mega: El Arduino Mega es una placa electrónica basada
en el ATmega1280. Cuenta con 54 pines digitales de entrada
/ salida (de los cuales 14 se pueden utilizar como salidas PWM), 16
entradas analógicas, 4 UARTs (hardware puertos serie), un oscilador
de cristal de 16 MHz, una conexión USB, un conector de alimentación, y un botón de reinicio.
Sensor HC-sr04: El
HC-sr04 es un sensor ultrasónico de bajo costo que no solo puede
detectar si un objeto se presenta, como un sensor PIR (Passive
Infrared Sensor), sino que también puede sentir y transmitir la
distancia al objeto. Tienen dos transductores, básicamente, un
altavoz y un micrófono, ofrece
una excelente detección sin contacto (remoto) con elevada precisión
y lecturas estables en un formato fácil de usar.
Placa L298N: Placa controladora de 2 motores de Corriente Continua
(CC). La cual usa 4 puentes H integrados en dos "chips"
L298N.
Motores DC: Es una máquina que convierte la energía eléctrica en mecánica, provocando un movimiento rotatorio, gracias a la acción que se genera del campo magnético.
Cables
Protoboard
ESQUEMA DE CONEXIÓN
PROGRAMA
// Programa para el control y funcionamiento de los motores DC y sensor de distancia
// Declaramos los pines de Trigger y Echo del Sensor de Distancia
int trigger =21;
int echo=20;
//Declaramos entradas para Motor Izquierdo
int ENA=8;
int IN1=9;
int IN2=10;
// Declaramos entradas para Motor Derecho
int ENB=13;
int IN3=11;
int IN4=12;
// Inicializamos las variables estado y la variable dirección
int estado=0;
long direccion;
// Declaramos la función void setup()
void setup() {
// Iniciamos el monitor serial
Serial.begin(9600);
// Colocamos la variable trigger como salida y echo como entrada
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
// Declaramos las entradas de motores como salidas
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Colocamos la función randomSeed
randomSeed(analogRead(0));
// Llamamos al método apagar esperamos un tiempo de 3 segundos
apagar();
delay(3000);
}
// Declaramos la funcion void loop()
void loop() {
// Colocamos la variable trigger en apagado
digitalWrite(trigger,LOW);
delayMicroseconds(5);
// Comienzo de la medida
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
// Adquisición y conversión a centímetros
float distancia = pulseIn(echo, HIGH);
distancia = distancia * 0.01657;
// Si (distancia >=10) && (distancia <=50) condicion
if ((distancia>=10) && (distancia <=50)){
// Estado estara en cero
estado=0;}
// Sino si(distancia > 10.0) estado estara en uno
else if (distancia > 10.0){
estado=1;}
// Sino estado cambiara a dos
else{
estado=2;
}
//Creamos un swicht para que pueda ejecutar cada uno de los estados
switch (estado) {
// Al iniciar el estado en cero la entrada IN1 esta apagada
// y la Entrada IN2 esta encendida y girara a una velocidad de 125
case 0:
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,125);
// Y la entrada para girar el motor derecho
// la entrada IN3 estara encencida y la IN4 apagada a una velocidad de 125
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,125);
break;
// En el caso 1 en cambio llamamos los metodos avanzarA() y avanzarB()
case 1:
avanzarA();
avanzarB();
break;
// En el caso 2 dirección tomara un número aleatorio con la función random
// Que sera entre (0 y2)
case 2:
direccion = random(2);
// si es igual a 0
if (direccion==0) {
//lama al metodo retroDerecha()
retroDerecha();}
// sino retroIzquierda
else {
retroIzquierda();}
break;}
}
// Método avanzarA
void avanzarA() {
// Entradas para el motor Izquierdo una estar encendida y otra apagada
// a una velocidad de 255
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,255);
}
// Método avanzarB las entradas del motor derecho estara una encendida
//y la otra apagada a una velocidad de 125
void avanzarB() {
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,125);}
// Método retroDerecha()
// Las entradas del motor izquierdo estaran una apagada y la otra encendida
void retroDerecha() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,255);
// las entradas del motor derecho tambien tomara el mismo estado
// para girar a la derecha
// esperan un tiempo de 5 segundos
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,125);
delay(500);
}
// Método para retroIzquierda
// Las entradas del motor izquierdo estan una encendida y
// otra apagada a una velocidad de 255
void retroIzquierda() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
// y para el motor derecho también se enciende una entrada
// y se apaga la otra y el motor girara a una velocidad de 125
// espera un tiempo de 5 segundos
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,125);
delay(500);
}
// Método apagar donde se apaga las entradas de los dos motores DC
void apagar() {
analogWrite(ENA,0);
analogWrite(ENB,0);
}
IMAGENES:
Imágenes del prototipo terminado con los sensores de distancia y los motores DC.
Imágenes del prototipo terminado con los sensores de distancia y los motores DC.
0 comentarios:
Publicar un comentario