Sesión 7 de mayo_
Sensor de ultrasonidos

Tened presentes los apuntes de el enlace de abajo por si no recordáis algo (en el documento hay cosas que aún no hemos visto)
Acceder a los apuntes arrow_forward

¿Cómo montamos el circuito?

¿Y el código?

Recordad que utilizamos el código que teníamos del ultrasonidos al que el martes le hicimos unas modificaciones. Lo hemos retocado un poco.

  1. Preparar las variables del número de los pines a los que estará conectado el sensor. Las pondremos fuera del void setup() (arriba de todo) y las llamaremos int emitePin = 11; y int recibePin = 10;, respectivamente.
  2. Pondremos también la variable del número (en centímetros) de la distancia. Al principio no le pondremos ningún valor: float distancia;
  3. DENTRO del void setup() pondremos los modos de los pines: el que emite estará en modo OUTPUT y el que recibe en modo INPUT, usaremos las variables en vez de los números.
  4. Para que el Arduino nos pase los datos a través del ordenador, iniciaremos la comunicación Serial con Serial.begin(9600);
  5. DENTRO DEL void loop() enviaremos la señal durante 10 MICROsegundos (1 microsegundo = 0,000001 segundos o 0,001 milisegundos):
    
            digitalWrite(emitePin, LOW);
            delayMicroseconds(2);
    
            digitalWrite(emitePin, HIGH);
            delayMicroseconds(10);
    
            digitalWrite(emitePin, LOW);
                            
  6. Ahora usaremos una NUEVA función de Arduino que nos dice cúantos microsegundos pasan desde que se llama a la función hasta que el valor que llega al pin cambia.
    En nuestro caso, no llegará nada de electricidad hasta que vuelva la onda. Cuando lo haga, lo que el pin lea dejará de ser LOW y será HIGH, entonces la función nos dará el tiempo.
    
            long duracion = pulseIn(recibePin, HIGH);
    
            // Calcular la distancia (en cm) basada en la velocidad del sonido
            distancia = duracion * (340.0 / 10000.0) / 2.0;       // PASAR DE METROS/SEGUNDO A CM/MICROSEGUNDO (340 * 100 / 1000000)
                                                                  // Y LUEGO ENTRE 2 PARA PASAR DEL RECORRIDO DE IDA Y VUELTA A SOLO LA IDA
                            
  7. Si os fijáis bien, hemos utilizado la velocidad del sonido y hemos dividido para 2. ¿Por qué? Porque la onda tiene que ir y volver, y nosotros solo queremos la distancia "de ida" y no el total de ida y vuelta.
  8. Ahora, por último pero no menos importante, ¡queremos saber la distancia y que no se la quede solo Arduino! Para eso, usaremos una función que ya hemos visto, y vamos a darle un pequeño descanso de 50 milisegundos:
    
            Serial.print(distancia); Serial.println(" centimetros");
            delay(50);
                            

Este es el código completo:


int recibePin = 10;  // Echo Pin
int emitePin = 11;  // Trigger Pin

float distancia;  //Duración usada para calcular la distancia

void setup() {
    Serial.begin(9600);
    pinMode(emitePin, OUTPUT);
    pinMode(recibePin, INPUT);
}

void loop() {
    digitalWrite(emitePin, LOW);
    delayMicroseconds(2);

    digitalWrite(emitePin, HIGH);
    delayMicroseconds(10);

    digitalWrite(emitePin, LOW);
    long duracion = pulseIn(recibePin, HIGH);

    //Calcular la distancia (en cm) basada en la velocidad del sonido
    distancia = duracion * (340.0 / 10000.0) / 2.0;       // DIVIDIMOS 340 / 10000 AL PASAR DE METROS/SEGUNDO A CM/MICROSEGUNDO (340 * 100 / 1000000)
                                                          // Y LUEGO ENTRE 2 PARA PASAR DEL RECORRIDO DE IDA Y VUELTA A SOLO LA IDA

    Serial.print(distancia); Serial.println(" centimetros");
    delay(50);
}
                        

Sube tu código de hoy