GPS Ultrasonik. Model konseptual
Sebelum memulai perjalanan yang begitu panjang, ada baiknya memeriksa apakah semuanya benar-benar dilakukan dengan lutut.
Apa artikel ini tentang: cara cepat dan murah membuat GPS ultrasonik sederhana.
Daftar perangkat yang diperlukan
- HC-SR04 3 Pcs.
- Arduino 1 Pcs.
- Gulungan kabel.
Konsep
Fig. 1 - Gagasan umum perangkatDi sudut atas ruangan, HC-SR04 dipasang, yang memainkan peran sebagai penghasil emisi, yang ketiga terbalik di lantai dengan penerima, dan memainkan peran sebagai penerima bagi kami.
Semua ini terhubung sesuai dengan skema:
Fig. 2 - Diagram koneksi perangkatDan tentu saja Anda menghubungkan Arduino melalui USB ke komputer.
Bagaimana cara kerjanya:
- Ukur jarak dari penerima ke emitor 1
- Kirim sinyal tentang awal pengukuran jarak ke penerima dan emitor 1 (tarik kaki Trig dengannya).
- Tunggu sampai penerima memberi kami panjangnya.
- Ulangi hal yang sama untuk emitor 2.
- Hitung koordinat penerima.
Ingat geometri sekolah
Fig. 3 - Representasi geometris masalahBerdasarkan gambar ini, buat rumus perhitungan koordinat:

A, F adalah ketinggian penghasil emisi relatif terhadap penerima;
C, E adalah panjang yang diperoleh dengan mengukur jarak dari emitor ke penerima;
G adalah jarak antara emitor.
Berlatih
Pasang dua radiator di bawah langit-langit, pada jarak yang layak dari satu sama lain (3 meter), arahkan mereka dengan radiator pada satu titik, di mana area kerja Anda akan terbentuk.
Pasang gagang telepon pada sesuatu yang rata (misalnya, selembar papan) dan bungkus dengan selotip dengan selotip sehingga kita tidak menciptakan suara ultrasonik yang tidak perlu di dalam ruangan.
Hubungkan semuanya sesuai dengan skema yang disajikan di atas.
Beginilah pengencang untuk penghasil emisi dan substrat untuk penerima terlihat:
Fig. 4 - Jenis modulProgramnya
Pertimbangkan bagian-bagian penting dari kode secara lebih rinci.
Kami memaksa emitor 1 dan penerima untuk mulai mengukur jarak dengan memindahkan input Trig perangkat ini dari rendah ke tinggi, 10 mikrodetik dan kembali ke rendah.
digitalWrite(trigPinRessiv, LOW); digitalWrite(trigPinTransmit1, LOW); delayMicroseconds(5); digitalWrite(trigPinRessiv, HIGH); digitalWrite(trigPinTransmit1, HIGH); delayMicroseconds(10); digitalWrite(trigPinRessiv, LOW); digitalWrite(trigPinTransmit1, LOW);
Biasanya, perangkat ini sendiri memancarkan sinyal ultrasonik dan menunggu sampai tercermin dari sesuatu, dan kembali kepada mereka. Tapi kami menipu mereka, dalam kasus kami, satu mengirim dan yang lain menerima, yang menerima menganggap itu adalah sinyalnya, meskipun ini adalah sinyal dari perangkat lain, dan memberi kami jarak ke perangkat lain ini.
Kami menunggu sampai sensor mulai memberi tahu kami durasi penerbangan dari sinyal ultrasonik:
while (digitalRead(echoPinRessiv) == LOW);
Catat waktu mulai sinyal:
timeStartSignal = micros();
Kami menunggu hingga sensor berhenti memberi tahu kami waktu penerbangan sinyal ultrasonik:
while (digitalRead(echoPinRessiv) == HIGH);
Kami menulis waktu akhir:
timeEndSignal = micros();
Dengan menggunakan rumus sederhana, kami menghitung jarak dari emitor ke penerima:
lenC = ((timeEndSignal-timeStartSignal)/58.00)*10.00;
Kami menunggu sampai suara ultrasonik mereda di ruangan:
delay(100);
Perlu dicatat bahwa sensor memberi tahu kita jarak dengan menurunkan output Echo ke Rendah untuk jangka waktu yang berbanding lurus dengan jarak yang diukur.
Hal yang sama diulang untuk emitor kedua.
Dengan menggunakan aturan pada segitiga siku-siku, kami memproyeksikan jarak yang dihasilkan ke bidang lantai (Gbr. 3).
Kami menerapkan rumus perangkat lunak untuk transisi dari koordinat tiga dimensi ke pesawat, rumusnya disajikan di atas:
lenB = sqrt((lenC*2.00)*(lenC*2.00) - lenA*lenA);
Sayangnya, kami memiliki kesalahan, dan untuk menghapusnya saya datang dengan formula yang berpengalaman, hapus dan lihat apa yang Anda dapatkan.
measurementError = 26.437 - 0.08*lenC/10; lenB = (lenB + measurementError*10)/10.00;
Ulangi hal yang sama untuk sensor 2.
Kami menghitung koordinat di pesawat
Temukan sudut Alpha:
alfa = acos(((lenG*lenG + lenD*lenD - lenB*lenB)*1.00) / ((2*lenE*lenG)*1.00));
Temukan koordinatnya sendiri:
koord_X = lenE*cos(1.57-alfa); koord_Y = lenE*cos(alfa);
Jika nilai koordinat melampaui kemungkinan, maka ganti dengan nilai sebelumnya:
if((koord_X > 0) && (koord_X < 500) && (koord_Y > 0) && (koord_Y < 500)) { oldKoord_X = koord_X; oldKoord_Y = koord_Y; }else{ koord_X = oldKoord_X; koord_Y = oldKoord_Y; }
Kami membuat buffer untuk 6 nilai koordinat dan terus-menerus mengubahnya:
koord_X5 = koord_X4; koord_X4 = koord_X3; koord_X3 = koord_X2; koord_X2 = koord_X1; koord_X1 = koord_X; koord_Y5 = koord_Y4; koord_Y4 = koord_Y3; koord_Y3 = koord_Y2; koord_Y2 = koord_Y1; koord_Y1 = koord_Y;
Kami mendapatkan nilai rata-rata untuk 6 pengukuran terakhir:
averageKoord_X = (koord_X + koord_X1 + koord_X2 + koord_X3 + koord_X4 + koord_X5)/6; averageKoord_Y = (koord_Y + koord_Y1 + koord_Y2 + koord_Y3 + koord_Y4 + koord_Y5)/6;
Kirim koordinat ke PC:
Serial.println(averageKoord_X); Serial.println(averageKoord_Y);
Fungsi:
float asin(float c) float acos(float c) float atan(float c)
ambil dan gunakan =)
Seluruh kode:
int trigPinRessiv = 8; int echoPinRessiv = 9; int trigPinTransmit1 = 2; int trigPinTransmit2 = 3; int i; long lenA = 2700;
Jadi kami mendapatkan sistem GPS ultrasonik yang paling sederhana dengan rentang meter per meter, video menunjukkan bagaimana semuanya bekerja.
Visualisasi lintasan dilakukan di Matlab, saya akan menulis bagaimana melakukan visualisasi yang sama di artikel selanjutnya.
Dalam artikel mendatang, saya akan mempertimbangkan secara lebih mendalam berbagai bagian dari sistem ini dan mencoba untuk memperbaikinya.
Saya akan senang mendengar pendapat dan tanggapan Anda tentang topik ini, proyek ini masih hidup =)
Halaman ProyekTerinspirasi oleh sumber-sumber berikut:
WikipediaPosting di Habr "Indoor" GPS "dengan akurasi + -2cm"