SONAR SRF05 CON ATTINY85

Para el proyecto Pulsar Mini, un auxiliar electrónico de bajo costo para para no videntes, fue necesario conectar un sensor ultrasónico SRF05 al microntrolador Attiny85 utilizando un Arduino Nano como programador ISP.

No encontramos mucha información online al respecto y nada en castellano, por lo que decidimos documentar la experiencia. Además, el sensor SRF05 de color azul que se consigue en Argentina no permite el modo de Echo-Trigger en un pin, por lo se realizó en el modo de pines separados.

Principalmente hay que saber que sí se puede controlar un sonar de este tipo con el ATtiny85 y que se hace de manera muy similar a cómo se haría con un Arduino ya que el ATtiny soporta la función pulseIn() gracias al trabajo de High-Low Tech.

Utilizamos el sonar SRF05 en su configuración de pines separados para Echo y Trigger, ya que la versión más común que se consigue en Argentina (de color azul en vez de rojo o verde) no permite el cambio de modo: en vez del pin MODE encontramos uno llamado OUT que parece generar un pulso alto al detectar un obstáculo a cierta distancia predeterminada, quizá para una implementación simple del sonar.

sonar-srf05

Para testear el circuito realizamos un programa simple que enciende un LED al detectar un obstáculo a menos de 10 cm de distancia. Para esto el diagrama de conexiones (dibujado en Frizting) es el siguiente:

conexion_sonar_e1

Luego se debe cargar en el ATtiny el siguiente código:

const int ledRojo = 3; // conexión del LED
const int trigPin = 1; // conexión del pin Trig del Sonar
const int echoPin = 0; // conexión del pin Echo del Sonar
 
long duracion = 0;
long cm = 0;
 
void setup() {
  // inicia pines
 
  pinMode(ledRojo, OUTPUT);
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);
 
}
 
void loop()
{
   // Inicia el sonar y envia un pin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(trigPin, LOW);
 
  // lee el tiempo en milisegundos hasta que el eco vuelve.
  duracion = pulseIn(echoPin, HIGH);
 
  cm= duracion/58;   // paso a cm el tiempo dividiendo por el doble de la velocidad del sonido
 
  if(cm <= 10 && cm > 0) // si la distancia es menor a 10 cm (salvo que sea 0, es decir TimeOut)
  {
    digitalWrite(ledRojo, HIGH); // enciendo el LED
  } else {
    digitalWrite(ledRojo, LOW); // apago el LED
  }
 
  delay(100);
}

Por último, es importante aclarar que los tiempos del delay() están estipulados para el ATtiny85 configurado a 1MHz.

admin

Leave a reply