我們利用此套件中的接近感測器完成了一個非常好玩的專案,具體內容請點擊閃光萬聖節面具項目。
ROHM Sensor Shield(ROHM感測器研發板)是一種相容Arduino的擴展板,旨在幫助用戶快速將各種感測器添加到自己的研發專案中。憑藉其直觀的佈局和緊湊性,該研發板成為初學者和高級Arduino愛好者的絕佳原型製作工具。
Sensor Evaluation Kit(感測器評估套件)配備了ROHM感測器研發板和8種不同的ROHM感測器:加速度感測器、氣壓感測器、地磁感測器、環境光/接近感測器、顏色感測器、霍爾感測器、溫度感測器和 紫外線感測器。
有關感測器研發板和每個感測器的詳細文件,請參閱http://www.rohm.com/web/global/sensor-shield-support,該網頁還為您提供了各個感測器所需的Arduino程式館的下載連結。評估套件封裝中的用戶手冊對感測器研發板與感測器的配合使用進行了說明,該使用者手冊的電子版也可在該網站上找到。
在本文中,我們將概述一下感測器研發板的設定和首次使用情況,然後利用研發板和其他器件展示一個簡單的物聯網項目。
該研發板有兩個功能特別突出。首先,研發板允許用戶同時處理多個感測器。對於涉及兩種獨立傳感形式的項目,使用者可以一次性對系統進行整體原型設計,而不必分多個步驟進行。很方便,是吧?
其次,不同的感測器可以直接插入研發板。這使原型製作更加緊湊,並使大型專案更易於管理。由於Analog(類比)、GPIO和I2C通信連接都是在研發板PCB內部實現的,因此無需連接多個跳線。
我們以I2C協議為例進行說明。一個獨立的I2C感測器與Arduino通信至少需要四根單獨的連線(SDA、SCL、電源和地)以及SDA和SCL線上的2個上拉電阻。而使用感測器研發板,用戶僅需將等效的ROHM感測器插到研發板上的一個I2C介面即可。
感測器研發板的長邊處有一排公插針。大多數針腳可以用來配置各種硬體中斷。作為初學者,我們將僅關注板子邊緣標有1.8V、3V和5V的前三行。這三個引腳表示所連接感測器的電壓設定。某些感測器需要特定的工作電壓,因此需要選擇不同的電壓設定。要選擇相應電壓,使用者必須用跳線跨接相應電壓電平的那對針腳。圖3展示了用跳線選擇3V電壓的範例。
在研發板上兩條Arduino連接排母之間,有八組不同的母排針介面(虛線框內)。這八組母排針用來連接不同的感測器。
需要注意的是,使用某個感測器時,必須將其插入與感測器通信方式相符的母排針中,這一點很重要。比如,溫度感測器的輸出是類比值,因此,它只能連至標有類比連接的兩組介面中的任何一組。手冊用鮮明的顏色描述了母排針介面與通信協定的對應關係,請參見下圖。
輸出為類比值的兩個感測器是溫度感測器和紫外線感測器。以溫度感測器為例,要使用這個感測器,我們首先必須下載相應的名為BD1020HFV(溫度感測器模組的名稱)的Arduino程式館。
請打開程式館隨附的範例程式。請在程式館include語句下方的程式頂部,將變數tempout_pin設定為值A2。在void setup()中,BD1020物件(溫度感測器物件)將使用該值進行初始化,表示系統會從類比引腳2讀取感測器的輸出值。這意味著我們必須將溫度感測器模組連至感測器研發板上的Analog_2排針連接器。
將範例程式上傳到Arduino並打開Serial Monitor(序列監視器)。此軟體介面上應該會不斷出現消息,顯示所測量的當前溫度。要測試感測器是否按預期工作,請將手指按到感測器的金屬觸點上。此時,監視器介面上的消息應該會顯示溫度已經升高!
輸出範例如下:“BD1020HFV Temp=23.59 [degrees Celsius], ADC=277”。
“ADC”表示感測器輸出類比值(電壓)的整數轉換。
接下來,我們來研究一下使用I2C協議通信的感測器。此類感測器包括加速度計、壓力感測器、地磁感測器、環境光/接近感測器和顏色感測器。以加速度計為例,要使用這個感測器,我們首先必須下載名為KX022的相應Arduino程式館。
請打開這個程式館提供的範例程式。將加速度計模組插到感測器研發板的任意一個I2C介面上,並上傳範例程式。您可能需要在程式的第一行(#include語句上方)輸入“#define byte uint8_t”,因為Arduino編譯器可能無法將“byte”識別為有效資料類型。
打開Serial Monitor(序列監視器)。監視器應該不斷顯示消息,指示X、Y和Z軸的加速度。三個軸在加速度計上用小圖表示。
要測試加速度計,請在其中一個軸向上突然行動該模組。這時,該方向上的加速度分量會發生變化。
輸出範例如下:
“KX022 (X) = -0.02 [g]
KX022 (Y) = -0.00 [g]
KX022 (Z) = 1.00 [g]”
該輸出表明,在記錄這些數值的時刻,載有加速度計的物件在X或Y方向上幾乎沒有加速度,而在Z方向上(朝向地球)存在重力加速度。
最後,我們來看一下唯一一種透過GPIO連接通信的感測器,即霍爾感測器。霍爾感測器僅檢測磁場的存在或不存在。因此,它的輸出是數位訊號:“low(低電平)”表示磁場存在;“high(高電平)”表示沒有磁場。
在Arduino上,數位訊號輸入和輸出(簡稱IO)的工作範圍為5V電平,因此我們必須將跳線移至5V設定。
要使用這個感測器,我們首先必須下載名為BD7411相應Arduino程式館。請打開程式館隨附的範例程式。感測器研發板上標有GPIO的數位輸出感測器(比如霍爾感測器)插槽只有一個。將範例程式上傳到Arduino並打開Serial Monitor。如果存在磁場,那麼序列監視器會顯示“BD7411G Magnet field Detect!”(BD7411G檢測到磁場)。
如果您想在自己的專案中使用該感測器研發板,只需下載並在套裝程式含所需的感測器程式館,然後用這些程式館中的不同方法與感測器進行通信即可。您可以參考每個程式館附帶的範例程式以及該程式館的.cpp和.h原始檔案,以確切瞭解如何使用這些方法。
我用不同感測器及其程式館實現了多個簡單項目:
1. 當霍爾感測器附近存在磁場時,點亮LED
元件:
在該項目中,每當霍爾感測器附近存在磁場時,LED燈亮起。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <BD7411.h> 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畫出溫度隨時間變化的曲線
元件:
該專案透過Processing Sketch繪製一段時間內的溫度曲線。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
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); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <BD1020.h> 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); } |
我們利用此套件中的接近感測器完成了一個非常好玩的專案,具體內容請點擊閃光萬聖節面具項目。