Demo Levitasi Akustik Mini dengan Arduino UNO & Sensor Ultrasonik HC-SR04
Komponen dan Perlengkapan
| Komponen | Jumlah |
| Arduino UNO | 1 |
| Sensor Ultrasonik - HC-SR04 (Generik) | 1 |
Aplikasi dan Layanan Online
Tentang Proyek
Levitasi akustik mungkin karena suara berperilaku sebagai gelombang. Ketika dua gelombang suara saling bertemu, mereka dapat saling mengganggu secara konstruktif atau destruktif. Ini adalah prinsip yang sama seperti yang digunakan dalam headphone noise-cancelling.
Proyek ini menggunakan sensor jarak ultrasonik untuk menciptakan efek levitasi. Ini bekerja dengan menciptakan "kantong" di mana dua gelombang suara yang berlawanan saling mengganggu satu sama lain. Bila suatu objek ditempatkan di dalam kantong tersebut, objek akan tetap berada di sana, terlihat melayang di tempat.
Bahan yang diperlukan:
- Papan Arduino: https://amzn.to/2DLjxR2
- H-bridge: https://amzn.to/2DXFw7y
- Sensor jarak: https://amzn.to/2PSbJU2
- Papan roti (breadboard): https://amzn.to/2RYqiSK
- Kabel jumper: https://amzn.to/2Q7kiKc
- Dioda: https://amzn.to/2KlYMf8
- Kapasitor (mungkin): https://amzn.to/2DYnCla
Sebagai Amazon Associate, saya menerima komisi dari pembelian yang memenuhi syarat melalui tautan di atas.
Langkah 1: Dapatkan Pemancar Ultrasonik
Anda perlu mengorbankan satu sensor jarak untuk langkah ini (jangan khawatir, harganya relatif murah):
- Lepas pasang dan cabut kedua pemancar dari papan sensor
- Cabut dan simpan layar kawat mesh dari salah satu pemancar
- Pasang kabel pada kedua pemancar
Langkah 2: Buat Rangkaian
Buat rangkaian sesuai skematik dan perhatikan hal berikut:
- Anda tidak selalu perlu menyertakan dua kapasitor 100nF. Hanya diperlukan jika papan Anda tidak dapat menangani rangkaian dan terus-menerus mati sendiri.
- Baterai 9V adalah pengganti untuk sumber daya DC apa pun. Dalam percobaan, baterai LiPo 7,5V berfungsi dengan baik.
Langkah 3: Kode
Unggah kode berikut ke Arduino Anda:
//kode asli dari: https://makezine.com/projects/micro-ultrasonic-levitator/
byte TP = 0b10101010; // Setiap port lain menerima sinyal terbalik
void setup() {
DDRC = 0b11111111; // Set semua port analog sebagai output
// Inisialisasi Timer1
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 200; // Set register perbandingan (16MHz / 200 = gelombang persegi 80kHz -> gelombang penuh 40kHz)
TCCR1B |= (1 << WGM12); // Mode CTC
TCCR1B |= (1 << CS10); // Set prescaler ke 1 => tanpa penskalaan
TIMSK1 |= (1 << OCIE1A); // Aktifkan interupsi timer perbandingan
interrupts(); // Aktifkan interupsi
}
ISR(TIMER1_COMPA_vect) {
PORTC = TP; // Kirim nilai TP ke output
TP = ~TP; // Balikkan TP untuk putaran berikutnya
}
void loop() {
// Tidak ada yang perlu dilakukan di sini :)
}
Langkah 4: Pasang Pemancar dan Kalibrasi
Anda dapat menggunakan apa saja untuk memasang pemancar, tetapi saya akhirnya menggunakan sekang tangan bantuan (beli di sini: https://amzn.to/2TPifsW):
- Mulai dengan menempatkan pemancar sekitar 3/4 inci dari satu sama lain
- Dapatkan sepotong styrofoam kecil setengah ukuran kacang (tidak perlu bulat)
- Tempatkan styrofoam pada layar kawat mesh dari langkah 1
- Gunakan sekat atau alik, letakkan styrofoam di antara kedua pemancar (harus mulai bergetar saat Anda mendekat)
- Gerakkan pemancar (lebih dekat dan lebih jauh) sampai styrofoam tetap diam
Pemecahan Masalah
Saya membutuhkan sekitar 15 menit untuk membuatnya berfungsi pertama kali, tetapi setelah itu cukup mudah untuk mengulanginya. Berikut beberapa hal yang bisa Anda coba jika tidak berfungsi pada awalnya:
- Pastikan semua kabel dipasang dengan benar
- Tingkatkan tegangan ke H-bridge (gunakan baterai berbeda)
- Gunakan potongan styrofoam yang lebih kecil
- Coba posisi berbeda untuk pemancar
- Coba tambahkan kapasitor jika belum dilakukan
- Jika masih tidak berfungsi, mungkin ada komponen yang rusak: coba gunakan set pemancar berbeda atau baterai baru.
Kode
//kode asli dari: https://makezine.com/projects/micro-ultrasonic-levitator/
byte TP = 0b10101010; // Setiap port lain menerima sinyal terbalik
void setup() {
DDRC = 0b11111111; // Set semua port analog sebagai output
// Inisialisasi Timer1
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 200; // Set register perbandingan (16MHz / 200 = gelombang persegi 80kHz -> gelombang penuh 40kHz)
TCCR1B |= (1 << WGM12); // Mode CTC
TCCR1B |= (1 << CS10); // Set prescaler ke 1 => tanpa penskalaan
TIMSK1 |= (1 << OCIE1A); // Aktifkan interupsi timer perbandingan
interrupts(); // Aktifkan interupsi
}
ISR(TIMER1_COMPA_vect) {
PORTC = TP; // Kirim nilai TP ke output
TP = ~TP; // Balikkan TP untuk putaran berikutnya
}
void loop() {
// Tidak ada yang perlu dilakukan di sini :)
}
Skematik
Skematik rangkaian tersedia sebagai bagian dari dokumentasi proyek untuk referensi pemasangan.