Arduino: sensores de proximidad
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 }