0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Mouser 的 STEAMy Summer:第 3 部分

梁宏滿 ? 2023-01-05 09:43 ? 次閱讀

poYBAGOzf4GAKRHZAAKucJVMdhU778.jpg

對(duì)于我們這些北半球的人來(lái)說(shuō),三伏天的夏天快結(jié)束了。但是,雖然這個(gè)有趣、無(wú)憂無(wú)慮的季節(jié)就在這里,但大部分時(shí)間陽(yáng)光明媚,隨之而來(lái)的是可能有害的紫外線 (UV) 輻射。在本系列的最后一篇文章中,我們將構(gòu)建我們的電路并對(duì) Arduino MKR1000 進(jìn)行編程以執(zhí)行我們之前建立的功能。此外,請(qǐng)務(wù)必閱讀本系列的第二篇博客,以更好地了解陽(yáng)光下安全樂(lè)趣背后的科學(xué)原理。

快速回顧一下,這些是您的紫外線監(jiān)測(cè)器和警報(bào)項(xiàng)目的頂級(jí)要求。您的設(shè)備應(yīng)該:

持續(xù)檢測(cè)紫外線輻射暴露水平。

確定暴露是否超過(guò)了預(yù)先指定的限制。

如果超出暴露限值,則觸發(fā)一個(gè)有趣且異想天開(kāi)的警報(bào)。

能夠重置曝光計(jì)數(shù)。

電池供電

將曝光數(shù)據(jù)發(fā)送到云端以供將來(lái)分析(請(qǐng)注意,此步驟有助于教孩子們?nèi)绾伍喿x圖表和圖形。)

簡(jiǎn)而言之,這個(gè)項(xiàng)目的目標(biāo)是建立一個(gè)設(shè)備來(lái)監(jiān)測(cè)我們暴露在陽(yáng)光下的情況,讓我們知道什么時(shí)候應(yīng)該在室內(nèi)休息一下或者多涂一些防曬霜。這是預(yù)制購(gòu)物車(chē)中的物料清單 (BOM) ,如果您在之前的博客中錯(cuò)過(guò)了它。話雖如此,讓我們開(kāi)始吧!

組裝硬件

您可能還記得本系列的第 2 部分,我們將使用Silicon Labs Si1145 傳感器來(lái)監(jiān)測(cè)我們的陽(yáng)光照射。我們將通過(guò) I2C 串行接口將傳感器數(shù)據(jù)傳送到Arduino MKR1000嵌入式開(kāi)發(fā)平臺(tái)。MKR1000 將處理數(shù)據(jù)處理和與云數(shù)據(jù)庫(kù)的通信,以存儲(chǔ)所有數(shù)據(jù)供以后分析。MKR1000 還可以方便地使用鋰聚合物 (Li-Po) 電池供電,這讓我們可以在享受陽(yáng)光的同時(shí)將設(shè)備帶到戶(hù)外。

以下是您和您年輕有抱負(fù)的工程師構(gòu)建此電路的步驟概要(圖 1 中的硬件原理圖和圖 2中的電路圖也提供了可視化圖示。):

將 MKR1000 放在面包板的邊緣,確保微型 USB 端口懸掛在末端。要指示 MKR1000 上的唯一引腳,請(qǐng)使用白色條紋,因?yàn)檫@是接地引腳。

將 Si1145 UV 傳感器(帶有插頭引腳)放置在面包板與 MKR1000 接地引腳相同的一側(cè)。

將 MKR1000 的接地引腳和 Si1145 紫外線傳感器的接地引腳連接到面包板的接地(藍(lán)色)導(dǎo)軌。

將 MKR1000 的 Vcc 引腳和 Si1145 紫外線傳感器的 Vin 引腳連接到面包板的電源(紅色)軌。

微控制器和傳感器的 I2C 端口連接在一起。將 D12 (SCL) 引腳連接到 Si1145 紫外線傳感器上的 SCL 引腳。這是共享時(shí)鐘信號(hào)。然后,將 D11 (SDA) 引腳連接到 Si1145 紫外線傳感器上的 SDA 引腳。這是兩個(gè)設(shè)備之間的共享數(shù)據(jù)總線。

