En este capítulo aprenderemos como programar un sensor de distancia para arduino con librerías y sin librerias. Entenderemos como funciona el sensor HC-SR04 y como conectar los pines, como activarlo y detectar los pulsos para calcular la distancia teniendo en cuenta el tiempo que tardan los ultrasonidos en rebotar.
https://youtu.be/Oq2r66TLxZs
Código del programa:
Para que funcione correctamente el sensor de distancia debemos conectar los siguientes pines:
Código del programa:
/*
SENSOR ULTRASONIDO
________________________________________________________
>>>>> EDGAR PONS FORN <<<<<
INSTAGRAM : https://www.instagram.com/edgarponsforn
DISCORD : https://discord.gg/eQpYh9vBsj
PÁGINA WEB : https://www.edgarpons.com
YOUTUBE : https://www.youtube.com/c/EdgarPonsYoutube/
*/
int trigger = 9; //Declaramos el pin 9 para que vaya conectado al Trigger como un entero
int echo = 8; // Lo mismo con el echo y el pin 8
float tiempo_espera, distancia; //Declaramos dos variables, una para el tiempo de espera y otra para guardar la distancia.
void setup() {
Serial.begin (9600);
pinMode (trigger, OUTPUT); // Salida de datos
pinMode (echo, INPUT); // Entrada de datos
}
void loop() {
digitalWrite (trigger, LOW); // ponemos el pin 8 a 0v durante 2ms
delayMicroseconds(2);
digitalWrite (trigger, HIGH);// ponemos el pin 8 a 5v durante 10ms;
delayMicroseconds (10);
digitalWrite (trigger, LOW); //paramos el pin 8
tiempo_espera = pulseIn (echo, HIGH);
/* Esta funcion espera un pulso y mide su duración.
Hay 2 parametros, echo y HIGH, el primero (echo) es el pin sobre el que se espera el pulso.
El segundo (HIGH) indica si se espera un pulso de 5v o 0v
*/
distancia = (tiempo_espera / 2) / 29.15;
Serial.print (distancia); // imprimimos la distancia en cm
Serial.println ("cm");
delay (100);
}
Material para el curso:
Guia de materiales
Resolución al problema planteado:
El problema planteado es relativamente fácil de resolver, se trata de definir diferentes distancias y en funcion de la distancia a la que se encuentre, activar unos IF o otros.
Aquí el código que he creado yo, seguramente hay otras alternativas más optimizadas, os invito a compartirlas en el canal de Youtube o de Discord 🙂
Código del problema:
/*
SENSOR ULTRASONIDO
________________________________________________________
>>>>> EDGAR PONS FORN <<<<<
INSTAGRAM : https://www.instagram.com/edgarponsforn
DISCORD : https://discord.gg/eQpYh9vBsj
PÁGINA WEB : https://www.edgarpons.com
YOUTUBE : https://www.youtube.com/c/EdgarPonsYoutube/
*/
int led = 13;
int trigger = 9;
int echo = 8;
float tiempo_espera, distancia;
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
void setup() {
Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(led, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
}
void loop() {
digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
tiempo_espera = pulseIn(echo, HIGH);
distancia = (tiempo_espera / 2) / 29.15;
Serial.print("┤");
delay(10);
if (distancia < 5) {
digitalWrite(led1, HIGH);
Serial.print("▓");
} else {
digitalWrite(led1, LOW);
Serial.print("░");
}
if (distancia < 10) {
digitalWrite(led2, HIGH);
Serial.print("▓");
} else {
digitalWrite(led2, LOW);
Serial.print("░");
}
if (distancia < 15) {
digitalWrite(led3, HIGH);
Serial.print("▓");
} else {
digitalWrite(led3, LOW);
Serial.print("░");
}
if (distancia < 20) {
digitalWrite(led4, HIGH);
Serial.print("▓");
} else {
digitalWrite(led4, LOW);
Serial.print("░");
}
if (distancia < 25) {
digitalWrite(led5, HIGH);
Serial.print("▓├ ");
} else {
digitalWrite(led5, LOW);
Serial.print("░├ ");
}
Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println("cm");
}