Practica Nº2 Arduino – Sensor de proximidad
Categoría: Arduino
Antes de comenzar si te perdiste la primera entrega puedes verla en el siguiente enlace:
En la primera entrega estuvimos trabajando en la comunicación de nuestro dispositivo LED haciendo uso de los puertos de arduino y comparando como se realizaría esa misma practica con la electrónica tradicional que estamos actualmente acostumbrados ya.
¿Como funciona el sensor de proximidad?

El sensor de proximidad funciona a través una onda sonora en una frecuencia imposible de detectar para el oído humano, esta onda rebota sobre la superficie y es captada nuevamente por el sensor.


Haciendo un calculo simple, es posible saber la distancia exacta a la que se encuentra dicho objeto calculando el tiempo desde que se emitió junto a su velocidad y retorno.
Parecería algo muy complicado de realizar mediante la electrónica tradicional, sin embargo es algo perfectamente lograble con nuestro viejo y confiable NE555 ya que hace gestión del tiempo por medio de su ciclo de reloj y haciendo uso de una configuración muy sencilla podemos hacerlo funcionar

Código interno de arduino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
// Pines utilizados #define LEDVERDE 2 #define LEDAMARILLO 3 #define LEDROJO 4 #define TRIGGER 5 #define ECHO 6 #define BUZZER 9 // Constantes const float sonido = 34300.0; // Velocidad del sonido en cm/s const float umbral1 = 30.0; const float umbral2 = 20.0; const float umbral3 = 10.0; void setup() { // Iniciamos el monitor serie Serial.begin(9600); // Modo entrada/salida de los pines pinMode(LEDVERDE, OUTPUT); pinMode(LEDAMARILLO, OUTPUT); pinMode(LEDROJO, OUTPUT); pinMode(ECHO, INPUT); pinMode(TRIGGER, OUTPUT); pinMode(BUZZER, OUTPUT); // Apagamos todos los LEDs apagarLEDs(); } void loop() { // Preparamos el sensor de ultrasonidos iniciarTrigger(); // Obtenemos la distancia float distancia = calcularDistancia(); // Apagamos todos los LEDs apagarLEDs(); // Lanzamos alerta si estamos dentro del rango de peligro if (distancia < umbral1) { // Lanzamos alertas alertas(distancia); } } // Apaga todos los LEDs void apagarLEDs() { // Apagamos todos los LEDs digitalWrite(LEDVERDE, LOW); digitalWrite(LEDAMARILLO, LOW); digitalWrite(LEDROJO, LOW); } // Función que comprueba si hay que lanzar alguna alerta visual o sonora void alertas(float distancia) { if (distancia < umbral1 && distancia >= umbral2) { // Encendemos el LED verde digitalWrite(LEDVERDE, HIGH); tone(BUZZER, 2000, 200); } else if (distancia < umbral2 && distancia > umbral3) { // Encendemos el LED amarillo digitalWrite(LEDAMARILLO, HIGH); tone(BUZZER, 2500, 200); } else if (distancia <= umbral3) { // Encendemos el LED rojo digitalWrite(LEDROJO, HIGH); tone(BUZZER, 3000, 200); } } // Método que calcula la distancia a la que se encuentra un objeto. // Devuelve una variable tipo float que contiene la distancia float calcularDistancia() { // La función pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH unsigned long tiempo = pulseIn(ECHO, HIGH); // Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que está en microsegundos // por eso se multiplica por 0.000001 float distancia = tiempo * 0.000001 * sonido / 2.0; Serial.print(distancia); Serial.print("cm"); Serial.println(); delay(500); return distancia; } // Método que inicia la secuencia del Trigger para comenzar a medir void iniciarTrigger() { // Ponemos el Triiger en estado bajo y esperamos 2 ms digitalWrite(TRIGGER, LOW); delayMicroseconds(2); // Ponemos el pin Trigger a estado alto y esperamos 10 ms digitalWrite(TRIGGER, HIGH); delayMicroseconds(10); // Comenzamos poniendo el pin Trigger en estado bajo digitalWrite(TRIGGER, LOW); } |
Anexos







