資料介紹
描述
我們五個人是巴黎索邦理工學院的嵌入式系統專業的學生。這項任務是幾個月前交給我們的,目的是幫助養蜂人照顧他們的蜂箱。
蜂箱中可能會發生許多問題,養蜂人的工作是在需要時幫助它們并治愈它們。例如,養蜂人需要知道何時有一只大黃蜂在蜂箱入口處等待殺死每只從收獲珍貴花粉回來的蜜蜂。因為大黃蜂可以保持靜止并殺死盡可能多的蜜蜂,而且沒有養蜂人愿意在他在家休息時釋放成千上萬的蜜蜂。而且大黃蜂在法國這個地區并不罕見,幸運的是我們蜜蜂在害怕時會發出特定的頻率,這種嘶嘶聲大約是 3000 赫茲,所以當一只瘋狂的大黃蜂在他們家門口等著準備盛宴時,我們可以知道!使用同樣的方法,我們可以知道蜜蜂是否蜂擁而至,以捕捉逃跑的老蜂王并將她放入新的蜂箱中,介于 340 赫茲和 450 赫茲之間。
蜜蜂發出的頻率并不是我們能從蜂巢中獲得的唯一數據,因為蜜蜂能夠在蜂巢內保持非常穩定的溫度,大約35 攝氏度。如果他們的體溫變化太大,我們可以判斷他們是否健康。重量也是一個重要的數據:我們可以知道蜂箱里蜜蜂和蜂蜜的數量!如果蜂箱每天都越來越重,我們可以根據蜂箱的大小給養蜂人采蜜設定一個閾值。有了所有這些數據,我們還可以更準確地檢測到蜂群。
您可能想知道我們將如何獲取所有這些信息,因為蜂箱通常位于遠離城市的地區和偏遠的鄉村,那里可以選擇 4G,而 Wi-Fi 則更糟。我們將使用 Sigfox 的 LPWAN(低功耗廣域網)網絡來增加我們的自主權和范圍,因為我們不會傳輸大量數據,只是傳輸一些傳感器的值,而不是實時視頻饋送。我們將準時(每 10 分鐘)發送一條短消息,其中所有數據都壓縮到最小字節數。我們有多種物聯網云平臺可供選擇,但我們選擇了 Ubidots,因為它是最直觀的,也是養蜂人最容易使用的。
對于這個有趣的項目,我們選擇了最有趣的 Arduino 板之一,它具有令人難以置信的能力和多種不同用途的選擇。憑借其驚人的 nrf52840 微芯片,您猜對了我們的 Arduino nano 33 BLE Sense!
從能量和編程方面來說,它都是一張簡單而有效的卡片。事實上,我們能夠為我們的代碼從 Arduino 上已經存在的公共庫中受益,盡管并不總是兼容,因為它與其他 Arduino 略有不同。此外,此卡包含傳感器,例如溫度、濕度、壓力或藍牙低功耗。談到藍牙低功耗,我們選擇在我們的項目中實現它,因為它是一個非??崆曳奖愕墓δ埽?/font>但盡管它很酷,但實現起來有點棘手和復雜,我們將在此處向您解釋它在我們的項目中是如何工作的:
該協議必須包含如下所示的部分:客戶端/中央和服務器/外圍設備。
中央設備在任何情況下都將是養蜂人的電話,因此他可以從他的蜂巢中實時獲取每個傳感器值!
我們首先將服務和特征創建為全局變量,以便我們可以全局使用它們。服務是一組傳感器和值,因此我們可以輕松找到它們,使用隨機創建的 UUID 調用它們。在每個服務中,我們可以找到一些僅代表一個傳感器/值的特性。
在我們的原型中,我們只有 2 個服務,即設備信息服務,用于指定有關用于蜂巢的硬件的信息,例如名稱、信用和東西。第二個服務是傳感器信息,其中包含我們需要的每個傳感器值!您可以在下面看到我們如何實施我們的服務和特征!
BLEService optiService("181A");
BLEByteCharacteristic optiStatusCharacteristic(OPTI_CHARACTERISTIC_UUID, BLERead | BLEWrite);
BLEStringCharacteristic tmpCouvCharacteristic(TMP_COUVAIN_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic tmp1Characteristic(TMP_1_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic tmp2Characteristic(TMP_2_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic batCharacteristic(BAT_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic humCouvCharacteristic(HUM_COUVAIN_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic humAmbCharacteristic(HUM_AMBIANT_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic pressionCharacteristic(PRESSION_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic poidsCharacteristic(POIDS_CHARACTERISTIC_UUID, BLERead, 20);
BLEStringCharacteristic freqCharacteristic(Freq_CHARACTERISTIC_UUID, BLERead, 20);
我們選擇對它們中的大多數使用 BLEStringCharacteristic,因為我們希望在發送的數據中具有下面顯示的傳感器名稱。我們使用 iOS 上的 LightBlue 應用程序從傳感器讀取值。它工作得非常好并且非常易于使用。
如您所見,如果我們不想學習每個 UUID,那么選擇發送字符串是一件非常明智的事情!
這個結果是通過這個初始化獲得的:
- 開始 BLE 并設置本地名稱
- 將每個特征添加到服務中
- 將服務添加到 BLE
- 設定值
- 廣告!
然后當我們做廣告時,我們只需要定期更新我們的價值觀!
此 BLE 功能可以方便地在不上網的情況下檢查傳感器值,但如果我們想更改 2 次測量之間的延遲(以節省能源),則最有必要。如果您需要有關 BLE 的更多信息,請隨時查看官方 Arduino 文檔!
現在我們將看看我們的傳感器,從重量傳感器開始!
蜂箱將被支撐在上面,它的工作方式如下:
為了通過我們的微控制器將這些信號轉換為可讀值,我們將使用 Seeed 制作的 Grove HX711 模塊和幾個貢獻者在github上制作的庫。
這是我們用來與我們的規模交互的代碼。
#include
HX711 scale;
float Offset = 1936859.00; // Offset pour 66kg
void init_HX711(){
scale.begin(D6, D5); // LOADCELL_DOUT_PIN = D7, LOADCELL_SCK_PIN = D6;
scale.set_scale(Offset);
}
void get_weight(data *data_weight){ //We take as a param a struct with our data
scale.power_up();
delay(3000); // We wait a bit for the scale to initialize
if(scale.wait_ready_retry(3, 500)){
data_weight->Poids = scale.get_units(5);
data_weight->Poids = data_weight->Poids * 10;
}
if(data_weight->Poids < 0){
data_weight->Poids = 0;
}
scale.power_down(); // We shutdown the scale to save energy
}
我們現在可以看看我們的溫度探頭。我們選擇 DS18B20 溫度探頭安裝在蜂箱內,如下圖所示:
這些傳感器使用 OneWire 協議,這意味著它們只需要一根線來傳輸數據。如果我們只使用一個傳感器,它總共只需要 2 根線:(VCC + Data)和 GND 而不是 VCC、Data 和 GND。盡管這個協議很方便,但不幸的是它并沒有在我們的 Arduino 33 BLE Sense 上實現,因為正如之前所解釋的,我們的微控制器不是常見的 Arduino Atmel 微控制器,它使用 Mbed,因此并非每個庫都與它兼容。幸運的是,我們找到了為我們的董事會制作了一個新圖書館的人!這是我們用來從 2 個串聯探頭中獲取溫度的代碼:
#include <MaximWire.h>
MaximWire::Bus bus(PIN_BUS);
MaximWire::DS18B20 device;
void get_DS18B20(data *data_tempCote){
unsigned short nbr_sensors;
float temp;
for(int i=0; i<2; i++){
nbr_sensors = 1;
MaximWire::Discovery discovery = bus.Discover();
do{
if (nbr_sensors > 2){
break;
}
MaximWire::Address address;
if (discovery.FindNextDevice(address)){
if (address.GetModelCode() == MaximWire::DS18B20::MODEL_CODE){
MaximWire::DS18B20 device(address);
temp = device.GetTemperature<float>(bus);
data_tempCote->Temp_cote[nbr_sensors - 1] = temp;
device.Update(bus);
}
nbr_sensors++; //Increase the sensor counter
}
} while (discovery.HaveMore());
}
}
為了獲得亮度級別,我們使用了 LDR04 光敏電阻。隨后,我們制作了一個分壓橋,以便為我們的光敏電阻提供穩定的值。此外,我們用照度計測試了不同的值,以便找到一個可以根據電壓變化為我們提供正確亮度的函數。
獲取亮度的代碼:
for(int i=0; i<10; i++){ // average on 10 test
Vin = analogRead(A7); // between 0 to 1023
Vin = Vin * (3.3/1023.0);
R0 = (R1*3.3/Vin) - R1;
temp = 500/(R0/1000);
Lumen += temp;
}
// we get the value in Lumen
對于蜂巢內的濕度和溫度,我們使用 DHT22 傳感器。DHT22(或AM2302)通過串口與微控制器通信,所以有一個庫,使用起來比較容易。
使用 DHT22 的代碼:
void get_DHT22(data *data_DHT){
data_DHT->Temp_couvain = dht.readTemperature();
data_DHT->Humi_couvain = dht.readHumidity();
}
現在我們已經看到了我們所有的傳感器,讓我們來看看我們的微控制器。
所有這些都需要電力,我們通過太陽能獲得。我們使用太陽能電池板和電池。
我們使用 Seeed LiPo Rider Pro,它能夠將從太陽能電池板獲得的能量存儲在我們之前展示的電池中。它在測試時也非常方便,因為我們可以使用 USB 為我們的電路板供電,并通過 4 個 LED 顯示剩余的電池電量。
我們選擇的電池雖然便宜,但效率不高,所以我們必須盡可能多地節省電力。為此,我們不會使用它可以提供的 LiPo Rider 的 5V,因為我們有一個 3.3V 供電板,需要有一個穩壓器(已經內置)將 5V 轉換為 3.3V,這會消耗大量電力。
取而代之的是,我們將使用一個幾乎不消耗電流并提供穩定的 3.3V 電壓的常規電壓,此外我們可以將其關閉。能夠關閉 3v3 非常方便為傳感器供電,這樣我們將有2 個電壓調節器,一個始終打開為電路板供電,另一個可以禁用以關閉傳感器,這樣它們就不會在同時消耗電流我們不使用它們(因為我們每個傳感器每 10 分鐘只取一個值)。
最后是最重要的 Sigfox 模塊,它允許我們使用無線電波發送值。
為了使每個組件一起工作,我們使用我們自己的 PCB 制造機打印了一個 PCB(在項目描述中)。
?
?
一切都組裝好后,我們制作了電纜和盒子防水。我們還為電池制造了一個護套來保護它。一切都是固定的,以抵抗養蜂人的處理、風和雨。我們添加了一個開關,以便更容易地關閉和打開設備。
為了最大限度地保護我們的設備,我們添加了一些“potit pieds”。它保存它在下雨天在泥濘中。
為了從 Sigfox 到 Ubidot 獲取值,我們使用了 Sigfox 的后端,明智地選擇我們的回調,我們能夠為我們擁有的每個傳感器發送足夠的數據。在 Ubidot 上,我們解密已壓縮的值以作為 32 字節消息發送。我們通過簡單的界面獲得漂亮圖形的所有價值。
?
- 帶有土壤電容傳感器的Arduino植物監視器
- 如何使用Arduino構建植物監視器
- Arduino Nano 33 Sense BLE開源
- 基于Arduino Nano 33 BLE Sense的深蹲計數器
- 蜂窩連接的蜂巢監視器開源分享
- 基于Nano 33 BLE Sense的數字魔杖
- Arduino/Android藍牙串行監視器應用程序
- Arduino Nano 33 BLE Sense的語音識別項目
- 在Arduino Nano BLE Sense 33邊緣設備上訓練神經網絡
- Arduino Nano 33 BLE Sense上的白血病檢測
- 使用Arduino上的串行監視器控制伺服電機
- 利用Nano 33 BLE Sense板功能尾隨大象
- 使用TinyML和Arduino Nano 33 BLE計算閱讀時間
- Arduino燃氣物聯網監視器
- 溫度監視器
- 典型電池監視器電路圖分享 604次閱讀
- 簡單的電池監視器電路圖 557次閱讀
- 如何創建自定義監視器? 516次閱讀
- 基于Arduino的機器學習開發 1.7w次閱讀
- 光纖應用中的監視器校準 880次閱讀
- 如何通過Raspberry Pi設置CE電流監視器 2120次閱讀
- ISL28022數字功率監視器評估套件及相關基礎知識 2966次閱讀
- Cypress懷孕監視器CY8C38系列的性能特性及應用方案 2354次閱讀
- KUKA C4如何使用診斷監視器? 3595次閱讀
- 具監視器的800mA單電阻器堅固型線性穩壓器LT3089 1123次閱讀
- 單片機PIC16的外設--故障保護時鐘監視器解析 1944次閱讀
- 揭秘液晶顯示器和液晶監視器的七大不同點 2091次閱讀
- 鋰離子電池和穩壓器監視器電路圖 1767次閱讀
- 液晶監視器的選購與保養 1022次閱讀
- 120Hz+全高清LCD監視器新技術應用解析 1335次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多