Isi kandungan:

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: RF MODULE with Arduino | How does work RF MODULE | RF MODULE Transmitter and Receiver [With Code] 2024, Julai
Anonim
Penyahkod Sensor RF Arduino
Penyahkod Sensor RF Arduino

Rumah saya sebelumnya dilengkapi dengan sistem keselamatan yang telah dipasang sebelumnya yang mempunyai sensor pintu, sensor gerakan, dan panel kawalan. Segala-galanya disambungkan dengan kuat ke kotak elektronik besar di dalam almari dan terdapat arahan untuk memasang telefon bimbit ke darat untuk memanggil secara automatik sekiranya terdapat penggera. Semasa saya mencuba bermain, saya dapati salah satu sensor pintu dipasang dengan tidak lengkap dan yang lain berselang-seling kerana penyelarasan yang tidak betul. Begitu banyak untuk pemasangan profesional yang disebut-sebut pada kad perniagaan syarikat keselamatan. Penyelesaian saya pada masa itu adalah membeli beberapa kamera keselamatan internet dan penggera keselamatan tanpa wayar yang murah.

Laju ke hari ini dan penggera tanpa wayar ada di dalam kotak di ruang bawah tanah saya. Setelah memperoleh penerima RF yang murah, saya memutuskan untuk melihat apakah saya dapat menyahkod mesej yang dihantar oleh pelbagai sensor penggera dan alat kawalan jauh yang saya ada. Saya mengira bahawa kerana mereka semua bekerja dengan kotak penggera yang murah maka mereka semua mesti menggunakan format mesej yang sama dengan hanya ID yang berbeza. Saya segera mengetahui bahawa mereka serupa hanya dalam struktur umum mesej. Oleh itu, projek ini 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 dalam gambar di atas pemancar termasuk sensor pintu terbuka, pengesan gerakan, alat pelindung jarak jauh, dan papan kekunci tanpa wayar yang digunakan untuk memprogram kotak penggera. Ternyata, tidak ada dua peranti ini yang menggunakan panjang penyegerakan atau tempoh bit yang sama. Satu-satunya kesamaan, selain panjang mesej, adalah format asas bit. Setiap bit memerlukan tempoh masa yang tetap dengan perbezaan antara sifar dan satu menjadi kitaran tugas bahagian tinggi / rendah.

Bentuk gelombang cantik yang ditunjukkan di atas BUKAN apa yang pertama kali saya terima. Oleh kerana terdapat begitu banyak lalu lintas di jalur frekuensi 433-MHz, saya harus memastikan untuk mengaktifkan sensor sebelum saya menetapkan skop untuk melakukan satu pencetus. Nasib baik sensor mengeluarkan beberapa salinan mesej data apabila diaktifkan dan alat kawalan jauh dan papan kekunci terus mengeluarkan mesej selagi kekunci ditekan. Dengan menggunakan skop saya dapat menentukan panjang penyegerakan dan jangka masa bit data untuk setiap item. Seperti yang dinyatakan sebelum ini, masa penyegerakan berbeza dan masa bit berbeza tetapi format mesej semuanya mempunyai penyegerakan tahap rendah diikuti oleh 24 bit data dan satu bit berhenti. Itu sudah cukup bagi saya untuk dapat membina penyahkod generik dalam perisian tanpa perlu membuat kod keras semua butiran yang berbeza untuk setiap peranti.

Langkah 2: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan

Pada asalnya saya membina penyahkod sensor menggunakan mikrokontroler PIC dan bahasa pemasangan. Saya baru-baru ini bermain dengan varian Arduino jadi saya fikir saya akan melihat sama ada saya dapat menirunya. Skema ringkas ditunjukkan di atas dan terdapat juga gambar prototaip saya. Yang saya lakukan hanyalah menggunakan tiga wayar pelompat biasa untuk pergi dari Arduino Nano ke papan penerima RF. Kuasa dan satu baris data adalah semua yang diperlukan.

Sekiranya anda membaca Instructable saya pada "Paparan Waktu dan Cuaca 3-dalam-1" anda akan melihat bahawa saya menggunakan penerima RXB6, 433-MHz biasa. Anda mungkin dapat membuat penerima yang sangat murah berfungsi pada jarak pendek yang diperlukan untuk projek ini tetapi saya tetap mengesyorkan menggunakan penerima super-heterodyne.

Langkah 3: Perisian

Perisian menukar bit yang diterima menjadi watak ASCII yang dapat dipaparkan. Ia mengeluarkan nilai panjang penyegerakan, dan panjang bit 1 dan 0. Oleh kerana saya sudah mengetahui panjang penyegerakan dan format bit, saya boleh menulis perisian khusus untuknya. Sebagai gantinya, saya memutuskan untuk melihat apakah saya dapat menulisnya untuk menyelesaikan panjang penyegerakan dan untuk mengetahui bit data secara automatik. Perkara itu akan memudahkan pengubahsuaian sekiranya saya ingin mengesan format lain pada suatu masa. Penting untuk diperhatikan bahawa perisian tidak tahu sama ada bit pertama dari mesej adalah 1 atau 0. Ia menganggap bahawa ia adalah 1 tetapi, jika mengetahui bahawa ia sepatutnya menjadi sifar, ia akan membalikkan bit dalam mesej yang lengkap sebelum menghantarnya ke port bersiri.

Waktu nadi penyegerakan dan bit data ditentukan dengan menggunakan input gangguan luaran INT0 untuk mencetuskan pengendali gangguan. INT0 boleh mencetuskan kenaikan, jatuh, atau kedua-dua tepi, atau pada tahap rendah yang stabil. Perisian terganggu di kedua-dua bahagian dan mengukur jumlah masa nadi tetap rendah. Itu menyederhanakan perkara kerana permulaan / penyegerakan mesej adalah nadi tahap rendah dan bit dapat ditentukan berdasarkan masa tahap rendahnya.

Pengendali interrupt terlebih dahulu menentukan apakah kiraan yang ditangkap cukup lama untuk menjadi nadi permulaan / penyegerakan. Pelbagai peranti yang saya gunakan menggunakan denyutan segerak 4, 9, 10, dan 14 milisaat. Pernyataan menentukan untuk nilai penyegerakan minimum / maksimum yang dibenarkan berada di hadapan dalam perisian dan pada masa ini ditetapkan untuk 3 dan 16 milisaat. Masa bit juga berbeza antara sensor sehingga algoritma bit penyahkodan perlu mengambil kira. Masa bit bit pertama disimpan seperti masa bit seterusnya yang mempunyai perbezaan yang signifikan dari bit pertama. Perbandingan langsung masa bit berikutnya tidak mungkin dilakukan oleh faktor "fudge factor" ("Variation"). Penyahkodan bit dimulakan dengan menganggap bahawa bit data pertama selalu direkodkan sebagai logik 1. Nilai itu disimpan dan kemudian digunakan untuk menguji bit berikutnya. Sekiranya pengiraan bit data berikutnya berada dalam tetingkap varians dari nilai yang disimpan maka ia juga direkodkan sebagai logik 1. Sekiranya berada di luar tetingkap varians dari nilai yang disimpan maka ia dicatat sebagai logik 0. Jika logik 0 masa bit lebih pendek daripada waktu bit pertama maka bendera ditetapkan untuk memberitahu perisian bahawa bait perlu dibalik sebelum memaparkan. Satu-satunya kes di mana algoritma ini gagal adalah apabila bit dalam mesej semuanya 0. Kita boleh menerima batasan itu kerana mesej seperti itu tidak bermakna.

Sensor yang saya minati semuanya mempunyai panjang mesej 24 bit data tetapi perisiannya tidak terhad pada panjangnya. Terdapat penyangga hingga tujuh bait (lebih banyak dapat ditambahkan) dan menentukan panjang mesej minimum dan maksimum dalam bait. Perisian disediakan untuk mengumpulkan bit, mengubahnya menjadi bait, menyimpannya sementara, dan kemudian mengeluarkannya dalam format ASCII melalui port bersiri. Peristiwa yang mencetuskan output mesej adalah penerimaan nadi permulaan / penyegerakan baru.

Langkah 4: Pembalakan Data

Pembalakan Data
Pembalakan Data

Perisian ini disiapkan untuk mengeluarkan data yang ditukar sebagai watak ASCII melalui output siri (TX) Arduino. Semasa membuat versi PIC, saya perlu menyambung ke program terminal pada PC untuk memaparkan data. Satu kelebihan dari Arduino IDE ialah ia mempunyai fungsi Serial Monitor yang terpasang. Saya menetapkan kadar port bersiri ke 115.2k dan kemudian menetapkan tetingkap Monitor Serial ke kadar yang sama. Tangkapan skrin di sini menunjukkan paparan khas dengan output dari pelbagai sensor yang saya miliki. Seperti yang anda lihat, data kadangkala tidak sempurna tetapi anda dapat dengan mudah menentukan nilai sebenar setiap sensor.

Langkah 5: Perisian Penerima Sampel

Perisian Penerima Sampel
Perisian Penerima Sampel

Saya telah menyertakan contoh senarai perisian yang menunjukkan bagaimana anda dapat menggunakan maklumat yang dikumpulkan untuk menerima sekumpulan kod tertentu untuk aplikasi anda. Contoh ini disediakan untuk meniru salah satu kedai terpencil Etekcity saya. Satu arahan menghidupkan LED yang dibina ke dalam Nano (D13) dan arahan yang lain mematikan LED. Sekiranya anda tidak mempunyai LED yang dipasang di Arduino anda, kemudian tambahkan perintang dan LED seperti yang ditunjukkan dalam rajah. Dalam aplikasi yang sebenarnya, fungsi ini akan menghidupkan / mematikan daya untuk soket elektrik (menggunakan relay atau triac). Masa penyegerakan, masa bit, dan bait data yang diharapkan semuanya ditentukan di muka untuk kemudahan pengubahsuaian. Anda boleh menggunakan salah satu baris data yang tersisa untuk menghidupkan / mematikan sesuatu, dll untuk aplikasi khusus anda. Cukup tambahkan definisi kod arahan yang berlaku dan ganti logik hidup / mati LED dalam "gelung" untuk memenuhi keperluan anda.

Disyorkan: