Stasiun cuaca di Arduino dari A hingga Z. Bagian 2

Untuk dilanjutkan. Bagian sebelumnya .


Daftar isi:



Lembut Pemilihan Komponen



Pilihan perangkat keras dan perangkat lunak saling terkait erat sebagai "ayam dan telur". Di mana untuk memulai, dengan perangkat keras, dengan perangkat lunak? Jika Anda memiliki perangkat keras yang baik, tetapi tidak memiliki driver, perpustakaan, dan perangkat lunak (IDE, utilitas untuk firmware, dll.), Maka itu tidak berguna, dan sebaliknya.


Karenanya, saya memberi tahu Anda lagi tentang pilihan antara nRF24L01 + dan ESP8266 untuk menghubungkan sensor jarak jauh ke unit pusat.


Faktanya adalah bahwa ESP8266 bukan hanya adaptor WiFi yang bodoh, ia memiliki mikrokontroler dalam daya dan kapasitas memori yang lebih baik daripada Arduino. Secara default, ESP8266 memiliki firmware dalam bentuk seperangkat perintah AT, dalam hal ini ESP digunakan sebagai modem sederhana. Tetapi ada firmware yang lebih canggih, di sini ESP8266 bahkan dapat bertindak sebagai server web, dan tentu saja, mengontrol sensor seperti Arduino.


Namun, semua firmware canggih ini memiliki kelemahan yang tidak memungkinkan (total dengan pertanyaan besi tentang yang sudah saya tulis) untuk menggunakan ESP8266 dalam proyek ini:


  • semua firmware masih sangat mentah (per 2016)
  • beberapa siap tidak gratis
  • ambang entri untuk debugging dan membuat perubahan jauh lebih tinggi daripada Arduino.

Akibatnya, saya tidak menemukan firmware canggih yang sesuai dengan yang sudah jadi, dan sejauh ini saya belum siap untuk membuat sendiri. Chip ESP8266 adalah topik yang luas dan menarik.


Pada gilirannya, firmware AT standar juga memiliki kelemahan:


  • mereka masih lembab (per 2016)
  • Saya tidak dapat menemukan perpustakaan normal untuk Arduino untuk mengontrol modul ESP8266 menggunakan perintah AT, saya harus "pertanian kolektif" sendiri.

Di sisi lain, modul radio nRF24L01 + sederhana dan mudah, ada perpustakaan RadioHead super untuk bekerja dengannya dan tidak ada masalah pemrograman. Perpustakaan didokumentasikan dengan baik, yang penting.


RadioHead memungkinkan Anda untuk mentransfer struktur data (dan bukan hanya angka tunggal), yang diterapkan dalam proyek ini. Ke depan, saya akan mengatakan bahwa RadioHead dapat mentransmisikan data dengan andal , dengan pengulangan jika tidak mencapai pertama kali. Perpustakaan mengurus semua hal ini.


Untuk menghemat energi, saya menggunakan Low Power Library , itu sederhana dan hanya berisi apa yang Anda butuhkan.


Ini adalah sepotong kode:


//    2.402 GHz ( 2), 2Mbps, 0dBm rfdata.init(); //     ( ,  ) rfdata.sendtoWait((uint8_t*)&dhtData, sizeof(dhtData), SERVER_ADDRESS); //  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);` 

Itu saja!


Dalam hal menggunakan ESP8266 dalam sensor yang dipasang di jendela, saya terpaksa membuat titik akses WiFi dan entah bagaimana mentransfer data (di mana firmware, di mana perangkat lunaknya?). Atau biarkan sensor langsung mengirim data ke server web, dan ajarkan unit pusat (yang dalam hal ini berhenti memainkan peran "sentral") untuk membaca data dari sana untuk menampilkannya di papan tulis.


Dengan kata lain, saya menempuh jalan otonomi yang lebih besar dari Internet WiFi dan server PHP + MySQL. Anda dapat mulai memukau stasiun cuaca sekarang tanpa memiliki akses Internet dan / atau hosting untuk server, dalam hal ini Anda tidak perlu ESP8266, tambahkan saja nanti.


Untuk membaca data dari sensor seperti DHT, ada Adafruit DHT Sensor Library . Bekerja dengannya sederhana dan mudah.


Adafruit BMP085 Unified library, yang membutuhkan perpustakaan tingkat abstrak Sensor Adafruit , cocok untuk sensor tekanan.


Semua perpustakaan memiliki contoh sketsa.


Itu semua mungkin dengan bagian teoretis. “Tujuan kami jelas, tugasnya ditentukan. Untuk bekerja, kawan! ”


Unit pusat. Besi


Yah, akhirnya, setelah semua keributan, kami melanjutkan ke pertemuan!


Catatan Jika Anda belum pernah mengumpulkan stasiun cuaca (oh well!), Maka Anda dapat mulai tanpa memiliki semua detail di tangan. Misalnya, Anda dapat memulai tanpa memiliki modul radio dan / atau ESP8266. Sensor tekanan barometrik BMP180 juga mungkin hilang. Tambah nanti. Benar, dalam hal ini, Anda harus berkomentar secara independen di sketsa bagian-bagian kode yang bertanggung jawab untuk berinteraksi dengan blok yang hilang, tetapi ini tidak begitu sulit. Saya akan menunjukkan caranya.


Hal utama adalah bahwa setidaknya sesuatu telah dikumpulkan dan diraih, maka lebih menyenangkan untuk melanjutkan.


Seperti yang telah disebutkan, unit pusat didasarkan pada Arduino MEGA. Kita juga perlu:


  • sensor suhu dan kelembaban DHT11
  • sensor tekanan barometrik tipe BMP180
  • Modul WiFi ESP8266
  • Modul radio 2,4 GHz nRF24
  • Jenis layar LCD1604 (masing-masing 4 baris 16 karakter), Anda dapat membeli seharga $ 5
  • catu daya dengan output 5-12 V DC (saya menggunakan pengisian daya dari ponsel dengan output USB, yang nyaman)
  • papan tempat memotong roti untuk menyolder, besi solder, rosin, solder atau papan tempat memotong roti arduino biasa. Secara pribadi, saya menyolder untuk keandalan, karena proyek itu jelas lama bermain dan tidak ingin menderita karena kabel tidak sengaja ditarik dari papan tempat memotong roti.

Anda dapat membeli papan pengembangan untuk pematrian dari $ 1. Ambil ukuran lebih besar, cukup untuk semua koneksi. Dan lagi: sebelum membeli, baca deskripsi, bukan gambar.


Biaya solderless dapat dibeli dari $ 2. Ambil ukuran lebih besar, cukup untuk semua koneksi.


Kabel penghubung adalah jenis yang kami butuhkan:


  • Kabel dupont "ayah-ibu" (ada juga "ayah-ayah", "ibu-ibu"). Ini adalah kabel yang terbuat dari beberapa kabel dengan warna dan konektor insulasi yang berbeda untuk kontak pin untuk Arduino. Dengan kabel ini, akan lebih mudah untuk menghubungkan papan dan sensor langsung ke Arduino tanpa menggunakan papan tempat memotong roti.
  • Kabel penghubung konvensional untuk papan tempat memotong roti tanpa solder untuk Arduino.
  • Sekelompok kabel untuk menyolder.

Langkah pertama adalah menyolder LCD-1604. Pertama saya menyolder pin ke papan, lalu konektor ke papan tempat memotong roti.



Lihat dari bawah.



Saya menyolder pada firasat tanpa kabel awal, jadi tidak ada sirkuit yang akan diberikan di sini. Lakukan karena lebih nyaman, itu tidak akan lebih buruk. Patuhi prinsip bahwa kabel hitam selalu menjadi bumi, merah adalah "plus" dari catu daya, sisa warna akan bekerja. Ternyata begini.




Agar tidak lupa di mana konektornya berada, ia “melukis” bagian papan di sebelahnya dengan korektor putih dan membuat prasasti yang sesuai. Jelek? Tapi praktis dan cepat, ini prototipe!



Pinout dan koneksi


Tampilan 16 × 4 LCD1604


Untuk informasi lebih lanjut tentang tampilan dan bekerja dengannya, google "Bekerja dengan LCD karakter berbasis HD44780". Perhatikan bahwa Anda perlu mempertimbangkan dengan hati-hati polaritas catu daya untuk indikator LCD dan bahwa tegangan catu daya berada dalam kisaran + 4,5 ... 5,5 V. Sikap tidak perhatian terhadap hal ini dapat menyebabkan kegagalan indikator!


Pin LCD 1604Arduino MEGAArduino unoDeskripsi
VssGNDGNDGND
Vdd5 V5 V4.7 - 5.3V
RS224Level tinggi berarti bahwa sinyal pada output DB0-DB7 adalah data, level rendah berarti perintah
RwGNDGNDMenentukan arah data (baca / tulis). Karena operasi membaca data dari suatu indikator biasanya tidak diklaim, dimungkinkan untuk menetapkan level rendah secara konstan pada input ini
E235Pulsa dengan durasi minimal 500 ms pada pin ini menentukan sinyal untuk membaca / menulis data dari pin DB0-DB7, RS dan WR
DB4248Data Masuk / Keluar
DB5259
DB62610
DB72711
LED A ++ 5V atau 220 Ohm resistor → + 5VLED-A
LED B-GND
V0Pemangkas GND atau 10kΩ

Inisialisasi perangkat lunak akan terlihat seperti ini:


 // Arduino MEGA LiquidCrystal lcd(22, 23, 24, 25, 26, 27); // Arduino UNO LiquidCrystal lcd(4, 5, 8, 9, 10, 11); 

Suhu, kelembaban DHT11


Menghubungkan sensor suhu dan kelembaban DHT11 (SainSmart). Tempatkan sensor menghadap ke atas, ujungnya akan dijelaskan dari kiri ke kanan.


DHT11Arduino mega
DATADigital pin 2 (PWM) (lihat DHTPIN di bawah)
Vcc3.3-5 V (direkomendasikan 5 V; daya eksternal lebih baik)
GNDGND

Inisialisasi perangkat lunak


 #define DHTPIN 2 //   Digital pin 2 (PWM) #define DHTTYPE DHT11 // . DHT.h //  DHT dht(DHTPIN, DHTTYPE); 

Barometer BMP180


Koneksi sensor tekanan atmosfer BMP180 (barometer) + suhu melalui antarmuka I2C / TWI.


BMP180Arduino mega
Vcctidak terhubung
GNDGND
SCL21 (SCL)
SDA20 (SDA)
3.33.3 V

Untuk UNO: A4 (SDA), A5 (SCL).


 //  Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); // sensorID 

nRF24L01 +


Karakteristik singkat:


  • Rentang Frekuensi 2.401 - 2.4835 GHz
  • 126 saluran. Saluran nol dimulai pada 2400 MHz dan kemudian dengan langkah 1 MHz, misalnya, saluran 70 masing-masing terletak pada 2470 MHz. Saat mengatur kecepatan transmisi 2Mbps, lebar saluran adalah 2 MHz
  • Catu daya 1,9 - 3,6 V (disarankan 3,3 V)

Ini adalah pinout dari modul.


Pinout nRF2401L +


Beberapa menyarankan segera menyolder kapasitor keramik 100nF (1μF, 10μF mungkin) ke kabel daya RF untuk menghindari gangguan listrik.


Pinout nRF24L01 + (lihat bagian atas papan tempat chip berada, pin harus berada di bagian bawah):


pin 2 3.3Vpin 4 CSNpin 6 MOSIpin 8 IRQ
pin 1 GNDpin 3 CEpin 5 SCKpin 7 MISO

Koneksi untuk stasiun cuaca:


Arduino meganRF24L01 +
3.3 VVCC pin 2 (daya eksternal yang lebih baik)
pin D8CE pin 3 (chip aktifkan)
SS pin D53CSN pin 4 (pilih chip dalam)
Pin SCK D52SCK pin 5 (SPI clock in)
Pin MOSI D51SDI pin 6 (Data SPI dalam)
MISO pin D50SDO pin 7 (data SPI keluar)
IRQ pin 8 (Output interupsi) tidak terhubung
GNDGND pin 1 (terhubung)

Pemrograman modul radio akan dijelaskan secara rinci di bagian perangkat lunak.


ESP8266


Pinout ESP8266 (lihat bagian atas papan tempat chip, pin harus di bagian bawah):


GNDGPIO2GPIO0Rx
TXCH_PDRESETVcc

Menghubungkan ESP8266 untuk stasiun cuaca:


ESP8266Arduino mega
TX10 pin (SoftwareSerial RX)
Rx11 pin (SoftwareSerial TX)
Vcc3.3 V
GNDGND
CH_PDMelalui 10K resistor ke 3.3V Arduino
GPI0Opsional Melalui 10K resistor ke 3.3V Arduino
GPI2Opsional Melalui 10K resistor ke 3.3V Arduino

KDPV


Perakitan unit pusat. Saya memotong "motherboard" dari kotak kardus dari bawah sepatu saya dan mengencangkan sisanya dengan 3 sekrup.


Perakitan unit pusat


Seperti yang dapat Anda lihat di tempat ini semua makanan disediakan dari pin Arduino, yaitu tidak ada yang langsung masuk ke catu daya, dan sejauh ini ada cukup daya.


Suka semuanya. Saya belum melupakan apa pun.


Solder, hubungkan. Pada bagian selanjutnya, sketsa yang berfungsi untuk unit pusat akan diberikan dan stasiun cuaca kami akan menunjukkan sesuatu.


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


All Articles