Halo sayang!
Pada artikel ini, berdasarkan permintaan populer, kami akan memberi tahu Anda cara membuat modem hidroakustik sederhana: sedikit pemrosesan sinyal digital, sedikit pemrograman, sedikit papan sirkuit cetak buatan sendiri, dan setetes hidrologi praktis.
Kepada semua yang tertarik - kami meminta Anda untuk disambut di bawah cut, ke dunia komunikasi bawah laut yang bergema!
Dan inilah gambar yang relevan, untuk menarik perhatian:

"Pada akhirnya, makna dari keberadaan kita adalah untuk menghabiskan energi ... Dan jika mungkin, kau tahu, sehingga itu menarik bagi dirimu sendiri, dan bagi orang lain bermanfaat."
(C) ABS, Tengah Hari, Abad XXII
Hemat Waktu Anda - Ringkasan
- Modem akustik belum dijual di Aliexpress
- Ada metode perhitungan nada sumber daya yang sederhana dan tidak menuntut, yang frekuensinya 4 kali lebih sedikit dari frekuensi pengambilan sampel; Arduino sudah cukup untuk implementasi
- Kode contoh untuk PC terletak di GitHub
- Kami membuat penerimaan dan pengiriman antena dari pemetik pie masing-masing 10 r
- Kami membeli (atau melakukannya sendiri) papan amplifier di TDA2030 pada Ali untuk 50 rubel
- Kami membuat preamplifier LUT-ohm, dengan total biaya ~ 100 rubel
- Kami terhubung dan pergi ke kolam
- Bersukacitalah
Pendahuluan Motivasi
Sekarang Anda dapat membeli hampir semua barang di Aliexpress atau eBay. Terutama banyak hal yang berbeda untuk pembuatan independen sesuatu yang berbasis elektronik pada Arduino. Anda dapat membuat (jika Anda tidak tertarik) stasiun cuaca persinggahan dengan koneksi internet, pengumpan kucing otomatis, pengontrol pembuatan bir di rumah, tetapi Anda masih tidak dapat membeli modem sonar, desainer untuk pembuatannya, atau setidaknya modul untuk adruino. Baik dan bagus! Dan jangan - sekarang kami akan memberi tahu Anda cara membuatnya, dan juga memberi tahu cara kerjanya.
Kami seluruh laboratorium untuk waktu yang lama memikirkan apa yang bisa ditawarkan kepada pecinta untuk pembuatan independen. Sesuatu yang sangat sederhana, yang dapat dikumpulkan oleh siswa dan dari
tongkat dan tali apa yang dimiliki semua orang, tetapi pada saat yang sama harus mewakili setidaknya nilai praktis atau pendidikan minimal.
Sesuatu yang menjanjikan perbaikan yang panjang dan menarik, sesuatu yang nantinya bisa ditransfer bahkan ke Arduino
, jika itu salah .
Jika kita mendekati masalah ini secara material, kami ingin menawarkan tutorial terperinci untuk pembuatan perangkat sederhana yang akan lebih atau kurang dapat mengirimkan data dalam badan air dangkal (saluran sonar dangkal adalah yang paling kompleks), yang berarti produksi maksimum papan sirkuit cetak menggunakan LUT, dengan total biaya tidak melebihi beberapa tiga ratus rubel pada titik minimal.
Apa yang akan kita lakukan hari ini?
- ingat bagaimana membuat antena sonar yang cocok dan membuat pasangan;
- sambungkan salah satu antena ke PC melalui amplifier pada TDA untuk ~ 50 rubel dan dapatkan pemancar;
- untuk yang kedua, kami akan membuat preamplifier dengan bantuan LUT untuk ~ 100 rubel;
- kami
akan menulis (saya sudah menulis semuanya dan meletakkannya di Git) modem sederhana di C # dan mencoba semuanya di badan air terdekat;
Apa yang kita butuhkan untuk ini?
- dua elemen piezoelektrik. Misalnya, dari jam atau kartu pos ;
- Kabel RG-174 / U (atau serupa) ~ 5 meter;
- sealant asetat;
- pernis tahan air;
- foil textolite, total sekitar 100x200 mm;
- penguat untuk TDA2030 (misalnya, satu untuk 50 rubel);
- komponen preamp
Bagaimana cara kerjanya?
Seluruh ide modem paling sederhana dibangun di atas, sekali lagi, detektor (kebetulan?) Yang paling sederhana dari nada tertentu, yang, sayangnya, belum saya dengar. Memberitahu saya tentang dia sepenuhnya secara kebetulan
andrey_9999a . Ngomong-ngomong, dia juga membuat papan preamplifier.
Dalam hal ini, saya mengingat kutipan dari buku Leonard Sasskind "The Battle of the Black Hole":
“Sebagai ahli anggur, saya kurang lebih yakin bahwa bahkan dengan mata tertutup saya dapat membedakan merah dari putih. Bahkan lebih dapat diandalkan, saya membedakan anggur dari bir. Tapi rasanya akan mengecewakanku. ”
Saya dapat mengatakan kepada diri saya sendiri bahwa sebagai insinyur elektronik sejati saya kurang lebih yakin bahwa saya pasti dapat menyolder dua kabel tebal. Bahkan lebih dapat diandalkan, saya membedakan besi solder panas dari yang dingin bahkan dengan mata tertutup, tetapi kemudian keterampilan itu akan mengecewakan saya. Oleh karena itu, segala sesuatu yang berkaitan dengan pengembangan dan pembuatan papan adalah karya rekan dan kolega saya
andrey_9999a dan
StDmitriev .
Jadi, kembali ke detektor. Ini adalah kasus khusus yang disederhanakan untuk menghitung integral Fourier:
Dalam kasus sinyal digital, untuk menghitung amplitudo harmonik arbitrer, akan perlu untuk melakukan transformasi Fourier diskrit, untuk Arduina ini sulit, tetapi triknya adalah jika Anda mengambil
Fc sebagai frekuensi pembawa sehingga akan menjadi persis 4 kali lebih sedikit dari frekuensi sampling
Fs , maka amplitudo harmonik ini dapat dihitung secara iblis lebih mudah.
Dalam hal ini,
dt = 2π * (Fs / 4) / Fs = π / 2 , dan hanya 4 sampel yang jatuh pada periode pembawa:

Jika semuanya digeser oleh
π / 4, maka sampel hanya akan mengambil dua nilai: √2 / 2 dan -√2 / 2, untuk kesederhanaan kita hanya akan meninggalkan tanda-tanda -
“+” dan “-” .
Inti dari metode ini adalah bahwa kami mewakili fase sinus sebagai urutan tanda
"+" "+" "-" "-" , dan fase cosinus sebagai
"+" "-" "-" "-" "+" .
Biarkan sinyal input berada di buffer
sn , kami memiliki dua buffer cincin rata-rata untuk fase sinus dan cosinus -
bs dan
bc dengan ukuran
N. Pointer ke kepala dan ekor adalah hal yang biasa bagi mereka -
bH dan
bT . Pada saat awal,
bH = N-1, bT = 0 . Rata-rata penghitung siklus
C = 0 .
Kami mengambil 4 sampel dari buffer input dan menambahkannya sesuai dengan urutan karakter.
Contoh kodea = sn(i)
bs(bH) = a
bc(bH) = a
s1 = s1 + a - bs(bT)
s2 = s2 + a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+1)
bs(bH) = a
bc(bH) = -a
s1 = s1 + a - bs(bT)
s2 = s2 - a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+2)
bs(bH) = -a
bc(bH) = -a
s1 = s1 - a - bs(bT)
s2 = s2 - a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+3)
bs(bH) = -a
bc(bH) = a
s1 = s1 - a - bs(bT)
s2 = s2 + a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
Setelah masing-masing memproses empat sampel, kami memeriksa penghitung siklus rata-rata dan jika telah melebihi
N , maka kami menghitung amplitudo
cA dari pembawa:
if ++cycle >= N cA = sqrt(s1 * s1 + s2 * s2) cycle = 0 end
Beginilah tampilannya pada sinyal ideal:

Sinyal itu sendiri ditunjukkan dengan warna biru, dan nilai amplitudo pembawa ditampilkan dalam warna merah (semuanya dikurangi ke kisaran -1.1.1). Dalam hal ini,
N = 2 sejak tidak ada suara dan semuanya bekerja dengan baik.
Sekarang tambahkan white noise dan lihat bagaimana detektor kami akan merespons ini:

