天天看點

arduino讀取水位傳感器的資料顯示在基于i2c的1602a上_建構Arduino的LoRa遠端智能空氣品質監測系統...

背景知識視訊教程

Arduino分步指南:完整指南 - 國外課棧​viadean.com

arduino讀取水位傳感器的資料顯示在基于i2c的1602a上_建構Arduino的LoRa遠端智能空氣品質監測系統...

Arduino微控制器:學習Arduino制作項目 - 國外課棧​viadean.com

arduino讀取水位傳感器的資料顯示在基于i2c的1602a上_建構Arduino的LoRa遠端智能空氣品質監測系統...

通過建構實際應用程式來掌握Arduino - 國外課棧​viadean.com

arduino讀取水位傳感器的資料顯示在基于i2c的1602a上_建構Arduino的LoRa遠端智能空氣品質監測系統...

空氣污染是當今世界上最大的環境和公共衛生挑戰之一。 空氣污染會對我們的健康,氣候和生态系統産生不利影響。 監測空氣品質對于了解和預防空氣污染以及評估排放源以保持更健康的空氣狀況并有助于對抗溫室效應至關重要。

該項目旨在建立兩個能夠通過LoRa無線通信互相通信的裝置。 有很多傳感器可以用來監測空氣品質,但是在這個項目中,我們将重點介紹兩個DSM501A灰塵傳感器和MQ131臭氧氣體傳感器。 這些傳感器将通過Ra-02 LoRa子產品作為用戶端收發器連接配接到第一台裝置。 第二個裝置将具有LoRa屏蔽作為伺服器收發器,并将SIM800L作為ThingSpeak的網關連接配接。

硬體

軟體

庫檔案

介紹

Ra-02 SX1278 LoRa子產品

Ra-02 LoRa子產品可與相容的FSK(頻移鍵控)遠端調制和解調一起用于超長距離擴頻通信。 這為距離覆寫範圍,抗幹擾和功耗低的傳統無線設計提供了解決方案。 Ra-02可廣泛用于各種聯網場合,例如自動抄表,房屋自動化,安全系統和遠端灌溉系統。

Dragino LoRa闆

Dragino LoRa Shield是基于Arduino屏蔽形式并基于開源庫的遠端收發器。 LoRa Shield允許使用者發送資料并以低資料速率到達極長的範圍。 它提供超遠距離擴頻通信和高抗幹擾性,同時将電流消耗降至最低。

它們如何工作

他們使用一種稱為擴頻通信的技術。 資訊在比必要的寬得多的帶寬上傳輸。 這樣,增加了抵抗外部窄帶幹擾的強度。 由于任何發射信号的帶寬越寬,幹擾在帶寬的一小部分上的相對影響就越小。 擴頻技術允許在同一帶寬中同時複用多個傳輸。 由于多個使用者可以共享相同的擴頻帶寬而不會互相幹擾,是以可以将它們稱為多址技術。

SIM800L GSM / GPRS子產品

SIM800L是一個蜂窩子產品,可用于GPRS資料傳輸,發送和接收SMS以及撥打和接聽語音電話。 該闆尺寸緊湊,電流消耗低。 它甚至具有省電技術,可在不使用時将電流消耗限制為低至1 mA。 最重要的是,該子產品支援四頻GSM / GPRS網絡,這意味着它可以在世界上的任何地方工作。

它是如何工作

該子產品旨在類似于帶有SIM卡的蜂窩電話的操作。 上電後,子產品啟動,搜尋最近的蜂窩網絡并自動連接配接到該網絡。 闆上的LED顯示屏訓示連接配接狀态。 沒有網絡覆寫時,它會快速閃爍,但在連接配接時會緩慢閃爍。

DSM501A灰塵傳感器

DSM501A灰塵傳感器子產品是一種低成本,緊湊的顆粒密度傳感器。它能夠定量測量小至1微米的微粒

它是如何工作

紅外發光二極管和光電半導體被對角地布置在裝置内部。 這樣可以檢測周圍空氣中灰塵的反射光。 它在檢測非常細小的顆粒(如香煙煙霧)中特别有效,通常用于空氣淨化器系統。

MQ131臭氧氣體傳感器

顧名思義,MQ131臭氧氣體傳感器可以感應臭氧氣體(O3)。 它對臭氧具有很高的敏感性,同時也對諸如CL2和NO2之類的強氧化物敏感。 無論是家用還是工業用,它們都廣泛用于空氣品質監測應用中。

它是如何工作

臭氧氣體傳感器的黑色膠木内部是一種相當敏感的材料,稱為三氧化鎢(WO3)。 在幹淨的空氣中,其電導率很高,但是當周圍存在臭氧氣體時,電導率會降低。 使用者可以将電導率的變化轉換為與檢測到的氣體濃度對應的輸出信号。

硬體設定

用戶端(帶有傳感器的Ra-02 LoRa子產品)

Ra-02 LoRa子產品連接配接

DSM501A灰塵傳感器連接配接

MQ131臭氧氣體傳感器連接配接

伺服器(帶SIM800L子產品的Dragino LoRa Shield)

ThingSpeak設定

要設定ThingSpeak,首先您必須在其網站https://thingspeak.com上注冊。如果您已經有一個帳戶,請登入并單擊“Channel”。

這樣做時,應将您定向到您的頻道頁面。點選“新頻道”建立一個新頻道。

加載後,将顯示頻道設定。填寫所需的内容,然後檢查2個字段,每個傳感器讀數顯示一個字段。您隻需要給它一個名稱和描述即可;其餘的都是不必要的。

完成後,隻需滾動到頁面底部,然後點選“儲存頻道”即可。之後,您可以通過單擊頂部的“私人視圖”頁籤來私密檢視顯示内容。您可以通過單擊鉛筆圖示來自定義字段圖。

您還需要擷取Arduino代碼的API密鑰,以便SIM800L将資料傳輸到ThingSpeak。要檢查您的API密鑰,請單擊頂部的“ API密鑰”标簽。

代碼

用戶端(帶有傳感器的Ra-02 LoRa子產品)

AQM_Client.ino代碼

</>

伺服器(帶SIM800L子產品的Dragino LoRa Shield)

AQM_Server.ino代碼

</>

代碼分解

用戶端

預初始化

</>

在開始之前,我們必須包括要在項目中使用的庫。 RHReliableDatagram用于發送尋址,确認和重傳的資料報,并且在RH_RF95庫中。 這兩個庫的功能取決于SPI(串行外圍接口),是以也包括其中一個。

</>

之後,我們定義用戶端位址和伺服器位址。 重要的是要確定與LoRa防護罩進行一對一通信,而不要與附近的其他任何通信。 接下來,我們以驅動程式和用戶端位址作為參數來建立RF95驅動程式對象和資料報管理器。

</>

接下來,我們将引腳配置設定給傳感器。 對于DSM501,第一個參數用于配置設定給引腳6的PM1.0。第二個參數用于PM2.5。 對于MQ131,第一個參數用于加熱器,該加熱器已經內建到子產品中,是以您可以将其配置設定給尚未使用的任何引腳。

Void Setup()

</>

在setup()函數中,我們将串行波特率設定為9600 bps,這是串行通信的預設值。 然後,我們放置一條if語句,以通過在失敗時列印一條消息來檢查可靠的資料報管理器是否已初始化。

Void Loop()

</>

在loop()函數内部,我們使用dsm501.update()擷取灰塵傳感器的讀數,然後使用dsm501.getParticleWeight(1)獲得2.5 µm以上顆粒的顆粒物密度。 然後,我們必須将此浮點值轉換為字元串,并使用dtostrf()同時将其存儲在變量中。

</>

然後可以使用manager.sendtoWait()将這些資料發送到伺服器端。 這将發送消息(并重試)并等待确認。 如果收到确認,則傳回true,進而允許它使用manager.recvfromAckTimeout()列印确認答複。

</>

接下來,我們使用o3sensor.begin()擷取臭氧氣體傳感器的讀數,然後使用o3sensor.getO3(UG_M3)獲得以µg / m3為機關的值。 如果要擷取在全球統計資料報告中更常用的十億分之一,則可以使用o3sensor.getO3(PBB)代替。 類似于上面的灰塵傳感器讀數,然後我們必須将float值轉換為字元串,并使用dtostrf()同時将其存儲在變量中。

這一部分與上面的部分類似,我們将傳感器的讀數發送到伺服器端,但是這次是針對臭氧氣體傳感器的。

伺服器

預初始化

</>

同樣,我們必須包括要在項目中使用的庫。 SoftwareSerial庫允許在Arduino的其他數字引腳上進行串行通信,這使我們可以将引腳2和3分别用作接收器和發送器。 這也使我們可以将其用作調試序列,并列印出以後收到的消息。

</>

之後,我們定義用戶端位址和伺服器位址。 同樣,這一點很重要,以確定您與Ra-02進行一對一交流,而不是與附近的其他任何人進行交流,是以請確定它們與用戶端代碼中的内容相同。 接下來,我們以驅動程式和伺服器位址為參數建立RF95驅動程式對象和資料報管理器。

</>

在這裡,我們建立要在伺服器端收到消息時發送給用戶端的消息,并初始化變量buf來存儲傳入的傳感器讀取資料。 稍後将使用索引來區分接收到的兩個資料值。

Void Setup()

</>

在setup()函數内部,我們将串行波特率設定為9600 bps,這是串行通信的預設值,而GSM串行波特率設定為4800 bps。 之後,我們放置一條if語句,通過在失敗時列印一條消息來檢查可靠的資料報管理器是否已初始化。

SIM800L AT指令用于将資料發送到ThingSpeak

</>

AT(ATtention)指令是用于控制數據機的指令。 首先,AT + CIPMODE = 0将TCPIP應用模式設定為正常模式,因為這對于控制SIM800L與Internet的連接配接是必需的。 其次,AT + CIPMUX = 0啟動單個IP連接配接,AT + CGATT = 1将我們附加到GPRS服務。 第三,AT + CSTT =“ APN”啟動任務并将通路點名稱設定為指定的URL,然後AT + CIICR建立與GPRS的無線連接配接。 您可以找到用于線上擁有的SIM卡的APN。

Void Loop()

</>

在loop()函數中,我們檢查是否通過manager.available()收到了一條消息,并且如果index為1,則表示它是第一個傳感器的資料。 recvfromAck()将從緩沖區中擷取資料并在串行螢幕中列印。 完成後,它将調用gsmSend()函數,該函數包含所有AT指令,以将資料發送到ThingSpeak,然後将索引設定為2,以便知道第二個傳感器的資料即将到來。

</>

這部分與上面的部分類似,我們将資料發送到ThingSpeak,但是這次是第二個接收到的資料,該資料來自第二個傳感器。

參閱

建構Arduino的LoRa遠端智能空氣品質監測系統 - 國外課棧​viadean.com

arduino讀取水位傳感器的資料顯示在基于i2c的1602a上_建構Arduino的LoRa遠端智能空氣品質監測系統...

繼續閱讀