Menguasai Sensor Ultrasonik HC-SR04 dengan Arduino: Tutorial Lengkap
Pengenalan Sensor Ultrasonik HC-SR04
Dalam tutorial ini, kita akan mempelajari cara kerja sensor ultrasonik HC-SR04 dan bagaimana menggunakannya dengan Arduino. Sensor ini merupakan yang paling populer untuk mengukur jarak serta membuat robot penghindar rintangan dengan Arduino.
Penulis telah menggunakan sensor ultrasonik HC-SR04 untuk membangun beberapa proyek Arduino keren, yang dapat Anda lihat di sini:
Radar Arduino (Sonar)
Pengukur Jarak dan Libas Digital
Proyek Sistem Keamanan dan Alarm
Robot Hexapod Ant Arduino
Anda dapat menonton video berikut atau membaca tutorial tulisan di bawahnya. Tutorial ini berisi informasi dan contoh tambahan untuk sensor, termasuk spesifikasi, pinout, diagram kabel, kode, dan banyak lagi.
Tinjauan Perangkat Keras HC-SR04
HC-SR04 adalah sensor pengukur jarak yang terjangkau dan mudah digunakan dengan rentang 2cm hingga 400cm (sekitar satu inci hingga 13 kaki).
Sensor ini terdiri dari dua transmutor ultrasonik. Satu adalah pemancar yang mengeluarkan gelombang suara ultrasonik, dan yang lain adalah penerima yang mendengarkan gelombang terpantul. Pada dasarnya, ini adalah SONAR yang digunakan di kapal selam untuk mendeteksi objek di bawah air.
Berikut adalah spesifikasi utamanya:
Tegangan Operasi
5V DC
Arus Operasi
15mA
Frekuensi Operasi
40KHz
Jarak Minimum
2cm / 1 inci
Jarak Maksimum
400cm / 13 kaki
Akurasi
3mm
Sudut Pengukuran
<15°
Dimensi
45 x 20 x 15mm
Pinout Sensor Ultrasonik HC-SR04
Berikut adalah pinout sensor:
Sensor memiliki 4 pin. VCC dan GND terhubung ke pin 5V dan GND pada Arduino, sementara Trig dan Echo terhubung ke pin digital Arduino mana pun. Menggunakan pin Trig, kita mengirimkan gelombang ultrasonik dari pemancar, dan dengan pin Echo, kita mendengarkan sinyal yang terpantul.
Cara Kerja Sensor Jarak Ultrasonik HC-SR04
Sensor memancarkan ultrasonik pada frekuensi 40.000 Hz yang menyebar melalui udara. Jika ada objek atau rintangan di jalurnya, gelombang akan memantul kembali ke modul. Dengan mempertimbangkan waktu perjalanan dan kecepatan suara, kita dapat menghitung jarak.
Untuk menghasilkan ultrasonik, kita perlu mengatur pin Trig pada keadaan High selama 10 µs. Ini akan mengirimkan saran ultrasonik 8 siklus yang bergerak dengan kecepatan suara. Pin Echo akan menjadi High segera setelah saran 8 siklus dikirim, dan mulai mendengarkan atau menunggu gelombang tersebut dipantulkan dari objek.
Jika tidak ada objek atau pulsa terpantul, pin Echo akan time-out setelah 38ms dan kembali ke keadaan rendah.
Jika kita menerima pulsa terpantul, pin Echo akan turun lebih cepat dari 38ms tersebut. Berdasarkan waktu berapa lama pin Echo berada pada keadaan HIGH, kita dapat menentukan jarak yang ditempuh gelombang suara, sehingga jarak dari sensor ke objek.
Untuk tujuan itu, kita menggunakan rumus dasar berikut untuk menghitung jarak:
Jarak = Kecepatan x Waktu
Kita sebenarnya mengetahui kedua nilai kecepatan dan waktu. Waktu adalah berapa lama pin Echo berada pada keadaan HIGH, dan kecepatan adalah kecepatan suara yang merupakan 340m/s. Ada satu langkah tambahan yang perlu kita lakukan, yaitu membagi hasil akhir dengan 2. Ini karena kita mengukur durasi gelombang suara perlu untuk menuju objek dan memantul kembali.
Misalkan pin Echo berada pada keadaan HIGH selama 2ms. Jika kita ingin hasil jarak dalam cm, kita dapat mengonversi nilai kecepatan suara dari 340m/s menjadi 34cm/ms.
Jarak = (Kecepatan x Waktu) / 2 = (34cm/ms x 1.5ms) / 2 = 25.5cm.
Jadi, jika pin Echo berada pada keadaan HIGH selama 2ms (yang kita ukur menggunakan fungsi pulseIn()), jarak dari sensor ke objek adalah 34cm.
Cara Menghubungkan Sensor Ultrasonik HC-SR04 ke Arduino
Berikut cara menghubungkan sensor HC-SR04 ke papan Arduino.
Pin Ground dan VCC modul perlu dihubungkan ke Ground dan pin 5 volt pada Papan Arduino masing-masing, dan pin trig dan echo ke pin Digital I/O mana pun pada Papan Arduino.
Anda dapat mendapatkan komponen yang dibutuhkan untuk tutorial ini dari salah satu situs di bawah ini:
Sensor Ultrasonik HC-SR04 …………
Papan Arduino ……………………………
Breadboard dan Kabel Jumper ………
Kode Arduino Sensor Ultrasonik HC-SR04
Berikut adalah kode untuk mengukur jarak menggunakan sensor ultrasonik HC-SR04 dan Arduino.
/* Ultrasonic Sensor HC-SR04 and Arduino Tutorial by Dejan Nedelkovski, www.HowToMechatronics.com */ // defines pins numbers const int trigPin = 9; const int echoPin = 10; // defines variables long duration; int distance; void setup() { pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(9600); // Starts the serial communication } void loop() { // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance = duration * 0.034 / 2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance); }Code language: Arduino (arduino)
Penjelasan Kode
Pertama, kita harus menentukan pin Trig dan Echo. Dalam kasus ini, mereka adalah pin nomor 9 dan 10 pada Papan Arduino dan diberi nama trigPin dan echoPin. Kemudian kita perlu variabel Long, bernama "duration" untuk waktu perjalanan yang akan kita dapatkan dari sensor dan variabel integer untuk jarak.
// defines pins numbers const int trigPin = 9; const int echoPin = 10; // defines variables long duration; int distance;Code language: Arduino (arduino)
Pada setup, kita harus menentukan trigPin sebagai output dan echoPin sebagai Input, dan juga memulai komunikasi serial untuk menampilkan hasilnya pada serial monitor.
void setup() { pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(9600); // Starts the serial communication }Code language: Arduino (arduino)
Pada loop, pertama kita harus memastikan bahwa trigPin kosong, jadi Anda harus mengatur pin tersebut pada keadaan LOW selama hanya 2 µs. Sekarang untuk menghasilkan gelombang suara ultrasonik, kita harus mengatur trigPin pada keadaan HIGH selama 10 µs.
// Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);Code language: Arduino (arduino)
Menggunakan fungsi pulseIn(), kita membaca waktu perjalanan dan memasukkan nilai tersebut ke dalam variabel "duration". Fungsi ini memiliki 2 parameter, yang pertama adalah nama pin Echo dan untuk yang kedua adalah keadaan pulsa yang kita baca, baik High atau Low.
// Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH);Code language: Arduino (arduino)
Dalam kasus ini, kita perlu mengaturnya ke HIGH, karena sensor HC-SR04 mengatur pin Echo ke High setelah mengirimkan saran ultrasonik 8 siklus dari pemancar. Ini sebenarnya memulai timing dan setelah kita menerima gelombang suara yang terpantul, pin Echo akan turun ke Low yang menghentikan timing. Pada akhirnya, fungsi akan mengembalikan panjang pulsa dalam mikrodetik.
Untuk mendapatkan jarak, kita akan mengalikan duration dengan 0.034 dan membaginya dengan 2 seperti yang telah kita jelaskan dalam persamaan ini sebelumnya.
// Calculating the distance distance= duration*0.034/2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance);Code language: Arduino (arduino)
Pada akhirnya, kita akan mencetak nilai jarak pada Serial Monitor.
Contoh Sensor Ultrasonik Arduino dan Tampilan LCD
Berikut adalah contoh lain cara menggunakan sensor ultrasonik dengan Arduino dan menampilkan hasilnya pada LCD.
Anda dapat menghubungkan sensor ultrasonik dan LCD seperti berikut:
Kode untuk mengukur jarak cukup sama dengan contoh dasar. Di sini, alih-alih mencetak hasilnya pada serial monitor, kita mencetaknya pada LCD. Jika Anda membutuhkan detail lebih lanjut cara menggunakan dan menghubungkan LCD dengan Arduino, Anda dapat memeriksa tutorial khusus saya untuk itu.
/* Ultrasonic Sensor HC-SR04 and Arduino Tutorial by Dejan Nedelkovski, www.HowToMechatronics.com */ #include <LiquidCrystal.h> // includes the LiquidCrystal Library LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) const int trigPin = 9; const int echoPin = 10; long duration; int distanceCm, distanceInch; void setup() { lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distanceCm = duration * 0.034 / 2; distanceInch = duration * 0.0133 / 2; lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed lcd.print("Distance: "); // Prints string "Distance" on the LCD lcd.print(distanceCm); // Prints the distance value from the sensor lcd.print(" cm"); delay(10); lcd.setCursor(0, 1); lcd.print("Distance: "); lcd.print(distanceInch); lcd.print(" inch"); delay(10); }Code language: Arduino (arduino)
Contoh Kode Menggunakan Library NewPing
Sebenarnya ada cara yang lebih sederhana dan lebih baik untuk memprogram Arduino untuk mengukur jarak menggunakan sensor ultrasonik HC-SR04, yaitu dengan menggunakan library NewPing.
Dalam kode yang sebelumnya dijelaskan, kita secara manual memicu sensor dan mengukur durasi pulsa sinyal yang diterima. Kemudian berdasarkan hasilnya, kita menghitung jarak berdasarkan itu. Dengan menggunakan library NewPing, kita dapat mendapatkan jarak dengan hanya satu baris kode.
Berikut adalah contoh kode:
#include <NewPing.h> #define TRIGGER_PIN 9 #define ECHO_PIN 10 #define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters). NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. void setup() { Serial.begin(9600); } void loop() { delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings. int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range) Serial.print("Distance: "); Serial.print(distance); Serial.println("cm"); }Code language: Arduino (arduino)
Ini jauh lebih sederhana dari contoh sebelumnya. Kita hanya memanggil metode ping_cm() pada objek NewPing sonar dan kita mendapatkan jarak dalam sentimeter. Jika kita ingin jarak dalam inci, kita dapat menggunakan ping_in() sebagai gantinya.
Library ini juga memiliki beberapa fitur berguna lainnya. Misalnya, dengan metode ping_median(iterations [, max_cm_distance]), kita dapat mendapatkan hasil yang lebih akurat, karena ia mengembalikan median, atau nilai tengah dari beberapa pengukuran. Dengan parameter iterations, kita menetapkan jumlah sampel yang akan diambil program untuk menghitung nilai tengah. Nilai default adalah 5 iterasi. ping_median() mengembalikan durasi pulsa yang diterima dalam mikrodetik.
Namun, untuk informasi dan detail lebih lanjut, Anda dapat memeriksa halaman wiki NewPing.
Meningkatkan Akurasi Sensor Jarak HC-SR04 dengan Sensor Suhu DHT22
Sensor HC-SR04 cukup akurat, tetapi karena kerjanya bergantung pada kecepatan suara, untuk hasil yang lebih akurat kita juga harus mempertimbangkan suhu udara. Kecepatan suara dapat berubah secara signifikan seiring perubahan suhu udara. Misalnya, pada 20°C, kecepatan suara sekitar 340m/s, tetapi pada -20°C kecepatan suara sekitar 315m/s. Kelembaban relatif juga mempengaruhi kecepatan.
Jadi, jika kita menggunakan sensor ini untuk mengukur jarak pada suhu yang berbeda, kita harus menerapkan kompensasi suhu, dan kita dapat melakukannya dengan rumus berikut:
Kecepatan = 331.4 + 0.6 x Suhu + 0.0124 x Kelembaban_Relatif
Berikut adalah contohnya:
Selain sensor ultrasonik HC-SR04, kita akan menggunakan sensor DHT11 / DHT22 untuk mengukur suhu dan kelembaban lingkungan, dan menyesuaikan nilai kecepatan suara sesuai dengan itu.
Kode Arduino
/* Example made by Dejan, How To Mechatronics, https://howtomechatronics.com/ */ #include <NewPing.h> // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home #include "dht.h" // https://github.com/RobTillaart/DHTlib #define TRIGGER_PIN 9 #define ECHO_PIN 10 #define MAX_DISTANCE 400 #define dht22 5 // DHT22 temperature and humidity sensor NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); dht DHT; // Creats a DHT object int readDHT, temp, hum; float speedOfSound, distance, duration; void setup() { Serial.begin(9600); } void loop() { delay(100); // Read temperature and humidity from DHT22 sensor readDHT = DHT.read22(dht22); // Reads the data from the sensor temp = DHT.temperature; // Gets the values of the temperature hum = DHT.humidity; // Gets the values of the humidity speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds duration = duration/1000000; // Convert mircroseconds to seconds distance = (speedOfSound * duration)/2; distance = distance * 100; // meters to centimeters Serial.print("Distance: "); Serial.print(distance); Serial.println("cm"); }Code language: Arduino (arduino)
Jadi, pertama kita membaca nilai suhu dan kelembaban dari sensor DHT22, dan kemudian menggunakan nilai-nilai tersebut untuk menghitung kecepatan suara. Kemudian kita mendapatkan durasi gelombang suara berjalan dalam mikrodetik, mengonversinya menjadi detik dan menghitung jarak dari sensor ke objek dalam sentimeter.
Dimensi dan Model 3D HC-SR04
Saya telah membuat model 3D dari sensor ultrasonik HC-SR04 untuk kasus Anda membutuhkannya saat membuat proyek berikutnya dengan sensor ini. Anda dapat mengunduhnya dari tautan di bawah ini.
Anda dapat menemukan dan mengunduh model 3D ini di Thangs.
Berikut adalah dimensi sensor HC-SR04:
Harap diingat bahwa dimensi terkadang dapat sedikit berbeda tergantung pada produsen.
Kesimpulan
Jadi, kita telah membahas hampir semua yang perlu kita ketahui tentang penggunaan sensor Ultrasonik HC-SR04 dengan Arduino. Ini adalah sensor yang bagus untuk banyak proyek elektronik DIY di mana kita memerlukan pengukuran jarak tanpa kontak, deteksi kehadiran atau objek, tingkat atau posisi sesuatu, dll.
Saya telah menyebutkan proyek yang telah saya buat dengan sensor ini di awal postingan. Berikut adalah beberapa proyek keren lainnya menggunakan sensor HC-SR04 dan Arduino:
Tempat Sampah Sensor Gerak Otomatis Tanpa Sentuhan
Kontrol Lampu Pintar Gestur Tangan
Levitasi Akustik Mini
Robot Penghindar Rintangan
Saya harap Anda menikmati tutorial ini dan mempelajari hal baru. Jangan ragu untuk bertanya apa pun di bagian komentar di bawah dan jangan lupa untuk memeriksa koleksi lengkap saya dengan 30+ Proyek Arduino.