Rilevare la distanza con Arduino

Rilevare la distanza con Arduino

Oggi vediamo come misurare la distanza di un ostacolo con Arduino sfruttando il sensore economico HC-SR04.

Materiale necessario

Collegamenti

Dall’immagine si vede come i collegamenti siano molto semplici:

  • HC-SR04:
    • Trigger collegato al pin 8
    • Echo al pin 7
    • VCC al pin +5V
    • Gnd al pin GND
  • Led:
    • verde: pin 4
    • giallo: pin 5
    • rosso: pin 6
    • in ciascuno una resistenza da 220 ohm in serie

Sorgenti

Il codice è molto semplice. Quello riportato di seguito permette di accendere il led rosso ad una distanza inferiore ai 10 cm, il led giallo tra 10 e 30 cm e verde in tutti gli altri casi

// Dichiaro le variabili
const int trigger = 8;
const int echo = 7;
const int led_verde = 4;
const int led_giallo = 5;
const int led_rosso = 6;

void setup() {
  // inizializzo la porta seriale
  Serial.begin(9600);

  //imposto i pin di trigger, echo e led
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(led_verde, OUTPUT);
  pinMode(led_giallo, OUTPUT);
  pinMode(led_rosso, OUTPUT);

  //led spenti
  digitalWrite(led_verde, LOW);
  digitalWrite(led_giallo, LOW);
  digitalWrite(led_rosso, LOW);
}


void loop() {

  // porto a livello basso l'uscita trigger
  digitalWrite(trigger, LOW);
  
  // invio un impulso sul trigger
  digitalWrite(trigger, HIGH);
  
  delayMicroseconds(10); // durata di 10 microsecondi
  
  digitalWrite(trigger, LOW);
  
  long durata = pulseIn(echo, HIGH);
  
  long distanza = durata / 58; 
  

  if (distanza == 0)
  {
    Serial.println("Errore di misura");
    distanza = 1000;
  }
  

    Serial.println("distanza:" );
    Serial.print(distanza);
    Serial.println("cm: ");
  

  //Accendo i led in base alla distanza
  if (distanza < 10)
  {
    digitalWrite(led_verde, LOW);
    digitalWrite(led_giallo, LOW);
    digitalWrite(led_rosso, HIGH);
  }
  else if (distanza < 30)
  {
    digitalWrite(led_verde, LOW);
    digitalWrite(led_giallo, HIGH);
    digitalWrite(led_rosso, LOW);
  }
  else
  {
    digitalWrite(led_verde, HIGH);
    digitalWrite(led_giallo, LOW);
    digitalWrite(led_rosso, LOW);
  }
  // attendo 500 millisecondi prima di una nuova misura
  delay(500);
}

Video su Youtube

Ho realizzato anche un video su Youtube. Ecco il link: https://www.youtube.com/watch?v=coXI5GzF1Yk

Qualche manuale dedicato ad Arduino

Share This:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.