【點擊上方「藍字」關注DF,一起成為技術顏控!】
Hello,大家好。通過之前項目的學習,相信大家已經大致了解了阿里雲平臺的使用方法以及TinkerNode的基本功能。這次將製作一個遠程採集水質參數的裝置,它可以用來採集湖水的溫度、pH、TDS值以及設備電量,並使用TinkerNode開發板的NB-IoT功能,將數據上傳至阿里雲平臺。
項目的主要目的:
①熟悉阿里雲IoT平臺的使用方法;
②通過戶外水質監測項目,進一步了解TinkerNode,了解板載NB-IoT模組功能;
③了解NB-IoT的使用場景,調試並搭建一個戶外水質監測的原型。
項目視頻
為了方便大家進行學習,我們為大家提供了視頻版本的項目教程,會在近期更新。
元器件清單
本次項目用到的元器件清單如下:
TinkerNode NB-IoT開發板 x1
TinkerNode Gravity IO擴展板 x1
Gravity:I2C ADS1116 16位ADC模塊 x1
DC - DC 直流升壓模塊 x1
Gravity:模擬量隔離模塊x1
Gravity:模擬PH計 x1
Gravity:模擬TDS傳感器 x1
Gravity:DS18B20數字防水溫度傳感器套件 x1
3.7V鋰電池 x1
3.7V鋰電池電量計 x1
太陽能板5V 1A x1
USB轉接模塊 x1
Ps:所使用到的USB轉接模塊是X寶上購買的,如下圖所示,由於DF沒有這款產品,大家可以自行購買。
1、項目相關功能介紹
低功耗
由於本次項目所製作的設備是在戶外使用,且設備工作環境不易拉電,為了使設備在戶外的工作時間更久,就需要設備儘可能的減少電量的消耗。而TinkerNode物聯網開發板板載的NB-IoT模組可以藉助 PSM(Power Saving Mode,節電模式)和 eDRX(Extended Discontinuous Reception,超長非連續接收)實現更長待機。接下來讓我們來了解一下NB-IoT的低功耗功能。
如上圖所示,可以看到NB-IoT設備在進入PSM低功耗狀態時會涉及三種狀態,分別是Connected State連接狀態、Idle State空閒待機狀態和PSM State 低功耗狀態。當設備嘗試從Connected State進入PSM State時,會激活兩個定時器,T3324和T3412。其中,定時器T3324決定了Idle State的時間,T3412決定了兩次Connected State之間的時間。也就是說,當定時器T3324超時後,設備將進入PSM State;當定時器T3412超時後,設備將退出PSM State,進入下一個Connected State,如此循環。
太陽能
為了使設備可以在戶外工作的時間更久,除了需要藉助PSM來降低設備的功耗外,還需要使用TinkerNode集成的太陽能電源管理模塊,外接5V的太陽能板,在陽光充足時,給外接的3.7V鋰電池充電。
TinkerNode將多餘的Falsh空間轉化為一個8MB大小的U盤,可以進行數據的離線存儲。在本次項目中,為了避免網絡連接不穩定導致數據丟失的情況,我們就可以在數據上傳到雲端時,將數據同時備份在TinkerNode的板載U盤中。
和之前的教程相同,我們首先需要在阿里雲平臺中新建一個項目,然後為項目創建產品和設備,配置產品自定義功能(物模型)。
在物聯網平臺的頁面左側,選擇IoT Studio -> 項目管理,點擊新建項目,新建一個空白項目,項目名稱為「水質監測」,如下圖所示。
創建完成後,我們會進入「水質監測」項目的管理頁面,如下圖所示。
在項目管理頁面左側的功能欄點擊產品,在彈出的產品頁面中選擇新建產品,如下圖所示。
產品的名稱填寫「KnowFlow」,所屬品類選擇「自定義品類」,其他選項默認,如下圖所示。
完成後點擊保存,此時已經在項目下創建了一個名為「KnowFlow」的新產品。
接下來,我們需要為產品添加功能,也叫作定義產品的「物模型」,物模型創建的過程就是通過協議描述產品的功能,定義產品有幾組傳感器數據,有什麼控制功能,數據的類型是什麼。
點擊「KnowFlow」產品後的查看,進入產品的管理頁面,如下圖所示。
選擇功能定義 -> 自定義功能 -> 添加自定義功能 ,如下圖所示。
本次項目中,需要採集溫度、pH以及TDS三種水質參數,另外還需要採集電池電量的百分比,所以我們需要創建四個自定義功能(物模型),相關設定參數按照下表填寫:
序號
功能名稱
標識
數據類型
取值範圍
步長
單位
1
溫度
Temp
float
-40~55
0.1
攝氏度
2
pH值
PH
float
0~14
0.1
無
3
TDS值
Tds
int32
0~1000
1
百萬分率/ppm
4
電池電量
Precentage
int32
0~100
1
百分比/%
創建完成後,產品的功能定義界面效果如下圖所示。
完成了產品的功能定義之後,接下來我們為產品建立一個設備,這樣我們就可以將由TinkerNode搭建的水質監測設備連接到阿里雲平臺了。
在項目管理頁面左側的功能欄點擊設備,在彈出的設備頁面中選擇新增設備,如下圖所示。
在彈出的窗口中,產品選擇「KnowFlow」,添加方式選擇自動生成,設備數量填寫1,點擊提交,創建完成後如下圖所示。
按照上圖進行硬體連接。Ps:如果該圖看不清楚,可以到文章最下方「閱讀原文」查看。
pH計校準
本次項目中使用到了Gravity:模擬pH計,按照產品wiki,我們需要進行校準操作。
pH使用注意事項:
請使用外接開關電源,使電壓儘量接近+5.00V,電壓越準,精度越高!
電極在每次連續使用前均需要使用標準緩衝溶液進行校正,為取得更正確的結果,環境溫度最好在25℃左右,已知PH值要可靠,而且其PH值愈接近被測值愈好。如您測量的樣品為酸性,請使用pH4.00的緩衝溶液對電極進行校正,如果您測量的樣品為鹼性,請使用pH9.18緩衝溶液對電極進行校正。分段進行校準,只是為了獲得更好的精度。
pH電極每測一種pH不同的溶液,都需要使用清水清洗,建議使用去離子水清洗。
為保證測量精度,建議使用校準液對pH計定期校準,以防止出現較大誤差。一般半年校準一次,如果測量的溶液中含有較多雜質,建議增加校準次數!
pH計的校準步驟:
(1)將各個設備按照圖示方式連接,即:pH電極連接到pH meter電路板的BNC接口,然後用模擬連接線,將pH meter電路板連接到Arduino主控器的模擬口2。對Arduino主控器供電後,可以看到pH meter電路板的藍色指示燈變亮。
(2)對Arduino主控器燒寫校準樣例代碼。
代碼詳情參考點擊」閱讀原文「
(3)將pH電極插入到pH值為7.00的標準溶液中,或者直接短接BNC接口的兩個輸入,打開Arduino IDE的串口監視器,可以看到當前列印出的pH值,誤差不會超過0.3。記錄下此時列印的值,然後與7.00相比,記錄此時的差值,在後續的步驟中,需要把差值修改到程序中的Offset處(差值 = 標準值(7.0) - 列印值)。比如,列印出的pH值為6.88,則差值為0.12,則在樣例程序中把#define Offset 0.00改成#define Offset 0.12。
(4)將pH電極插入pH值為4.00的校準液中,等待一分鐘後,調整增益電位器,使列印出的pH值儘量穩定在4.00左右。此時,酸性段校準已經完成,您可以測試酸性溶液的pH值。
注意:測量其他溶液時,必須清洗電極。
(5)依靠pH電極自身的線性特性,經過以上的校準,可以直接測量鹼性溶液的pH值,但如果您想獲得更好的精度,建議重新校準。鹼性段校準採用pH值為9.18的標準液,同樣是調節增益電位器,使之穩定在9.18左右。經過校準,此時您可以測量鹼性溶液的pH值了。
下載附件中的庫文件,安裝至Aruidno IDE中。點擊查看如何安裝庫文件?
下載附件NB_Project2.ino,打開項目代碼,根據阿里雲的配置和pH計的校準參數,修改代碼中對應的參數。
①阿里雲相關配置
需要將阿里雲中的配置信息,在代碼中做對應的修改。
在設備頁面查看設備證書信息,填寫在代碼中對應位置。
//配置證書信息
String ProductKey = "Your_Product_Key";
String ClientId = "12345";
String DeviceName = "Your_Device_Name";
String DeviceSecret = "Your_Device_Secret";
在產品頁面查看功能標識符,填寫在代碼中對應位置。
//配置產品標識符
String TempIdentifier = "Your_Temp_Identifier";
String PHIdentifier = "Your_ph_Identifier";
String TDSIdentifier = "Your_TDS_Identifier";
String GaugeIdentifier = "Your_batGauge_Identifier";
在設備管理頁面,查看物模型topic信息,填寫在代碼中對應位置。
//需要發布和訂閱的TOPIC
const char * subTopic = "Your_sub_Topic";//****set
const char * pubTopic = "Your_pub_Topic";//******post
②ph計校準數據配置
將剛剛校準時記錄的offset參數,填寫至下列代碼中。比如,列印出的pH值為6.88,則差值為0.12,則在樣例程序中把#define Offset 0.00改成#define Offset 0.12。
#define Offset 0.00 //deviation compensate
該行代碼位置如下圖所示。
③低功耗喚醒時間配置
項目使用了低功耗的功能,可以通過調整代碼中的參數,修改設備的喚醒時間。
//#define TIME_TO_SLEEP_SECOND 10 /* Time ESP32 will go to sleep (in seconds) */
#define TIME_TO_SLEEP_MINUTE 5 /* Time ESP32 will go to sleep (in mimutes) */
低功耗喚醒間隔設置有兩種模式,分別是分鐘設置和秒設置。樣例中使用的是分鐘模式,默認設定時間為5分鐘。為了方便測試,大家可以任意修改。
該代碼位置如下圖所示。
全部配置完成後,將代碼上傳至TinkerNode物聯網開發板中,就可以在阿里雲平臺上查看相應的數據信息了。
硬體購買請戳👆
大家有什麼想法,歡迎下方留言!
歡迎大家點擊閱讀原文,到社區論壇查看更多有趣內容!