Bagaimana Mengukur Jarak Antara Dua Titik Menggunakan Arduino?

Dalam Elektronik, sebahagian besar Sensor Ultrasonik digunakan untuk mengukur jarak dari satu titik ke titik tertentu. Sangat mudah untuk menulis kod di papan Arduino dan menyatukan sensor ultrasonik untuk melaksanakan tugas ini. Tetapi dalam artikel ini, kita akan menggunakan pendekatan yang berbeza. Kami akan menggunakan dua sensor ultrasonik terpisah yang akan disatukan dengan dua Arduino yang berasingan. Kedua-dua modul ini akan diletakkan pada dua titik yang berbeza di mana jarak akan diukur. Satu sensor akan dijadikan penerima dan yang lain akan dijadikan pemancar. Dengan berbuat demikian, kita akan dapat mengukur jarak di antara mereka hanya dengan mencari kedudukan pemancar dengan menggunakan banyak penerima ultrasonik. Teknik yang kami gunakan di sini dipanggil Triangulasi.



Mengukur Jarak Menggunakan Arduino

Teknik yang digunakan di sini hanya berguna pada sistem skala kecil di mana jarak kecil dapat dijumpai. Untuk melaksanakannya dalam skala besar, beberapa pengubahsuaian pasti diperlukan. Semua cabaran yang dihadapi semasa menjalankan projek ini dibincangkan di bawah.



Bagaimana Menggunakan Arduino dan Ultrasonik Sensor Untuk Mengukur Jarak?

Oleh kerana kita mengetahui ringkasan di sebalik projek ini, mari kita maju dan mengumpulkan maklumat lebih lanjut untuk memulakan projek.



Langkah 1: Mengumpulkan Komponen (Perkakasan)

Sekiranya anda ingin mengelakkan kesulitan di tengah-tengah projek apa pun, pendekatan terbaik adalah membuat senarai lengkap semua komponen yang akan kita gunakan. Langkah kedua, sebelum mula membuat litar, adalah melalui kajian ringkas semua komponen ini. Senarai semua komponen yang kami perlukan dalam projek ini diberikan di bawah.



  • Wayar Pelompat
  • 5V AC ke DC Adapter (x2)

Langkah 2: Mengumpulkan Komponen (Perisian)

  • Proteus 8 Professional (Boleh dimuat turun dari Di sini )

Selepas memuat turun Proteus 8 Professional, reka litar di atasnya. Saya telah memasukkan simulasi perisian di sini supaya pemula dapat merancang litar dan membuat sambungan yang sesuai pada perkakasan.

Langkah 3: Mengendalikan HCR-05

Oleh kerana sekarang kita mengetahui abstrak utama projek kita, mari kita terus maju dan menjalani kajian ringkas mengenai kerja-kerja HCR-05 . Anda dapat memahami fungsi utama sensor ini dengan rajah berikut.

Sensor ini mempunyai dua pin, pin pencetus, dan pin eko yang kedua-duanya digunakan untuk mengukur jarak antara dua titik tertentu. Proses dimulakan dengan mengirim gelombang ultrasonik dari sensor. Tugas ini dilakukan dengan mencetuskan pin trig untuk 10us. Gelombang ultrasonik 8 ledakan sonik dihantar dari pemancar sebaik sahaja tugas ini selesai. gelombang ini akan bergerak di udara dan sebaik sahaja ia menyerang objek, ia akan menyerang kembali dan diterima oleh penerima yang dibina di dalam sensor.



Apabila gelombang ultrasonik akan diterima oleh penerima setelah memantulkan sensor, ia akan meletakkan pin eko ke negeri yang tinggi. Pin ini akan kekal dalam keadaan tinggi untuk jangka masa yang sama dengan masa yang diambil oleh gelombang ultrasonik untuk bergerak dari pemancar dan kembali ke penerima sensor.

