Daftar Isi:

Hummingbird Detector/Picture-Taker: 12 Langkah (dengan Gambar)
Hummingbird Detector/Picture-Taker: 12 Langkah (dengan Gambar)

Video: Hummingbird Detector/Picture-Taker: 12 Langkah (dengan Gambar)

Video: Hummingbird Detector/Picture-Taker: 12 Langkah (dengan Gambar)
Video: What is Side Imaging and How to Read It | Humminbird 2024, Juli
Anonim
Hummingbird Detector/Pengambil Gambar
Hummingbird Detector/Pengambil Gambar

Kami memiliki pengumpan burung kolibri di dek belakang kami dan selama beberapa tahun terakhir saya telah memotret mereka. Kolibri adalah makhluk kecil yang luar biasa, sangat teritorial dan perkelahian mereka bisa sangat lucu dan menakjubkan. Tapi saya mulai lelah berdiri seperti patung di belakang rumah saya untuk memotret mereka. Saya membutuhkan cara untuk mengambil gambar tanpa harus berdiri di belakang rumah untuk waktu yang lama menunggu. Saya tahu bahwa saya dapat menggunakan rana yang dikendalikan dari jarak jauh tetapi saya ingin gambar diambil secara otomatis tanpa saya harus berada di sana. Jadi saya memutuskan untuk membuat alat untuk mendeteksi burung kolibri dan mengambil gambar secara otomatis.

Saya selalu bermaksud menggunakan mikrokontroler untuk melakukan ini. Mikrokontroler akan dapat menggerakkan rana kamera di bawah kendali perangkat lunak. Tetapi sensor untuk mendeteksi burung kolibri kecil adalah hal lain. Saya bisa saja menggunakan sensor gerak tetapi saya ingin mencoba sesuatu yang unik. Saya memutuskan untuk menggunakan suara sebagai pemicu.

Langkah 1: Memilih Mikrokontroler

Memilih Mikrokontroler
Memilih Mikrokontroler

Mikrokontroler yang saya pilih adalah PJRC Teensy. Teensy menggunakan mikrokontroler ARM, khususnya ARM Cortex M4. Cortex M4 berisi perangkat keras untuk melakukan FFT (Fast Fourier Transform) yang akan melakukan deteksi. PJRC juga menjual papan audio yang memungkinkan Anda menggunakan Teensy untuk memutar musik serta merekam audio dengan input eksternal, atau, mikrofon kecil yang dapat Anda tambahkan ke papan. Rencana saya adalah membuat Teensy melakukan FFT pada audio dari mikrofon.

Langkah 2: FFT?

FFT?
FFT?

FFT adalah rumus/algoritma matematika yang mengubah sinyal dari domain waktu ke domain frekuensi. Artinya, dibutuhkan waktu sampel audio dari mikrofon dan mengubahnya menjadi besaran frekuensi yang ada dalam gelombang aslinya. Anda lihat, sembarang gelombang kontinu dapat dibangun dari serangkaian gelombang sinus atau kosinus yang merupakan kelipatan bilangan bulat dari beberapa frekuensi dasar. FFT melakukan kebalikannya: ia mengambil gelombang sembarang dan mengubahnya menjadi besaran gelombang yang, jika dijumlahkan, menciptakan gelombang arbitrer asli. Cara yang lebih sederhana untuk mengatakan ini adalah, saya berencana untuk menggunakan perangkat lunak dan perangkat keras FFT di Teensy untuk menentukan apakah 'mendengar' kepakan sayap burung kolibri pada frekuensi kepakan sayap terjadi. Jika memang 'mendengar' burung kolibri, saya akan mengirimkan perintah ke kamera untuk mengambil gambar.

Itu berhasil! Jadi, bagaimana saya melakukannya, bagaimana Anda bisa melakukannya dan bagaimana Anda bisa membuatnya lebih baik?

Langkah 3: Seperti Apa Suara Burung Kolibri yang Melayang?

Seperti Apa Suara Burung Kolibri yang Melayang?
Seperti Apa Suara Burung Kolibri yang Melayang?

Hal pertama yang pertama, saya perlu mencari tahu berapa frekuensi saya akan mendengar kepakan sayap burung kolibri. Untuk menentukan ini, saya menggunakan iPhone saya. Saya memasang iPhone ke tripod dan memintanya merekam video gerakan lambat langsung di depan pengumpan burung kolibri di dek kami. Setelah beberapa saat, saya melepas kamera dan mengunduh videonya. Saya kemudian menonton video mencari burung kolibri di depan pengumpan. Ketika saya menemukan urutan yang bagus, saya menghitung jumlah bingkai individu yang dibutuhkan burung kolibri untuk mengepakkan sayapnya dari satu posisi hingga kembali ke posisi yang sama. Gerakan lambat pada iPhone adalah sekitar 240 frame per detik. Saya mengamati burung kolibri melayang di depan pengumpan dan saya menghitung 5 bingkai untuk menggerakkan sayapnya dari posisi depan ke posisi belakang dan kemudian kembali ke posisi depan. Ini adalah 5 frame dari 240. Ingat, kita mendengar suara pada setiap langkah kepakan sayap burung kolibri (satu pada langkah ke depan dan satu pada langkah ke belakang). Untuk 5 frame untuk satu siklus atau periode, kita dapat menghitung frekuensi sebagai satu dibagi dengan periode yaitu 1 / (5/240) atau 48 Hz. Artinya, saat burung kolibri ini melayang, suara yang kita dengar harus dua kali lipat atau sekitar 96 Hz. Frekuensinya mungkin lebih tinggi ketika mereka terbang dan tidak melayang. Mungkin juga dipengaruhi oleh massa mereka, tetapi saya pikir kita dapat berasumsi bahwa sebagian besar burung dari spesies yang sama memiliki massa yang hampir sama.

Langkah 4: Deret Fourier dan Teensy

Seri Fourier dan Teensy
Seri Fourier dan Teensy

The Teensy (saya menggunakan Teensy 3.2) dibuat oleh PJRC (www.pjrc.com). FFT akan dihitung pada sampel suara. Untuk memperoleh suara, PJRC menjual papan adaptor audio untuk Teensy (TEENSY3_AUDIO - $14.25). Mereka juga menjual mikrofon kecil yang dapat disolder ke papan adaptor audio (MIKROFON - $1,25). Papan adaptor audio menggunakan chip (SGTL5000) yang dapat diajak bicara oleh Teensy melalui bus serial (I2S). Teensy menggunakan SGTL5000 untuk mengambil sampel audio dari mikrofon dan mendigitalkannya, yaitu, membuat serangkaian angka yang mewakili suara yang didengar mikrofon.

FFT hanyalah versi cepat dari apa yang disebut Discrete Fourier Transform (DFT). DFT dapat dilakukan pada jumlah sampel yang berubah-ubah, namun FFT perlu memiliki sampel yang disimpan dalam set yang merupakan kelipatan biner. Perangkat keras Teensy dapat melakukan FFT pada kumpulan 1024 sampel (1024=2^10) jadi itulah yang akan kita gunakan.

Sebuah FFT biasanya menghasilkan, sebagai outputnya, besaran DAN hubungan fase antara berbagai gelombang yang diwakili. Untuk aplikasi ini kami tidak memperhatikan hubungan fase, tetapi kami tertarik pada besaran dan frekuensinya.

Papan audio Teensy mengambil sampel audio pada frekuensi 44, 100 Hz. Jadi, 1024 sampel pada frekuensi ini mewakili interval waktu 1024/44100 atau sekitar 23,2 milidetik. Dalam hal ini, FFT akan menghasilkan sebagai keluaran, besaran yang merupakan kelipatan bilangan bulat dari periode sampel 43 Hz (sekali lagi, 1/0.0232 sama dengan sekitar 43 Hz). Kami ingin mencari magnitudo yang kira-kira dua kali frekuensi ini: 86 Hz. Ini bukan frekuensi kepakan sayap burung kolibri yang kami hitung, tetapi cukup dekat seperti yang akan kita lihat nanti.

Langkah 5: Menggunakan Data Fourier

Menggunakan Data Fourier
Menggunakan Data Fourier

Pustaka yang disediakan PJRC untuk Teensy akan memproses sampel dan mengembalikan larik nilai magnitudo. Kami akan merujuk ke setiap magnitudo dalam array yang dikembalikan sebagai bin. Bin pertama (pada offset nol dalam array data yang kami dapatkan kembali) adalah offset DC dari gelombang. Kita dapat dengan aman mengabaikan nilai ini. Bin kedua (pada offset 1) akan mewakili besarnya komponen 43 Hz. Ini adalah periode dasar kami. Bin berikutnya (pada offset 2) akan mewakili besarnya komponen 86 Hz, dan seterusnya. Setiap bin berikutnya adalah kelipatan bilangan bulat dari periode dasar (43 Hz).

Sekarang di sinilah menjadi sedikit aneh. Jika kami menggunakan FFT untuk menganalisis suara 43 Hz yang sempurna, maka FFT akan mengembalikan nampan pertama dengan magnitudo besar dan semua nampan lainnya akan sama dengan nol (sekali lagi, di dunia yang sempurna). Jika suara yang kami tangkap dan analisis adalah 86 Hz maka bin pada offset satu akan menjadi nol dan bin pada offset 2 (harmonik kedua) akan menjadi beberapa magnitudo yang besar dan sisa sampah akan menjadi nol, dan seterusnya. Tetapi jika kami menangkap suara burung kolibri dan itu adalah 96 Hz (seperti yang saya ukur pada satu burung saya) maka offset 2 bin @ 86 Hz akan memiliki magnitudo nilai yang sedikit lebih rendah (daripada gelombang sempurna 86 Hz) dan tempat sampah di sekitarnya (satu lebih rendah dan beberapa lebih tinggi) masing-masing akan memiliki nilai bukan nol yang semakin berkurang.

Jika ukuran sampel untuk FFT kami lebih besar dari 1024 atau jika frekuensi pengambilan sampel audio kami lebih rendah, kami dapat membuat resolusi tempat sampah kami lebih baik (yaitu lebih kecil). Tetapi bahkan jika kita mengubah hal-hal ini untuk membuat bin FFT kita menjadi kelipatan 1 Hz dari periode dasar, kita masih harus berurusan dengan 'tumpahan' bin ini. Ini karena kita tidak akan pernah mendapatkan frekuensi sayap yang mendarat, selalu dan tepat, di satu tempat sampah. Ini berarti kita tidak bisa hanya mendasarkan pendeteksian burung kolibri pada nilai di 2 bin offset dan mengabaikan sisanya. Kami membutuhkan cara untuk menganalisis data di beberapa tempat sampah untuk mencoba dan memahaminya. Lebih lanjut tentang ini nanti.

Langkah 6: Mulai Konstruksi

Mulai Konstruksi
Mulai Konstruksi
Mulai Konstruksi
Mulai Konstruksi

Untuk detektor burung kolibri prototipe saya, saya menggunakan pin jantan-jantan ekstra panjang yang disolder ke pin di Teensy. Saya melakukan ini sehingga saya bisa menyambungkan Teensy ke papan tempat memotong roti kecil tanpa solder. Saya melakukan ini karena saya berasumsi saya akan membuat banyak perubahan dalam prototipe dan dengan papan tempat memotong roti, saya dapat mengubah ini dan hanya kabel jumper di mana pun saya butuhkan. Saya menyolder strip wanita ke sisi bawah papan audio yang memungkinkannya dipasang di atas Teensy. Mikrofon disolder ke sisi atas papan audio (lihat gambar). Rincian lebih lanjut tentang perakitan dapat ditemukan di situs PJRC:

(https://www.pjrc.com/store/teensy3_audio.html).

Langkah 7: Perangkat Keras untuk Mengambil Gambar

Perangkat Keras untuk Mengambil Gambar
Perangkat Keras untuk Mengambil Gambar
Perangkat Keras untuk Mengambil Gambar
Perangkat Keras untuk Mengambil Gambar

Saya memiliki (yah, istri saya memiliki) Kamera Digital Canon Rebel. Ada jack pada kamera yang memungkinkan Anda menghubungkan kontrol rana jarak jauh manual. Saya membeli remote control manual dari B&H Photo. Kabel memiliki jack yang benar agar sesuai dengan kamera di salah satu ujungnya dan panjangnya sekitar 6 kaki. Saya memotong kabel di ujung dekat kotak kontrol tombol dan saya menanggalkan kabel dan menyoldernya ke tiga pin header yang bisa saya tancapkan ke papan tempat memotong roti. Ada kabel telanjang yang ditanahkan dan dua sinyal lainnya: ujungnya adalah pemicu (merah muda) dan cincin (putih) adalah fokus (lihat gambar). Memperpendek ujung dan/atau cincin ke tanah mengoperasikan rana dan fokus pada kamera.

Menggunakan kabel jumper saya menjalankan kesamaan dari Teensy ke area di mana saya bisa menggunakannya di papan tempat memotong roti. Saya juga menghubungkan anoda LED ke pin 2 pada Teensy dan katoda LED ke resistor (100-220 ohm) ke ground. Saya juga menghubungkan pin 2 dari Teensy ke resistor 10K dan sisi lain dari resistor yang saya sambungkan ke basis transistor NPN (2N3904 ditemukan di mana-mana). Saya menghubungkan emitor transistor ke ground dan kolektor saya sambungkan ke kabel putih dan merah muda dari kabel yang menuju ke kamera. Kabel telanjang, sekali lagi, terhubung ke ground. Setiap kali LED dinyalakan oleh Teensy, transistor NPN juga akan menyala dan akan memicu kamera (dan fokus). Lihat skema.

Langkah 8: Desain Sistem

Desain sistem
Desain sistem

Karena frekuensi kepakan sayap Burung Kolibri kemungkinan besar tidak melebihi beberapa ratus Hz, maka kita tidak benar-benar perlu merekam frekuensi suara di atas, katakanlah, beberapa ratus Hz. Yang kita butuhkan adalah cara untuk menyaring hanya frekuensi yang kita inginkan. Filter bandpass atau bahkan lowpass akan sangat bagus. Secara tradisional kami akan menerapkan filter di perangkat keras menggunakan OpAmps atau filter kapasitor yang diaktifkan. Namun berkat pemrosesan sinyal digital dan perpustakaan perangkat lunak Teensy, kita dapat menggunakan filter digital (tidak perlu menyolder…hanya perangkat lunak).

PJRC memiliki GUI hebat yang memungkinkan Anda menarik dan melepas sistem audio untuk Teensy dan papan audio. Anda dapat menemukannya di sini:

www.pjrc.com/teensy/gui/

Saya memutuskan untuk menggunakan salah satu filter bertingkat biquadratic yang disediakan PJRC untuk membatasi frekuensi suara dari mikrofon (filter). Saya mengalirkan tiga filter tersebut dan mengaturnya untuk operasi bandpass pada 100 Hz. Filter ini akan memungkinkan frekuensi sistem sedikit di atas dan sedikit di bawah frekuensi yang kita inginkan.

Dalam diagram blok (lihat gambar) i2s1 adalah input audio ke papan audio. Saya menghubungkan kedua saluran audio ke mixer dan kemudian ke filter (mikrofon hanya satu saluran tetapi, saya mencampur keduanya sehingga saya tidak perlu mencari tahu saluran mana itu … panggil saya malas). Saya menjalankan output filter ke output audio (sehingga saya dapat mendengar audio jika saya mau). Saya juga menghubungkan audio dari filter ke blok FFT. Dalam diagram blok, blok berlabel sgtl5000_1 adalah chip pengontrol audio. Itu tidak memerlukan koneksi apa pun dalam diagram.

Setelah Anda melakukan semua konstruksi blok ini, Anda mengklik Ekspor. Ini menampilkan kotak dialog tempat Anda dapat menyalin kode yang dihasilkan dari diagram blok dan menempelkannya ke aplikasi Teensy Anda. Jika Anda melihat kodenya, Anda dapat melihatnya sebagai instantiasi dari setiap kontrol bersama dengan 'koneksi' antar komponen.

Langkah 9: Kode

Kode
Kode

Akan memakan terlalu banyak ruang dalam Instructable ini untuk membahas perangkat lunak secara detail. Apa yang akan saya coba lakukan adalah menyoroti beberapa bit kunci dari kode. Tapi ini bukan aplikasi yang sangat besar. PJRC memiliki tutorial video yang bagus tentang penggunaan Teensy dan perpustakaan/alat audio (https://www.youtube.com/embed/wqt55OAabVs).

Saya mulai dengan beberapa contoh kode FFT dari PJRC. Saya menempelkan apa yang saya dapatkan dari alat desain sistem audio ke bagian atas kode. Jika Anda melihat kode setelah ini, Anda akan melihat beberapa inisialisasi dan kemudian sistem mulai mendigitalkan audio dari mikrofon. Perangkat lunak memasuki loop 'selamanya'() dan menunggu data FFT tersedia menggunakan panggilan ke fungsi fft1024_1.available(). Ketika data FFT tersedia, saya mengambil salinan data dan memprosesnya. Perhatikan bahwa, saya hanya mengambil data jika besarnya bin terbesar di atas nilai yang ditetapkan. Nilai ini adalah cara saya mengatur sensitivitas sistem. Jika bin ADALAH di atas nilai yang ditetapkan maka saya menormalkan gelombang dan mentransfernya ke array sementara untuk diproses, jika tidak, saya mengabaikannya dan terus menunggu FFT lain. Saya harus menyebutkan bahwa saya juga menggunakan fungsi kontrol penguatan mikrofon untuk menyesuaikan sensitivitas sirkuit (sgtl5000_1.micGain(50)).

Menormalkan gelombang hanya berarti saya menyesuaikan semua tempat sampah sehingga tempat sampah dengan nilai terbesar disetel sama dengan satu. Semua tempat sampah lainnya diskalakan dengan proporsi yang sama. Hal ini membuat data lebih mudah untuk dianalisis.

Saya menggunakan beberapa algoritme untuk menganalisis data, tetapi saya memutuskan untuk menggunakan hanya dua. Satu algoritma menghitung area di bawah kurva yang dibentuk oleh tempat sampah. Ini adalah perhitungan sederhana yang hanya menambahkan nilai sampah di seluruh wilayah yang diinginkan. Saya membandingkan area ini untuk menentukan apakah di atas ambang batas.

Algoritme lain menggunakan array nilai konstan yang mewakili FFT yang dinormalisasi. Data ini merupakan hasil dari signature burung kolibri yang nyata (optimal). Saya menyebutnya pagar. Saya membandingkan data lindung nilai dengan data FFT yang dinormalisasi untuk melihat apakah tempat sampah yang sesuai berada dalam jarak 20% satu sama lain. Saya memilih 20% tetapi, nilai ini dapat disesuaikan dengan mudah.

Saya juga menghitung berapa kali masing-masing algoritme berpikir mereka memiliki kecocokan, artinya, mengira mereka mendengar burung kolibri. Saya menggunakan hitungan ini sebagai bagian dari penentuan burung kolibri karena, pemicu palsu dapat terjadi. Misalnya, ketika ada suara keras atau berisi frekuensi sayap burung, seperti tepukan tangan, Anda mungkin mendapatkan pemicu. Tetapi jika hitungan di atas angka tertentu (angka yang saya pilih) saya katakan itu burung kolibri. Ketika ini terjadi, saya menyalakan LED untuk menunjukkan bahwa kita memiliki hit dan sirkuit yang sama ini memicu kamera melalui transistor NPN. Dalam perangkat lunak saya mengatur waktu pemicu kamera menjadi 2 detik (waktu LED dan transistor menyala).

Langkah 10: Pemasangan

Pemasangan
Pemasangan

Anda dapat melihat pada gambar bagaimana saya (tanpa basa-basi) memasang elektronik. Saya memiliki Teensy yang dicolokkan ke papan tempat memotong roti yang menempel pada papan pembawa bersama dengan Arduino lain yang kompatibel (tidak digunakan) (Saya pikir Arduino Zero). Saya mengikat semuanya dengan kawat ke tiang tenda logam di dek saya (saya juga menambahkan strain relief ke kabel yang mengalir ke kamera). Tiang itu tepat di sebelah pengumpan burung kolibri. Saya memberi daya pada elektronik dengan batu bata daya LiPo kecil yang mungkin Anda gunakan untuk mengisi ulang ponsel yang mati. Batu bata daya memiliki konektor USB di atasnya yang saya gunakan untuk mengalirkan daya ke Teensy. Saya menjalankan kabel pemicu jarak jauh ke Kamera dan mencolokkannya. Saya siap untuk beberapa aksi burung!

Langkah 11: Hasil

Hasil
Hasil

Saya memasang kamera pada tripod di dekat feeder. Saya memiliki kamera yang difokuskan di tepi paling depan pengumpan dan saya mengaturnya ke Sport Mode yang mengambil beberapa gambar cepat saat rana ditekan. Dengan waktu rana 2 detik, saya mengambil sekitar 5 foto per peristiwa pemicu.

Saya menghabiskan beberapa jam mengutak-atik perangkat lunak saat pertama kali saya mencoba ini. Saya harus menyesuaikan sensitivitas dan jumlah hit algoritme yang berurutan. Saya akhirnya mengubahnya dan saya siap.

Gambar pertama yang diambil adalah seekor burung yang terbang ke dalam bingkai seolah-olah mengambil belokan bank berkecepatan tinggi seperti jet tempur (lihat di atas). Saya tidak bisa memberi tahu Anda betapa bersemangatnya saya. Saya duduk dengan tenang di sisi lain geladak untuk sementara waktu dan membiarkan sistem bekerja. Saya berhasil merekam banyak gambar tetapi, saya membuang beberapa. Ternyata, terkadang Anda hanya mendapatkan kepala atau ekor burung. Juga, saya mendapat pemicu palsu, yang dapat terjadi. Secara total saya pikir saya menyimpan 39 gambar. Burung membutuhkan beberapa perjalanan ke feeder untuk membiasakan diri dengan suara rana dari kamera, tetapi mereka akhirnya mengabaikannya.

Langkah 12: Pikiran Terakhir

Pikiran Akhir
Pikiran Akhir

Ini adalah proyek yang menyenangkan dan berhasil. Tapi, seperti kebanyakan hal, ada banyak ruang untuk perbaikan. Filter tentu saja bisa berbeda (seperti filter lolos rendah atau perubahan pada pengaturan dan/atau parameter) dan mungkin itu bisa membuatnya bekerja lebih baik. Saya juga yakin bahwa ada algoritma yang lebih baik untuk dicoba. Saya akan mencoba beberapa ini di musim panas.

Saya telah diberitahu bahwa ada kode pembelajaran mesin sumber terbuka di luar sana…mungkin sistemnya dapat 'dilatih' untuk mengidentifikasi burung kolibri! Saya tidak yakin saya akan mencoba ini tapi, mungkin.

Apa hal lain yang bisa ditambahkan ke proyek ini? Jika kamera memiliki cap tanggal/waktu, Anda dapat menambahkan informasi tersebut ke gambar. Hal lain yang dapat Anda lakukan adalah merekam audio dan menyimpannya ke kartu uSD (papan audio PJRC memiliki slot untuk satu). Audio yang disimpan mungkin dapat digunakan untuk melatih algoritme pembelajaran.

Mungkin di suatu tempat sekolah Ornitologi bisa menggunakan perangkat seperti ini? Mereka mungkin dapat mengumpulkan informasi seperti waktu makan, frekuensi pemberian makan dan, dengan gambar, Anda mungkin dapat mengidentifikasi burung tertentu yang kembali memberi makan.

Harapan saya adalah bahwa orang lain memperluas proyek ini dan membagikan apa yang mereka buat dengan orang lain. Beberapa orang mengatakan kepada saya bahwa pekerjaan yang telah saya lakukan ini harus diubah menjadi sebuah produk. Saya tidak begitu yakin tetapi, saya lebih suka melihatnya digunakan sebagai platform pembelajaran dan untuk sains.

Terima kasih sudah membaca!

Untuk menggunakan kode yang saya posting, Anda memerlukan Arduino IDE (https://www.arduino.cc/en/Main/Software). Anda juga memerlukan kode Teensyduino dari PJRC (https://www.pjrc.com/teensy/td_download.html).

Direkomendasikan: