#15 – Sensores de distancia | HC-SR04

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.

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:

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

}
Close

Sign in

Close

Cart (0)

Cart is empty No products in the cart.