測(cè)試到目前為止建立的連接,以確保您已正確連接所有內(nèi)容。為此,請(qǐng)轉(zhuǎn)至Mouser 的 GitHub站點(diǎn)并上傳 Arduino STEAMYSummer2018_MRK1000.ino 文件和 Wifi_Info.h 文件。成功加載代碼后,啟動(dòng) Arduino 集成開(kāi)發(fā)環(huán)境 (IDE) 的串行監(jiān)視器并確保您獲得可見(jiàn)光、紅外線 (IR) 和紫外線傳感器讀數(shù)。如果您在 MKR1000 上沒(méi)有看到綠色發(fā)光二極管 (LED) 或在串行監(jiān)視器中收到錯(cuò)誤消息“找不到 Si1145”,請(qǐng)務(wù)必再次檢查接線圖(圖 2)。

pYYBAGOzf4SAIgnlAABdyoq-hJg611.jpg

圖 1:此硬件原理圖說(shuō)明了引腳設(shè)置。(來(lái)源:作者)

poYBAGOzf4iAFP_HAACPFC4JKlY194.jpg

圖 2:此電路圖說(shuō)明了面包板布局。(來(lái)源:作者)

硬件設(shè)置的第一部分完成后,讓我們將注意力轉(zhuǎn)向用戶(hù)界面組件。回想一下,對(duì)于警報(bào),我們將使用壓電蜂鳴器,它肯定會(huì)引起附近任何人的注意。具體來(lái)說(shuō),選擇的蜂鳴器是 TDK Corporation 的PS1240P02BT,因?yàn)樗墓ぷ麟妷簽?3V。我們還將添加一個(gè)電阻器晶體管來(lái)幫助為蜂鳴器供電并確保它驅(qū)動(dòng)足夠的電流以使蜂鳴聲明顯。來(lái)自通用輸入/輸出 (GPIO) 引腳的電流限制為 7mA。微控制器的 GPIO 引腳(“D6”引腳)應(yīng)打開(kāi)晶體管并允許您:

將 NPN 晶體管放在面包板上。

將蜂鳴器的紅線連接到電源(紅色)導(dǎo)軌。

將黑線連接到晶體管的集電極引腳。

在面包板上放置一個(gè) 1kΩ 電阻,將一根導(dǎo)線連接到 NPN 晶體管的基極,然后將另一根電阻導(dǎo)線連接到 MKR1000 的 D6 引腳。

將 NPN 晶體管的發(fā)射極引腳連接到面包板的接地(藍(lán)色)導(dǎo)軌。

回想一下,一旦觸發(fā)警報(bào),我們需要一種重置設(shè)備的方法。為完成此要求,我們選擇了一個(gè)常開(kāi) (NO)瞬時(shí)按鈕。一個(gè) 10kΩ 的下拉電阻將用于將連接到微控制器 GPIO 引腳的按鈕接地,以防止任何浮動(dòng)輸入?,F(xiàn)在讓我們連接它們(圖 3):

接下來(lái)連接按鈕,將按鈕的一側(cè)掛在電源(紅色)導(dǎo)軌上。

將 10kΩ 電阻的一個(gè)端子連接到按鈕的另一側(cè)。

將電阻器的剩余端子接地。

將 MKR1000 D7 引腳連接到電阻器和按鈕的連接點(diǎn)。

poYBAGOzf4uAUQypAADO2FzQ38k665.jpg

圖 3:此印刷電路板 (PCB) 圖像說(shuō)明了布局。(來(lái)源:作者)

該電阻用作下拉電阻,確保 MKR1000 上的 GPIO 引腳在未按下按鈕時(shí)始終處于干凈的接地狀態(tài)。如果沒(méi)有電阻器,該引腳容易受到噪聲的影響,這可能會(huì)導(dǎo)致微控制器錯(cuò)誤地檢測(cè)到按鈕按下。

使用軟件

圖書(shū)館

貿(mào)澤為此項(xiàng)目開(kāi)放的庫(kù)包含以下工具、資源和功能:

#include

提供使用 I2C 串行通信協(xié)議所需的代碼。

#include “Adafruit_SI1145.h”

提供一組易于使用的函數(shù),用于與環(huán)境光傳感器進(jìn)行交互。

#include

#include

允許安全的 Wi-Fi 通信。

#include "Wifi_Info.h"

存儲(chǔ)服務(wù)集標(biāo)識(shí)符 (SSID)、Wi-Fi 保護(hù)訪問(wèn) II (WPA2) 密碼和 IFTTT(我們將在本文后面討論的工具)應(yīng)用程序接口 (API) 密鑰。將這些安全項(xiàng)目放在單獨(dú)的文件中是一個(gè)好習(xí)慣,這樣如果您共享代碼,就不必在每次共享修訂版時(shí)都記住刪除這些敏感信息。

圖 4提供了在 Arduino IDE 中編寫(xiě)的源代碼示例。

poYBAGOzf46AXY7ZAADHVQrXLXE709.jpg

圖 4:這是在 Arduino IDE 中編寫(xiě)的源代碼。(來(lái)源:作者)

關(guān)鍵變量

靜態(tài)常數(shù) int DELAY_AMT = 60000;

此變量等于 60,000 毫秒或 60 秒。它允許我們將傳感器讀數(shù)的數(shù)量限制為每分鐘一個(gè)。

靜態(tài)常數(shù) int AVG_ARRAY_SIZE = 60;

由于我們關(guān)心的是前一小時(shí)的平均 UV 讀數(shù),并且我們每分鐘讀取一個(gè)讀數(shù),因此該變量將使我們能夠?qū)π枰?60 個(gè)讀數(shù)進(jìn)行平均,以找到前一小時(shí)的當(dāng)前平均 UV 指數(shù)。

static const int BUZZER_PIN = 6;

蜂鳴器將在 MKR1000 的 GPIO D6 引腳控制下運(yùn)行。

靜態(tài)常量 int RESET_BUTTON_PIN = 7;

重置按鈕將連接到 MKR1000 的 GPIO D7 引腳。

靜態(tài)常量浮動(dòng) UV_THRESHOLD = 3.0;

如果前一小時(shí)的平均紫外線指數(shù)讀數(shù)為 3.0 或更高,則會(huì)觸發(fā)警報(bào)。

靜態(tài)常數(shù) int TONE_FREQ = 2500;

觸發(fā)警報(bào)將產(chǎn)生 2,500Hz 的蜂鳴音。

char ssid[] = "MY_SSID_HERE";

在 WiFI_Info.h 文件中,務(wù)必將此默認(rèn)值替換為您的本地 Wi-Fi SSID。請(qǐng)務(wù)必保留引號(hào)。

字符密碼[] =“MY_WPA2_KEY_HERE”;

在 WiFI_Info.h 文件中,務(wù)必將此默認(rèn)值替換為您的 Wi-Fi 密碼。請(qǐng)務(wù)必保留引號(hào)。

char IFTTT_APP_KEY[] = "YOUR_IFTTT_APP_KEY_HERE";

在 WiFI_Info.h 文件中,確保將此默認(rèn)值替換為您在為此項(xiàng)目創(chuàng)建 Webhook 時(shí)將生成的個(gè)人 IFTTT API 密鑰。請(qǐng)務(wù)必保留引號(hào)。

職能

無(wú)效設(shè)置()

void setup() 函數(shù)是必需的,所有初始化都將在其中進(jìn)行。此初始化包括建立調(diào)試串行通信通道、設(shè)置 Wi-Fi 模塊和 Si1145 環(huán)境光傳感器,以及確保輸入或輸出的 GPIO 引腳配置正確。

無(wú)效循環(huán)(){

浮動(dòng) currentUVindexReading = takeReading();

浮動(dòng) avgUVindexReading = runningAverage(currentUVindexReading);

sendDataToCloud(currentUVindexReading);

alertCheck(avgUVindexReading);

延遲(DELAY_AMT);

}

此處展示了整個(gè)主 loop() 函數(shù),以突出重要的編程范例。主循環(huán)應(yīng)包含盡可能少的代碼。事實(shí)上,目標(biāo)應(yīng)該是分解代碼,讓每個(gè)函數(shù)只做一件事。依靠函數(shù)調(diào)用使代碼更易讀,更容易排除故障。從上面的 void loop() 范例中,很容易創(chuàng)建 MKR1000 完成 setup() 函數(shù)中規(guī)定的任務(wù)后將發(fā)生的事情的概要。

概要應(yīng)按如下流程進(jìn)行:首先,需要將傳感器讀數(shù)存儲(chǔ)在名為 currentUVindexReading 的變量中。該值傳遞給另一個(gè)函數(shù),該函數(shù)記錄新的 UV 讀數(shù)并返回運(yùn)行平均值。然后,修改后的運(yùn)行平均值將傳遞給將其發(fā)送到 IFTTT 以附加到 Google 表格電子表格的函數(shù)。接下來(lái),將平均值與閾值進(jìn)行比較,結(jié)果將在必要時(shí)觸發(fā)警報(bào)。最后,系統(tǒng)必須暫停一分鐘,然后這個(gè)功能會(huì)重復(fù)執(zhí)行。

以下是主循環(huán)中每個(gè)增量函數(shù)的代碼分解:

