紫外線(Ultraviolet rays),簡稱UV,是太陽發(fā)出的光線。由于臭氧層的消耗,這些射線趨于達到極高的限值,可能導致皮膚曬傷等。這就是為什么始終需要每天和每小時對紫外線指數(shù)進行預測,以幫助人們保持追蹤和保持安全的原因。為了進行監(jiān)控,為什么不擁有個人紫外線強度計?
在本篇文章中,我們將使用Arduino開發(fā)板和諾基亞5110 LCD顯示屏以及紫外線傳感器(UVM30A)來制作一款紫外線強度計。諾基亞5110用于顯示紫外線強度指數(shù),這個是國際標準單位,用于表示在特定位置和特定時間遇到的來自太陽的紫外線強度。
測量特定位置和特定時間的紫外線指數(shù)的目的是為了防止人們受到高紫外線指數(shù)射線所引起的危險,因為高紫外線射線可能會導致諸如曬傷等現(xiàn)象。它還可以用來指導人們,以便他們能夠采取足夠的保護措施,例如每天使用防曬霜、太陽鏡、帽子等。試圖將紫外線指數(shù)與適當?shù)姆雷o設備匹配的紫外線防護圖如下所示:

從該圖表可以看出,當紫外線水平極高時,建議留在室內,原因是紫外線指數(shù)室內大部分為零。這意味著在測試我們將要制造的設備時,應將其拿到外面,如下圖所示,因為在室內測試時該值不會改變。
本文中將使用的UVM30A紫外線傳感器是一個具有幾乎線性輸出的低成本模擬傳感器。這意味著傳感器的輸出分別隨紫外線輻射的成比例增加而增加。從傳感器數(shù)據表中摘錄出的傳感器輸出(以mV為單位)相對于紫外線指數(shù)的圖表如下所示。

UV指數(shù)與傳感器輸出電壓之間的線性關系
它是一個由VCC、GND和模擬信號輸出組成的簡單的三引腳傳感器,這樣就可以開始工作了。
所需的組件
● 紫外線傳感器
● Arduino Uno開發(fā)板
● 諾基亞5110 LCD顯示屏
● 面包板
● 連接導線
原理圖
準備好所有組件之后,請按照以下示意圖進行原理圖連接:

我們在之前的文章中介紹了將N0kia 5110 LCD連接到Arduino開發(fā)板的方法,但在本文中,我們仍列出了引腳圖的連接方式。同時本文給出了UV傳感器與Arduino開發(fā)板的連接方式。
UV傳感器與Arduino開發(fā)板的引腳連接表
| GND | GND |
| VCC | VCC |
| output | A0 |
諾基亞5110 LCD與Arduino開發(fā)板之間的引腳連接表:
| Pin 1(RST) | D12 |
| Pin 2(CE) | D11 |
| Pin 3(DC) | D10 |
| Pin 4(DIN) | D9 |
| Pin 5(CLK) | D8 |
| Pin 6(VCC) | VCC |
| Pin 7(LIGHT) | GND |
| Pin 8(GND) | GND |
在編寫代碼之前,請仔細檢查連接以確認一切正常。
代碼
此項目的代碼非常簡單,我們僅使用一個庫(諾基亞5110 LCD庫)與LCD進行通信??梢詮拇随溄酉螺d該庫。該代碼的基本操作是讀取傳感器輸出連接到的模擬引腳0(A0),并將其轉換為mV,以便我們可以與UV指數(shù)表中的值進行比較,并計算該特定位置和時間的UV指數(shù)。在計算并確定了紫外線指數(shù)之后,該指數(shù)通過諾基亞5110 LCD顯示給用戶。下圖顯示了用于比較的紫外線指數(shù)表。