Untuk menjadikan sensor ultrasonik anda pemancar hanya, hanya jadikan pin trig sebagai pin output anda dan hantarkan nadi tinggi ke pin ini selama 10us. Letupan ultrasonik akan dimulakan sebaik sahaja ini dilakukan. Jadi, setiap kali gelombang hendak dihantar, hanya pin pemicu sensor ultrasonik yang harus dikendalikan.

Tidak ada cara untuk menjadikan sensor ultrasonik sebagai penerima sahaja kerana kenaikan pin ECO tidak dapat dikawal oleh mikrokontroler kerana berkaitan dengan pin trig sensor. Tetapi ada satu perkara yang dapat kita lakukan adalah, kita dapat menutup pemancar sensor ultrasonik ini dengan pita saluran sehingga tidak ada gelombang UV yang keluar. Maka pin ECO pemancar ini tidak akan dipengaruhi oleh pemancar.

Langkah 4: Mengendalikan Litar

Sekarang, kerana kami telah membuat kedua-dua sensor berfungsi secara berasingan sebagai pemancar dan penerima, ada masalah besar yang dihadapi di sini. Penerima tidak akan mengetahui masa yang diambil oleh gelombang ultrasonik untuk bergerak dari pemancar ke penerima kerana tidak tahu dengan tepat kapan gelombang ini dihantar.

Untuk menyelesaikan masalah ini, apa yang harus kita lakukan adalah dengan menghantar a TINGGI memberi isyarat kepada ECO penerima sebaik sahaja gelombang ultrasonik dihantar oleh sensor pemancar. Atau dengan kata mudah, kita boleh mengatakan bahawa ECO penerima dan pencetus pemancar harus dihantar ke TINGGI pada masa yang sama. Oleh itu, untuk mencapai ini, kita akan menjadikan pemicu penerima menjadi tinggi sebaik sahaja pencetus pemancar naik. Pencetus penerima ini akan tetap tinggi sehingga pin ECO hilang RENDAH . Apabila isyarat ultrasonik akan diterima oleh pin ECO penerima, ia akan menjadi RENDAH. Ini akan bermaksud bahawa pemicu sensor pemancar baru mendapat isyarat TINGGI. Sekarang, sebaik sahaja ECO semakin rendah, kita akan menunggu kelewatan yang diketahui dan meletakkan pencetus penerima TINGGI. Dengan berbuat demikian, pencetus kedua-dua sensor akan diselaraskan dan jarak akan dihitung dengan mengetahui kelewatan masa perjalanan gelombang.

Langkah 5: Menyusun Komponen

Walaupun kami hanya menggunakan pemancar satu sensor ultrasonik dan penerima yang lain, tetapi wajib menyambungkan keempat-empat pin sensor ultrasonik ke Arduino. Untuk menyambungkan litar, ikuti langkah-langkah yang diberikan di bawah:

  1. Ambil dua sensor ultrasonik. Tutup penerima sensor pertama dan pemancar sensor kedua. Gunakan pita saluran putih untuk tujuan ini dan pastikan kedua-duanya ditutup sepenuhnya sehingga tidak ada isyarat yang meninggalkan pemancar sensor kedua dan tidak ada isyarat yang masuk ke penerima sensor pertama.
  2. Sambungkan dua Arduino pada dua papan roti berasingan dan sambungkan sensor masing-masing dengan mereka. Sambungkan Pin pemicu ke pin9 Arduino dan ecoPin ke pin10 Arduino. Nyalakan sensor ultrasonik dengan Arduino 5V dan gunakan semua alasan.
  3. Muat naik kod penerima ke Arduino Penerima dan kod pemancar ke Arduino pemancar.
  4. Sekarang buka monitor bersiri dari sisi penerima dan perhatikan jarak yang sedang diukur.

Gambarajah litar projek ini kelihatan seperti:

Rajah Litar

Langkah 6: Bermula dengan Arduino