Saya menambahkan white noise sehingga rasio signal-to-noise adalah 0 dB. Pada gambar di atas, sinyal berisik ditampilkan dalam warna biru, sinyal sumber dalam warna hijau, dan nilai amplitudo dalam warna merah. Dalam hal ini, detektor di
N = 2 sudah tidak mendeteksi apa-apa, dan minimum N di mana ia berfungsi dengan baik adalah 32. Artinya, ukuran jendela pemrosesan dalam sampel adalah
32 * 4 = 128 sampel.
Artinya, sekarang kita dapat menganalisis sinyal input dan mengevaluasi parameter yang mengukur keberadaan frekuensi, empat kali lebih sedikit dari frekuensi sampling. Jika Anda menetapkan nilai ambang tertentu untuk parameter ini, maka semuanya dapat di binarisasi, dan berbicara dengan cara sederhana, kami dapat memberikan jawaban untuk pertanyaan: apakah ada nada yang diberikan pada sinyal input atau tidak?
Ini sangat bagus, tetapi kita perlu mengirimkan bit, dan bit dapat mengambil dua nilai.
Menerapkan sistem dengan dua negara pensinyalan dengan bantuan satu adalah ide begitu-begitu, oleh karena itu kami
tidak akan menyandikan salah satu negara dengan diam (jeda). Ini akan membuat pendeteksian menjadi sangat sulit: perlu untuk entah bagaimana menyorot awal premis, mencari tahu bagaimana mengatur akhirnya, dll.
Sebagai gantinya, "1" dan "0" kita akan mengkodekan dengan pulsa dengan panjang yang berbeda, antara bit ada yang disebut Interval penjaga - karena kita masih harus berurusan dengan propagasi dan reverb multipath. Secara sederhana, interval penjaga adalah tempat (waktu) di mana semua pantulan dari bit sebelumnya, semua bunyi setelah dan gema mati.
Ke depan, kami mencatat bahwa dengan struktur sinyal seperti itu, algoritma operasi penerima sangat disederhanakan: kami menunggu nada muncul, perhatikan awalnya, tunggu nada menghilang dan perhatikan lagi waktu - jika waktu yang diterima lebih panjang seperti "1", mungkin kita mengambil sedikit dengan nilai “1”, jika terlihat lebih seperti “0” - maka ternyata kita mengambil sedikit dengan nilai “0”.
Secara umum, kita dapat mengatakan bahwa ini adalah semacam kode morse.
Perangkat lunak bagian dari modem
Untuk yang tidak sabar -
contohnya ada pada GitHub . Itu dicambuk dalam C # (karena untuk PC saya menulis di atasnya dan itu hanya lebih nyaman dan lebih cepat untuk saya).
Perpustakaan
NAudio yang luar
biasa digunakan untuk memutar dan menangkap suara dari input mikrofon.
Semua logika modem ada di kelas
SUAModem (Simple Underwater Acoustic Modem).
Parameter berikut diteruskan ke konstruktor:
sRateHz ganda - laju pengambilan sampel dalam Hertz;
int wSize - ukuran jendela pemrosesan dalam sampel;
int oneMultiplier - berapa banyak "windows" yang bertahan sedikit dengan nilai "1"
int zeroMultiplier - berapa banyak "windows" yang bertahan sedikit dengan nilai "0"
dobel eThreshold - threshold, mari kita bicarakan nanti
Untuk menghasilkan sinyal dari array byte, ada metode (data [] data) ModulateData, yang mengembalikan array sampel yang ditandatangani 16-bit.
public short [] ModulateData (byte [] data) public short[] ModulateData(byte[] data) { double alpha = 0; double phase = 0; List<short> samples = new List<short>(); BitArray bits = new BitArray(data); for (int i = 0; i < bits.Length; i++) { int sLim = (bits[i]) ? oneDurationSmp : zeroDurationSmp; alpha = 0; phase = 0; for (int sIdx = 0; sIdx <= sLim; sIdx++) { alpha = Math.Sin(phase); phase += delta; if (phase >= alimit) phase -= alimit; samples.Add(Convert.ToInt16(alpha * short.MaxValue)); } samples.AddRange(new short[defenseIntervalSmp]); } return samples.ToArray(); }
Dalam loop utama dengan bit yang ditransmisikan, daftar sampel diisi. Tergantung pada bit yang ditransmisikan saat ini, panjang sLim dari sinyal yang dihasilkan dalam sampel diatur. Interval penjaga ditambahkan setelah setiap bit.
Tentu saja ...Banyak yang mungkin memperhatikan bahwa ketika menghasilkan sinyal, seseorang dapat melakukannya tanpa fungsi sinus, tetapi contoh ini memungkinkan, dengan mengubah nilai delta yang sesuai, untuk mengubah frekuensi nada yang dihasilkan.
Untuk menghasilkan nada dengan frekuensi
pada tingkat sampling yang diberikan
nilai yang sesuai
dihitung secara sederhana:
Untuk menghasilkan dan memancarkan sinyal, ada metode TransmitData (byte [] data), yang secara internal memanggil ModulateData:
data ganda TransmitData (byte [] publik) public double TransmitData(byte[] data) { var samples = ModulateData(data); double txTime = ((double)samples.Length) / SampleRateHz; var rawBytes = new byte[samples.Length * 2]; for (int i = 0; i < samples.Length; i++) { var bts = BitConverter.GetBytes(samples[i]); rawBytes[i * 2] = bts[0]; rawBytes[i * 2 + 1] = bts[1]; } using (var ms = new MemoryStream(rawBytes)) { using (var rs = new RawSourceWaveStream(ms, new WaveFormat(Convert.ToInt32(SampleRateHz), 16, 1))) { using (var wo = new WaveOutEvent()) { wo.Init(rs); wo.Play(); while (wo.PlaybackState == PlaybackState.Playing) { Thread.SpinWait(1); } } rs.Close(); } ms.Close(); } return txTime; }
Kelas SUAModem melaporkan penerimaan byte berikutnya menggunakan peristiwa DataReceivedEventHandler.
Sampel input dikirim ke analisis menggunakan metode ProcessInputSignal (data singkat []), di mana sampel tersebut ditulis ke buffer cincin. Analisis berlangsung di utas terpisah, dalam metode Penerima.
Dan penerima itu sendiri hidup dalam metode Terima:
private void Receive () private void Receive() int a; while (rCnt >= 4) { a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = a; dRing2[rHead] = a; s1 += a - dRing1[rTail]; s2 += a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = a; dRing2[rHead] = -a; s1 += a - dRing1[rTail]; s2 += -a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = -a; dRing2[rHead] = -a; s1 += -a - dRing1[rTail]; s2 += -a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = -a; dRing2[rHead] = a; s1 += -a - dRing1[rTail]; s2 += a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; if (++cycle >= windowSize) { cycle = 0; currentEnergy = Math.Sqrt(s1 * s1 + s2 * s2) / windowSize; double de = currentEnergy - prevEnergy; #region analysis if (skip > 0) skip -= windowSize * 4; else { if (isRise) { if (de > -Threshold) { riseSmp += windowSize * 4; } else { // analyse symbol isRise = false; double oneDiff = Math.Abs(oneDurationSmp - riseSmp); double zeroDiff = Math.Abs(zeroDurationSmp - riseSmp); if (oneDiff > zeroDiff) { // Mostly likely "0" AddBit(false); } else { // Mostly likely "1" AddBit(true); } samplesSinceLastBit = 0; skip = defenseIntervalSmp / 2; } } else { if (de > Threshold) { isRise = true; riseSmp = windowSize * 4; } } } #endregion prevEnergy = currentEnergy; if (bPos > 0) { samplesSinceLastBit += 4 * windowSize; if (samplesSinceLastBit >= defenseIntervalSmp * 2 + zeroDurationSmp + oneDurationSmp) { DiscardBits(); } } } } }
Dapat dilihat dari kode bahwa analisis dilakukan dalam 4 sampel, jika Anda mau, Anda dapat menyimpan status dan memproses satu sampel, yang akan berguna saat mentransfer ke beberapa MK yang lemah.
Ketika data diterima, nilai amplitudo s dihitung pada frekuensi sRateHz / 4. Perbedaan antara nilai amplitudo sebelumnya dan saat ini dihitung dan kemudian dibandingkan dengan ambang tertentu, dipilih secara eksperimental. Contoh memungkinkan Anda untuk mengubah ambang batas ini secara real time.
Peningkatan amplitudo yang tajam mengindikasikan awal dari suatu "bit", penurunan yang tajam (agak kurang tajam karena gema) menunjukkan akhir dari "bit".
Setelah menerima bit berikutnya, kami mengerjakan interval pelindung - kami melewatkan jumlah sampel yang ditentukan - ada semua jenis gema di dalamnya, mereka hanya akan mengganggu kami.
Bagian besi modem
Jadi, dengan struktur sinyalnya, semuanya jelas, bagaimana cara menerimanya terlalu jelas. Yang kecil adalah belajar bagaimana memancarkan sinyal ke dalam air dan menerimanya dari air.
Jika Anda belum memiliki antena sonar, maka sudah saatnya melakukannya di
tutorial kami sebelumnya .
Saya tinggal bersama mereka sejak saat itu, jadi saya lewati langkah ini.
Kami menghubungkan antena yang dimaksudkan untuk transmisi ke
papan amplifier dengan aliexpress . Untuk beberapa puluh meter (bahkan ratusan), ini cukup bagi kami. Tidak ada trik di sini - output kartu suara laptop masuk ke input amplifier, yang ditenagai oleh baterai asam timbal 12 volt 4 Ah. Antena transmisi hidroakustik kami dari piezo tweeter terhubung ke output. Dalam kasus saya, tampilannya seperti ini:


Pada foto di atas, di layar ada spoiler kecil untuk artikel selanjutnya. Lain kali pada kelenjar yang sama kita akan kembali mencoba mentransmisikan suara "video" melalui air, tetapi dengan cara yang sama sekali berbeda dari yang
terakhir .
Dengan antena penerima agak lebih rumit. Meskipun tweeter piezo sangat sensitif, ini masih belum cukup. Kita harus memasang papan preamplifier dengan filter pada pita 5-35 kHz.
Keuntungan yang kami ambil adalah 1000.
Rangkaian, desain papan sirkuit, dan daftar komponen preamplifier ada di GitHub kami:
sirkuit , trek -
lapisan atas dan
lapisan bawah ,
BOM .
Teknologi LUT telah dibahas ratusan kali, tetapi marilah kita juga melakukan yang terbaik.
Memproses fotoJadi, kami mengambil majalah yang sesuai, kami hanya punya satu ini:

Kami mengambil beberapa halaman dari sana dan mencetak lapisan di atasnya menggunakan printer laser.

Gabungkan dengan jarum dan lem di satu sisi, seperti yang ditunjukkan pada foto:

Sebelum menggunakan setrika, kami basahi toner dengan isopropil alkohol:

Setrika melalui lembar A4 dilipat empat kali:

Rendam dalam air hangat di bawah keran:

Dan kami mencuci sisa-sisa kertas. Setelah itu kami mendapatkan benda kerja yang siap untuk etsa:

Kami memotong kelebihan dengan bantuan gunting untuk logam atau kepada siapa itu lebih nyaman.
Kami meracuni ferric chloride. Khusus untuk artikel, kami melemparkan segar, ternyata sangat pemilih sehingga gelembung aktif berasal dari papan masa depan:

Hasilnya, setelah mengetsa dan mencuci toner, kami mendapatkan produk setengah jadi:


Setelah menyolder komponen dan mencuci, papan terlihat seperti ini.

Dan sepertinya perakitan bagian penerima. Daya disuplai dari baterai timah yang sama 12 volt:

Penafian filter kecilJika pembaca ingin mengubah pita, maka kami mengusulkan untuk menghitung ulang filter urutan ke-8 yang dirangkai pada TL084C 4-channel murah (DA2 dalam
diagram ), resistor R10-R13, R15-R23 dan kapasitor C5-C8, C11, C12, C14 dan C15.
Untuk jaga-jaga, berikut adalah respons frekuensi dari implementasi filter saat ini:

Dan di sini ada
proyek lain untuk filter ini yang dibuat dalam aplikasi
Qucs Pengalaman dan tes
Untuk terhubung ke laptop kita menggunakan Jack biasa 3,5 mm, ujungnya adalah sinyal, yang tengah tidak terhubung, tanah -
debu ke debu ke tanah. Semua amplifikasi dan segala efek mikrofon harus dimatikan, dan volume harus diputar untuk mencapai tingkat optimal. Irama harus terjadi ketika Anda menyentuh antena yang terhubung ke preamplifier dengan jari Anda dan dengan ringan membelainya.
Jika Anda cukup meletakkan satu bagian pada yang lain tanpa amplifier dan preamplifier dan menghubungkannya ke input dan output audio, maka semuanya bekerja dengan sempurna. Di bawah ini adalah bagian dari sinyal dan Anda bahkan dapat menentukan dengan mata di mana nilai-nilai bit:

Sinyal itu sendiri ditampilkan dalam warna biru, perbedaan antara nilai amplitudo saat ini dan sebelumnya (depan) dalam warna merah, dan perbedaan antara nilai sebelumnya dan nilai saat ini (penurunan) berwarna hijau. Anda dapat dengan mudah “mendemodulasi” bagian premis ini: 1 0 0 0 1 1 0. Nol kami dua kali lebih lama dari satu, dan durasi interval penjaga sama dengan durasi nol.
Selanjutnya, juga tanpa amplifier dan preamplifier, kami menurunkan antena kami ke dalam tangki logam, dengan dimensi 3x1.5x1.5. Kami memiliki ini di laboratorium, dan kami membuat peraturan bahwa kami tidak melakukan komunikasi apa pun jika dia entah bagaimana tidak dapat bekerja di tangki ini. Faktanya adalah bahwa dalam volume energi yang sedemikian tertutup tidak ada tempat untuk pergi - suaranya luar biasa dan berulang kali dipantulkan dari dinding logam dan pada titik penerimaan bubur diperoleh. Dan mengingat fakta bahwa kami biasanya memeriksa perangkat yang sudah jadi dengan energi yang dihitung ribuan meter, Anda dapat membayangkan apa yang terjadi di sana.
Misalnya, dua modem
RedLINE kami
bekerja secara stabil di tangki ini hanya pada jarak tidak lebih dari dua meter, dan dua
uWAVE bekerja secara stabil pada
jarak sekitar 1 meter. Sementara yang pertama di perairan terbuka bekerja hingga 8000 meter, dan yang kedua -
hingga satu kilometer .
Tentu saja, semua produk komersial tidak menggunakan skema modulasi primitif seperti itu, yang dibahas dalam artikel dan jauh lebih rumit, tetapi penting bagi kita sekarang untuk memahami dasar-dasarnya dan berguna melakukan sesuatu dengan tangan kita.
Secara umum, kami menurunkan antena ke dalam tangki hingga jarak sekitar 50 sentimeter dan kami sudah mendapatkan sesuatu yang jauh lebih indah daripada dengan kontak langsung antena:

Meskipun interval penjaga yang lebih lama digunakan di sini, masih terlihat bahwa gema berjalan hampir ke bit berikutnya, bagian depan dan terutama dips sangat buram. Tetapi Anda masih dapat menentukan konten pesan: 1 0 0 0 1 1 0
Dalam kedua kasus, saya mengirim pesan "123" dan tujuh bit ini milik simbol unit.
Itu terlihat seperti ini, lalu antarmuka sedikit redone

Dari layar di atas dapat dilihat bahwa dengan pengaturan tersebut, pengiriman pesan “Halo,
habr !!! :-) "yang terdiri dari 19 byte membutuhkan waktu 9,132 detik, yaitu, kecepatan transmisi adalah 16,6 bit / s. By the way, agar modem bekerja di tangki kami, kami harus meningkatkan interval penjaga sehingga kecepatan transmisi turun menjadi ~ 3 bit / s.
Kami memeriksa pekerjaan buatan sendiri di kolam renang, di mana ia terus mendapatkan 10 meter.

Kami juga menikmati pekerjaan buatan sendiri di kolam. Saya menggunakan hidrofon aktif dalam desain yang sangat mirip dengan yang diusulkan dalam artikel, hanya alih-alih tweeter piezo ada yang menggunakan sensor dari sensor parkir, baterai dipasang di sana di koil di mana kabel luka:


Antena penerima dan pemancar turun langsung dari pantai, kedalamannya tajam dari 0,5 hingga 2 meter. Anehnya, dalam percobaan yang ditunjukkan pada foto di atas, kondisi terburuknya adalah, jaraknya hanya sekitar 5 meter - ini biasanya merupakan pengaturan awal. Dari 20 pesan yang ditransmisikan, masing-masing 3 byte, dalam enam di antaranya satu byte dikalahkan.
Kemudian, ketika kami menghubungkan receiver ke laptop kedua dan memindahkannya ke sisi lain kolam (jarak sekitar 30 meter), transmisi berjalan jauh lebih baik - hanya ada beberapa kesalahan dengan 40 pesan dengan ukuran mulai dari 3 hingga 13 byte.

Di foto berikutnya di peta, tempat antena berada terlihat.

Kesimpulan dan penelitian lebih lanjut
Seperti yang dijanjikan, untuk beberapa rubel kami telah memasang perangkat yang berfungsi. Meskipun nilai praktisnya diragukan, proses pembuatan dan penyetelan pada kolam akan sangat berguna bagi pemula. Menggunakan metode deteksi operator yang dijelaskan, sangat mungkin untuk membuat berbagai sistem navigasi sederhana untuk penggunaan amatir, dan apa yang sangat bagus, kompleksitas komputasional memungkinkan Anda untuk mengimplementasikan metode pada mikrokontroler sederhana.
Agar tidak berdasar tentang pembangunan sistem navigasi pada sinyal sederhana, lihat
karya menarik di mana mereka membangun sistem navigasi jarak jauh yang lengkap. Dalam sistem ini, posisi pinger, yang mentransmisikan kedalamannya secara berkala, ditentukan. Nilai kedalaman dikodekan oleh jarak antara dua pulsa sederhana pada frekuensi tertentu. Jadi ya, ya, pot tidak dibakar oleh para dewa, jalan akan dikuasai oleh pejalan kaki, kesabaran dan bekerja, belajar, belajar, belajar - itu saja.
Mungkin, jika kita punya waktu, kita akan melakukan proyek DIY untuk memposisikan pinger otonom yang memancarkan sinyal sederhana. Kami sudah melakukan sesuatu yang serupa, tetapi bukan DIY, berdasarkan modem
uWAVE kami, yang bahkan kami coba untuk
rekam video . Akan sangat menarik untuk mendengar pendapat Anda tentang masalah ini - sangat penting untuk memiliki konfirmasi bahwa Anda melakukan sesuatu yang tidak sia-sia.
Namun demikian, kembali ke topik utama, kami mencatat apa yang dapat ditingkatkan dalam skema yang diusulkan:
- membuat perhitungan ambang batas adaptif
- menganalisis lebar sinyal secara otomatis
- coba gunakan panjang yang berbeda untuk kombinasi bit yang berbeda
kencangkan kode yang mengoreksi kesalahan- pindahkan semuanya ke Arduino
- volume dan ambang harus panjang dan membosankan untuk dipilih, jadi alangkah baiknya menambahkan AGC ke preamplifier
Pada pertemuan ini saya akan menyatakan ditutup, dan jika Anda tertarik dengan topik ini, berikut adalah daftar artikel kami sebelumnya:
GPS bawah laut dari awal per tahunGPS Bawah Air pada Robot Bawah Air: PengalamanKami membuat modem sonar terkecil di duniaTentang efek cyanobacteria pada fungsi pidato presidenMembuat antena sonar sederhana dari tempat sampahSesi transmisi video suara melalui air dengan pencahayaanGPS bawah air pada dua transceiverNavigasi di bawah air: Bantalan bukan bantalan - Anda ditakdirkan untuk suksesGPS bawah air: lanjutanPS
Seperti biasa, kami senang mendengar komentar dan saran, kritik dan sorakan suara)
PPS
Jangan lepaskan kelenjar terlalu jauh - lain kali kita akan menggunakannya lagi untuk mengirimkan "video" melalui air.