
Bagian 2 <-
Bagian 1Mari kita terus bereksperimen dengan mikrokontroler STM32F103C8T6, sambungkan beberapa sensor / display I2C ke "tablet biru".
Dukungan yang diterapkan untuk tampilan I2C populer:
Dukungan yang diterapkan untuk sensor berikut:
- BH1750 - Sensor Cahaya
- BME280 - sensor suhu, tekanan, kelembaban
- CCS811 - Sensor CO2, VOC (Zat Organik Yang Mudah Menguap)
Untuk mulai bekerja dengan fitur-fitur baru, Anda perlu membuat proyek baru.
Tautan untuk mengunduh program MIOC diberikan di bagian pertama.
Sensor
Sensor BH1750

BH1750 sensor cahaya 16-bit (pengukur cahaya) dengan antarmuka I2C. Fotodioda pada BH1750 menentukan intensitas cahaya, yang dikonversi ke tegangan output menggunakan penguat operasional. Built-in ADC menyediakan data digital 16-bit. Logika internal BH1750 menghilangkan kebutuhan untuk perhitungan yang rumit, karena secara langsung menampilkan data digital yang signifikan dalam lux (lux).
Menurut dokumentasi, sensor BH1750 sensitif terhadap cahaya tampak dan secara praktis tidak terpengaruh oleh radiasi inframerah, mis. bereaksi terhadap kisaran spektral yang kira-kira sama dengan mata manusia.
Untuk bekerja dengan sensor ini, pada tab "Konfigurasi", pilih BH1750.
Hasil pengukuran akan berada dalam variabel global:
uint32_t BH_L;
Menghubungkan sensor ke bus I2C2:

Sensor BME280

Sensor ini mengukur parameter lingkungan: suhu, tekanan atmosfer, dan kelembaban.
Ada juga sensor serupa - BMP280, yang tidak memiliki kemampuan untuk mengukur kelembaban. Tetapi harganya jauh lebih murah.
Selain fakta bahwa sensor mengukur semua parameter di atas, ia juga tahu cara menyaring noise, kalibrasi bacaan dibangun ke dalamnya. Juga, tidak seperti sensor lainnya, sensor ini mengambil semua pengukuran ini tidak hanya dengan cepat, tetapi juga dalam rentang yang lebih luas. Sebagai contoh, banyak sensor tidak dapat mengukur kelembaban udara di bawah 20 persen.
Karakteristik sensor yang dinyatakan adalah sebagai berikut:

Sensor terhubung ke bus I2C2 sebagai berikut:

Jika BMP280 akan digunakan, maka dalam file utama / bme280.c Anda perlu mengomentari semua baris bertanda // Komentar untuk BMP.
Hasil pengukuran akan berada dalam variabel global:

Contoh program yang berfungsi dengan tampilan BH1750, BME280, dan 1602:
#include "mx_init_hw.c" int main() { char s[64]; float t=0, p=0, h=0; Init_HW();
Hasil dari program:

Program yang sama akan menampilkan suhu, tekanan, kelembaban pada layar SSD1306
(hubungkan tampilan ini, dan pilih di konfigurasi):

BME280 dapat mengukur suhu dengan akurasi yang lebih besar. Untuk melakukan ini, itu harus dikalibrasi. Dalam file utama / bme280.h, ada definisi makro untuk ini:
#define DT 3520
Sensor CCS811

Udara di sekitar kita adalah campuran gas dan terutama terdiri dari nitrogen (sekitar 78%) dan oksigen (sekitar 21%). Persentase sisanya dicatat oleh berbagai kotoran (gas inert, karbon dioksida, karbon monoksida, zat volatil organik (VOC), dll.). Terlepas dari kenyataan bahwa persentase pengotor kecil, perubahan konsentrasi mereka bisa sangat tidak menyenangkan dan bahkan berbahaya bagi manusia. Kualitas udara di kantor dan tempat tinggal paling sering dikaitkan dengan kandungan CO2 dan VOC.
Zat organik yang mudah menguap meliputi lebih dari 5000 senyawa. Pendidikan sebagian besar dari mereka entah bagaimana terhubung dengan proses kehidupan manusia.
Dengan demikian, bahkan kehadiran manusia yang sederhana di ruangan tertutup menyebabkan "polusi" udara dan kebutuhan ventilasi. Memperkirakan konsentrasi VOC di udara sulit. Sebelumnya, sensor CO2 digunakan untuk memperkirakan konsentrasi VOC. Pada saat yang sama, fakta diperhitungkan bahwa dalam kondisi normal konsentrasi VOC dan CO2 terikat. Mengetahui persentase CO2, seseorang dapat secara tidak langsung menentukan konsentrasi VOC. Jika kandungan karbon dioksida di udara telah mencapai batas tertentu, ventilasi harus dinyalakan.
Dalam praktiknya, hubungan antara VOC dan CO2 tidak selalu langsung. Sebagai contoh, merokok di dalam ruangan menyebabkan lonjakan tajam dalam isi VOC, yang tidak dicatat oleh sensor CO2, sehingga konsentrasi karbon dioksida tidak banyak berubah. Sensor karbon dioksida juga tidak berdaya jika bahan kimia rumah tangga, produk pembersih, cat dan pernis atau parfum biasa digunakan di dalam ruangan. AMS menawarkan solusi untuk masalah pengukuran konsentrasi VOC - sensor CCS811.
Fitur Sensor Kualitas Udara CCS811B:

Sensor ini memiliki algoritma kalibrasi otomatis. Nilai yang diukur secara otomatis ditetapkan dalam beberapa hari. Untuk alasan ini, sensor baru memiliki kesalahan awal yang sangat besar dan harus bekerja setidaknya selama tiga hingga empat hari sampai hasil yang lebih atau kurang dapat diandalkan diperoleh:

Pengguna juga perlu mengingat bahwa setiap kali setelah dinyalakan, sensor CCS811 harus "menghangat". Waktu "pemanasan" seperti itu lebih dari 30 menit, di mana kesalahannya terlalu besar:

Fitur CCS811 ini sangat penting untuk dipertimbangkan.
Hasil pengukuran sensor dalam variabel global:
uint32_t CCS_CO2;
uint32_t CCS_TVOC;
Menghubungkan sensor ke bus I2C2:

Anda dapat menulis program untuk mencetak hasil sensor ini menggunakan contoh di atas dan deskripsi cara bekerja dengan konsol di bagian pertama sendiri.
Contoh sensor lainnya
Sensor Gerak HC-SR501

Beberapa sensor, seperti sensor gerak HC-SR501, tidak perlu menulis cuplikan tambahan apa pun.
Untuk sensor ini, deklarasikan variabel, pilih Type = GPIO_Mode_IN_FLOATING, pilih porta.
Hasilkan BSP, kompilasi, unggah ke MK. Selanjutnya, kami bekerja dengan sensor ini dengan cara yang sama seperti dengan tombol (untuk menerima data).
Koneksi Sensor HC-SR501:

Sensor Suhu / Kelembaban DHT22

Sensor Suhu / Kelembaban
Koneksi Sensor:

Bekerja dengan sensor ini akan menjadi contoh cuplikan pengguna (analog dengan sketsa arduino).
Cuplikan dapat diambil di sini:
dht22.cTaruh di folder utama
Dalam file ini, edit baris:
#define PORT GPIOA #define PIN GPIO_Pin_5
dengan koneksi sensor yang sebenarnya
Teks program untuk bekerja dengan cuplikan ini:
#include "mx_init_hw.c" #include "dht_22.c" int main() { int16_t dht_t, dht_h; Init_HW(); dht_init();
Hasil kerja:

Lebih sering dari setiap 4-5 detik, sensor tidak masuk akal untuk diinterogasi. Alasan: perhitungan suhu terjadi dalam 800-900 mS, kedua: jika Anda lebih sering melakukan wawancara, maka sensor akan memanas.
CLI
Firmware berisi cangkang kecil yang berfungsi dengan konsol. Anda dapat melihat perintah apa yang ada di file utama / mx_cli.c
Jika diinginkan, Anda dapat menambahkan tim Anda.
CLI mulai bekerja dalam mode Tanpa Echo, yaitu karakter yang Anda masukkan tidak ditampilkan. Untuk menampilkan karakter yang Anda masukkan, ketik: echo on.
Perintah "sh on" akan menampilkan dua kali sedetik nilai variabel yang dideklarasikan dalam konfigurator dan variabel yang terkait dengan sensor. Angka di posisi pertama sesuai dengan nomor baris dalam tabel konfigurator. Perintah ini dibuat untuk mentransfer data ke sistem yang terhubung ke konsol.
Tidak ada flag dan mutex yang menganalisis kesibukan konsol. Karena itu, ketika menggunakan operator "cetak" dan "gema" bersama-sama, pencampuran informasi output dapat terjadi. Anda sebaiknya tidak menggunakan kedua metode secara bersamaan. Untuk mengatasi masalah ini, Anda dapat menggunakan dua saluran keluaran. Misalnya, konsol ada di UART1, dan output informasi pengguna di VCP. Atau sebaliknya.
Gunakan fungsi:
send_uart1( char *data, int len ) send_usb( char *data, int len )
Untuk memfasilitasi penggunaan fungsi-fungsi ini, Anda dapat mengubah makro printf dalam file gbl.h. Misalnya, berikut ini:
#define printf(fmt,argv...){char s[128];sprintf(s,fmt,##argv);send_usb(s,strlen(s));}
Contoh keluaran ke konsol (echo on):

Pemindaian bus I2Cx
Untuk memindai bus I2C1 atau I2C2, ada "firmware" yang siap pakai * .hex
pemindai I2CxOutput informasi ke UART1, kecepatan - 115200.8, N, 1
Setelah memuat pemindai, tekan tombol "Reset".
Firmware menunjukkan alamat perangkat yang ditemukan di bus.

Ketiga sensor terhubung yang dijelaskan di atas.