張保新 張春霞 梁進龍
摘 ?要:典型的傳感器數(shù)據(jù)輸出接口類型,包括模擬型、數(shù)字狀態(tài)型(0、1型)、1-Wire型、I2C型和SPI型。使用這些類型的傳感器及相應(yīng)特定編寫的驅(qū)動程序,Arduino平臺能獲得被測環(huán)境多種狀態(tài)的數(shù)字化表述數(shù)據(jù)。通過適當?shù)臄?shù)據(jù)融合處理、增加信息傳輸(Wi-Fi+4G)及云端應(yīng)用(OneNet平臺)等功能,這種平臺可用于物聯(lián)網(wǎng)的感知層、傳輸層、應(yīng)用層的教學活動之中,也適合實際網(wǎng)絡(luò)的建設(shè)。
關(guān)鍵詞:傳感器;Arduino;驅(qū)動程序
中圖分類號:TP212.9;TN92 ? ? 文獻標識碼:A 文章編號:2096-4706(2019)17-0137-03
Abstract:Typical types of sensors data output interfaces include analog,digital state (0,1),1-Wire,I2C and SPI. Using these types of sensors and the corresponding specific drivers,the Arduino platform can obtain the digital representation data of various states of the environment under test. Through proper data fusion processings,increasing information transmission (Wi-Fi plus 4G) and cloud application (OneNet platform),this platform can be used in the teaching activities. For example,the perception layer,transmission layer, application layer and other aspects of the internet of things,and also suitable for the construction of the actual network.
Keywords:sensor;Arduino;driver
0 ?引 ?言
當前最受關(guān)注的技術(shù)以“云大物智”為首,這里的“物”,是指物聯(lián)網(wǎng)技術(shù)及其應(yīng)用。隨著RFID的誕生,物聯(lián)網(wǎng)就成為人們重點關(guān)注的技術(shù)領(lǐng)域,許多國家將物聯(lián)網(wǎng)的建設(shè)確立為國家戰(zhàn)略;眾多商業(yè)集團在看到物聯(lián)網(wǎng)的巨大發(fā)展前景后,紛紛加大了投資力度;教育領(lǐng)域也紛紛跟進。但由于物聯(lián)網(wǎng)發(fā)展迅速,許多配套的設(shè)施無法跟上現(xiàn)實的需要。既能適合教學需要,又能支撐物聯(lián)網(wǎng)實際建設(shè)需要的平臺,顯然有廣闊的需求空間。本文擬在構(gòu)建這類平臺方面做一些探索。通過對現(xiàn)有的技術(shù)進行分析發(fā)現(xiàn),沒有哪一種技術(shù)(或平臺)能獨立完成物聯(lián)網(wǎng)三層結(jié)構(gòu)的構(gòu)建,只有整合多平臺(如傳感器+Arduino+OneNet),才可以達到目的。
1 ?Arduino平臺的技術(shù)特點
Arduino平臺由硬件和軟件兩個部分構(gòu)成。
1.1 ?硬件
基于ATmega328P型號單片機構(gòu)建,該芯片的主要特性如下:
(1)高性能低功耗的AVR8位微處理器,工作頻率可達到20Hz;
(2)長持久性非易失性內(nèi)存33k Bytes FLASH+1k Bytes EEPROM;
(3)大容量內(nèi)存:2k Bytes SRAM;
(4)在線系統(tǒng)可編程能力;
(5)8比特/16比特計數(shù)器;
(6)6個PMW端口(模擬輸出);
(7)6個10比特ADC端口(模擬輸入);
(8)通信口:USART、SPI、I2C各一個。
這些先進的、多功能的特性,再加上合理的功能組合(如將USART轉(zhuǎn)換成USB功能),使Arduino平臺越來越受到高校師生的青睞,況且,單獨使用ATmega328P芯片開發(fā)產(chǎn)品,在Arduino的配合下,容易實現(xiàn)目標。
1.2 ?軟件
Arduino有自己的軟件開發(fā)IDE,這個軟件的易用性非常高,甚至沒有軟件基礎(chǔ)的人都能掌握。該軟件的另一個特點,就是官方提供了常用元器件的驅(qū)動庫,同時,極客群體也有相當多的貢獻。
基于以上的特點及其低成本的優(yōu)勢,選擇Arduino平臺作為物聯(lián)網(wǎng)感知層的基礎(chǔ)控件是非常明智的。
1.3 ?常用傳感器的選擇
雖然RFID的出現(xiàn),是物聯(lián)網(wǎng)得以成熟的里程碑事件,但大多數(shù)的時間,感知層的感知任務(wù)還得靠各種傳感器來完成。物聯(lián)網(wǎng)的應(yīng)用領(lǐng)域非常廣,用到的傳感器也是五花八門,這里僅以智能家居領(lǐng)域的應(yīng)用為例來選擇傳感器。
智能家居至少要包括三大功能:家庭安全防范、家庭設(shè)備自動化、家庭通信。
根據(jù)這些要求,做出如下選擇:
(1)高精度溫度傳感器(LM35),主要用途:環(huán)境感知和控制;
(2)人體紅外傳感器(HC-SR50),主要用途:家庭安全;
(3)溫濕度傳感器(DHT11或DHT20),主要用途:環(huán)境感知和控制;
(4)光強度傳感器(BH1750),主要用途:改善生活環(huán)境;
(5)加速度傳感器(ADXL345),主要用途:居家養(yǎng)老等。
這些傳感器除了能夠完成智能家居中的數(shù)據(jù)感應(yīng)功能外,另一個選擇的理由是,它們的數(shù)據(jù)輸出接口也非常典型,涵蓋了模擬型、數(shù)字狀態(tài)型(0、1型)、1-Wire型、I2C型和SPI型,這些接口是當今傳感器主要采用的數(shù)據(jù)接口,便于構(gòu)建學生知識的完整性。
2 ?基于Arduino平臺的傳感器驅(qū)動
通過包含相關(guān)庫函數(shù)、端口設(shè)置、防干擾措施等軟件編程來實現(xiàn)傳感器驅(qū)動。由于大部分傳感器輸出信息均已數(shù)字化,硬件連接電器工藝要求不高;如果使用模擬接口,需要注意抗干擾問題。
2.1 ?模擬類接口型器件的驅(qū)動
這類接口的傳感器,使用連續(xù)變化的電壓(或電流)來反應(yīng)其感知物理量的變化情況,如LM35型傳感器。如果是電壓型器件,可以直接讀取其輸出值。對于電流型器件,先進行I/U轉(zhuǎn)換后再讀取,驅(qū)動程序主要語句如下:
pinMode(n,INPUT); ? ? ? ? ?//定義端口為輸入屬性
int in = analogRead(n); ? ?//讀取端口模擬數(shù)據(jù)
注意事項:具體數(shù)值換算方式為inX(5/1024),其中in取值范圍0~1023,5為參考電壓值。n為端口(Pin)號,只能使用A0—A5端口。
2.2 ?數(shù)字狀態(tài)類接口型器件的驅(qū)動
這類傳感器的輸出只有兩種狀態(tài):在感知到有人或無人狀態(tài)時,分別用高電平或低電平來表示。如HC-SR50型傳感器,其驅(qū)動程序主要語句如下:
pinMode(n,INPUT_PULLUP); ? //定義內(nèi)部上拉的輸入口
int sta = digitalRead(n); ? ? ? //讀取數(shù)字化信息
注意事項:端口類型設(shè)置成內(nèi)部上拉,避免空接時輸入狀態(tài)不確定。這種配置如果無法與傳感器匹配,可以改用外接上拉(或下拉)10kΩ電阻來進行匹配。
2.3 ?1-Wire數(shù)字串口類接口型器件的驅(qū)動
這類接口已經(jīng)數(shù)字化,以某種固定數(shù)據(jù)格式表示數(shù)據(jù),數(shù)據(jù)長度為8~16位。由于是單線通信,數(shù)據(jù)信號實行分時雙向傳輸,時序圖如圖1所示。
其驅(qū)動程序主要語句如下:
#include <dht11.h> ? ? ? ? ? ? //加載驅(qū)動庫,分原生與外來兩類庫
dht11 DHT; ? ? ? ? ? ? ? ? ? ? //聲明具體實例
#define DHT11Pin 2 ? ? ? ? ? ?//定義通信管腳
int val = DHT.read(DHT11Pin); ?//讀取傳感器數(shù)值
注意事項:網(wǎng)上流行有多個版本的DHT11庫,引用時需要注意其細微差別,首選官方庫。數(shù)據(jù)讀出后注意數(shù)據(jù)的后期處理。
2.4 ?I2C數(shù)字串口類接口型器件的驅(qū)動
I2C數(shù)字化串口類接口,采用雙線(SDA、SCL)方式進行雙向分時通信,通過串口地址可以識別總線上的不同類型器件,是器件間主要接口類型,時序圖如圖2所示。
I2C接口,利用這兩條線上信號的變化,實現(xiàn)物理比特傳輸,并按規(guī)定的數(shù)據(jù)格式進行信息交換,完成控制命令和數(shù)據(jù)傳輸。不同廠家定義的數(shù)據(jù)格式略有不同,使用時請閱讀數(shù)據(jù)手冊。
其驅(qū)動程序主要語句如下:
#include <Wire.h> ? ? ? ? ?//使用官方Wire庫
#define Register_2D 0x2D ? ? ? ?//變量定義
#define Register_X0 0x32
#define Register_X1 0x33
#define ADDRESS_BH1750FVI 0x23 ? ?//定義器件的串口地址
Wire.beginTransmission(ADXAddress); //初始化器件
Wire.write(Register_2D);
Wire.write(8); ? ? ? ? ? ? ? ?//測量使能
Wire.endTransmission();
Wire.beginTransmission(ADXAddress); //數(shù)據(jù)讀取操作
Wire.write(Register_X0);
Wire.write(Register_X1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available()<=2)
{X0 = Wire.read();X1 = Wire.read();}
注意事項:命令設(shè)置要在程序?qū)Γ╓ire.beginTransmission
() /Wire.endTransmission())中執(zhí)行,要注意傳感器的響應(yīng)時間,確保其執(zhí)行完命令后再進行下一條操作。器件不同和數(shù)據(jù)格式不同,導致處理方式也不同。
2.5 ?SPI數(shù)字串口類接口型器件的驅(qū)動
SPI數(shù)字化串口類接口,采用四線(SDI、SDO、SCLK、CS)或三線、主從方式進行實時雙向通信。主機通過片選信號,實現(xiàn)一主多從的工作模式。圖3為四線制ADXL345型加速度傳感器寫狀態(tài)時序,其他部分不再贅述。由于SPI的協(xié)議較復雜,一些廠家只實現(xiàn)了部分功能,應(yīng)用時注意閱讀原廠數(shù)據(jù)手冊。
其驅(qū)動程序主要語句如下:
#include <SPI.h>
SPI.beginTransaction(SPISettings(4000000,MSBFIRST, SPI_MODE3)); ? //初始化SPI接口 傳輸速率400k、權(quán)重位MSB、工作方式MODE3
digitalWrite(SSPin,LOW); ? ? //片選置“0”
SPI.transfer16(0x710B); ? ? //
digitalWrite(SSPin,HIGH); ? //片選置“1”
digitalWrite(SSPin,LOW);
SPI.transfer(rBuffer,7); ? //數(shù)據(jù)傳送(收發(fā)同時進行,多單字節(jié)),一個樣值包括6個數(shù)。
digitalWrite(SSPin,HIGH);
注意事項:命令和讀取操作必須在片選的控制下進行(digitalWrite(SSPin,LOW)/ digitalWrite(SSPin,HIGH)),要注意傳感器的響應(yīng)時間,確保其執(zhí)行完命令后再進行下一條操作。器件工作狀態(tài)可選。
通過上面的程序設(shè)置,傳感器可以正常工作并將數(shù)據(jù)上傳給Arduino平臺,完成數(shù)據(jù)的采集工作。
3 ?數(shù)據(jù)融合的思考
物聯(lián)網(wǎng)的一項主要工作,就是如何利用獲得的數(shù)據(jù)(大數(shù)據(jù)),為服務(wù)對象提供更多、更高效的服務(wù),數(shù)據(jù)處理貫穿整個網(wǎng)絡(luò)。由于感知層形成的數(shù)據(jù)量非常龐大,如果不加甄別和篩選,對通信設(shè)施及應(yīng)用服務(wù)器均構(gòu)成重大壓力;這些數(shù)據(jù)的冗余性較高,直接傳送也是沒有必要的;對于實時性要求較高的安全類信息,需要在感知層立即進行分析并啟動相關(guān)處理裝置。在Arduino平臺上,只要實現(xiàn)數(shù)據(jù)的采集與上報、安全類信息的處理即可。
參考文獻:
[1] ATmega328P數(shù)據(jù)手冊 [Z].Atmel Corporation,2009.
[2] ADXL345數(shù)據(jù)手冊 [Z].Analog Devices,Inc.,2010-11.
[3] LM35數(shù)據(jù)手冊 [Z].National SemiconductorCorporation,2000-11.
[4]DHT11產(chǎn)品手冊 [Z].廣州奧松電子有限公司,2017-03.
[5] BH1750FVC數(shù)據(jù)手冊 [Z].ROHM SEMICONDUCTOR,2016-06.
[6] OneNet.設(shè)備開發(fā)指南 [EB/OL].https://open.iot. 10086.cn/doc/,2019-06-02.
[7] Arduino.Language Reference [EB/OL].https://www.arduino.cc/reference/en/,2019-06-02.
作者簡介:張保新(1965.08-),男,漢族,內(nèi)蒙古通遼人,高級工程師,學士學位,研究方向:光通信技術(shù)、物聯(lián)網(wǎng)應(yīng)用技術(shù)。