Sekiranya anda belum biasa dengan Arduino IDE, jangan risau kerana prosedur langkah demi langkah untuk menyiapkan dan menggunakan Arduino IDE dengan papan mikrokontroler dijelaskan di bawah.

  1. Muat turun versi terbaru dari Arduino IDE dari Arduino.
  2. Sambungkan papan Arduino Nano anda ke komputer riba anda dan buka panel kawalan. di panel kawalan, klik pada Perkakasan dan Bunyi . Sekarang klik pada Peranti dan Pencetak. Di sini, cari port yang menghubungkan papan mikrokontroler anda. Dalam kes saya adalah COM14 tetapi berbeza pada komputer yang berbeza.

    Mencari Pelabuhan

  3. Klik pada menu Alat. dan tetapkan papan ke Arduino Nano dari menu lungsur turun.

    Menetapkan Papan

  4. Dalam menu Alat yang sama, tetapkan port ke nombor port yang anda perhatikan sebelumnya di Peranti dan Pencetak .

    Menetapkan Pelabuhan

  5. Dalam menu Alat yang sama, Tetapkan Pemproses ke ATmega328P (Lama Pemuat but ).

    Pemproses

  6. Muat turun kod yang dilampirkan di bawah dan tampalkannya ke Arduino IDE anda. Klik pada muat naik butang untuk membakar kod pada papan mikrokontroler anda.

    Muat naik

Untuk memuat turun kod, tekan di sini.

Langkah 7: Memahami Kod

Kod yang digunakan dalam projek ini sangat ringkas dan cukup baik dikomentari. Terdapat dua fail kod dalam folder terlampir. Kod untuk pemancar dan kod untuk sisi penerima keduanya diberikan secara berasingan. Kami akan memuat naik kod-kod ini di kedua papan Arduino masing-masing. Walaupun dapat dijelaskan sendiri, ia dijelaskan secara ringkas di bawah.

Kod Untuk Bahagian Pemancar

1. Pada permulaan, pin papan Arduino diinisialisasi yang akan disambungkan ke Ultrasonik Sensor. Kemudian pemboleh ubah diisytiharkan yang akan digunakan untuk menyimpan nilai-nilai untuk pengiraan masa dan jarak selama masa menjalankan kod.

// mentakrifkan nombor pin const int trigPin = 9; // Sambungkan pin trig sensor ultrasonik ke pin9 Arduino const int echoPin = 10; // Sambungkan pin eko sensor ultrasonik ke pin10 Arduino // mentakrifkan pemboleh ubah yang panjang; // pemboleh ubah untuk menyimpan masa yang diambil oleh gelombang ultrasonik dalam jarak perjalanan; // pemboleh ubah untuk menyimpan jarak dikira

2. persediaan tidak sah () adalah fungsi yang hanya berjalan satu kali pada permulaan ketika papan dihidupkan atau butang aktif ditekan. Di sini kedua pin Arduino dinyatakan boleh digunakan sebagai MASUKKAN dan PENGELUARAN . Baudrate ditetapkan dalam fungsi ini. Baud rate adalah kelajuan dalam bit sesaat di mana mikrokontroler berkomunikasi dengan sensor ultrasonik.

