ultrason-hcsr04.ino

Arduino Nano (Classic, ATmega328P) · Archivo : ultrason-hcsr04.ino · Lenguaje : Arduino · Uso : Mesurer une distance avec le HC-SR04

El sensor ultrasónico HC-SR04 da la distancia por tiempo de vuelo: el pulso TRIG de 10 µs disparace una ráfaga de 40 kHz, pulseIn mide el eco y la división por 58 convierte microsegundos en centímetros. Un clásico didáctico del Arduino Nano.

Hardware

Un Arduino Nano clásico (ATmega328P a 16 MHz, formato DIL de 30 patillas para breadboard, USB mini-B, lógica de 5 V, pin RESET abajo a la izquierda). Arduino Nano, HC-SR04 (VCC 5 V, TRIG, ECHO, GND). El ECHO saca 5 V: aceptable en las entradas 5 V tolerantes del 328P.

Cableado

TRIG→D12, ECHO→D13, VCC→5 V, GND→GND. No alimentes a 3,3 V: el módulo está previsto para 5 V.

Funcionamiento

pulseIn(ECHO, HIGH, 30000) cronometra el impulso con un timeout que evita bloqueos si nada vuelve. La velocidad del sonido (340 m/s) entre ida y vuelta da el factor 58 µs/cm.

Ejecución

En el IDE de Arduino, selecciona la placa Arduino Nano y el procesador ATmega328P, elige el puerto serie y carga. El rail de 5 V de la placa conviene a sensores de 5 V; si no, usa 3,3 V en pines compatibles.

Variantes

Promedia 5 medidas para estabilizar la pantalla o pilota un servo para un radar de 180° (la base de los proyectos "radar" en Processing).

ultrason-hcsr04.ino

// Distance cm avec HC-SR04 sur l'Arduino Nano (broches 12/13).
const int TRIG = 12;
const int ECHO = 13;

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  Serial.begin(9600);
}

void loop() {
  // L'impulsion de declenchement doit durer 10 microsecondes
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  // pulseIn attend l'aller-retour de l'echo (timeout 30 ms = 5 m)
  long duree = pulseIn(ECHO, HIGH, 30000);
  if (duree == 0) {
    Serial.println(F("hors portee"));
  } else {
    // 340 m/s / 2 (aller-retour) = 58 us par cm
    float distance = duree / 58.0;
    Serial.print("distance : ");
    Serial.print(distance, 1);
    Serial.println(" cm");
  }
  delay(100); // laisser retomber l'echo precedent
}

← Volver a la ficha