Menulis algoritma mungkin merupakan bagian paling menarik bagi saya dalam otomatisasi rumah. Tetapi bahkan seluruh sensor dan skrip tidak dapat mengatasi fantasi kehidupan yang meriah dan Anda harus menambahkan cara untuk mengarahkan kontrol. Sebagai kontrol manual, Anda dapat memasang bel biasa, tetapi bagaimana jika Anda menginginkan lebih? Kami bertemu pahlawan artikel ini - sensor gerakan berdasarkan SI1143 dari Silicon Labs.
SI1143 sendiri:

Itu benar-benar terlihat futuristik.
Dan berapa banyak keunggulannya:
- fotodioda yang sangat sensitif, ADC derau rendah
- Driver LED dengan arus dari 6 hingga 360 miliamp
- didukung dari 1,71 ke 3,6 volt
- dan smart I2C - hingga 3,4 megabit per detik
Itu hanya ukuran yang dipompa hanya 5 kali 3 milimeter. Ini bukan pertama kali Anda melihatnya. Nah, di sini Anda perlu sedikit lebih tegap.

Bisakah ini dihapus? Perasaan kecantikan saya bertanya. Maka saya akan mencoba untuk memenuhi permintaan tamu langka ini di daerah kami dan menyembunyikan papan di gedung, tetapi sementara itu Anda dapat menerapkan kekuatan dan melihat apa yang terjadi.
Komentar untuk perhatian. Sebenarnya ada beberapa detail lebih dari yang diharapkan. Node dari proyek Enviriot diambil sebagai basis. Selain mikrokontroler STM32F051, dewan juga memiliki transceiver CC1101 868 megahertz dari Texas Instruments dan setelah mengisi firmware, cukup untuk memasok daya dan perangkat akan terhubung ke server MQTT-SN.
Prinsip operasi didasarkan pada pengukuran tingkat sinyal yang dipantulkan dari masing-masing 3 LED. Saya akan mencoba menyalakannya dan melihat jawabannya.

Karena pengaturan asimetris dari LED, sinyal dari LED 1 terasa lebih besar dan hasil pengukuran harus dinormalisasi terlebih dahulu.

Dan ketergantungannya sudah cukup dimengerti. Saya akan mencoba kode algoritma berikut:
Di mana L1 + - sinyal dari LED 1 meningkat, L1> L3 - sinyal dari LED 1 lebih besar daripada sinyal dari LED 3.
Itu mulus di atas kertas, tetapi dalam dinamika masalah dimulai. Untuk selembar kertas putih tetap pada ketinggian yang sama, hasil yang diharapkan diperoleh dalam dua kasus dari tiga. Ketika saya mencoba melambaikan tangan, sinyal mulai melompat dan algoritma saya yang luar biasa mulai bingung dalam pembacaan. Dia melihat tangannya, tetapi ada banyak perbedaan dari selembar kertas putih. Tapi entah bagaimana itu seharusnya berhasil. Baiklah Dibujuk! Saya akan mencoba membaca dokumentasinya.
Untuk yang menderita, Silicon Labs telah merilis AppNote AN580 - “INFRAMERAH GESTURE SENSING”. Dua metode dasar untuk menentukan gerakan dan kemungkinan kombinasi mereka dijelaskan. Metode pertama adalah penentuan posisi pada setiap momen waktu dan penentuan gerakan berdasarkan koordinat. Metode kedua menentukan pergeseran fase antara sinyal. Salah satu varian dari metode pertama telah diuji dan itu tidak mengesankan. Saya akan mencoba menerapkan yang kedua.
Ayo pergi. Perlu untuk menerapkan sebanyak dua poin. Tentukan saat masuk dan transfer data ini ke mesin negara. Ambang input ditentukan secara eksperimental pada 1/8 dari total sinyal. Untuk melindungi dari kebisingan, saya akan menambahkan pemicu Schmidt, dinyalakan 15% dan dimatikan 10%.
Nah, mesin negara itu sendiri. Menyatakan 1 hingga 3 - gerakan ke atas, menyatakan -1 hingga -3 - gerakan ke bawah dan menyatakan 4 untuk kejadian yang tidak mungkin kedua LED bekerja secara bersamaan.

Sekarang mari kita coba lepas landas dengan semua ini.
var LSt = new Int8Array([-3, -3, -3, 1, 1, 3, 3, 4, -3, -3, -1, -1, 3, 3, 3, 4, -2, -2, -2, 4, 2, 2, 2, 4]); this.r1 = false; this.r3 = false; this.button = new Int8(0); if(n1 > 15) { this.r1 = true; } else if(n1 < 10) { this.r1 = false; } if(n3 > 15) { this.r3 = true; } else if(n3 < 10) { this.r3 = false; } let st = (this.r1?1:0) | (this.r3?2:0); if(st == 0){
Variabel n1 dan n3 berisi nilai yang dinormalisasi untuk LED yang sesuai. Hasilnya di bidang tombol.
Untuk penggunaan lebih lanjut, status 2 - atas dan -2 - berguna.
Program ini ditulis dalam subset JavaScript, kemudian dikompilasi menjadi bytecode dan diunggah ke perangkat. JavaScript diuraikan dan AST dihasilkan oleh perpustakaan NiL.JS dari kawan
IaIojek , yang
karenanya banyak
terima kasih kepadanya.

Jika keadaan 2 berlangsung kurang dari 0,3 detik, blok A14 dan A15 bertanggung jawab untuk ini, kecerahan diatur ke maksimum. Blok A01 dan A13 mengatur kecerahan ke 0 untuk gerakan ke bawah yang singkat.
Saat bergerak ke atas dan menahan, blok A10, A09, dan A04 memberikan peningkatan kecerahan yang halus. Saat bergerak ke bawah dan menahan, blok A12, A11 dan A08 berfungsi dan memungkinkan Anda untuk mengurangi level.
Demonstrasi kerja. 20 megabita GIF. Yah, mungkin itu saja. Pelanggan senang, dan saya mulai berpikir tentang versi berikutnya. Dari perubahan yang diperlukan: letakkan LED pada jarak yang sama dari penerima, tampilkan indikasi operasi dan lakukan polling pada pengontrol terpisah, yang akan mengurangi interval polling.