Om HC-SR04

HC-SR04 er en veldig mye brukt modul sammen med mikrokontrollersystemer som Arduino. Sensoren bruker ultralyd for å måle avstand, og er ganske nøyaktig fra 3-4 meter ned til noen centimeter.

Virkemåte:

For at sensoren skal starte en måling, sender vi en 10 mikrosekund puls på pinnen som heter "Trig" (trigger). Sensoren sender da ut 8 pulser på 40kHz, og måler tiden det tar før signalet reflekteres. Resultatet vises på Echo-pinnen, som en puls opp til ca. 40ms.


Her er en veldig grundig video om sensoren, som til og med tar hensyn til at lydhastigheten avhenger av temperatur og luftfuktighet, og bruker en DHT22 for å måle disse verdiene. I løpet av videoen installerer han et bibliotek som heter NewPing. Dette kan legges til mye enklere nå, ved å søke det opp under "Skisse->Administrer bibliotek"

Using the HC-SR04 Ultrasonic Distance Sensor with Arduino - Everything you need to know! 

HC-SR04.PNG

Bruksområder

 

Avstandsmåler på "robotbil"
HC-SR04
Ottobot
Ottobot
Høydemåler på quadcopter
Drone
 
   

Oppgaver:

Vi avslutter denne bolken med et par enkle oppgaver:

1.1: Bruk biblioteket HCSR04 til å måle avstand til sensoren og skrive målet i centimeter til serieporten.

1.2: Bruk en meterstokk eller målebånd, og finn ut hvor nøyaktig sensoren er.
UltraLydSensor.MOV

(Filmen laget av min gode kollega og eksamenspartner Knut D. Angelsen.)

2: Legg til en Buzzer og gjør om avstandsmålingen til et lydsignal, slik at den enten piper med høyere frekvens, eller korte pip med kortere mellomrom jo nærmere objektet kommer.

 

Løsningsforslag

 

int trigPin = 11;    // Trigger
int echoPin = 12;    // Ekko
int frekvens;        //Frekvens pipetone (200Hz-2kHz)
int Buzzer = 8;      //Buzzer
long tid, cm;
 
void setup() {
  Serial.begin (9600);
 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(Buzzer, OUTPUT);
}
 
void loop() {
 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  tid = pulseIn(echoPin, HIGH);
 
  // Gjør om tid til avstand
  cm = (tid/2) / 29.1; 
  frekvens = 2000 - ( cm * 9 ); //regner ut frekvens i forhold til avstand

if (cm >= 200 || cm <= 0) {
        Serial.println("Fritt leide");
        digitalWrite(Buzzer,LOW);
  } else {
        Serial.println("Detektert på avstand");
        Serial.print(cm);             
        Serial.print("cm");       
        tone(Buzzer,frekvens);             //gir pipetone
  }
    
  Serial.print("Avstand ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
 
  delay(250);
}