Arduino: sensores de proximidad

detector-distancia

Uno de los elementos más utilizados en los robots controlados con arduino son los sensores de proximidad, con los que se pueden detectar obstáculos con un rango de detección aproximado de 3 cm a 3 metros. Los sensores de proximidad (el HC-SR04 en este caso) utilizan ultrasonidos para detectar el tiempo que tardan en revotar las ondas a la velocidad del sonido con los obstáculos que pueda tener delante.

Para visualizar fácilmente la distancia que detecta el sensor en este ejemplo se utiliza un led RGB para mostrar distintos colores según la distancia detectada.
Cuando la distancia es menor de 5 cm se enciende en rojo, cuando es mayor de 1 metro en verde, y en las posiciones intermedias azul, tendiendo a rojo entre los 5 y 15 cm y tendiendo a verde a medida que la distancia se aproxima a 1 metro.

long tiempo;
int trigPin = 7;      // disparador
int echoPin = 8;      // recepcion de eco
float distancia;

int rPin = 9;        // rojo
int bPin = 10;       // azul
int gPin = 11;       // verde

void setup()
{
  // configuracion de los pines del sensor
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
  // configuracion de los pines del led
  pinMode(rPin, OUTPUT);
  pinMode(gPin, OUTPUT);
  pinMode(bPin, OUTPUT);
}

void loop()
{
  digitalWrite(trigPin, HIGH);           // se lanza la señal
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  tiempo = (pulseIn(echoPin, HIGH)/2);   // se mide el tiempo que tarda en ir y volver
  // hay que dividirlo entre 2 para obtener la distancia real
  // para obtener la distancia se multiplica la velocidad por el tiempo
  // la velocidad del sonido es de 343m/s

  distancia = float(tiempo * 0.0343);
  
  calcularColor(int(distancia));        // se llama a la funcion calcularColor para calcular el color en funcion de la distancia
  delay(1000);                          // se establece 1 segundo de espera entre cada medicion
}

void calcularColor(int distancia)
{
  if(distancia <= 5){                  // si la distancia es menor de 5 cm se enciende el led en rojo
    setColor(255, 0, 0);               // se llama a la funcion para que establezca el color calculado en el led
  }
  if(distancia > 5 && distancia <= 100){
    int valor = map(distancia, 5, 100, 0, 255);
    // con la funcion map se calcula el valor de la intensidad del led, que va de 0 a 255, de modo que cuando la distancia sea 5 el valor sera 0 
    // y cuando la distancia sea de 100 cm, 255
    
    int rojo = 0;
    // cuando la distancia esta entre 5 y 10 cm el led rojo aumenta de intensidad a medida que la distancia disminuye
    if(distancia < 15){
      rojo = map(distancia, 15, 5, 0, 128);
    }
    setColor(rojo, valor, 255-valor);
    // cuanto mas se aproxima la distancia a los 100 cm se enciende el led verde y el azul pierde intensidad
  }
  if(distancia > 100){                // si la distacia es major de 1 metro se enciende el led en verde
    setColor(0, 255, 0);
  }   
}

void setColor(int R, int G, int B)    //  establece el color RGB en los pines correspondientes
{     
  analogWrite(rPin, R);   // Rojo
  analogWrite(gPin, G);   // Verde
  analogWrite(bPin, B);   // Azul
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *