Stasiun cuaca (Arduino pro mini, BME280, LCD1602)

Pendahuluan

Apa yang bisa ditampilkan pada layar dua baris kecuali "Hello world!"? Mengapa tidak menampilkan kelembaban dan tekanan suhu?

Sensor yang ditawarkan sebagai alat bantu pelatihan untuk arduino (DHT11, DHT22) menunjukkan suhu dan kelembaban. Untuk tujuan pendidikan (untuk universitas) perlu untuk mengamati tekanan dengan cara yang sama. Secara alami, departemen memiliki barometer, tetapi mengapa tidak mengambil sendiri? Selain itu, Anda dapat mengumpulkan lebih lanjut bacaan dalam mode otomatis, dan ini adalah pengalaman yang baik dalam mempelajari Arduino.

Dengan satu atau lain cara, komponen dipesan dari Cina dan perangkat ini dirakit.

Komponen yang diperlukan

Arduino Pro Mini
I2C untuk LCD (itu mungkin untuk memesan segera dirakit, tetapi ternyata sedikit lebih murah)
LCD 1602
BME280

USB-UART digunakan untuk mengirim sketsa ke Arduino. Dimungkinkan juga untuk menggunakan Raspberry Pi atau komputer dengan port COM.

Diagram koneksi untuk firmware dan kode program

Dari Cina, USB-UART datang dengan satu set kabel:

gambar

Mereka sudah cukup. Saya meninggalkan jumper di 3,3 volt, terlepas dari kenyataan bahwa versi saya dari Arduino didukung oleh 5 volt.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opsional, tidak berfungsi untuk saya, mungkin karena tegangan sinyal tetap 3.3V)

Jika Anda tidak menghubungkan DTR, maka setelah mengirim firmware Arduino Anda perlu melakukan reboot dengan tombol bawaan, pertukaran data aktif akan dimulai dari kedua sisi (seperti ditunjukkan oleh LED USB-UART), setelah firmware berhasil diunduh, firmware akan reboot dengan sendirinya.

Perpustakaan pihak ketiga yang diperlukan:

SparkFunBME280
LiquidCrystal I2C

Langsung kode, dengan komentar dari contoh-contoh (jika seseorang perlu mengubah sesuatu).

Kode
#include <stdint.h> #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include <LiquidCrystal_I2C.h> //Global sensor object BME280 mySensor; LiquidCrystal_I2C lcd(0x3F,16,2); // ,    0x3F void setup() { lcd.init(); lcd.backlight(); //***Driver settings********************************// //commInterface can be I2C_MODE or SPI_MODE //specify chipSelectPin using arduino pin names //specify I2C address. Can be 0x77(default) or 0x76 //For I2C, enable the following and disable the SPI section mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // ,      //For SPI enable the following and dissable the I2C section //mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; //***Operation settings*****************************// //renMode can be: // 0, Sleep mode // 1 or 2, Forced mode // 3, Normal mode mySensor.settings.runMode = 3; //    Forced mode,        Normal mode //tStandby can be: // 0, 0.5ms // 1, 62.5ms // 2, 125ms // 3, 250ms // 4, 500ms // 5, 1000ms // 6, 10ms // 7, 20ms mySensor.settings.tStandby = 5; //    //filter can be off or number of FIR coefficients to use: // 0, filter off // 1, coefficients = 2 // 2, coefficients = 4 // 3, coefficients = 8 // 4, coefficients = 16 mySensor.settings.filter = 0; //tempOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.tempOverSample = 1; //pressOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.pressOverSample = 1; //humidOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.humidOverSample = 1; //Calling .begin() causes the settings to be loaded mySensor.begin(); } void loop() { //    ,    ,          . lcd.setCursor(0,0); lcd.print("H="); lcd.print((uint8_t)mySensor.readFloatHumidity()); lcd.print("%"); lcd.print(" T="); lcd.print(mySensor.readTempC()); lcd.setCursor(13,0); lcd.print(" P:"); lcd.setCursor(0,1); int mmH=mySensor.readFloatPressure()/133; lcd.print(mmH); lcd.print("mmH "); lcd.print(mySensor.readFloatPressure()); lcd.setCursor(14,1); lcd.print("Pa"); delay(1000); } 


Alamat sensor bisa ditebak, hanya ada dua.

Cara mengetahui alamat tampilan Anda, bisa Anda lihat di sini . Tergantung pada chip, ada dua piring.

Dalam hal ini:

gambar

Dan alamatnya akan 0x3F sejak itu A0 - A2 terbuka:

gambar

LED yang dilingkari dalam oval lebih baik menguap.

Diagram pengkabelan

Resistor dipilih sebagai setengah dari resistansi sensor (antara VVC dan GND), sehingga voltase jatuh pada 1,7 volt. Juga, rangkaian dapat ditenagai dari input RAW, tegangan lain (misalnya dari mahkota).

gambar

Foto menunjukkan bahwa untuk kekompakan, Anda dapat mengambil daya ke sensor dan menampilkan dari pin lain. Ini juga menunjukkan cabang sepasang kabel berwarna oranye-kuning, sebuah resistor 100 Ohm tergantung pada mereka untuk mengurangi kecerahan cahaya latar (Anda dapat meninggalkan jumper, tetapi itu akan memotong mata Anda).

gambar

Dalam kasus saya, semuanya didukung oleh catu daya komputer lama. Dapat ditenagai oleh USB. Semua komponen dilem dengan lem Momen, yang ada di tangan.

Ringkasan

Di tempat kerja muncul 1602 melesat ke meja, yang menunjukkan tekanan, kelembaban, suhu. Arduino dapat direflash tanpa melepasnya ( ini bisa menjadi garis yang merayap ).

Foto
gambar

Tempat kerja, pandangan umum.

gambar

Tampak depan.

gambar

Tampak belakang.

Source: https://habr.com/ru/post/id406693/


All Articles