Daftar Isi:

Dekoder Sensor RF Arduino: 5 Langkah
Dekoder Sensor RF Arduino: 5 Langkah

Video: Dekoder Sensor RF Arduino: 5 Langkah

Video: Dekoder Sensor RF Arduino: 5 Langkah
Video: One Channel Transmitter and Receiver with 433Mhz RF module 2024, Juli
Anonim
Dekoder Sensor RF Arduino
Dekoder Sensor RF Arduino

Rumah saya sebelumnya dilengkapi dengan sistem keamanan pra-instal yang memiliki sensor pintu, sensor gerak, dan panel kontrol. Semuanya disambungkan ke kotak elektronik besar di lemari dan ada instruksi untuk memasang kabel telepon rumah agar secara otomatis melakukan panggilan jika ada alarm. Ketika saya mencoba memainkannya, saya menemukan bahwa salah satu sensor pintu tidak terpasang dengan sempurna dan yang lainnya terputus-putus karena penyelarasan yang tidak tepat. Begitu banyak untuk instalasi profesional yang disebut-sebut pada kartu nama perusahaan keamanan. Solusi saya saat itu adalah membeli beberapa kamera keamanan internet dan alarm keamanan nirkabel murah.

Maju cepat ke hari ini dan alarm nirkabel itu ada di dalam kotak di ruang bawah tanah saya. Setelah saya memperoleh penerima RF yang murah, saya memutuskan untuk melihat apakah saya dapat memecahkan kode pesan yang dikirimkan oleh berbagai sensor alarm dan remote yang saya miliki. Saya pikir karena mereka semua bekerja dengan kotak alarm murah, mereka semua harus menggunakan format pesan yang sama hanya dengan ID yang berbeda. Saya segera menemukan bahwa mereka serupa hanya dalam struktur umum pesan. Jadi proyek dengan cepat berubah dari sepele menjadi sangat menarik.

Langkah 1: Modul Sensor

Modul Sensor
Modul Sensor
Modul Sensor
Modul Sensor
Modul Sensor
Modul Sensor
Modul Sensor
Modul Sensor

Seperti yang Anda lihat pada gambar di atas, pemancar termasuk sensor pintu terbuka, detektor gerakan, remote yang dipersenjatai, dan keypad nirkabel yang digunakan untuk memprogram kotak alarm. Ternyata, tidak ada dua perangkat ini yang menggunakan panjang sinkronisasi atau durasi bit yang sama. Satu-satunya kesamaan, selain panjang pesan, adalah format dasar bit. Setiap bit mengambil periode waktu tetap dengan perbedaan antara nol dan satu menjadi siklus tugas dari bagian tinggi/rendah.

Bentuk gelombang cantik yang ditunjukkan di atas BUKAN yang pertama kali saya terima. Karena ada begitu banyak lalu lintas di pita frekuensi 433-MHz, saya harus memastikan untuk mengaktifkan sensor tepat sebelum saya mengatur cakupan untuk melakukan satu pemicu. Untungnya sensor mengeluarkan beberapa salinan pesan data saat diaktifkan dan remote dan keypad terus mengeluarkan pesan selama tombol ditekan. Dengan menggunakan cakupan, saya dapat menentukan panjang sinkronisasi dan durasi bit data untuk setiap item. Seperti disebutkan sebelumnya, waktu sinkronisasi berbeda dan waktu bit berbeda tetapi semua format pesan memiliki sinkronisasi tingkat rendah diikuti oleh 24 bit data dan satu stop bit. Itu sudah cukup bagi saya untuk dapat membuat dekoder generik dalam perangkat lunak tanpa harus membuat kode keras semua detail yang berbeda untuk setiap perangkat.

Langkah 2: Perangkat Keras

Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras

Saya awalnya membangun dekoder sensor menggunakan mikrokontroler PIC dan bahasa rakitan. Saya telah bermain dengan varian Arduino baru-baru ini jadi saya pikir saya akan melihat apakah saya bisa menirunya. Skema sederhana ditunjukkan di atas dan ada juga gambar prototipe saya. Yang saya lakukan hanyalah menggunakan tiga kabel jumper umum untuk beralih dari Arduino Nano ke papan penerima RF. Daya dan satu jalur data adalah semua yang dibutuhkan.

Jika Anda membaca Instruksi saya di "Tampilan Waktu dan Cuaca 3-in-1", Anda akan melihat bahwa saya menggunakan penerima RXB6, 433-MHz yang umum. Anda mungkin bisa mendapatkan receiver yang sangat murah untuk bekerja pada jarak pendek yang diperlukan untuk proyek ini, tetapi saya tetap menyarankan untuk menggunakan receiver superheterodyne.

Langkah 3: Perangkat Lunak

Perangkat lunak mengubah bit yang diterima menjadi karakter ASCII yang dapat ditampilkan. Ini menampilkan nilai panjang sinkronisasi, dan panjang bit 1 dan 0. Karena saya sudah mengetahui panjang sinkronisasi dan format bit, saya dapat menulis perangkat lunak khusus untuk mereka. Sebagai gantinya, saya memutuskan untuk melihat apakah saya bisa menulisnya untuk memilah panjang sinkronisasi dan untuk secara otomatis mengetahui bit data. Itu seharusnya membuatnya lebih mudah untuk dimodifikasi jika saya ingin mencoba mendeteksi format lain pada suatu waktu. Penting untuk dicatat bahwa perangkat lunak tidak tahu apakah bit pertama dari sebuah pesan adalah 1 atau 0. Ini mengasumsikan bahwa itu adalah 1 tetapi, jika mengetahui bahwa itu seharusnya nol, itu akan membalikkan bit dalam pesan yang telah selesai sebelum mengirimkannya ke port serial.