與往常一樣,我們將代碼分成小塊,并在給出完整代碼之前進行解釋。首先,我們在代碼中要做的第一件事是導入諾基亞5110 LCD庫,該庫是顯示屏所必需的。
//////////////////////////////////////////////
// Arduino UV Meter //
// with NOKIA 5110 LCD //
// http://www.educ8s.tv //
/////////////////////////////////////////////
#include
導入庫后,我們開始聲明將在代碼中使用的其他變量和常量。
LCD5110 lcd(8,9,10,12,11);
extern unsigned char BigNumbers[];
extern uint8_t splash[];
extern uint8_t ui[];
String UV = "0";
完成后,我們轉到setup函數(shù)。我們要做的第一件事是初始化LCD,然后設置顯示器的字體,使用lcd.clrScr()清除屏幕,然后繪制初始位圖。
void setup() {
lcd.InitLCD();
lcd.setFont(BigNumbers);
lcd.clrScr();
lcd.drawBitmap(0, 0, splash, 84, 48);
在執(zhí)行drawBitmap命令之后,我們更新LCD以反映更改,并延遲3000毫秒以確保啟動畫面在屏幕上停留的時間足夠長。
lcd.update();
delay(3000);
}
setup函數(shù)結束后,我們進入loop()函數(shù),這里調用readSensor函數(shù),該函數(shù)從UV傳感器讀取值,將其轉換為mV并將其與Index表進行比較以獲得mV的UV索引匹配讀入的值。
void loop() {
int stringLength = 0;
UV = readSensor();
接下來,我們清除屏幕并繪制將要插入索引的UI。
lcd.clrScr();
lcd.drawBitmap(0, 0, ui, 84, 48);
繪制UI后,我們將計算索引的長度,并使用printUV函數(shù)將其顯示,然后調用LCD更新命令。
stringLength = UV.length();
printUV(stringLength);
lcd.update();
delay(150);
}
該項目的完整代碼如下。
//////////////////////////////////////////////
// Arduino UV Meter //
// with NOKIA 5110 LCD //
// http://www.educ8s.tv //
/////////////////////////////////////////////
#include
LCD5110 lcd(8,9,10,12,11);
extern unsigned char BigNumbers[];
extern uint8_t splash[];
extern uint8_t ui[];
String UV = "0";
void setup() {
lcd.InitLCD();
lcd.setFont(BigNumbers);
lcd.clrScr();
lcd.drawBitmap(0, 0, splash, 84, 48);
lcd.update();
delay(3000);
}
void loop() {
int stringLength = 0;
UV = readSensor();
lcd.clrScr();
lcd.drawBitmap(0, 0, ui, 84, 48);
stringLength = UV.length();
printUV(stringLength);
lcd.update();
delay(150);
}
void printUV(int length)
{
switch(length)
{
case 1:lcd.print(UV,38,19); break;
case 2:lcd.print(UV,24,19); break;
default:lcd.print(UV,0,19); break;
}
}
String readSensor()
{
String UVIndex = "0";
int sensorValue = 0;
sensorValue = analogRead(0); //connect UV sensor to Analog 0
int voltage = (sensorValue * (5.0 / 1023.0))*1000;//Voltage in miliVolts
if(voltage<50)
{
UVIndex = "0";
}else if (voltage>50 && voltage<=227)
{
UVIndex = "0";
}else if (voltage>227 && voltage<=318)
{
UVIndex = "1";
}
else if (voltage>318 && voltage<=408)
{
UVIndex = "2";
}else if (voltage>408 && voltage<=503)
{
UVIndex = "3";
}
else if (voltage>503 && voltage<=606)
{
UVIndex = "4";
}else if (voltage>606 && voltage<=696)
{
UVIndex = "5";
}else if (voltage>696 && voltage<=795)
{
UVIndex = "6";
}else if (voltage>795 && voltage<=881)
{
UVIndex = "7";
}
else if (voltage>881 && voltage<=976)
{
UVIndex = "8";
}
else if (voltage>976 && voltage<=1079)
{
UVIndex = "9";
}
else if (voltage>1079 && voltage<=1170)
{
UVIndex = "10";
}else if (voltage>1170)
{
UVIndex = "11";
}
return UVIndex;
}
演示
將Arduino開發(fā)板連接到計算機,啟動IDE并將代碼粘貼到其中。 在上傳之前,請不要忘記將UI和Splash文件添加到代碼的Arduino sketch文件夾中,因為這可能會引發(fā)錯誤。
將代碼上傳到您的開發(fā)板上,然后帶到外面以測量您所在區(qū)域的紫外線強度。
編輯:hfy
-
紫外線
+關注
關注
1文章
381瀏覽量
22150 -
Arduino
+關注
關注
190文章
6527瀏覽量
197515 -
LCD顯示屏
+關注
關注
1文章
92瀏覽量
15599 -
紫外線傳感器
+關注
關注
0文章
89瀏覽量
12931
發(fā)布評論請先 登錄
【RA-Eco-RA4M2開發(fā)板評測】+ TFT屏及其顯示驅動
【EASY EAI Nano-TB(RV1126B)開發(fā)板試用】+顯示屏連接與顯示測試
LCD液晶顯示屏在強光模擬下的性能測試
51單片機驅動VEML6075測量紫外線強度
基于RK3568開發(fā)板顯示屏調試適配方法(1)-如何在Uboot界面切換顯示屏
新技術可提升紫外線傳感器響應速度
碩博電子7寸觸摸顯示屏,支持CAN通信和Codesy編程#工業(yè)顯示屏 #汽車CAN總線? #觸摸顯示屏
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】1、開發(fā)板開箱及介紹
太陽光模擬器的紫外線老化測試標準
如何用Arduino Nano/UNO R3開發(fā)板給另一個Arduino IDE不能下載的Arduino Nano/UNO R3開發(fā)板重新燒錄引導程序bootlaoder
【免費試用】匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗
基于Arduino開發(fā)板和諾基亞5110 LCD顯示屏的紫外線強度計案例
評論