Isi kandungan:

LCD BATU Dengan Rumah Pintar: 5 Langkah
LCD BATU Dengan Rumah Pintar: 5 Langkah

Video: LCD BATU Dengan Rumah Pintar: 5 Langkah

Video: LCD BATU Dengan Rumah Pintar: 5 Langkah
Video: Aku bikin mode neraka biar gak ke kamar pintarku lagi #video #kamaraesthetic 2024, Julai
Anonim
LCD BATU Dengan Rumah Pintar
LCD BATU Dengan Rumah Pintar

Hari ini, saya mendapat paparan pemacu port bersiri STONE, yang dapat berkomunikasi melalui port bersiri MCU, dan reka bentuk logik UI paparan ini dapat dirancang secara langsung dengan menggunakan perisian VGUS yang disediakan di laman web rasmi STONE, yang sangat mudah bagi kami. Oleh itu, saya merancang untuk menggunakannya untuk membuat alat kawalan sederhana, yang merangkumi kawalan pelbagai lampu (ruang tamu, dapur, bilik kanak-kanak, bilik mandi). Pada masa yang sama, suhu, kelembapan, dan kualiti udara dalaman dan luaran dapat dikumpulkan. Ini hanyalah demo sederhana, dan anda boleh melakukan pengembangan sekunder melalui kod yang saya berikan. Beberapa tutorial asas mengenai skrin BATU boleh pergi ke laman web:

Laman web mempunyai pelbagai maklumat mengenai model, pengguna, dan dokumentasi reka bentuk, serta tutorial video. Saya tidak akan membahas dengan terperinci di sini.

Langkah 1: Reka Bentuk Antara Muka UI

Reka Bentuk Antara Muka UI
Reka Bentuk Antara Muka UI
Reka Bentuk Antara Muka UI
Reka Bentuk Antara Muka UI
Reka Bentuk Antara Muka UI
Reka Bentuk Antara Muka UI
Reka Bentuk Antara Muka UI
Reka Bentuk Antara Muka UI

Photoshop

Saya merancang dua halaman UI berikut dengan photoshop:

Projek ini mempunyai dua halaman di atas secara keseluruhan. "Cahaya" dan "Sensor" di sudut kanan atas adalah butang suis kedua halaman ini.

Di halaman "Cahaya", anda boleh mengawal semua jenis lampu di rumah anda. Di halaman "Sensor", anda dapat memeriksa nilai yang dikesan oleh pelbagai sensor.

Setelah reka bentuk dua halaman di atas, kita dapat melakukan reka bentuk logik butang melalui perisian STONE TOOL yang disediakan di laman web rasmi STONE.

Perlu diperhatikan bahawa sumber jam yang digunakan untuk paparan waktu di sini adalah sumber jam pada skrin paparan, bukan sumber jam MCU.

Kesan pertukaran halaman TAB

Tidak ada komponen penukaran halaman TAB dalam perisian STONE TOOL, jadi saya memikirkan kaedah lain untuk mencapai kesan pertukaran halaman TAB.

Melalui pemerhatian yang saya sediakan dua gambar UI dapat didapati bahawa kedua-dua gambar di atas adalah teks "Cahaya" dan "Sensor", perbezaannya adalah ukuran pikselnya berbeza, jadi kita hanya perlu meletakkan kedudukan dua piksel yang ditetapkan ke teks yang sama, dan kemudian melalui sudut kiri atas masa dan tarikh untuk rujukan, anda boleh mencapai TAB untuk menukar kesan.

Logik butang

Ambil butang "Ruang Tamu" sebagai contoh. Apabila pengguna menekan butang ini, skrin paparan port bersiri STONE akan menghantar arahan protokol yang sesuai melalui port bersiri. Setelah menerima arahan ini, MCU pengguna akan menguraikan protokol untuk mengawal keadaan beralih lampu yang dihubungkan dengan MCU.

Pemerolehan sensor