Waktu dari pulsa sinkronisasi dan bit data ditentukan dengan menggunakan input interupsi eksternal INT0 untuk memicu penangan interupsi. INT0 dapat memicu saat naik, turun, atau kedua sisinya, atau pada level rendah yang stabil. Perangkat lunak terputus di kedua sisi dan mengukur jumlah waktu pulsa tetap rendah. Itu menyederhanakan banyak hal karena pesan mulai/sinkronisasi adalah pulsa tingkat rendah dan bit dapat ditentukan berdasarkan waktu tingkat rendahnya.

Penangan interupsi pertama-tama menentukan apakah hitungan yang diambil cukup lama untuk menjadi pulsa mulai/sinkronisasi. Berbagai perangkat yang saya gunakan menggunakan pulsa sinkronisasi 4, 9, 10, dan 14 milidetik. Pernyataan definisi untuk nilai sinkronisasi minimum/maks yang diizinkan ada di depan dalam perangkat lunak dan saat ini disetel untuk 3 dan 16 milidetik. Waktu bit juga bervariasi antar sensor sehingga algoritma untuk decoding bit perlu memperhitungkannya. Waktu bit dari bit pertama disimpan seperti waktu bit berikutnya yang memiliki perbedaan yang signifikan dari bit pertama. Perbandingan langsung waktu bit berikutnya tidak dimungkinkan sehingga definisi "faktor fudge" ("Variasi") digunakan. Penguraian kode bit dimulai dengan mengasumsikan bahwa bit data pertama selalu dicatat sebagai logika 1. Nilai tersebut disimpan dan kemudian digunakan untuk menguji bit berikutnya. Jika jumlah bit data berikutnya berada di dalam jendela varians dari nilai yang disimpan maka itu juga dicatat sebagai logika 1. Jika berada di luar jendela varians dari nilai yang disimpan maka dicatat sebagai logika 0. Jika logika 0 waktu bit lebih pendek dari waktu bit pertama kemudian sebuah bendera diatur untuk memberi tahu perangkat lunak bahwa byte perlu dibalik sebelum ditampilkan. Satu-satunya kasus di mana algoritma ini gagal adalah ketika bit dalam pesan semuanya 0. Kita bisa menerima batasan itu karena pesan seperti itu tidak ada artinya.

Sensor yang saya minati semuanya memiliki panjang pesan 24 bit data tetapi perangkat lunak tidak terbatas pada panjang itu. Ada buffer hingga tujuh byte (lebih banyak dapat ditambahkan) dan menentukan panjang pesan minimum dan maksimum dalam byte. Perangkat lunak diatur untuk mengumpulkan bit, mengubahnya menjadi byte, menyimpannya sementara, dan kemudian mengeluarkannya dalam format ASCII melalui port serial. Peristiwa yang memicu keluaran pesan adalah penerimaan pulsa mulai/sinkronisasi baru.

Langkah 4: Pencatatan Data

Pencatatan Data
Pencatatan Data

Perangkat lunak diatur untuk mengeluarkan data yang dikonversi sebagai karakter ASCII melalui output serial (TX) Arduino. Ketika saya membuat versi PIC saya perlu antarmuka ke program terminal pada PC untuk menampilkan data. Salah satu keunggulan Arduino IDE adalah ia memiliki fungsi Serial Monitor bawaan. Saya mengatur kecepatan port serial ke 115.2k dan kemudian mengatur jendela Serial Monitor ke kecepatan yang sama. Tangkapan layar di sini menunjukkan tampilan khas dengan keluaran dari berbagai sensor yang saya miliki. Seperti yang Anda lihat, data terkadang tidak sempurna tetapi Anda dapat dengan mudah menentukan nilai sebenarnya dari setiap sensor.

Langkah 5: Perangkat Lunak Penerima Sampel

Perangkat Lunak Penerima Sampel
Perangkat Lunak Penerima Sampel

Saya telah menyertakan contoh daftar perangkat lunak yang menunjukkan bagaimana Anda dapat menggunakan informasi yang dikumpulkan untuk menerima serangkaian kode khusus untuk aplikasi Anda. Contoh ini diatur untuk meniru salah satu outlet jarak jauh Etekcity saya. Satu perintah menyalakan LED yang terpasang di Nano (D13) dan perintah lainnya mematikan LED. Jika Anda tidak memiliki LED yang terpasang di Arduino Anda, tambahkan resistor dan LED seperti yang ditunjukkan pada diagram. Dalam aplikasi nyata, fungsi ini akan menghidupkan/mematikan daya untuk outlet listrik (menggunakan relai atau triac). Waktu sinkronisasi, waktu bit, dan byte data yang diharapkan semuanya ditentukan di awal untuk kemudahan modifikasi. Anda dapat menggunakan salah satu jalur data yang tersisa untuk menghidupkan/mematikan, dll. untuk aplikasi spesifik Anda. Cukup tambahkan kode perintah yang berlaku mendefinisikan dan mengganti logika on/off LED di "loop" sesuai dengan kebutuhan Anda.

Direkomendasikan: