Ultrazvukový sensor HC-SR04

Ultrazvukový sensor HC-SR04 dokáže měřit vzdálenost. Hodí se napřiklad pro roboty, které se díky němu umí vyhnout překážkám. Nepotřebujete žádné knihovny, kód je velice jednoduchý!

Po tom, co jsem koupil HC-SR04 jsem se to ho snažil zprovoznit, což se mi ale nepodařilo se. Hledal jsem tedy nějaký jednoduchý návod, jak to zprovoznit. Po tom, co jsem nad tím strávil hodně času, jsem se rozhodl, že napíšu článek o tom, jak tento problém řešit.

Chtěl jsem udělat něco, k čemu by nebyl potřeba počítač. I to byl důvod, proč jsem použil LED. Jedna LED je použita na překročení minimální vzdálenosti, druhá na překročení vzdálenosti maximální.

Seznam součástek

  1. 1x Arduino UNO R3
  2. 1x HC-SR04 ultrazvukový sensor
  3. 1x červena LED
  4. 1x zelena LED
  5. 2x 560 ohm rezistor
  6. 1x malé nepájivé pole
  7. Kablíky
  8. Pravítko

Zapojení

Zapojte součástky a vodiče podle obrázku.

Kód

/*
 HC-SR04 ULTRAZVUKOVÝ SENZOR]
 */
#define trigPin 13  // trigger pin
#define echoPin 12  // echo pin
#define ledMin 11  // červena LED na pinu 11
#define ledMax 10  // zelena LED na pinu 10
int maximumRange = 200;  // maximální vzdálenost
int minimumRange = 0;  // minimální vzdálenost
long duration, distance;  // proměnné pro výpočet vzdálenosti

void setup()
{
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledMin, OUTPUT);
  pinMode(ledMax, OUTPUT);
}

void loop()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;  // přepočet na cm
  
  // to je místo, kde LED rozsvítíme a zhasneme.
  if (distance < 4)  // rozsvítíme červenou LED, vzdálenost < 4 cm
  { 
    digitalWrite(ledMin,HIGH);  // když rozsvítíme červenou,
    digitalWrite(ledMax,LOW);  // zelenou musíme zhasnout 
  }
  else if (distance > 200)  // rozsvítíme zelenou LED, vzdálenost > 200 cm
  {
    digitalWrite(ledMax,HIGH);  // když rozsvítíme zelenou,
    digitalWrite(ledMin,LOW);  // červenou musíme zhasnout
  }
  else  // normální provoz, vzdálenost od 4 do 200 cm, nesvítí nic
  {
    digitalWrite(ledMin,LOW);
    digitalWrite(ledMax,LOW);
  }
  
  if (distance >= maximumRange  || distance <= minimumRange)
  {
    Serial.println("Mimo dosah");
  }
  else
  {
    Serial.print(distance);
    Serial.println(" cm");
  }
  
  //prodleva 500ms
  delay(500);
}

Zkopírujte kód do vašeho Arduina, sledujte blikající diody a výpis v sériovém monitoru.

Já jsem LEDky neměl. Proto jsem použil LEDku na Arduinu a druhou jsem vůbec nezapojoval.


Převzato z blogu Laskarduino a redakčně mírně upraveno.