Contohnya, "kualiti udara": jika anda ingin mendapatkan kualiti udara dalaman, kita mesti mempunyai MCU untuk mengumpulkan kualiti udara, sensor kualiti udara ketika angka MCU dikumpulkan melalui algoritma yang membandingkan kebaikan dan keburukan kualiti udara, dan kemudian MCU dihantar melalui port bersiri untuk memaparkan kawasan penyimpanan "Baik" atau "Buruk", untuk mengubah kandungan paparan "Pemboleh ubah teks", dan kemudian pengguna dapat melihat kelebihan kawalan kualiti secara intuitif. Ini dijelaskan kemudian dalam kod MCU.

Langkah 2: Komunikasi MCU

Komunikasi MCU
Komunikasi MCU
Komunikasi MCU
Komunikasi MCU
Komunikasi MCU
Komunikasi MCU
Komunikasi MCU
Komunikasi MCU

STM32 adalah MCU yang biasa diketahui oleh semua orang, dan ini adalah model MCU yang biasa di peringkat antarabangsa. Oleh itu, model khusus STM32 MCU yang saya gunakan dalam projek ini ialah STM32F103RCT6.

Terdapat banyak siri STM32, yang dapat memenuhi pelbagai permintaan pasaran. Kernel dapat dibahagikan kepada korteks-m0, M3, M4, dan M7, dan setiap kernel dapat dibagi menjadi arus utama, berprestasi tinggi, dan penggunaan daya yang rendah.

Murni dari perspektif pembelajaran, anda dapat memilih F1 dan F4, F1 mewakili jenis asas, berdasarkan kernel korteks-m3, frekuensi utama adalah 72MHZ, F4 mewakili prestasi tinggi, berdasarkan kernel korteks-m4, yang utama frekuensi ialah 180M.

Bagi F1, F4 (seri 429 ke atas), selain kernel yang berbeza dan peningkatan frekuensi utama, ciri peningkatan yang jelas adalah pengawal LCD dan antara muka kamera, sokongan untuk SDRAM, perbezaan ini akan diberi keutamaan dalam pemilihan projek. Namun, dari perspektif pengajaran universiti dan pembelajaran awal pengguna, siri F1 masih menjadi pilihan pertama. Pada masa ini, STM32 siri F1 mempunyai jumlah bahan dan produk terbesar di pasaran.

Mengenai kaedah pemasangan dan muat turun program pengembangan STM32 SCM, saya tidak akan membuat pengenalan.

Permulaan GPIO

Dalam projek ini, kami menggunakan sejumlah 4 GPIO, salah satunya adalah pin output PWM. Mari kita lihat permulaan tiga port GPIO biasa:

Fungsi ini menginisialisasi PB0 / PB1 / PB2 dari STM32F103C8 sebagai pin output dan memanggilnya dari fungsi utama. Selepas inisialisasi, kita perlu mempunyai logik untuk mengawal keadaan output, tahap tinggi dan rendah GPIO ini, jadi saya menulis fungsinya seperti di bawah:

Ini adalah fungsi yang dapat anda fahami secara intuitif dengan nama pemboleh ubah.

Permulaan port bersiri

Bahagian permulaan port bersiri adalah di uart.c:

Kemudian panggil uart_init dalam fungsi utama untuk memulakan kadar baud port bersiri 115200. Pin menggunakan PA9 / PA10

Permulaan PWM

Langkah-langkah khusus:

1. Tetapkan jam RCC;

2. Tetapkan jam GPIO; Mod GPIO harus diatur ke GPIO_Model_AF_PP, atau ke fungsi GPIO_PinRemapConfig () jika pin remap diperlukan.

3. Tetapkan daftar pemasa TIMx yang berkaitan;

4. Tetapkan daftar pemasa TIMx yang berkaitan dengan PWM;

A. Tetapkan mod PWM

B. Tetapkan kitaran tugas (pengiraan formula)

C. Tetapkan polaritas perbandingan output (diperkenalkan sebelumnya)

D. Yang paling penting, aktifkan keadaan output TIMx dan aktifkan output PWM TIMx; Setelah Tetapan yang berkaitan selesai, pemasa TIMx dihidupkan oleh TIMx_Cmd () untuk mendapatkan output PWM. Panggil TIM3_PWM_Init ini dari fungsi utama.

Langkah 3: Penulisan Kod Logik