浮動(dòng) takeReading()

此函數(shù)與 Si1145 環(huán)境光傳感器交互。它接收讀數(shù)并在串行端口上顯示結(jié)果,然后將 UV 指數(shù)值作為浮點(diǎn)數(shù)返回。

浮動(dòng)運(yùn)行平均值(浮動(dòng)新讀數(shù))

此函數(shù)保留一個(gè)靜態(tài)數(shù)組(意味著值在函數(shù)調(diào)用返回后保留)以跟蹤去年 UV 指數(shù)的運(yùn)行平均值。它以浮點(diǎn)數(shù)形式返回當(dāng)前平均 UV 指數(shù)。

void alertCheck(浮動(dòng) avgUVindexReading)

此功能將當(dāng)前平均紫外線指數(shù)與預(yù)定義閾值進(jìn)行比較,并在必要時(shí)發(fā)出警報(bào)。

void generateAlert()

此函數(shù)使用 Arduino IDE 內(nèi)置的 tone() 函數(shù)來(lái)生成蜂鳴器音調(diào)。它一直持續(xù)到按下重置按鈕,此時(shí)平均紫外線指數(shù)重置,設(shè)備返回監(jiān)測(cè)模式。

此功能利用 IFTTT.com webhook API 將當(dāng)前的紫外線指數(shù)讀數(shù)傳遞到 Google 表格電子表格,使您能夠遠(yuǎn)程研究數(shù)據(jù)。

把它們放在一起

我們將利用名為 IFTTT(“If This Then That”的縮寫(xiě))的網(wǎng)絡(luò)服務(wù)來(lái)允許 MKR1000 與 Google 表格通信(圖 5)。具體來(lái)說(shuō),IFTTT 服務(wù)被稱(chēng)為“Maker Webhooks”。IFTTT 在其網(wǎng)站上提供了有關(guān)如何使用其服務(wù)的精彩教程。結(jié)果是一個(gè)數(shù)據(jù)日志和一個(gè)漂亮的圖表,以幫助可視化數(shù)據(jù)。我們建議您通讀 IFTTT 網(wǎng)站上 webhook 的文檔部分,因?yàn)槟枰?Wifi_info.h 文件中包含特定于您的 IFTTT 帳戶(hù)的密鑰。

pYYBAGOzf5KAOv45AADDDCQcjvo696.jpg

圖 5:MKR1000 通過(guò) IFTTT 將其數(shù)據(jù)發(fā)送到 Google 表格。(作者)

如果您希望將項(xiàng)目從試驗(yàn)板上移開(kāi)并在戶(hù)外進(jìn)行測(cè)試,我們會(huì)提供 EagleCAD 原理圖和印刷電路板 (PCB) 布局來(lái)幫助您。我們還提供了一個(gè) 3D 打印機(jī)就緒的 STL 文件作為容納硬件的外殼(圖 6和圖 7)。

poYBAGOzf5WAcFAiAABpyxLfO-U859.jpg

圖 6:這是電路板屏蔽罩的 3D 渲染圖。(來(lái)源:作者)

pYYBAGOzf5eAfCqnAACz2WMeNJ8188.jpg

圖 6:這個(gè) 3D 打印項(xiàng)目外殼包含硬件。(來(lái)源:作者)

最后,設(shè)計(jì)文件和源代碼可在 Mouser 的GitHub 存儲(chǔ)庫(kù)中獲取。