kekosongan persediaan () {pinMode (trigPin, OUTPUT); // Menetapkan trigPin sebagai Output pinMode (echoPin, INPUT); // Tetapkan echoPin sebagai Input Serial.begin (9600); // Memulakan komunikasi bersiri}

3. gelung kosong () adalah fungsi yang berjalan berulang-ulang dalam satu gelung. Di sini kami telah mengkod mikrokontroler sehingga ia menghantar isyarat TINGGI ke pin Pemicu sensor ultrasonik, akal selama 20 mikrodetik dan menghantar isyarat RENDAH kepadanya.

gelung void () {// Tetapkan trigPin pada keadaan TINGGI selama 10 saat mikro digitalWrite (trigPin, HIGH); // hantar isyarat TINGGI pada pencetus kelewatan sensor pertamaMikrodetik (10); // tunggu 10 mikro saat digitalWrite (trigPin, RENDAH); // hantar isyarat RENDAH ke pencetus penundaan sensor pertama (2); // tunggu 0.2 saat}

Kod Untuk Bahagian Penerima

1. Pada permulaan, pin papan Arduino diinisialisasi yang akan disambungkan ke Ultrasonik Sensor. Kemudian pemboleh ubah diisytiharkan yang akan digunakan untuk menyimpan nilai-nilai untuk pengiraan masa dan jarak selama masa menjalankan kod.

// mentakrifkan nombor pin const int trigPin = 9; // Sambungkan pin trig sensor ultrasonik ke pin9 Arduino const int echoPin = 10; // Sambungkan pin eko sensor ultrasonik ke pin10 Arduino // mentakrifkan pemboleh ubah yang panjang; // pemboleh ubah untuk menyimpan masa yang diambil oleh gelombang ultrasonik dalam jarak perjalanan; // pemboleh ubah untuk menyimpan jarak dikira

2. persediaan tidak sah () adalah fungsi yang hanya berjalan satu kali pada permulaan ketika papan dihidupkan atau butang aktif ditekan. Di sini kedua pin Arduino dinyatakan digunakan sebagai INPUT dan OUTPUT. Baudrate ditetapkan dalam fungsi ini. Baud rate adalah kelajuan dalam bit sesaat di mana mikrokontroler berkomunikasi dengan sensor ultrasonik.

kekosongan persediaan () {pinMode (trigPin, OUTPUT); // Menetapkan trigPin sebagai Output pinMode (echoPin, INPUT); // Tetapkan echoPin sebagai Input Serial.begin (9600); // Memulakan komunikasi bersiri}

3. batal Trigger_US () adalah fungsi yang akan dipanggil untuk Pemicu Palsu dari pin trig dari sensor ultrasonik kedua. Kami akan menyegerakkan masa pencetus pin trig kedua sensor.

batal Trigger_US () {// Pencetus palsu sensor digitalWrite AS (trigPin, TINGGI); // Hantarkan isyarat TINGGI ke pin pencetus kelewatan sensor KeduaMikrodetik (10); // tunggu 10 detik mikro digitalWrite (trigPin, RENDAH); // hantar isyarat RENDAH ke pengirim kedua pin pencetus}

Empat. batal Calc () adalah fungsi yang digunakan untuk mengira masa yang diambil oleh isyarat ultrasonik untuk bergerak dari sensor pertama ke sensor kedua.

void Calc () // berfungsi untuk menghitung masa yang diambil oleh gelombang ultrasonik untuk melakukan perjalanan {durasi = 0; // tempoh awalnya ditetapkan ke sifar Trigger_US (); // panggil fungsi Trigger_US sementara (digitalRead (echoPin) == TINGGI); // sementara status eo pin dalam kelewatan tinggi (2); // letakkan kelewatan 0.2 saat Trigger_US (); // panggil tempoh fungsi Trigger_US = pulseIn (echoPin, HIGH); // hitung masa yang diambil}

5. Di sini di gelung kosong () fungsi, kita menghitung jarak dengan menggunakan masa yang diambil oleh isyarat ultrasonik untuk melakukan perjalanan dari sensor pertama ke sensor kedua.

gelung kosong () {Jarak = jarak; Kira (); // panggil jarak fungsi Calc () = durasi * 0,034; // menghitung jarak yang diliputi oleh gelombang ultrasonik jika (Jarak == jarak || Jarak == jarak + 1 || Jarak == jarak-1) {Serial.print ('Jarak Terukur:'); // cetak pada monitor bersiri Serial.println (jarak / 2); // cetak pada monitor bersiri} //Serial.print('Distance: '); //Serial.println(jarak/2); kelewatan (500); // tunggu selama 0.5 saat}