Daftar Isi:
- Langkah 1: Pemilihan Komponen
- Langkah 2: Konstruksi
- Langkah 3: Kode – Perpustakaan Sensor Daya Rendah, Antarmuka Pengguna, dan Sketsa Arduino
- Langkah 4: Mengukur Arus Pasokan
- Langkah 5: Total Pasokan Saat Ini dan Masa Pakai Baterai
- Langkah 6: Alternatif Pasokan – Bantuan Tenaga Surya, Hanya Baterai, Hanya Tenaga Surya
- Langkah 7: Kesimpulan
Video: BLE Daya Sangat Rendah Mudah di Arduino Bagian 2 -- Monitor Suhu/Kelembaban -- Rev 3: 7 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
Update: 23 November 2020 – Penggantian pertama 2 x baterai AAA sejak 15 Januari 2019 yaitu 22 bulan untuk 2xAAA AlkalineUpdate: 7 April 2019 – Rev 3 dari lp_BLE_TempHumidity, menambahkan plot Tanggal/Waktu, menggunakan pfodApp V3.0.362+, dan pelambatan otomatis saat mengirim data
Pembaruan: 24 Maret 2019 – Rev 2 dari lp_BLE_TempHumidity, menambahkan lebih banyak opsi plot dan i2c_ClearBus
Instruksi ini, Monitor Kelembaban Suhu Daya Sangat Rendah, adalah Bagian 2 dari 3.
Bagian 1 – Membuat Perangkat BLE Berdaya Sangat Rendah menjadi Mudah dengan Arduino mencakup penyiapan Arduino untuk mengkodekan perangkat berdaya rendah nRF52, modul pemrograman, dan mengukur arus suplai. Ini juga mencakup timer dan komparator daya rendah khusus dan input debounce dan menggunakan pfodApp untuk terhubung ke dan mengontrol perangkat nRF52.
Bagian 2 – Monitor Kelembaban Suhu Daya Sangat Rendah, yang satu ini, mencakup penggunaan modul Redbear Nano V2 dan sensor suhu/kelembaban Si7021 untuk membuat baterai berdaya rendah/monitor surya. Ini juga mencakup memodifikasi perpustakaan Si7021 menjadi daya rendah, menyetel perangkat BLE untuk mengurangi konsumsi saat ini <25uA dan merancang tampilan suhu/kelembaban khusus untuk ponsel Anda.
Bagian 3 – Penutup pengganti Redbear Nano V2 menggunakan modul berbasis nRF52 lain, bukan Nano V2. Ini mencakup pemilihan komponen suplai, konstruksi, melepas perlindungan pemrograman chip nRF52, menggunakan pin NFC sebagai GPIO biasa, dan mendefinisikan papan nRF52 baru di Arduino.
Instruksi ini adalah aplikasi praktis Bagian 1 Membangun perangkat BLE Daya Sangat Rendah yang dibuat Mudah dengan Arduino dengan membuat Monitor Suhu dan Kelembaban BLE Daya Sangat Rendah. Monitor akan berjalan selama bertahun-tahun dengan sel koin atau baterai 2 x AAA, bahkan lebih lama dengan bantuan tenaga surya. Tutorial ini mencakup penyetelan parameter BLE untuk konsumsi daya rendah dan cara memberi daya pada perangkat Anda dari baterai ATAU baterai + solar ATAU solar saja.
Selain menampilkan suhu dan kelembaban saat ini, monitor menyimpan pembacaan 36 Jam terakhir dari 10 menit dan 10 hari terakhir dari pembacaan per jam. Ini dapat dipetakan di ponsel Android Anda dan nilainya disimpan ke file log. Tidak diperlukan Pemrograman Android, pfodApp menangani semua itu. Tampilan dan grafik Android sepenuhnya dikontrol oleh sketsa Arduino Anda sehingga Anda dapat menyesuaikannya sesuai kebutuhan.
Papan Redbear Nano V2 digunakan untuk komponen nRF52832 BLE dan papan breakout Sparkfun Si7021 digunakan untuk Sensor Suhu / Kelembaban. Pustaka daya rendah yang dimodifikasi digunakan dengan Si7021. PCB kecil dirancang untuk menampung NanoV2 dan memasok komponen. Namun karena tidak ada komponen yang dipasang di permukaan, Anda dapat dengan mudah membuat ini di papan vero. Tiga versi catu daya tercakup. i) Baterai plus Solar assist, ii) Baterai Saja, iii) Solar Only. Opsi Solar Only tidak memiliki penyimpanan baterai dan hanya akan berjalan jika ada sedikit cahaya. Lampu ruangan yang terang atau lampu meja sudah cukup.
Garis besar
Proyek ini memiliki 4 bagian independen relatif: -
- Pemilihan dan Konstruksi Komponen
- Kode – Perpustakaan Sensor Daya Rendah, Antarmuka Pengguna, dan Sketsa Arduino
- Mengukur Arus Pasokan dan Masa Pakai Baterai
- Alternatif Pasokan – Bantuan Tenaga Surya, Hanya Baterai, Hanya Tenaga Surya
Langkah 1: Pemilihan Komponen
Pemilihan Komponen
Seperti disebutkan di Bagian 1 – Trik untuk mendapatkan solusi daya yang sangat rendah adalah dengan tidak melakukan apa-apa sepanjang waktu, meminimalkan arus melalui resistor pull-up/pull-down eksternal pada input dan tidak memiliki komponen tambahan. Proyek ini akan menggunakan masing-masing trik tersebut untuk mendapatkan solusi daya rendah.
Komponen nRF52832
Chip nRF52832 dapat berjalan dengan catu daya antara 1.7V dan 3.6V (tegangan maksimum absolut 3.9V). Ini berarti Anda dapat memberi daya chip langsung dari sel koin atau 2 baterai AAA x. Namun, adalah bijaksana untuk menambahkan pengatur tegangan untuk melindungi chip dari voltase berlebih. Komponen tambahan ini dilengkapi dengan biaya daya, tetapi dalam kasus papan NanoV2, regulator terpasang, TLV704, mengkonsumsi kurang dari 5,5uA maks, biasanya hanya 3,4uA. Untuk penggunaan daya ekstra kecil ini, Anda mendapatkan perlindungan hingga input suplai 24V.
Komponen Si7021
Sensor Si7021 sendiri biasanya menarik <1uA saat tidak melakukan pengukuran, yaitu dalam mode Siaga, dan hingga 4mA saat mengirimkan data melalui I2C. Karena kami tidak melakukan pengukuran secara terus-menerus, 4mA bukanlah bagian yang signifikan dari arus suplai rata-rata. Mengambil pembacaan yang sangat 30 detik menambahkan kurang dari 1uA ke arus suplai rata-rata, lihat pengukuran arus suplai di bawah ini.
Ada dua papan breakout Si7021 yang tersedia. Satu dari Adafruit dan satu dari Sparkfun. Pandangan sekilas pada kedua papan akan memberi tahu Anda bahwa papan Adafruit memiliki lebih banyak komponen daripada papan Sparkfun, jadi Anda akan cenderung memilih papan Sparkfun. Melihat skema untuk setiap papan menunjukkan bahwa papan Sparkfun hanyalah sensor telanjang dan dua resistor pullup 4k7, sedangkan papan Adafruit memiliki regulator on-board, MIC5225, yang biasanya menarik 29uA sepanjang waktu. Ini signifikan ketika arus keseluruhan untuk sisa rangkaian <30uA. Karena kami sudah memiliki regulator untuk chip nRF52832, komponen tambahan ini tidak diperlukan dan Si7021 dapat diberi daya dari suplai 3.3V itu. Jadi proyek ini akan menggunakan papan breakout Si7021 dari Sparkfun.
meminimalkan arus melalui resistor pull-up/pull-down eksternal pada input
Resistor pullup 4K7 I2C tidak bernilai tinggi dan akan menarik 0,7mA saat ditarik rendah. Ini akan menjadi masalah jika mereka menggunakan input sakelar yang di-ground untuk waktu yang lama. Namun dalam proyek ini arus melalui resistor ini diminimalkan dengan hanya menggunakan antarmuka I2C jarang dan hanya untuk waktu yang singkat. Sebagian besar waktu saluran I2C tidak digunakan dan dalam keadaan tinggi / tri-status sehingga tidak ada arus yang mengalir melalui resistor ini.
Langkah 2: Konstruksi
Proyek ini dibangun di atas PCB kecil, tetapi karena tidak ada komponen SMD, maka dapat dengan mudah dibangun menggunakan papan vero. PCB diproduksi oleh pcbcart.com dari file Gerber ini, TempHumiditySensor_R1.zip PCB adalah tujuan umum yang cukup untuk digunakan untuk proyek BLE lainnya.
Skema ditunjukkan di atas. Berikut adalah versi pdf.
Daftar Suku Cadang
Perkiraan biaya per unit pada Des 2018, ~US$62, tidak termasuk pengiriman dan programmer dari Bagian 1
- Redbear NanoV2 ~ US$17
- Papan breakout Sparkfun Si7021 ~US$8
- 2 x 53mm x 30mm 0.15W 5V sel surya mis. Melayang ~US$1,10
- 1 x PCB TempHumiditySensor_R1.zip ~US$25 untuk diskon 5 www.pcbcart.com ATAU papan Vero (strip tembaga) mis. Jaycar HP9540 ~AUD$5
- 2 x 1N5819 dioda schottky mis. Digikey 1N5819FSCT-ND ~US$1
- 1 x 470R 0.4W 1% resistor mis. Digikey BC3274CT-ND ~US$0,25
- 6 x 6 pin pin header laki-laki mis. Sparkfun PRT-00116 ~US$1,5
- jumper wanita ke wanita mis. Adafruit ID: 1950 ~US$2
- Sekrup nilon 3mm x 12mm, mis. Jaycar HP0140 ~AUD$3
- Kacang nilon 3mm x 12mm, mis. Jaycar HP0146 ~AUD$3
- Pita Pemasangan Permanen Scotch Cat 4010 mis. dari Amazon ~US$6,6
- Dudukan baterai AAA x 2, mis. Sparkfun PRT-14219 ~US$1,5
- 2 x baterai Alkaline AAA 750mA, mis. Sparkfun PRT-09274 ~US$1,0 Baterai ini harus bertahan >2 tahun. Baterai Alkaline Energizer memiliki kapasitas yang lebih tinggi
- Kotak Plastik (ABS) 83mm x 54mm x 31mm, mis. Jaycar HB6005 ~AUD$3
- pfodApp ~US$10
- 1 x 22uF 63V Kapasitor ESR Rendah (Opsional) mis. Jaycar RE-6342 ~AUD$0,5 atau Digikey P5190-ND ~US$0,25
Konstruksinya lurus ke depan. Tempat baterai dan sel surya diamankan ke kotak plastik dengan pita dua sisi tugas berat.
Perhatikan kabel tautan Gnd dari CLK ke GND di bagian yang sudah jadi. Ini diinstal SETELAH pemrograman untuk mencegah noise pada input CLK memicu chip nRF52 ke mode debug arus tinggi
Langkah 3: Kode – Perpustakaan Sensor Daya Rendah, Antarmuka Pengguna, dan Sketsa Arduino
Unduh kode zip, lp_BLE_TempHumidity_R3.zip, dan unzip ke direktori Arduino Sketches Anda. Anda juga perlu menginstal pustaka lp_So7021 dari file zip ini dan juga menginstal pustaka pfodParser.
Perpustakaan Sensor Daya Rendah, lp_Si7021
Baik Adafruit dan Sparkfun menyediakan pustaka dukungan untuk mengakses sensor Si7021, namun kedua pustaka tersebut tidak cocok untuk penggunaan daya yang sangat rendah. Keduanya menggunakan delay(25) dalam kode untuk menunda pembacaan sensor saat sedang melakukan pengukuran. Seperti disebutkan di Bagian 1 Penundaan adalah Jahat. Penundaan Arduino () hanya membuat mikroprosesor berjalan menggunakan daya sementara menunggu waktu tunda habis. Ini melanggar aturan pertama BLE daya rendah, tidak melakukan apa-apa hampir sepanjang waktu. Pustaka lp_Si7021 pengganti, menggantikan semua penundaan dengan lp_timers yang membuat mikroprosesor tertidur sambil menunggu sensor menyelesaikan pengukurannya.
Berapa banyak perbedaan yang dibuat oleh perpustakaan lp_Si7021? Menggunakan perpustakaan dukungan SparkFun Si7021 asli dan mengambil satu bacaan per detik tanpa cetakan Serial, menarik rata-rata ~ 1,2mA. Mengganti pustaka Sparkfun dengan pustaka lp_Si7021 mengurangi arus rata-rata menjadi ~10uA, yaitu 100 kali lebih sedikit. Dalam proyek ini, tingkat pengukuran tercepat adalah sekali setiap 30 detik saat ponsel terhubung, yang menghasilkan arus sensor rata-rata kurang dari 1uA. Ketika tidak ada koneksi BLE, laju pengukuran adalah sekali setiap 10 menit dan arus suplai sensor rata-rata dapat diabaikan.
Antarmuka pengguna
Di atas adalah tampilan layar utama dan tampilan yang diperbesar dari riwayat per jam 10 hari. Plot dapat diperbesar dan digeser ke dua arah, menggunakan dua jari.
Antarmuka pengguna dikodekan dalam sketsa Arduino dan kemudian dikirim ke pfodApp pada koneksi pertama di mana cache untuk penggunaan berulang dan pembaruan. Tampilan grafis dibangun dari menggambar primitif. Lihat Kontrol Arduino Kustom untuk Android untuk tutorial tentang cara membuat kontrol Anda sendiri. File Thermometer, RHGauge dan Button berisi perintah menggambar untuk item tersebut.
Catatan: Tidak ada jika tampilan ini dibangun ke dalam pfodApp. Seluruh tampilan sepenuhnya dikendalikan oleh kode di sketsa Arduino Anda
Metode sendDrawing_z() dalam sketsa lp_BLE_TempHumidity_R3.ino mendefinisikan antarmuka pengguna.
void sendDrawing_z() { dwgs.start(50, 60, dwgs. WHITE); // latar belakang default ke PUTIH jika dihilangkan yaitu mulai (50, 60); parser.sendRefreshAndVersion(30000); // permintaan ulang dwg setiap 30 detik. ini diabaikan jika tidak ada versi parser yang disetel // sentuh tombol di atas untuk memaksa pembaruan tampilan dwgs.touchZone().cmd('u').size(50, 39).send(); dwgs.pushZero(35, 22, 1.5); // pindahkan nol ke pusat dwg ke 35, 22 dan skala 1,5 kali rhGauge.draw(); // menggambar kontrol dwgs.popZero(); dwgs.pushZero(18, 33); // pindahkan nol ke pusat dwg ke 18, skala 33 adalah 1 (default) thermometer.draw(); // menggambar kontrol dwgs.popZero();
dwgs.pushZero(12.5, 43, 0.7); // pindahkan nol ke pusat dwg ke 12,5, 43 dan skala 0,7
hrs8PlotButton.draw(); // menggambar kontrol dwgs.popZero(); dwgs.pushZero(37.5, 43, 0.7); // pindahkan nol ke pusat dwg ke 37,5, 43 dan skala 0,7 hari1PlotButton.draw(); // menggambar kontrol dwgs.popZero();
dwgs.pushZero(12.5, 54, 0.7); // pindahkan nol ke pusat dwg ke 12,5, 54 dan skala 0,7
hari3PlotButton.draw(); // menggambar kontrol dwgs.popZero(); dwgs.pushZero(37.5, 54, 0.7); // pindahkan nol ke pusat dwg ke 37,5, 54 dan skala 0,7 hari10PlotButton.draw(); // menggambar kontrol dwgs.popZero(); dwgs.end(); }
Perintah pushZero mengubah asal dan penskalaan untuk menggambar komponen berikutnya. Ini memungkinkan Anda dengan mudah mengubah ukuran dan posisi tombol dan pengukur.
Pada koneksi pertama, tampilan awal membutuhkan waktu 5 atau 6 detik untuk mengunduh ~800 byte yang menentukan tampilan. pfodApp men-cache tampilan sehingga pembaruan di masa mendatang hanya perlu mengirim perubahan, mengukur posisi, dan bacaan. Pembaruan ini hanya membutuhkan beberapa detik untuk mengirim 128 byte perlu memperbarui tampilan.
Ada lima (5) zona sentuh aktif yang ditentukan di layar. Setiap tombol memiliki satu yang ditentukan dalam metode draw(), sehingga Anda dapat mengkliknya untuk membuka plot masing-masing, dan bagian atas layar dikonfigurasi sebagai zona sentuh ketiga
dwgs.touchZone().cmd('u').size(50, 39).send();
Saat Anda mengklik layar di atas tombol, perintah 'u' dwg dikirim ke sketsa Anda untuk memaksa pengukuran baru dan pembaruan layar. Biasanya saat terhubung, pembaruan hanya terjadi setiap 30 detik. Setiap klik atau penyegaran gambar memaksa pengukuran baru. Respons dari sketsa Arduino ke pfodApp ditunda hingga pengukuran baru selesai (~25mS) sehingga nilai terbaru dapat dikirim dalam pembaruan.
Sketsa Arduino
Sketsa Arduino, lp_BLE_TempHumidity_R3.ino, adalah versi yang disempurnakan dari contoh sketsa yang digunakan di Bagian 1. Sketsa lp_BLE_TempHumidity_R3.ino menggantikan menu dengan gambar yang ditunjukkan di atas. Ini juga menambahkan dukungan sensor lp_Si7021 dan array data untuk menyimpan pengukuran historis 10 menit dan setiap jam.
Komplikasi utama dalam sketsa lp_BLE_TempHumidity_R3.ino adalah menangani pengiriman data plot. Saat pengukuran dilakukan, readRHResults() menangani pengumpulan hasil dan menyimpannya ke array historis. Array panjangnya 120 tetapi ketika data dikirim, 30 titik data pertama adalah untuk interval waktu yang lebih baik.
Ada beberapa poin yang perlu diperhatikan saat mengirim 200 poin plot ganjil untuk ditampilkan: -
- Setiap titik data memiliki panjang ~25 byte, dalam format teks CSV. Jadi 150 poin adalah 3750 byte data. Kelas lp_BLESerial memiliki buffer 1536 byte, 1024 di antaranya cukup besar untuk pesan pfod terbesar. 512 byte lainnya dicadangkan untuk mengirim data. Setelah data historis telah mengisi 512 byte, pengiriman data lebih lanjut ditunda sampai ada ruang di buffer.
- Untuk menghindari data plot memperlambat pembaruan tampilan utama, data plot hanya dikirim saat layar plot ditampilkan. Setelah pengguna beralih kembali ke layar utama, pengiriman data plot dihentikan sementara. Pengiriman data plot dilanjutkan ketika pengguna mengklik tombol plot untuk menampilkan plot lagi.
- Plot sejarah dimulai dari 0 (sekarang) dan mundur dalam waktu. Jika tidak ada pengukuran baru sejak plot terakhir ditampilkan, data sebelumnya yang sudah diunduh langsung ditampilkan kembali. Jika ada pengukuran baru, maka ditambahkan ke data plot sebelumnya.
- Saat monitor pertama kali dinyalakan, tidak ada pembacaan historis dan 0 disimpan dalam array sebagai pembacaan yang tidak valid. Saat plot ditampilkan, pembacaan yang tidak valid hanya dilewati, menghasilkan plot yang lebih pendek.
Celcius dan Fahrenheit
Sketsa lp_BLE_TempHumidity_R3.ino menampilkan dan memplot data dalam Celcius. Untuk mengonversi hasil ke Fahrenheit, ganti semua kemunculan
parser.print(sensor. Temp_RawToFloat(..
dengan
parser.print(sensor. CtoF(sensor. Temp_RawToFloat(…
Dan ganti simbol unicode degC di Oktal \342\204\203 dengan simbol degF \342\204\211
pfodApp akan menampilkan Unicode apa pun yang dapat Anda tampilkan di ponsel.
Lihat Menggunakan karakter Non-ASCII di Arduino untuk lebih jelasnya. Ubah juga pengaturan MIN_C, MAX_C di Thermometer.h. Terakhir sesuaikan batas plot sesuai keinginan, mis. ubah |Suhu C~32~8~derajat C|
untuk mengatakan
|Suhu F~90~14~derajat F|
Langkah 4: Mengukur Arus Pasokan
Menggunakan pustaka lp_Si7021, bahkan melakukan pengukuran suhu/kelembaban setiap 10 detik hanya berkontribusi ~1uA pada arus suplai rata-rata, jadi faktor utama dalam arus suplai dan masa pakai baterai adalah arus yang digunakan oleh iklan BLE dan koneksi serta transmisi data.
Hubungkan papan Temperatur/Kelembaban ke Programmer yang dijelaskan di Bagian 1 seperti yang ditunjukkan di atas.
Dengan sel surya dan baterai dicabut, Vin dan Gnd terhubung ke Vdd dan Gnd programmer (kabel Kuning dan Hijau) dan SWCLK dan SWDIO terhubung ke Clk dan SIO papan header programmer (kabel Biru dan Merah Muda)
Anda sekarang dapat memprogram NanoV2 dan mengukur arus suplai seperti yang dijelaskan di Bagian 1.
Instal pustaka Si7021 berdaya rendah dari file zip ini, lp_Si7021.zip dan instal pustaka pfodParser dan unzip lp_BLE_TempHumidity_R3.zip ke direktori sketsa Arduino Anda dan program papan Temp/Humditiy dengan lp_BLE_TempHumidity_R3.ino
Seperti disebutkan di atas, kontribusi sensor adalah <1uA, rata-rata, pada tingkat pengukuran tertinggi yang digunakan dalam proyek ini, jadi parameter iklan dan koneksi BLE merupakan faktor penentu masa pakai baterai.
Parameter iklan dan koneksi BLE yang mempengaruhi konsumsi saat ini adalah:-Tx Power, Interval Iklan, Interval Koneksi Maks dan Min, dan Latensi Budak.
Catatan: Menggunakan koneksi di atas ada dua (2) regulator di suplai, satu di papan NanoV2 melalui Vin dan MAX8881 di suplai programmer. Ini berarti arus suplai yang diukur akan ~5uA lebih tinggi dari yang sebenarnya, karena regulator kedua. Nilai yang dikutip di bawah ini adalah arus terukur dikurangi 5uA ekstra ini.
Tx Power
Efek Tx Power mensuplai arus baik saat terhubung maupun saat beriklan (tidak terhubung). Proyek ini menggunakan pengaturan daya maksimum (+4) dan memberikan jangkauan terbaik dan kekebalan kebisingan terbesar untuk koneksi yang paling andal. Anda dapat menggunakan metode lp_BLESerial setTxPower() untuk mengubah pengaturan daya. Nilai yang valid adalah, dalam peningkatan daya, -40, -30, -20, -16, -12, -8, -4, 0 +4. Anda harus memanggil metode lp_BLESerial begin() SEBELUM Anda memanggil setTxPower(). Lihat sketsa lp_BLE_TempHumidity_R3.ino.
Anda dapat bereksperimen dengan mengurangi Tx Power, tetapi komprominya adalah jangkauan yang lebih pendek dan lebih banyak koneksi putus karena gangguan. Dalam proyek ini Tx Power dibiarkan pada defaultnya, +4. Seperti yang akan Anda lihat di bawah, bahkan dengan pengaturan ini, arus suplai yang sangat rendah masih mungkin terjadi.
Interval Iklan
Untuk Daya Tx yang diberikan, ketika tidak ada koneksi, Interval Iklan menetapkan konsumsi arus rata-rata. Rentang yang direkomendasikan adalah 500 hingga 1000mS. Di sini 2000mS digunakan. Komprominya adalah bahwa interval iklan yang lebih lama berarti lebih lambat bagi ponsel Anda untuk menemukan perangkat dan mengatur koneksi. Secara internal, interval iklan diatur dalam kelipatan 0,625mS dalam rentang 20mS hingga 10,24dtk. Metode lp_BLESerial setAdvertisingInterval() menggunakan mS sebagai argumen, untuk kenyamanan. Untuk interval iklan +4 TxPower dan 2000mS, konsumsi saat ini adalah ~18uA. Untuk interval iklan 1000mS, itu ~29uA. Rev 2 menggunakan interval iklan 2000mS tetapi ini menghasilkan koneksi yang lambat. Rev 3 diubah menjadi interval iklan 1000mS untuk membuat koneksi lebih cepat.
Interval Koneksi Maks dan Min
Setelah koneksi dibuat, interval koneksi menentukan seberapa sering ponsel menghubungi perangkat. lp_BLESerial setConnectionInterval() memungkinkan Anda menyetel maks dan min yang disarankan, namun ponsel mengontrol interval koneksi sebenarnya. Untuk kenyamanan, argumen ke setConnectionInterval() dalam mS, tetapi secara internal interval koneksi dalam kelipatan 1,25mS, dalam kisaran 7,5mS hingga 4dtk.
Pengaturan default adalah setConnectionInterval(100, 150) yaitu min 100mS hingga maksimal 150mS. Meningkatkan nilai-nilai ini mengurangi arus suplai saat terhubung, tetapi komprominya adalah transmisi data yang lebih lambat. Setiap pembaruan layar membutuhkan sekitar 7 pesan BLE, sementara pengukuran 10 menit 36 jam penuh membutuhkan sekitar 170 pesan BLE. Jadi meningkatkan interval koneksi memperlambat pembaruan layar dan tampilan plot.
Kelas lp_BLESerial memiliki buffer pengiriman 1536 byte dan hanya mengirim satu blok 20 byte dari buffer ini, setiap interval koneksi maks untuk mencegah membanjiri link BLE dengan data. Juga saat mengirim data plot, sketsa hanya mengirim data hingga 512 byte menunggu untuk dikirim kemudian menunda pengiriman lebih banyak data hingga beberapa data telah dikirim. Ini menghindari banjir mengirim buffer. Pembatasan pengiriman ini membuat transmisi data ke seluler dapat diandalkan, tetapi tidak dioptimalkan secara maksimal melalui put.
Dalam proyek ini, interval koneksi dibiarkan sebagai nilai default.
Latensi Budak
Ketika tidak ada data untuk dikirim ke ponsel, perangkat dapat secara opsional mengabaikan beberapa pesan koneksi dari ponsel. Ini menghemat Tx Power dan arus suplai. Pengaturan Slave Latency adalah jumlah pesan koneksi yang harus diabaikan. Standarnya adalah 0. Metode lp_BLESerial setSlaveLatency() dapat digunakan untuk mengubah pengaturan ini.
Latensi Slave default 0 memberikan arus suplai ~50uA, mengabaikan pembaruan layar setiap 30 detik, tetapi menyertakan pesan keepAlive selama 5 detik. Mengatur Latensi Slave ke 2 memberikan arus suplai terhubung rata-rata ~25uA. Pengaturan Slave Latency 4 memberi ~ 20uA. Pengaturan yang lebih tinggi tampaknya tidak mengurangi arus suplai sehingga pengaturan Slave Latency 4 digunakan.
Saat terhubung, setiap 30 detik pfodApp meminta pembaruan tampilan. Ini memaksa pengukuran sensor dan mengirimkan kembali data untuk memperbarui tampilan grafis. Pembaruan ini menghasilkan ~66uA ekstra selama 2 detik setiap 30 detik. Itu adalah rata-rata 4.4uA selama 30 detik. Menambahkan ini ke 20uA, memberikan arus suplai koneksi rata-rata ~25uA
Langkah 5: Total Pasokan Saat Ini dan Masa Pakai Baterai
Menggunakan pengaturan di atas, seperti yang diatur dalam lp_BLE_TempHumidity_R3.ino, Arus Total Pasokan saat Terhubung dan memperbarui tampilan setiap 30 detik, kira-kira 25uA. Saat tidak terhubung, kira-kira 29uA.
Untuk menghitung masa pakai baterai, penarikan arus terus-menerus sebesar ~29uA diasumsikan.
Berbagai baterai memiliki kapasitas dan karakteristik tegangan yang berbeda. Baterai yang dipertimbangkan di sini adalah sel koin CR2032, sel koin CR2450 (N), 2 x AAA Alkaline, 2 x AAA Lithium dan LiPo.
Ringkasan Baterai
Jika menggunakan Solar Assist maka tambahkan 50% ke angka masa pakai baterai ini (dengan asumsi 8 jam sehari terang)
Catatan: Kapasitor LowESR 22uF (C1), selain kapasitor NanoV2 22uF on board, menyimpan arus Sel Surya dan kemudian memasoknya untuk pulsa arus TX. Jika tidak, baterai memasok sebagian arus TX. LowESR 22uF ekstra ini menambahkan sekitar 10% ke arus baterai saat sel surya tidak disuplai, tetapi juga memperpanjang masa pakai baterai dengan mengkompensasi kenaikan resistansi internal baterai saat baterai mencapai akhir masa pakainya. Pengukuran di bawah ini dilakukan TANPA kapasitor 22uF tambahan.
CR2032 – 235mAHr – masa pakai baterai 10 bulanCR2450 (N) – 650mAHr (540mAHr)– masa pakai baterai 2,3 tahun (2thn)2 x AAA Alkaline – 1250mAHr – masa pakai baterai 3,8.tahun2 x AAA Lithium – 1200mAHr – masa pakai baterai 4,7 tahunLiPo dapat diisi ulang – tidak disarankan karena self-discharge yang tinggi.
CR2032
Sel koin ini biasanya memiliki kapasitas 235mAHr (Baterai Energizer), tegangan nominal 3V dan tegangan pelepasan tertentu 2V. Ini menyiratkan masa pakai baterai 8100 jam atau ~ 0,9 tahun. Namun resistansi sel internal meningkat saat baterai mencapai akhir masa pakainya sehingga mungkin tidak dapat memberikan pulsa arus Tx puncak. Kapasitor suplai yang lebih besar dapat digunakan untuk mengurangi efek ini, tetapi katakanlah umur 10 bulan.
CR2450 (N)
Sel koin ini memiliki kapasitas biasanya 620mAHr (540mAHr untuk CR2450N), tegangan nominal 3V dan tegangan pelepasan tertentu 2V. Ini menyiratkan masa pakai baterai 22.400 jam atau ~2tahun 6m (18600jam ~2tahun 2m untuk CR2450N). Namun resistansi sel internal meningkat saat baterai mencapai akhir masa pakainya sehingga mungkin tidak dapat memberikan pulsa arus Tx puncak. Kapasitor suplai yang lebih besar dapat digunakan untuk mengurangi efek ini, tetapi katakanlah masa pakai 2 tahun 4 m (2 tahun N).
Catatan: Versi CR2450N memiliki bibir yang lebih tebal yang membantu mencegah pemasangan yang salah pada dudukan CR2450N. Anda dapat memasukkan sel CR2450N dan CR2450 ke dalam dudukan CR2450 tetapi Anda tidak dapat memasukkan sel CR2450 ke dalam dudukan CR2450N
2 x sel AAA Alkaline
Baterai ini memiliki kapasitas sekitar 1250mAHr (Energizer Battery) untuk arus yang sangat rendah, tegangan nominal 2x1.5V = 3V dan tegangan pelepasan yang ditentukan 2x0.8V = 1.6V. Tetapi tegangan pelepasan yang ditentukan ini lebih kecil dari tegangan operasi sensor Si7021 (1.9V) sehingga baterai hanya dapat digunakan hingga ~1V masing-masing. Ini mengurangi kapasitas sekitar 10% hingga 15% yaitu ~ 1000mAHr.
Ini menyiratkan masa pakai baterai 34, 500 jam atau ~ 4 tahun. Namun resistansi sel internal meningkat saat baterai mencapai akhir masa pakainya sehingga mungkin tidak dapat menyediakan pulsa arus Tx puncak. Kapasitor suplai yang lebih besar dapat digunakan untuk mengurangi efek ini, tetapi katakanlah masa pakai 3 tahun 10m. Catatan Baterai alkaline memiliki self discharge 2% hingga 3% per tahun.
2 x sel Lithium AAA
Baterai ini memiliki kapasitas sekitar 1200mAHr (Energizer Battery), tegangan nominal 2x1.7V = 3.4V, pada arus rendah, dan tegangan keluaran 2x1.4V = 2.4V. Ini berarti masa pakai baterai 41.400 jam atau 4 tahun 8m.
Baterai Isi Ulang LiPo
Baterai ini tersedia dalam berbagai kapasitas mulai dari 100mAHr hingga 2000mAHr, dalam format datar, dan memiliki voltase terisi 4.2V dan voltase habis >2.7V. Namun mereka memiliki self-discharge yang tinggi 2% -3%/bulan (yaitu 24% hingga 36% per tahun) sehingga tidak cocok untuk aplikasi ini seperti baterai lainnya.
Langkah 6: Alternatif Pasokan – Bantuan Tenaga Surya, Hanya Baterai, Hanya Tenaga Surya
Baterai plus Solar Assist
Konstruksi di atas menggunakan suplai Battery plus Solar Assist. Ketika panel surya menghasilkan tegangan lebih dari tegangan baterai, sel surya akan menyalakan monitor, sehingga memperpanjang masa pakai baterai. Biasanya masa pakai baterai dapat diperpanjang hingga 50% lagi.
Panel surya yang digunakan berukuran kecil, 50mm x 30mm, murah, ~$0,50, dan daya rendah. Mereka adalah panel 5V nominal, tetapi membutuhkan sinar matahari langsung penuh untuk menghasilkan 5V. Dalam proyek ini dua panel dihubungkan secara seri sehingga menempatkan monitor di suatu tempat di dekat jendela, jauh dari sinar matahari langsung, cukup untuk mengganti daya baterai. Bahkan ruangan yang cukup terang, atau lampu meja, sudah cukup bagi sel surya untuk menghasilkan>3,3V pada>33uA dan mengambil alih dari baterai.
Panel uji sederhana dibangun untuk menentukan di mana Monitor Suhu / Kelembaban dapat ditempatkan, di luar sinar matahari dan masih bertenaga surya. Seperti yang Anda lihat dari foto di atas, dua panel yang terhubung ke resistor 100K menghasilkan 5,64V melintasi 100K, yaitu arus 56uA pada 5,64V. Ini lebih dari cukup untuk mengambil alih daya monitor dari baterai. Setiap pembacaan voltase di atas voltase baterai nominal 3V berarti sel surya akan memberi daya pada monitor, bukan baterai.
Dua dioda dalam rangkaian Monitor Kelembaban Suhu mengisolasi sel surya dan baterai dari satu sama lain dan menjaga agar tidak menghubungkannya dalam polaritas terbalik. 10V 1W zener dan resistor seri 470R melindungi regulator terpasang NanoV2 dari tegangan berlebih dari dua sel surya di bawah sinar matahari penuh, terutama jika sel 12V digunakan sebagai pengganti sel 5V. Dalam operasi normal pada <5V, zener 10V hanya menarik ~1uA.
Baterai Saja
Untuk Pasokan Baterai Saja, hilangkan saja R1, D1 dan D3 dan sel surya. Anda juga dapat mengganti D1 dengan sepotong kawat jika Anda tidak ingin perlindungan polaritas terbalik.
Hanya Surya
Menghidupkan monitor hanya dari Sel Surya, tanpa baterai, memerlukan rangkaian catu daya yang berbeda. Masalahnya adalah saat monitor akan beroperasi pada 29uA, saat dihidupkan, nRF52 menarik ~5mA selama 0,32 detik. Sirkuit yang ditunjukkan di atas (versi pdf) menahan regulator MAX8881 hingga kapasitor input, 2 x 1000uF, mengisi daya hingga 4.04V. Kemudian MAX6457 melepaskan input SHDN MAX8881 untuk menyalakan nRF52 (NanoV2) Kapasitor 2 x 1000uF memasok arus start up yang diperlukan.
Ini memungkinkan monitor menyala segera setelah ada cukup tenaga surya untuk tetap bekerja pada 29uA.
Langkah 7: Kesimpulan
Tutorial ini telah menyajikan Monitor Kelembaban Suhu bertenaga baterai/solar sebagai contoh proyek BLE berdaya sangat rendah di Arduino untuk chip nRF52832. Arus suplai ~29uA yang dicapai dengan menyetel parameter koneksi. Ini menghasilkan masa pakai baterai sel koin CR2032 melebihi 10 bulan. Lebih lama untuk sel koin dan baterai berkapasitas lebih tinggi. Menambahkan dua sel surya murah dengan mudah memperpanjang masa pakai baterai hingga 50% atau lebih. Lampu ruangan yang terang atau lampu meja sudah cukup untuk menyalakan monitor dari sel surya.
Sirkuit daya khusus dihadirkan untuk memungkinkan monitor dijalankan murni dari sel surya berkapasitas rendah.
pfodDesigner gratis memungkinkan Anda mendesain menu/sub-menu, memplot tanggal/waktu dan data log, lalu menghasilkan sketsa Arduino berdaya rendah untuk Anda. Di sini antarmuka khusus dikodekan menggunakan primitif menggambar pfodApp. Menghubungkan dengan pfodApp menampilkan antarmuka pengguna dan memperbarui pembacaan saat monitor menggunakan ~29uA
Tidak diperlukan pemrograman Android. pfodApp menangani semua itu.