Ultrazvučni senzor i zvuk
Ultrazvuk
Ultrazvuk je zvuk čija je frekvencija veća od 20 kHz, dakle viša od onoga što ljudsko uho može čuti. U prirodi ga koriste šišmiši i dupini za orijentaciju – šalju kratke impulse zvuka i prate njihovu jeku kako bi izračunali udaljenost do prepreka ili plijena. Sličan princip koristi i sonar na brodovima, kao i senzori za parkiranje na automobilima.
U elektronici koristimo ultrazvučne senzore upravo zbog te sposobnosti mjerenja udaljenosti pomoću zvučnog vala. Jedan od najčešće korištenih senzora je HC-SR04, koji je dovoljno precizan i jednostavan za upotrebu u hobističkim projektima.
HC-SR04 – kako radi ultrazvučni senzor
Arduino tada mjeri koliko je vremena proteklo između slanja i primanja impulsa. Budući da znamo brzinu zvuka u zraku, možemo izračunati udaljenost do objekta.
Brzina zvuka u zraku iznosi približno 343 m/s, odnosno 0.0343 cm/µs. Budući da zvuk putuje do prepreke i natrag, potrebno je to vrijeme podijeliti s 2.
Formula za izračun udaljenosti je:
gdje je duration vrijeme trajanja impulsa u mikrosekundama. Rezultat distance dobijemo u centimetrima.
Vježba 1: Mjerenje udaljenosti
Spoji HC-SR04 ultrazvučni senzor i Arduino:
- pin 9 spoji na TRIG
- pin 10 spoji na ECHO
- GND spoji na GND
- 5V spoji na Vcc
// C++
const int trigPin = 9;
const int echoPin = 10;
float duration, distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration*.0343)/2;
Serial.print("Distance: ");
Serial.println(distance);
delay(200);
}
Vježba 2: Zvuk koji “mjeri” udaljenost
Pomoću malog zvučnika (buzzer) možemo zvuk učiniti promjenjivim ovisno o udaljenosti. Ideja je jednostavna: što je objekt bliži, to će ton biti viši. Koristimo formulu:
Zadatak:
- Spoji jedan izvod zvučnika (+) na Arduino pin 13, a drugi njegov izvod na GND.
- Koristeći naredbu tone, pošalji izračunatu frekvenciju (pitch) na zvučnik u trajanju 150 ms.
- Koristeći naredbu noTone ugasi zvuk na kraju petlje, kako bi dobio kratku pauzu u zvuku.
// C++
const int trigPin = 9;
const int echoPin = 10;
const int buzzer = 13;
float duration, distance;
int pitch = 0;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration*.0343)/2;
pitch = 4000 - distance * 100;
if (pitch < 100)
pitch = 100;
tone(buzzer, pitch, 150);
Serial.print("Distance: ");
Serial.println(distance);
delay(200);
noTone(buzzer);
}
Dodatna pitanja i zadaci:
- Zašto oduzimamo od 4000?
- Koja je najmanja, a koja najveća frekvencija koju ima smisla koristiti? Zašto?
- U kojoj mjernoj jedinici se prikazuje frekvencija?
Što smo naučili?
- Ultrazvuk je mehanički val previsoke frekvencije da bi ga ljudi čuli.
- HC-SR04 mjeri udaljenost slanjem i primanjem zvučnog impulsa.
- Arduino mjeri vrijeme “leta” i iz njega računa udaljenost koristeći brzinu zvuka.
- Vrijeme se pretvara u udaljenost formulom koja uključuje faktor 1/2, jer zvuk ide do prepreke i natrag.
- Pomoću jednostavne formule možemo udaljenost pretvoriti u ton i tako višeosjetilno prikazati podatke senzora.