Rust-Embebido «Arduino» HC-SR04(Contador de tiempo) parte 7

Finalizamos esta serie con un ejemplo muy interesante para calcular tiempos que en este caso utilizaremos para medir el tiempo que tarda en llegarnos un ECO de un sonar, en este caso el HC-SR04, como se ve en el ejemplo sonar.rs que es el que explicamos su funcionamiento.

En este caso configuraremos un TimerCount que realizara la cuenta de lo que tarda en llegar una señal a un pin, ejemplo del Echo de un sonar, al igual que con la generación de PWM lo primero es saber que prescales que utilizaremos, interesándonos del tiempo de cada Tick que junto al contador nos permitirá conocer el tiempo y claro esta el máximo tiempo posible

Tiempo trascurrido = Ticks*tiempo

En este caso solo definimos el prescaler (64 en nuestro caso) y no definiremos el registro WGM1 pues no tenemos que definir ninguna onda solo contar Ticks.

let timer1 = dp.TC1;
timer1.tccr1b.write(|w| w.cs1().prescale_64());

Deberemos conocer las características del dispositivo sonar que vamos a utilizar para medir distancia, en nuestro caso el sonar HC-SR04 con las características:

  • Medición entre 2cm y 400cm.
  • Precisión de 3mm
  • Mantener el triger en alto durante 10μ para el lanzamiento de la onda.

Y utilizaremos la siguiente formula «Distancia = Tiempo_llegada * velocidad del sonido (340m/s) /2 » podemos ver que dividimos entre dos ya que el tiempo sera el de ida y el de vuelta una vez rebota con el objeto, aunque en realizada utilizaremos la siguiente formula que nos dará la distancia en centímetros.

Distancia = Tiempo de llegada / 58

Con el contador definido, con su prescaler y sabiendo lo que tenemos que medir solo nos queda iniciar el contador a 0, lanzar el ECHO y esperar para una vez que nos llegue leer el número de Ticks y calcular el tiempo y por lo tanto la distancia.

timer1.tcnt1.write(|w| w.bits(0));    // Iniciamos el contador a 0
// Se multiplica por 4 convirtiéndolo en us si usamos un prescaler de 64
let contador = timer1.tcnt1.read().bits().saturating_mul(4); 

let distancia = contador / 58;   // Calculo de la distancia con los Ticks obtenidos en la espera.

// Forma de realizar una pausa con el contador sin utilizar el dalay
timer1.tcnt1.write(|w| w.bits(0));
while timer1.tcnt1.read().bits() < 25000 {}

Hasta aquí los 7 temas tratados

  1. Introducción
  2. E/S Digitales
  3. Entradas analógicas
  4. PWM
  5. Interrupciones externas
  6. Servomotor (Generación de Onda)
  7. HC-SRC04 (Contador de tiempo)

Y con esto terminamos con la programación Rust-Arduino, aunque seguro que trataremos algún tema más, decir que el programar el Arduino en Rust me ha servido para conocer más el funcionamiento del micro AVR utilizado por Arduino y depurar y mejorar algún que otro programa del cajón y que seguramente expondremos en estas páginas.

Deja una respuesta

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

Información básica sobre protección de datos Ver más

  • Responsable: Javier.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Hostinger.es que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad