這篇文章來源于DevicePlus.com英語網站的翻譯稿。
我們利用此套件中的接近傳感器完成了一個非常好玩的項目,具體內容請點擊閃光萬圣節面具項目。
ROHM Sensor Shield(ROHM傳感器開發板)是一種兼容Arduino的擴展板,旨在幫助用戶快速將各種傳感器添加到自己的開發項目中。憑借其直觀的布局和緊湊性,該開發板成為初學者和高級Arduino愛好者的絕佳原型制作工具。
Sensor Evaluation Kit(傳感器評估套件)配備了ROHM傳感器開發板和8種不同的ROHM傳感器:加速度傳感器、氣壓傳感器、地磁傳感器、環境光/接近傳感器、顏色傳感器、霍爾傳感器、溫度傳感器和 紫外線傳感器。
有關傳感器開發板和每個傳感器的詳細文檔,請參閱https://www.rohm.com/web/global/sensor-shield-support,該網頁還為您提供了各個傳感器所需的Arduino庫的下載鏈接。評估套件包裝中的用戶手冊對傳感器開發板與傳感器的配合使用進行了說明,該用戶手冊的電子版也可在該網站上找到。
在本文中,我們將概述一下傳感器開發板的設置和首次使用情況,然后利用開發板和其他器件展示一個簡單的物聯網項目。
圖1 ROHM傳感器開發板(右上方)以及8種不同傳感器/@CoreStaff
該開發板有兩個功能特別突出。首先,開發板允許用戶同時處理多個傳感器。對于涉及兩種獨立傳感形式的項目,用戶可以一次性對系統進行整體原型設計,而不必分多個步驟進行。很方便,是吧?
圖2 多個傳感器同時插到傳感器開發板上
(圖中連接了溫度傳感器和接近傳感器/環境光傳感器)
其次,不同的傳感器可以直接插入開發板。這使原型制作更加緊湊,并使大型項目更易于管理。由于Analog(模擬)、GPIO和I2C通信連接都是在開發板PCB內部實現的,因此無需連接多個跳線。
我們以I2C協議為例進行說明。一個獨立的I2C傳感器與Arduino通信至少需要四根單獨的連線(SDA、SCL、電源和地)以及SDA和SCL線上的2個上拉電阻。而使用傳感器開發板,用戶僅需將等效的ROHM傳感器插到開發板上的一個I2C接口即可。
傳感器開發板的長邊處有一排公插針。大多數針腳可以用來配置各種硬件中斷。作為初學者,我們將僅關注板子邊緣標有1.8V、3V和5V的前三行。這三個引腳表示所連接傳感器的電壓設置。某些傳感器需要特定的工作電壓,因此需要選擇不同的電壓設置。要選擇相應電壓,用戶必須用跳線跨接相應電壓電平的那對針腳。圖3展示了用跳線選擇3V電壓的示例。
圖3 用跳線選擇3V電壓
在開發板上兩條Arduino連接排母之間,有八組不同的母排針接口(虛線框內)。這八組母排針用來連接不同的傳感器。
需要注意的是,使用某個傳感器時,必須將其插入與傳感器通信方式相符的母排針中,這一點很重要。比如,溫度傳感器的輸出是模擬值,因此,它只能連至標有模擬連接的兩組接口中的任何一組。手冊用鮮明的顏色描述了母排針接口與通信協議的對應關系,請參見下圖。
藍:Analog;紅:數字GPIO;綠:I2C
測試溫度傳感器
輸出為模擬值的兩個傳感器是溫度傳感器和紫外線傳感器。以溫度傳感器為例,要使用這個傳感器,我們首先必須下載相應的名為BD1020HFV(溫度傳感器模塊的名稱)的Arduino庫。
請打開庫隨附的示例程序。請在庫include語句下方的程序頂部,將變量 tempout_pin 設置為值 A2。在void setup()中,BD1020對象(溫度傳感器對象)將使用該值進行初始化,表示系統會從模擬引腳2讀取傳感器的輸出值。這意味著我們必須將溫度傳感器模塊連至傳感器開發板上的 Analog_2 排針連接器。
圖4 溫度傳感器連至Analog 2連接器(板右下方)
將示例程序上傳到Arduino并打開Serial Monitor(串行監視器)。此軟件界面上應該會不斷出現消息,顯示所測量的當前溫度。要測試傳感器是否按預期工作,請將手指按到傳感器的金屬觸點上。此時,監視器界面上的消息應該會顯示溫度已經升高!
圖5 溫度傳感器金屬觸點的標記為“PAD1”
輸出示例如下:“BD1020HFV Temp=23.59 [degrees Celsius], ADC=277”。
“ADC”表示傳感器輸出模擬值(電壓)的整數轉換。
測試加速度計
接下來,我們來研究一下使用I2C協議通信的傳感器。此類傳感器包括加速度計、壓力傳感器、地磁傳感器、環境光/接近傳感器和顏色傳感器。以加速度計為例,要使用這個傳感器,我們首先必須下載名為KX022的相應Arduino庫。
請打開這個庫提供的示例程序。將加速度計模塊插到傳感器開發板的任意一個I2C接口上,并上傳示例程序。您可能需要在程序的第一行(#include語句上方)輸入“#define byte uint8_t”,因為Arduino編譯器可能無法將“byte”識別為有效數據類型。
圖6 加速度計模塊連至開發板的I2C接口
打開Serial Monitor(串行監視器)。監視器應該不斷顯示消息,指示X、Y和Z軸的加速度。三個軸在加速度計上用小圖表示。
圖7 加速度計模塊以及三個軸向
要測試加速度計,請在其中一個軸向上突然移動該模塊。這時,該方向上的加速度分量會發生變化。
輸出示例如下:
“KX022 (X) = -0.02 [g]
KX022 (Y) = -0.00 [g]
KX022 (Z) = 1.00 [g]”
測試霍爾傳感器
最后,我們來看一下唯一一種通過GPIO連接通信的傳感器,即霍爾傳感器?;魻杺鞲衅鲀H檢測磁場的存在或不存在。因此,它的輸出是數字信號:“low(低電平)”表示磁場存在;“high(高電平)”表示沒有磁場。
在Arduino上,數字信號輸入和輸出(簡稱IO)的工作范圍為5V電平,因此我們必須將跳線移至5V設置。
圖8.選擇5V電源
要使用這個傳感器,我們首先必須下載名為BD7411的相應Arduino庫。請打開庫隨附的示例程序。傳感器開發板上標有GPIO的數字輸出傳感器(比如霍爾傳感器)插槽只有一個。將示例程序上傳到Arduino并打開Serial Monitor。如果存在磁場,那么串行監視器會顯示“BD7411G Magnet field Detect!”(BD7411G檢測到磁場)。
如果您想在自己的項目中使用該傳感器開發板,只需下載并在程序包含所需的傳感器庫,然后用這些庫中的不同方法與傳感器進行通信即可。您可以參考每個庫附帶的示例程序以及該庫的.cpp和.h源文件,以確切了解如何使用這些方法。
我用不同傳感器及其庫實現了多個簡單項目:
1. 當霍爾傳感器附近存在磁場時,點亮LED
圖9 完成的霍爾傳感器項目
元器件:
LED
220? 電阻(限制LED的電流)
跳線
面包板
ROHM 傳感器開發板與霍爾傳感器模塊
Arduino Uno
裝有Arduino IDE的電腦
連接電腦與Arduino Uno的USB電纜
在該項目中,每當霍爾傳感器附近存在磁場時,LED燈亮起。
將傳感器開發板安裝到Arduino的母排針上
將霍爾傳感器模塊插到開發板的GPIO接口上
通過220Ω電阻將LED的負極引線連至傳感器開發板的地
將LED的正極引線連到傳感器屏蔽板上的數字引腳12上
將以下代碼上傳到Arduino:
#include int led_pin = 12; int hallout_pin = 0; // use D0 pin BD7411 bd7411; void setup() { bd7411.init(hallout_pin); pinMode(led_pin, OUTPUT); } void loop() { int hallout; hallout = bd7411.readoutpin(); if (hallout == 0) { digitalWrite(led_pin, HIGH); } else { digitalWrite(led_pin, LOW); } delay(500); }
2. 利用Processing畫出溫度隨時間變化的曲線
圖10 裝到傳感器開發板的Analog_2接口上的溫度傳感器(右下方)
元器件:
ROHM 傳感器開發板與溫度傳感器模塊
Arduino Uno
裝有Arduino和Processing(https://processing.org/download/)IDE的電腦
連接電腦與Arduino Uno的USB電纜
該項目通過Processing Sketch繪制一段時間內的溫度曲線。
將傳感器開發板安裝到Arduino的母排針上
將溫度傳感器模塊插到開發板的Analog_2接口上
在Processing中運行以下程序:
import processing.serial.*; Serial arduinoPort; // The serial port int currentX = 0; // horizontal position of the graph float data = 0; void setup () { size(1000, 300); arduinoPort = new Serial(this, Serial.list()[1], 9600); //"intercept" serial print messages arduinoPort.bufferUntil('n'); background(0); } float oldData =0; void draw () { stroke(0, 255, 0); if (currentX++ >= width) //start at the left of the window with a blank screen when the screen has been filled { currentX=0; background(0); } if (Math.abs(data-oldData) < 30) //prevent the program from drawing noise spikes { line(currentX, height - oldData, currentX++, height - data); } else { stroke(0, 0, 0); line(currentX, height - oldData, currentX++, height - data); } oldData = data; } void serialEvent (Serial arduinoPort) { String serialInput = arduinoPort.readStringUntil('n'); if (serialInput != null) { serialInput = trim(serialInput); data = int(serialInput); println(data); data = map(data, 0, 1023, 0, height); } }
將以下程序上傳至Arduino:
#include int tempout_pin = A2; BD1020 bd1020; void setup() { Serial.begin(9600); while (!Serial); bd1020.init(tempout_pin); } void loop() { float temp; bd1020.get_val(&temp); Serial.println(bd1020.temp_adc); delay(500); }
我們利用此套件中的接近傳感器完成了一個非常好玩的項目,具體內容請點擊閃光萬圣節面具項目。
Rahul Iyer
Rahul是加州大學洛杉磯分校電氣工程學院的學生,愛好電子和機器人項目,尤其熱衷于電動汽車技術和輔助機器人技術。
審核編輯黃宇
-
傳感器
+關注
關注
2550文章
51043瀏覽量
753108 -
Arduino
+關注
關注
188文章
6469瀏覽量
186962
發布評論請先 登錄
相關推薦
評論