İçindekiler:

Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3: 7 Adım
Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3: 7 Adım

Video: Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3: 7 Adım

Video: Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3: 7 Adım
Video: Kayra Beylerin anlatımı ile LORA İsmail Beylerin anlatımı ile Winlink HF VHF UHF her yerde mail box. 2024, Kasım
Anonim
Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3
Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3
Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3
Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3
Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3
Arduino Bölüm 2'de Kolay Çok Düşük Güç BLE -- Sıcaklık/Nem Monitörü -- Rev 3

Güncelleme: 23 Kasım 2020 – 15 Ocak 2019'dan bu yana 2 x AAA pilin ilk değişimi, yani 2xAAA Alkalin için 22 ay Güncelleme: 7 Nisan 2019 – lp_BLE_TempHumidity Rev 3, pfodApp V3.0.362+ kullanarak Tarih/Saat grafikleri ekler ve gönderirken otomatik kısma veri

Güncelleme: 24 Mart 2019 – lp_BLE_TempHumidity Rev 2, daha fazla çizim seçeneği ve i2c_ClearBus ekler

Bu talimat verilebilir, Çok Düşük Güç Sıcaklığı Nem Monitörü, Bölüm 2/3'tür.

Bölüm 1 – Çok Düşük Güçlü BLE cihazlarının Arduino ile Oluşturulması, Arduino'yu nRF52 düşük güçlü cihazları kodlamak için ayarlamayı, programlama modülünü ve besleme akımının ölçülmesini kapsar. Ayrıca, özel düşük güçlü zamanlayıcılar ve karşılaştırıcılar ile geri dönen girişleri ve nRF52 cihazına bağlanmak ve cihazı kontrol etmek için pfodApp kullanımını da kapsar.

Bölüm 2 – Çok Düşük Güç Sıcaklığı Nem Monitörü, bu, bir Redbear Nano V2 modülü ve bir Si7021 sıcaklık/nem sensörünün düşük güçlü bir pil/güneş monitörü oluşturmak için kullanılmasını kapsar. Ayrıca, Si7021 kitaplığının düşük güç olacak şekilde değiştirilmesini, BLE cihazının mevcut tüketimini <25uA azaltacak şekilde ayarlanmasını ve cep telefonunuz için özel bir sıcaklık/nem ekranı tasarlamayı da kapsar.

Bölüm 3 – Bir Redbear Nano V2 Yedek, Nano V2 yerine diğer nRF52 tabanlı modülleri kullanır. Tedarik bileşenlerinin seçilmesini, yapımını, nRF52 çip programlama korumasını kaldırmayı, NFC pinlerini normal GPIO olarak kullanmayı ve Arduino'da yeni bir nRF52 kartı tanımlamayı kapsar.

Bu talimat, Çok Düşük Güçlü BLE Sıcaklık ve Nem Monitörü oluşturarak Arduino ile Kolaylaştırılan Kısım 1 Bina Çok Düşük Güçlü BLE cihazlarının pratik bir uygulamasıdır. Monitör, Coin Cell veya 2 x AAA pille yıllarca, güneş enerjisiyle daha da uzun süre çalışır. Bu eğitici, düşük güç tüketimi için BLE parametrelerinin ayarlanmasını ve cihazınıza pil VEYA pil + güneş VEYA yalnızca güneş enerjisiyle nasıl güç sağlanacağını kapsar.

Mevcut sıcaklık ve nemi görüntülemenin yanı sıra monitör, son 36 Saatlik 10 dakikalık okumaları ve son 10 günlük saatlik okumaları saklar. Bunlar, Android mobil cihazınızda çizelgelenebilir ve bir günlük dosyasına kaydedilen değerler. Android Programlaması gerekmez, pfodApp bunların hepsini halleder. Android ekranı ve grafiği tamamen Arduino çiziminiz tarafından kontrol edilir, böylece gerektiği gibi özelleştirebilirsiniz.

nRF52832 BLE bileşeni için bir Redbear Nano V2 kartı ve Sıcaklık / Nem Sensörü için bir Sparkfun Si7021 devre kartı kullanılır. Si7021 ile değiştirilmiş bir düşük güçlü kitaplık kullanılır. NanoV2'yi tutmak ve bileşenleri beslemek için küçük bir PCB tasarlanmıştır. Ancak kullanılan yüzeye monte bileşen olmadığından, bunu vero kartında da kolayca oluşturabilirsiniz. Üç güç kaynağı versiyonu kapsanmaktadır. i) Pil artı Güneş enerjisi desteği, ii) Yalnızca Pil, iii) Yalnızca Güneş Enerjisi. Yalnızca Solar seçeneğinde pil deposu yoktur ve bu nedenle yalnızca biraz ışık olduğunda çalışır. Aydınlık bir oda lambası veya masa lambası yeterlidir.

anahat

Bu projenin 4 göreceli bağımsız bölümü vardır: -

  1. Bileşen Seçimi ve Yapımı
  2. Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch
  3. Besleme Akımı ve Pil Ömrünü Ölçme
  4. Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar

Adım 1: Bileşen Seçimi

Bileşen Seçimi

Bölüm 1'de bahsedildiği gibi – Gerçekten düşük güçte bir çözüm elde etmenin püf noktası çoğu zaman hiçbir şey yapmamak, girişlerdeki harici yukarı/aşağı çekme dirençleri aracılığıyla akımı en aza indirmek ve herhangi bir ekstra bileşene sahip olmamaktır. Bu proje, düşük güçlü bir çözüm elde etmek için bu hilelerin her birini kullanacak.

nRF52832 bileşeni

nRF52832 yongası, 1,7V ile 3,6V (mutlak maksimum voltaj 3,9V) arasında bir güç kaynağı ile çalışabilir. Bu, çipi doğrudan bir madeni para hücresinden veya 2 x AAA pilden çalıştırabileceğiniz anlamına gelir. Ancak çipi aşırı volttan korumak için bir voltaj regülatörü eklemek akıllıca olur. Bu ekstra bileşen bir güç maliyeti ile birlikte gelir, ancak NanoV2 kartı durumunda yerleşik regülatör TLV704, maksimum 5.5uA'dan az, tipik olarak sadece 3.4uA tüketir. Bu küçük ekstra güç kullanımı için 24V'a kadar besleme girişleri için koruma elde edersiniz.

Si7021 bileşeni

Si7021 sensörünün kendisi, bir ölçüm yapmadığında, yani Bekleme modundayken tipik olarak <1uA ve verileri I2C aracılığıyla iletirken 4mA'ya kadar çeker. Sürekli ölçüm yapmadığımız için 4mA ortalama besleme akımının önemli bir parçası değildir. 30 saniyede bir okuma yapmak, ortalama besleme akımına 1uA'dan daha az ekler, aşağıdaki besleme akımı ölçümlerine bakın.

Kolayca temin edilebilen iki Si7021 koparma kartı vardır. Biri Adafruit'ten, diğeri Sparkfun'dan. İki panoya hızlı bir bakış, Adafruit panosunun Sparkfun panosundan çok daha fazla bileşeni olduğunu söyleyecektir, bu nedenle Sparkfun panosunu seçmeye meyilli olursunuz. Her bir kartın şemalarına bakıldığında, Sparkfun kartının yalnızca çıplak sensör ve iki adet 4k7 çekme direnci olduğunu, Adafruit kartında ise yerleşik bir MIC5225 regülatörü olduğunu ve tipik olarak her zaman 29uA çektiğini gösterir. Bu, devrenin geri kalanı için tüm aşırı akım <30uA olduğunda önemlidir. Zaten nRF52832 yongası için bir regülatörümüz olduğundan, bu ekstra bileşene gerek yoktur ve Si7021 bu 3.3V beslemeden güç alabilir. Dolayısıyla bu proje, Sparkfun'un Si7021 devre kartını kullanacak.

girişlerdeki harici yukarı çekme/aşağı çekme dirençleri aracılığıyla akımı en aza indirin

4K7 I2C çekme dirençleri özellikle yüksek değerde değildir ve düşük çekildiğinde 0,7mA çeker. Bu, uzun süreler boyunca topraklanmış bir anahtar girişindeyse sorun olur. Ancak bu projede, bu dirençlerden geçen akım, yalnızca I2C arayüzünü seyrek olarak ve yalnızca kısa bir süre için kullanarak en aza indirilir. Çoğu zaman I2C hatları kullanımda değildir ve yüksek / üç durumludur, bu nedenle bu dirençlerden akım geçmez.

Adım 2: İnşaat

Yapı
Yapı
Yapı
Yapı
Yapı
Yapı

Proje küçük bir PCB üzerine inşa edilmiştir, ancak SMD bileşenleri olmadığı için vero kartı kullanılarak da kolayca oluşturulabilir. PCB, pcbcart.com tarafından bu Gerber dosyalarından TempHumiditySensor_R1.zip üretilmiştir. PCB, diğer BLE projeleri için kullanılmaya yetecek kadar genel amaçlıdır.

Şematik yukarıda gösterilmiştir. İşte bir pdf versiyonu.

Parça listesi

Aralık 2018 itibarıyla birim başına yaklaşık maliyet, ~62 ABD Doları, nakliye ve Bölüm 1'deki programcı hariç

  • Redbear NanoV2 ~ US$17
  • Sparkfun Si7021 koparma tahtası ~8 ABD Doları
  • 2 x 53mm x 30mm 0.15W 5V güneş pilleri örn. Aşırı Uçuş ~ 1,10 ABD Doları
  • 1 x PCB TempHumiditySensor_R1.zip 5 indirim için ~25 ABD Doları www.pcbcart.com VEYA Vero kartı (bakır şerit) ör. Jaycar HP9540 ~5 AUD
  • 2 x 1N5819 schottky diyot, ör. Digikey 1N5819FSCT-ND ~1 ABD Doları
  • 1 x 470R 0,4W %1 direnç ör. Digikey BC3274CT-ND ~0,25 ABD Doları
  • 6 x 6 pinli erkek başlık pinleri örn. Sparkfun PRT-00116 ~ 1,5 ABD Doları
  • kadından kadına jumper örn. Adafruit ID: 1950 ~ 2 ABD Doları
  • 3 mm x 12 mm naylon vidalar, örn. Jaycar HP0140 ~3 AUD
  • 3mm x 12mm naylon somunlar, örn. Jaycar HP0146 ~3 AUD
  • Scotch Kalıcı Montaj Bandı Cat 4010 ör. Amazon'dan ~6,6 ABD doları
  • AAA x 2 pil tutucu, örn. Sparkfun PRT-14219 ~1.5 ABD Doları
  • 2 x AAA 750mA Alkalin pil, örn. Sparkfun PRT-09274 ~US$1,0 Bu piller >2 yıl dayanmalıdır. Energizer Alkalin Piller daha yüksek kapasiteye sahiptir
  • Plastik Kutu (ABS) 83mm x 54mm x 31mm, ör. Jaycar HB6005 ~3 AUD$
  • pfodApp ~10 ABD Doları
  • 1 x 22uF 63V Düşük ESR Kondansatörü (Opsiyonel) ör. Jaycar RE-6342 ~ 0,5 ABD Doları veya Digikey P5190-ND ~ 0,25 ABD Doları

İnşaat düz ileri. Pil tutucu ve güneş pilleri, plastik kutuya ağır hizmet tipi çift taraflı bantla sabitlenmiştir.

Bitmiş kısımda CLK'dan GND'ye giden Gnd bağlantı kablosunu not edin. Bu, CLK girişindeki gürültünün nRF52 yongasını yüksek akım hata ayıklama moduna tetiklemesini önlemek için programlamadan SONRA kurulur

Adım 3: Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch

Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch
Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch
Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch
Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch
Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch
Kod – Düşük Güç Sensör Kitaplığı, Kullanıcı Arayüzü ve Arduino Sketch

Sıkıştırılmış kodu, lp_BLE_TempHumidity_R3.zip dosyasını indirin ve Arduino Sketches dizininize açın. Ayrıca bu zip dosyasından lp_So7021 kitaplığını kurmanız ve ayrıca pfodParser kitaplığını da kurmanız gerekiyor.

Düşük Güç Sensör Kitaplığı, lp_Si7021

Hem Adafruit hem de Sparkfun, Si7021 sensörüne erişmek için destek kitaplıkları sağlar, ancak bu kitaplıkların ikisi de çok düşük güç kullanımı için uygun değildir. Her ikisi de, ölçüm yaparken sensörün okunmasını geciktirmek için kodda bir gecikme(25) kullanır. Bölüm 1'de belirtildiği gibi, Gecikmeler Kötüdür. Arduino gecikmesi (), gecikmenin zaman aşımına uğramasını beklerken mikro işlemcinin güç kullanarak çalışmasını sağlar. Bu, düşük güçlü BLE'nin ilk kuralını bozar, çoğu zaman hiçbir şey yapmayın. Değiştirilen lp_Si7021 kitaplığı, tüm gecikmeleri, sensörün ölçümünü bitirmesini beklerken mikro işlemciyi uyku moduna geçiren lp_timers ile değiştirir.

lp_Si7021 kitaplığı ne kadar fark yaratır? Orijinal SparkFun Si7021 destek kitaplığını kullanarak ve herhangi bir Seri baskı olmadan saniyede bir okuma alarak, ~1.2mA ortalama çeker. Sparkfun kitaplığının lp_Si7021 kitaplığıyla değiştirilmesi, ortalama akımı ~10uA'ya, yani 100 kat daha azına düşürür. Bu projede en hızlı ölçüm hızı, mobil bağlıyken her 30 saniyede birdir ve bu da ortalama sensör akımının 1uA'dan daha düşük olmasına neden olur. BLE bağlantısı olmadığında, ölçüm hızı her 10 dakikada birdir ve ortalama sensör besleme akımı ihmal edilebilir düzeydedir.

Kullanıcı arayüzü

Yukarıda ana ekran görüntüsü ve 10 günlük saatlik geçmişin yakınlaştırılmış bir görünümü bulunmaktadır. Grafikler, iki parmak kullanılarak her iki yönde yakınlaştırılabilir ve kaydırılabilir.

Kullanıcı arayüzü Arduino çiziminde kodlanır ve daha sonra tekrar kullanım ve güncellemeler için önbelleğe alındığı ilk bağlantıda pfodApp'a gönderilir. Grafik ekran, çizim ilkellerinden oluşturulmuştur. Kendi kontrollerinizi nasıl oluşturacağınızla ilgili bir eğitim için Android için Özel Arduino Kontrollerine bakın. Termometre, RHGauge ve Düğme dosyaları, bu öğeler için çizim komutlarını içerir.

Not: Bu ekran pfodApp'te yerleşikse yok. Tüm ekran, Arduino taslağınızdaki kod tarafından tamamen kontrol edilir

lp_BLE_TempHumidity_R3.ino çizimindeki sendDrawing_z() yöntemi, kullanıcı arabirimini tanımlar.

void sendDrawing_z() { dwgs.start(50, 60, dwgs. WHITE); // atlanırsa arka plan varsayılan olarak BEYAZ olur, yani start(50, 60); parser.sendRefreshAndVersion(30000); // her 30 saniyede bir dwg'yi yeniden iste. ayrıştırıcı sürümü ayarlanmamışsa bu yok sayılır // güncellemeleri görüntülemeye zorlamak için yukarıdaki düğmelere dokunun dwgs.touchZone().cmd('u').size(50, 39).send(); dwgs.pushZero(35, 22, 1.5); // sıfırı dwg'nin merkezine 35, 22'ye taşı ve 1.5 kat ölçeklendir rhGauge.draw(); // kontrolü çiz dwgs.popZero(); dwgs.pushZero(18, 33); // dwg'nin merkezine sıfırı 18'e taşı, 33 ölçek 1'dir (varsayılan) termometre.draw(); // kontrolü çiz dwgs.popZero();

dwgs.pushZero(12.5, 43, 0.7); // sıfırı dwg'nin merkezine 12.5, 43'e taşı ve 0.7 ile ölçeklendir

hrs8PlotButton.draw(); // kontrolü çiz dwgs.popZero(); dwgs.pushZero(37.5, 43, 0.7); // sıfırı dwg'nin merkezine 37.5, 43'e taşı ve 0.7 gün1PlotButton.draw() ile ölçeklendir; // kontrolü çiz dwgs.popZero();

dwgs.pushZero(12.5, 54, 0.7); // sıfırı dwg'nin merkezine 12.5, 54'e taşı ve 0.7 ile ölçeklendir

day3PlotButton.draw(); // kontrolü çiz dwgs.popZero(); dwgs.pushZero(37.5, 54, 0.7); // sıfırı dwg'nin merkezine 37.5, 54'e taşı ve 0.7 gün10PlotButton.draw() ile ölçeklendir; // kontrolü çiz dwgs.popZero(); dwgs.end(); }

pushZero komutları, bir sonraki bileşeni çizmek için orijini ve ölçeklendirmeyi değiştirir. Bu, düğmelerin ve göstergelerin boyutunu ve konumunu kolayca değiştirmenizi sağlar.

İlk bağlantıda, ilk ekranın, ekranı tanımlayan ~800 baytı indirmesi 5 veya 6 saniye sürer. pfodApp ekranı önbelleğe alır, böylece gelecekteki güncellemelerin yalnızca değişiklikleri, gösterge konumlarını ve okumaları göndermesi gerekir. Bu güncellemeler, ekranı güncellemek için gereken 128 baytın gönderilmesi için yalnızca birkaç saniye sürer.

Ekranda tanımlanan beş (5) aktif dokunma bölgesi vardır. Her düğmenin kendi draw() yönteminde tanımlanmış bir düğmesi vardır, böylece ilgili grafiği açmak için üzerine tıklayabilirsiniz ve ekranın üst yarısı üçüncü dokunma bölgesi olarak yapılandırılır.

dwgs.touchZone().cmd('u').size(50, 39).send();

Düğmelerin üzerindeki ekrana tıkladığınızda, yeni bir ölçüm ve ekran güncellemesi zorlamak için çiziminize 'u' dwg komutu gönderilir. Normalde bağlantı kurulduğunda güncellemeler yalnızca her 30 saniyede bir gerçekleşir. Çizimin her tıklanması veya yenilenmesi yeni bir ölçümü zorlar. Arduino taslağından pfodApp'a yanıt, güncellemede en son değerin gönderilebilmesi için yeni ölçüm tamamlanana kadar (~25mS) ertelenir.

Arduino Kroki

Arduino Sketch, lp_BLE_TempHumidity_R3.ino, Bölüm 1'de kullanılan örnek çizimin geliştirilmiş bir versiyonudur. lp_BLE_TempHumidity_R3.ino çizimi, menüyü yukarıda gösterilen çizimle değiştirir. Ayrıca, 10 dakikalık ve saatlik geçmiş ölçümleri depolamak için lp_Si7021 sensör desteği ve veri dizileri ekler.

lp_BLE_TempHumidity_R3.ino çizimindeki ana komplikasyon, çizim verilerini göndermeyi ele almaktır. Ölçümler yapıldıkça readRHResults() sonuçları toplamayı ve bunları geçmiş dizilere kaydetmeyi işler. Diziler 120 uzunluğundadır, ancak veriler gönderildiğinde ilk 30 veri noktası daha ince bir zaman aralığındadır.

200 tek arsa noktasını görüntülemek için gönderirken dikkat edilmesi gereken birkaç nokta vardır: -

  1. Her veri noktası, CSV metin biçiminde ~25 bayt uzunluğundadır. Yani 150 nokta 3750 bayt veridir. lp_BLESerial sınıfı, 1024'ü en büyük pfod mesajı için yeterince büyük olan 1536 baytlık bir arabelleğe sahiptir. Diğer 512 bayt ise veri göndermek için ayrılmıştır. Geçmiş veriler 512 baytı doldurduktan sonra, arabellekte boşluk kalana kadar daha fazla veri gönderilmesi ertelenir.
  2. Çizim verilerinin ana ekran güncellemelerini yavaşlatmasını önlemek için, çizim verileri yalnızca çizim ekranı görüntülenirken gönderilir. Kullanıcı ana ekrana geri döndüğünde, çizim verilerinin gönderilmesi duraklatılır. Kullanıcı grafiği tekrar görüntülemek için çizim düğmesine tıkladığında çizim verilerinin gönderilmesi devam ettirilir.
  3. Tarihsel çizimler 0'dan (şimdi) başlar ve zamanda geriye gider. Son çizimin görüntülenmesinden bu yana yeni bir ölçüm yapılmadıysa, daha önce indirilmiş olan önceki veriler hemen tekrar görüntülenir. Yeni bir ölçüm varsa önceki çizim verilerine eklenir.
  4. Monitöre ilk güç verildiğinde, geçmiş okuma yoktur ve dizilerde geçersiz bir okuma olarak 0 saklanır. Grafik görüntülendiğinde, geçersiz okumalar atlanır ve bu da daha kısa bir arsa ile sonuçlanır.

Santigrat ve Fahrenhayt

lp_BLE_TempHumidity_R3.ino çizimi, verileri Celsius cinsinden görüntüler ve çizer. Sonuçları Fahrenheit'e dönüştürmek için tüm oluşumları değiştirin

parser.print(sensor. Temp_RawToFloat(..

ile birlikte

parser.print(sensor. CtoF(sensor. Temp_RawToFloat(…

Ve Octal \342\204\203 içindeki unicode degC sembolünü degF sembolü \342\204\211 ile değiştirin

pfodApp, mobil olarak görüntüleyebileceğiniz tüm Unicode'ları görüntüler.

Daha fazla ayrıntı için Arduino'da ASCII Olmayan Karakterleri Kullanma konusuna bakın. Ayrıca Thermometer.h'deki MIN_C, MAX_C ayarlarını değiştirin. Son olarak çizim sınırlarını istediğiniz gibi ayarlayın; değiştir |Sıcaklık C~32~8~derece C|

söylemek

|Sıcaklık F~90~14~deg F|

Adım 4: Besleme Akımının Ölçülmesi

Besleme Akımının Ölçülmesi
Besleme Akımının Ölçülmesi

lp_Si7021 kitaplığını kullanarak, her 10 saniyede bir sıcaklık/nem ölçümü yapmak bile ortalama besleme akımına yalnızca ~1uA katkıda bulunur, bu nedenle besleme akımındaki ve dolayısıyla pil ömründeki ana faktör, BLE reklam ve bağlantı ve veri iletimi tarafından kullanılan akımdır..

Sıcaklık/Nem kartını yukarıda gösterildiği gibi Bölüm 1'de açıklanan Programcıya bağlayın.

Güneş pilleri ve piller takılı değilken, Vin ve Gnd programcının Vdd ve Gnd'sine (Sarı ve Yeşil uçlar) bağlanır ve SWCLK ve SWDIO, programlayıcı başlık panosunun Clk ve SIO'suna (Mavi ve Pembe uçlar) bağlanır.

Artık NanoV2'yi programlayabilir ve besleme akımını Kısım 1'de açıklandığı gibi ölçebilirsiniz.

Bu zip dosyasından düşük güçlü Si7021 kitaplığını kurun, lp_Si7021.zip ve pfodParser kitaplığını kurun ve lp_BLE_TempHumidity_R3.zip dosyasını Arduino eskiz dizininize açın ve Temp/Humditiy kartını lp_BLE_TempHumidity_R3.ino ile programlayın.

Yukarıda belirtildiği gibi, sensörün katkısı <1uA, ortalama, bu projede kullanılan en yüksek ölçüm hızında, bu nedenle BLE reklam ve bağlantı parametreleri pil ömrü için belirleyici faktördür.

Akım tüketimini etkileyen BLE reklam ve bağlantı parametreleri şunlardır: -Tx Gücü, Reklam Aralığı, Maks ve Min Bağlantı Aralıkları ve Bağımlı Gecikme.

Not: Yukarıdaki bağlantıları kullanarak, biri Vin aracılığıyla NanoV2 kartında ve programlayıcının kaynağında MAX8881 olmak üzere beslemede iki (2) regülatör vardır. Bu, ikinci regülatör nedeniyle ölçülen besleme akımlarının gerçek değerden ~5uA daha yüksek olacağı anlamına gelir. Aşağıda belirtilen değerler, ölçülen akımlardan bu fazladan 5uA'nın çıkarılmasıyla elde edilen değerlerdir.

Tx Gücü

Tx Güç efektleri, hem bağlıyken hem de reklam yaparken (bağlı değilken) akım sağlar. Bu proje maksimum güç ayarını (+4) kullanır ve en güvenilir bağlantılar için en iyi menzili ve en yüksek gürültü bağışıklığını sağlar. Güç ayarını değiştirmek için lp_BLESerial setTxPower() yöntemini kullanabilirsiniz. Geçerli değerler, artan güçte -40, -30, -20, -16, -12, -8, -4, 0 +4'tür. setTxPower()'ı çağırmadan ÖNCE lp_BLESerial startup() yöntemini çağırmalısınız. lp_BLE_TempHumidity_R3.ino çizimine bakın.

Tx Gücünü azaltmayı deneyebilirsiniz, ancak uzlaşma, daha kısa menzil ve parazit nedeniyle daha fazla bağlantı kesilmesidir. Bu projede Tx Gücü varsayılanı olan +4'te bırakılır. Aşağıda göreceğiniz gibi, bu ayarla bile çok düşük besleme akımı hala mümkündür.

Reklam Aralığı

Belirli bir Tx Gücü için, bağlantı olmadığında, Reklam Aralığı ortalama akım tüketimini ayarlar. Önerilen aralık 500 ila 1000mS'dir. Burada 2000mS kullanıldı. Uzlaşma, daha uzun reklam aralıklarının, cep telefonunuzun cihazı bulması ve bir bağlantı kurması için daha yavaş olduğu anlamına gelir. Dahili olarak, reklam aralıkları 20mS ila 10.24sn aralığında 0,625mS'nin katları olarak ayarlanır. lp_BLESerial setAdvertisingInterval() yöntemi, kolaylık olması açısından bağımsız değişken olarak mS'yi alır. +4 TxPower ve 2000mS reklam aralığı için akım tüketimi ~18uA idi. 1000mS reklam aralığı için ~29uA idi. Rev 2, 2000mS reklam aralığını kullandı ancak bu, bağlantıların yavaşlamasına neden oldu. Rev 3, bağlantıları daha hızlı hale getirmek için 1000mS reklam aralığına değiştirildi.

Maks ve Min Bağlantı Aralıkları

Bir bağlantı kurulduğunda, bağlantı aralığı, cep telefonunun cihazla ne sıklıkta iletişim kurduğunu belirler. lp_BLESerial setConnectionInterval() önerilen maks ve min değerlerini ayarlamanıza izin verir, ancak mobil bağlantı aralığının gerçekte ne olduğunu kontrol eder. Kolaylık sağlamak için setConnectionInterval() argümanları mS cinsindendir, ancak dahili olarak bağlantı aralıkları 1,25mS'nin katlarında, 7,5mS ila 4sn aralığındadır.

Varsayılan ayar setConnectionInterval(100, 150) şeklindedir, yani minimum 100mS ila maksimum 150mS. Bu değerlerin arttırılması, bağlıyken besleme akımını azaltır, ancak uzlaşma, verilerin daha yavaş iletimidir. Ekranın her güncellemesi yaklaşık 7 BLE mesajı alırken, 36 saatlik 10 dakikalık tam ölçüm yaklaşık 170 BLE mesajı alır. Bu nedenle bağlantı aralıklarının arttırılması ekran güncellemelerini yavaşlatır ve çizim görüntülenir.

lp_BLESerial sınıfının 1536 baytlık bir gönderme arabelleği vardır ve bu arabellekten yalnızca 20 baytlık bir blok gönderir, BLE bağlantısının veriyle taşmasını önlemek için her maksimum bağlantı aralığı. Ayrıca çizim verileri gönderilirken, çizim yalnızca 512 bayt gönderilmeyi bekleyene kadar veri gönderir ve ardından bazı veriler gönderilene kadar daha fazla veri göndermeyi geciktirir. Bu, gönderme arabelleğinin taşmasını önler. Gönderimlerin bu şekilde kısıtlanması, mobil cihaza veri iletimini güvenilir kılar, ancak maksimum verim için optimize edilmemiştir.

Bu projede bağlantı aralıkları varsayılan değerler olarak bırakılmıştır.

Köle Gecikmesi

Cep telefonuna gönderilecek veri olmadığında, cihaz isteğe bağlı olarak cep telefonundan gelen bazı bağlantı mesajlarını yok sayabilir. Bu, Tx Gücünden ve besleme akımından tasarruf sağlar. Bağımlı Gecikme ayarı, yoksayılacak bağlantı mesajlarının sayısıdır. Varsayılan 0'dır. Bu ayarı değiştirmek için lp_BLESerial setSlaveLatency() yöntemi kullanılabilir.

Varsayılan Bağımlı Gecikme 0, ~ 50uA besleme akımı verdi, ekran güncellemelerini her 30 saniyede bir görmezden geldi, ancak keepAlive mesajları çok 5 saniye dahil edildi. Köle Gecikmesinin 2'ye ayarlanması, ~25uA'lık bir ortalama bağlı besleme akımı verdi. 4'lük bir Bağımlı Gecikme ayarı ~20uA verdi. Daha yüksek ayarların besleme akımını azaltmadığı görüldü, bu nedenle 4'lük bir Bağımlı Gecikme ayarı kullanıldı.

Bağlandığında, her 30 saniyede bir pfodApp bir ekran güncellemesi ister. Bu, bir sensör ölçümünü zorlar ve grafik ekranı güncellemek için verileri geri gönderir. Bu güncelleme, her 30 saniyede 2 saniye fazladan ~66uA ile sonuçlanır. Bu, 30 saniyede ortalama 4.4uA'dır. Bunu 20uA'ya eklemek, ~25uA ortalama bağlantı besleme akımı verir

Adım 5: Toplam Besleme Akımı ve Pil Ömrü

Yukarıdaki ayarları kullanarak, lp_BLE_TempHumidity_R3.ino içinde ayarlandığı gibi, Bağlandığında Toplam Besleme akımı ve her 30 saniyede bir ekran güncellenir, yaklaşık 25uA. Bağlanmadığında, yaklaşık 29uA'dır.

Pil ömrünü hesaplamak için ~29uA'lık sürekli bir akım çekişi olduğu varsayılır.

Çeşitli pillerin farklı kapasiteleri ve voltaj özellikleri vardır. Burada ele alınan piller CR2032 düğme pil, CR2450 (N) düğme pil, 2 x AAA Alkalin, 2 x AAA Lityum ve LiPo'dur.

Pil Özeti

Solar Assist kullanıyorsanız, bu pil ömrü rakamlarına %50 ekleyin (günde 8 saat ışık olduğu varsayılarak)

Not: 22uF LowESR kondansatörü (C1), yerleşik NanoV2 22uF kondansatörüne ek olarak Solar Cell akımını depolar ve ardından TX akım darbeleri için besler. Aksi takdirde, pil TX akımının bir kısmını sağlar. Bu ekstra 22 uF LowESR, güneş pili besleme olmadığında pil akımına yaklaşık %10 ekler, ancak pil ömrünün sonuna geldiğinde artan pil iç direncini telafi ederek pil ömrünü uzatır. Aşağıdaki ölçümler ek 22uF kapasitör OLMADAN alınmıştır.

CR2032 – 235mAHr – pil ömrü 10 ayCR2450 (N) – 650mAHr (540mAHr)– pil ömrü 2,3 yıl (2 yıl)2 x AAA Alkalin – 1250mAHr – pil ömrü 3,8,yıl2 x AAA Lityum – 1200mAHr – pil ömrü 4,7 yılLiPo şarj edilebilir – önerilmez yüksek kendi kendine deşarj nedeniyle.

CR2032

Bu düğme pil tipik olarak 235mAHr (Energizer Pil) kapasitesine, 3V nominal voltaja ve 2V belirtilen deşarj voltajına sahiptir. Bu, 8100 saat veya ~0.9 yıl pil ömrü anlamına gelir. Ancak pil ömrünün sonuna ulaştıkça dahili hücre direnci artar ve bu nedenle tepe Tx akım darbelerini sağlayamayabilir. Bu etkiyi azaltmak için daha büyük bir besleme kapasitörü kullanılabilir, ancak 10 ay ömür diyelim.

CR2450 (N)

Bu düğme pil tipik olarak 620mAHr (CR2450N için 540mAHr), 3V nominal voltaj ve 2V belirtilen deşarj voltajına sahiptir. Bu, 22, 400 saat veya ~2 yıl 6 dakika (CR2450N için 18600 saat ~ 2 yıl 2 dakika) pil ömrü anlamına gelir. Ancak pil ömrünün sonuna ulaştıkça dahili hücre direnci artar ve bu nedenle tepe Tx akım darbelerini sağlayamayabilir. Bu etkiyi azaltmak için daha büyük bir besleme kondansatörü kullanılabilir, ancak 2yıl 4m (2yıl N) ömür diyelim.

Not: CR2450N versiyonu, bir CR2450N tutucuya yanlış kurulumun önlenmesine yardımcı olan daha kalın bir dudağa sahiptir. Bir CR2450N ve CR2450 hücresini bir CR2450 tutucuya yerleştirebilirsiniz ancak bir CR2450 hücresini bir CR2450N tutucusuna yerleştiremezsiniz

2 x AAA Alkalin hücre

Bu piller, çok düşük akımlar için yaklaşık 1250mAHr (Energizer Pil) kapasitesine, 2x1.5V = 3V nominal gerilime ve 2x0.8V = 1.6V belirtilen deşarj gerilimine sahiptir. Ancak bu belirtilen deşarj voltajı, Si7021 sensörünün (1,9V) çalışma voltajından daha düşüktür, bu nedenle pil her biri yalnızca ~1V'a kadar kullanılabilir. Bu, kapasiteyi yaklaşık %10 ila %15, yani ~1000mAHr azaltır.

Bu, 34, 500 saat veya ~ 4 yıl pil ömrü anlamına gelir. Ancak pil ömrünün sonuna ulaştıkça dahili hücre direnci artar ve bu nedenle tepe Tx akım darbelerini sağlayamayabilir. Bu etkiyi azaltmak için daha büyük bir besleme kondansatörü kullanılabilir, ancak 3 yıl 10m ömür diyelim. Not Alkalin pillerin kendi kendine boşalması yılda %2 ila %3 arasındadır.

2 x AAA Lityum hücre

Bu akülerin kapasitesi yaklaşık 1200mAHr (Energizer Akü), düşük akımlarda 2x1.7V = 3.4V nominal voltaj ve 2x1.4V = 2.4V deşarj voltajına sahiptir. Bu, 41, 400 saat veya 4 yıl 8 m pil ömrü anlamına gelir.

LiPo Şarj Edilebilir Pil

Bu piller, 100mAHr'den 2000mAHr'a kadar çeşitli kapasitelerde, düz formatlarda gelir ve şarj voltajı 4.2V ve deşarj voltajı >2.7V'dir. Bununla birlikte, ayda %2-%3 (yani yılda %24 ila %36) gibi yüksek bir kendi kendine deşarj değerlerine sahiptirler ve bu nedenle bu uygulama için diğer piller kadar uygun değildirler.

Adım 6: Tedarik Alternatifleri – Solar Assist, Yalnızca Pil, Yalnızca Solar

Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar
Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar
Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar
Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar
Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar
Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar
Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar
Tedarik Alternatifleri – Solar Assist, Sadece Batarya, Sadece Solar

Pil artı Solar Assist

Yukarıdaki yapı, Pil artı Solar Assist kaynağını kullanır. Güneş panelleri pil voltajından daha fazla voltaj ürettiğinde, güneş pilleri monitöre güç vererek pil ömrünü uzatır. Tipik olarak pil ömrü %50 daha uzatılabilir.

Kullanılan güneş panelleri küçük, 50mm x 30mm, ucuz, ~0,50$ ve düşük güçtedir. Nominal olarak 5V panellerdir, ancak 5V üretmek için tam doğrudan parlak güneş ışığına ihtiyaç duyarlar. Bu projede iki panel seri olarak bağlanmıştır, böylece monitörü bir pencerenin yakınına, doğrudan güneş görmeyen bir yere yerleştirmek pil gücünü değiştirmek için yeterli olacaktır. İyi aydınlatılmış bir oda veya bir masa lambası bile güneş pillerinin >33uA'da >3.3V üretmesi ve pilden devralması için yeterlidir.

Sıcaklık / Nem Monitörünün güneş dışında nereye yerleştirilebileceğini ve hala güneş enerjisiyle çalışabileceğini belirlemek için basit bir test paneli yapıldı. Yukarıdaki fotoğraftan da görebileceğiniz gibi, 100K'lık bir dirence bağlı iki panel, 100K'da 5.64V, yani 5.64V'da 56uA akım üretiyor. Bu, monitöre pilden güç sağlamak için fazlasıyla yeterli. 3V nominal pil voltajının üzerindeki herhangi bir voltaj okuması, pil yerine güneş pillerinin monitöre güç vereceği anlamına gelir.

Sıcaklık Nem İzleme devresindeki iki diyot, güneş pillerini ve pilleri birbirinden izole eder ve ters polaritede bağlanmalarına karşı korur. 10V 1W zener ve 470R serisi direnç, NanoV2'nin yerleşik regülatörünü tam güneşte iki güneş pilinden gelen aşırı voltajdan korur, özellikle de 5V yerine 12V hücreler kullanılıyorsa. <5V'de normal çalışmada, 10V zener sadece ~1uA çeker.

Sadece Pil

Yalnızca Pil Kaynağı için, R1, D1 ve D3'ü ve güneş pillerini çıkarmanız yeterlidir. Ters polarite koruması istemiyorsanız D1'i bir tel parçasıyla da değiştirebilirsiniz.

Sadece Güneş

Monitöre pil olmadan yalnızca Güneş Pillerinden güç sağlamak için farklı bir güç kaynağı devresi gerekir. Sorun, monitör 29uA'da çalışırken, güç verildiğinde nRF52'nin 0,32 saniye boyunca ~5mA çekmesidir. Yukarıda gösterilen devre (pdf versiyonu), giriş kapasitörleri, 2 x 1000uF, 4.04V'a kadar şarj olana kadar MAX8881 regülatörünü kapalı tutar. Ardından MAX6457, nRF52'yi (NanoV2) çalıştırmak için MAX8881 SHDN girişini serbest bırakır 2 x 1000uF kapasitörler gerekli başlatma akımını sağlar.

Bu, yeterli güneş enerjisi olduğunda monitörün 29uA'da çalışmaya devam etmesini sağlar.

7. Adım: Sonuç

Bu eğitim, nRF52832 yongası için Arduino'da çok düşük güçlü BLE projesine örnek olarak pil/güneş enerjili Sıcaklık Nem Monitörü sunmuştur. Bağlantı parametrelerinin ayarlanmasıyla elde edilen ~29uA besleme akımları. Bu, 10 ayı aşan bir CR2032 düğme pil ömrüyle sonuçlandı. Daha yüksek kapasiteli madeni para hücreleri ve piller için daha uzun. İki ucuz güneş pili eklemek, pil ömrünü kolayca %50 veya daha fazla uzattı. Monitöre güneş pillerinden güç sağlamak için parlak bir oda ışığı veya bir masa lambası yeterlidir.

Monitörün tamamen düşük kapasiteli güneş pillerinden çalıştırılmasına izin vermek için özel bir güç devresi sunuldu.

Ücretsiz pfodDesigner, menüler/alt menüler tasarlamanıza, tarih/zamana göre çizim yapmanıza ve verileri kaydetmenize ve ardından sizin için düşük güçlü Arduino taslağı oluşturmanıza olanak tanır. Burada pfodApp çizim ilkelleri kullanılarak özel bir arayüz kodlandı. pfodApp ile bağlanmak, kullanıcı arayüzünü görüntüler ve monitör ~29uA kullanırken okumaları günceller.

Android programlama gerekmez. pfodApp bunların hepsini halleder.