審核編輯黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2541

    文章

    49941

    瀏覽量

    747429
  • Mouser
    +關(guān)注

    關(guān)注

    3

    文章

    160

    瀏覽量

    52829
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何進(jìn)行電源供應(yīng)設(shè)計(jì) – 4 部分

    電子發(fā)燒友網(wǎng)站提供《如何進(jìn)行電源供應(yīng)設(shè)計(jì) – 4 部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-09 10:34 ?0次下載
    如何進(jìn)行電源供應(yīng)設(shè)計(jì) – <b class='flag-5'>第</b> 4 <b class='flag-5'>部分</b>

    如何進(jìn)行電源設(shè)計(jì)-1部分

    電子發(fā)燒友網(wǎng)站提供《如何進(jìn)行電源設(shè)計(jì)-1部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 11:10 ?0次下載
    如何進(jìn)行電源設(shè)計(jì)-<b class='flag-5'>第</b>1<b class='flag-5'>部分</b>

    如何進(jìn)行電源設(shè)計(jì)–3部分

    電子發(fā)燒友網(wǎng)站提供《如何進(jìn)行電源設(shè)計(jì)–3部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 11:08 ?0次下載
    如何進(jìn)行電源設(shè)計(jì)–<b class='flag-5'>第</b><b class='flag-5'>3</b><b class='flag-5'>部分</b>

    如何進(jìn)行電源設(shè)計(jì)–6部分

    電子發(fā)燒友網(wǎng)站提供《如何進(jìn)行電源設(shè)計(jì)–6部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 15:05 ?0次下載
    如何進(jìn)行電源設(shè)計(jì)–<b class='flag-5'>第</b>6<b class='flag-5'>部分</b>

    如何進(jìn)行電源設(shè)計(jì)–4部分

    電子發(fā)燒友網(wǎng)站提供《如何進(jìn)行電源設(shè)計(jì)–4部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 15:04 ?0次下載
    如何進(jìn)行電源設(shè)計(jì)–<b class='flag-5'>第</b>4<b class='flag-5'>部分</b>

    電源設(shè)計(jì)方法-5部分

    電子發(fā)燒友網(wǎng)站提供《電源設(shè)計(jì)方法-5部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 14:58 ?0次下載
    電源設(shè)計(jì)方法-<b class='flag-5'>第</b>5<b class='flag-5'>部分</b>

    電源設(shè)計(jì)方法-6部分

    電子發(fā)燒友網(wǎng)站提供《電源設(shè)計(jì)方法-6部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 14:57 ?0次下載
    電源設(shè)計(jì)方法-<b class='flag-5'>第</b>6<b class='flag-5'>部分</b>

    電源設(shè)計(jì)方法-3部分

    電子發(fā)燒友網(wǎng)站提供《電源設(shè)計(jì)方法-3部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 14:56 ?0次下載
    電源設(shè)計(jì)方法-<b class='flag-5'>第</b><b class='flag-5'>3</b><b class='flag-5'>部分</b>

    電源設(shè)計(jì)方法-2部分

    電子發(fā)燒友網(wǎng)站提供《電源設(shè)計(jì)方法-2部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 11:42 ?1次下載
    電源設(shè)計(jì)方法-<b class='flag-5'>第</b>2<b class='flag-5'>部分</b>

    電源設(shè)計(jì)方法-1部分

    電子發(fā)燒友網(wǎng)站提供《電源設(shè)計(jì)方法-1部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 11:40 ?0次下載
    電源設(shè)計(jì)方法-<b class='flag-5'>第</b>1<b class='flag-5'>部分</b>

    電源設(shè)計(jì)方法-4部分

    電子發(fā)燒友網(wǎng)站提供《電源設(shè)計(jì)方法-4部分.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 11:39 ?0次下載
    電源設(shè)計(jì)方法-<b class='flag-5'>第</b>4<b class='flag-5'>部分</b>

    如何進(jìn)行電源供應(yīng)設(shè)計(jì)-3部分

    電子發(fā)燒友網(wǎng)站提供《如何進(jìn)行電源供應(yīng)設(shè)計(jì)-3部分.pdf》資料免費(fèi)下載
    發(fā)表于 08-30 09:16 ?0次下載
    如何進(jìn)行電源供應(yīng)設(shè)計(jì)-<b class='flag-5'>第</b><b class='flag-5'>3</b><b class='flag-5'>部分</b>

    3章_UART 開(kāi)發(fā)基礎(chǔ)

    3章_UART 開(kāi)發(fā)基礎(chǔ)
    的頭像 發(fā)表于 06-29 14:27 ?455次閱讀
    <b class='flag-5'>第</b><b class='flag-5'>3</b>章_UART 開(kāi)發(fā)基礎(chǔ)

    邊緣智能3部分:邊緣節(jié)點(diǎn)通信

    電子發(fā)燒友網(wǎng)站提供《邊緣智能3部分:邊緣節(jié)點(diǎn)通信.pdf》資料免費(fèi)下載
    發(fā)表于 11-24 09:17 ?0次下載
    邊緣智能<b class='flag-5'>第</b><b class='flag-5'>3</b><b class='flag-5'>部分</b>:邊緣節(jié)點(diǎn)通信

    執(zhí)行部分7段 ADI

    電子發(fā)燒友網(wǎng)為你提供ADI(ADI)執(zhí)行部分7段相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有執(zhí)行部分7段的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,執(zhí)行部分
    發(fā)表于 10-11 19:06
    執(zhí)行<b class='flag-5'>部分</b><b class='flag-5'>第</b>7段 ADI