Penulisan Kod Logik
Penulisan Kod Logik
Penulisan Kod Logik
Penulisan Kod Logik
Penulisan Kod Logik
Penulisan Kod Logik

Paparan definisi alamat komponen

Komponen paparan mempunyai alamat berasingan, dan di sini saya menulis semuanya sebagai definisi makro: Penerimaan data bersiri

Melihat maklumat mengenai paparan BATU, Anda dapat melihat bahawa apabila butang ditekan, port bersiri pada paparan mengirimkan protokol dalam format yang sesuai, yang dapat diterima dan dihurai oleh pengguna MCU. Apabila butang ditekan, port bersiri pada layar akan mengirimkan sembilan bait data, termasuk data pengguna. Penerimaan data bersiri ditulis dalam Handler: Data yang diterima disimpan dalam array "USART_RX_BUF". Dalam projek ini, panjang penerimaan ditetapkan. Apabila panjang penerimaan lebih dari 9 bait, hujung penerimaan dinilai.

Kawal keadaan beralih lampu

Dalam fungsi utama, saya menulis beberapa kod logik untuk mengawal keadaan suis lampu: Seperti yang kita lihat, kod pertama menentukan apakah data port bersiri diterima, dan ketika data port bersiri diterima, menentukan butang yang mana pengguna menekan pada skrin paparan. Butang yang berbeza pada paparan mempunyai alamat yang berbeza, yang dapat dilihat dalam perisian ALAT BATU: Ketika pengguna menekan butang "Ruang Tamu", bit data keempat dan kelima yang dikirim oleh port bersiri layar paparan adalah alamat butang. Oleh kerana bit keempat dari semua butang yang ditetapkan di sini adalah 0x00, kita dapat menilai butang mana yang ditekan oleh pengguna dengan menilai secara langsung data bit kelima. Setelah mendapatkan butang yang ditekan oleh pengguna, kita perlu menilai data pengguna yang diterima ketika tombol ditekan, yang merupakan digit kedelapan dari data yang dikirim dari layar paparan. Oleh itu, kami membuat kawalan berikut: tulis parameter alamat butang dan data pengguna ke dalam fungsi "Light_Contral" untuk mengawal keadaan lampu mati. Entiti fungsi Light_Contral adalah seperti berikut: Seperti yang anda lihat, jika alamat butang adalah "Ruang Tamu" dan data pengguna adalah "LightOn", maka pin PB0 MCU diatur ke output tingkat tinggi, dan lampu menyala. Tiga butang yang lain serupa, tetapi saya tidak akan meneruskannya di sini.

Keluaran PWM

Di UI yang saya reka, ada slaid regulator, yang digunakan untuk mengawal kecerahan cahaya "Children Room". MCU dilaksanakan oleh PWM. Pin output PWM adalah PB5. Kodnya adalah seperti berikut: Pengatur geser ditetapkan ke nilai minimum 0x00 dan nilai maksimum 0x64. Semasa meluncur, port serial layar paparan juga akan mengirim alamat dan data yang relevan, dan kemudian menetapkan nisbah tugas output PWM dengan memanggil fungsi berikut:

Langkah 4: Pemerolehan Sensor

Pemerolehan Sensor
Pemerolehan Sensor
Pemerolehan Sensor
Pemerolehan Sensor
Pemerolehan Sensor
Pemerolehan Sensor

Di halaman "Sensor" layar paparan, ada empat data Sensor.

Data tersebut juga memiliki alamat penyimpanan di layar, dan kami dapat mengubah konten sebenarnya dengan hanya menulis data ke alamat ini melalui port serial MCU.

Di sini saya membuat pelaksanaan kod mudah:

Data paparan dikemas kini setiap 5 saat, dan saya hanya menulis demo ringkas mengenai fungsi pengumpulan sensor yang berkaitan, kerana saya tidak mempunyai sensor ini.

Dalam pembangunan projek sebenar, sensor ini mungkin data yang dikumpulkan oleh ADC, atau data yang dikumpulkan oleh antara muka komunikasi IIC, UART, dan SPI. Yang perlu anda lakukan ialah menulis data ini ke dalam fungsi yang sesuai sebagai nilai kembali.

Langkah 5: Kesan Operasi Sebenar

Disyorkan: