今天小編給大家帶來的是來自墨西哥的Maker Victor Altamirano為了解決寵物寄送過程中可能遇到的安全問題,而制作的“Follow My Paws”項目,該項目可以在遠程實時向用戶發送寵物航空倉的各種信息。
材料清單
硬件:
SeeedStudioWioLTE
適用于英特爾 Edison 的 Seeed Studio Grove 入門套件 plus
DHT11溫濕度傳感器
軟件:
arduinoIDE
Amazon Web Services AWS Lambda
Amazon Web Services AWS SNS
Amazon Web Services AWS S3
背景
Follow My Paws:
有時我們需要通過包裹服務發送寵物。我們怎么能確保他們出現意外時即使處理呢?。因此,主要問題是:寵物在物流寄送服務中運輸時會出現意外情況。但是通常又不得不使用該服務,我們怎么能確保他們在任何時候都沒事呢?
解決方案
我將制作一個完整的物聯網解決方案來監控寵物的環境,以確保它們在整個旅程中的健康。所有這些都與云平臺集成,該平臺除了實時顯示包裹的狀態外,還以固定的頻率發送通知。
目前的監控解決方案僅限于無生命的包裝,這使得對寵物的連續監控成為一種新奇事物。它很有用,因為多虧了這個系統,寵物主人可以 100% 確定他們的寵物會很好,并且可以在整個旅程中監控和跟蹤它們。
硬件介紹
要將傳感器連接到 WIO,傳感器必須具有 Grove 型輸入,如以下鏈接中所示的輸入。
https://www.seeedstudio.com/catalogsearch/result/index/?cat=890&q=Grove
對于這個項目,我已經有了“Grove Starter Kit Plus”包,如下圖所示。
內容:
建立的連接如下:
Grove 軟件包中包含的加速度計在連接到 WIO 時沒有問題,因為它已經有了它的 Grove 適配器,我不得不破解它是 DHT,因為我們沒有 Grove 的 DHT。
加速度計 Grove 版本:
DHT No-Grove 版本:
以下是將模塊連接到 grove 電纜的方法:
Wio設置
我們將通過將SIM卡連接到適當的插槽中來準備WIO LTE。
找到SIM卡的插槽后,將SIM卡插入插槽(是的,保護您的IMEI和其他數據)。
一旦卡完全插入,就會看到這一點。
由于我們在WIO LTE中安裝了SIM卡,因此我們將天線連接到下圖所示的插槽。
完成此操作后,我們將準備好將模塊與Arduino IDE一起使用。
Wio Arduino設置:
這是在Arduino IDE上安裝WIO LTE的官方指南。非常清晰簡潔,強烈建議試用它。
https://github.com/Seeed-Studio/Wio_LTE_Arduino_Library
Arduino軟件在Github上。
Soracom平臺設置:
檢查您的SIM卡是否已經連接到一個組非常重要,就我而言,我稱之為Harvest Group。
如果我們沒有創建組,我們將創建一個組,如下圖所示,如果我們不這樣做,我們將無法執行 AWS IoT 配置。
自從創建了小組以來,就我而言,我們通過按“Harvest Group”進入小組菜單,一旦進入,我們將看到以下內容。
在組菜單中,我們將輸入選項“SORACOM Funnel”,此選項將允許我們訪問與AWS服務的連接,所有憑證將在稍后的AWS配置中獲得,因此請勿關閉此選項卡(請遵循)。
AWS IoT 設置
要與 AWS IoT 通信,我們需要在 IAM 控制臺中創建一個角色,以便授權 Soracom 訪問我們的控制臺。
第一步是創建一個允許我們與 AWS 通信的角色。
在角色配置中,我們需要授予對 AWS IoT 的訪問權限。
在這里,我們可以看到可以與此角色一起使用的服務,在本例中,此策略只是一個示例。注意:如果您不確定要獲取角色的策略,請選擇策略 (AWSIoTFullAccess)。
我們給新角色起了個名字。
我們進入 AWS IoT 控制臺并轉到“設置”部分。
進入“設置”部分后,我們將復制“端點”,這將在 Soracom 控制臺選項卡中使用。
下一步是在 AWS IoT 和其他 AWS 服務(如 Lambda、SNS 和 DynamoDB)之間創建連接。因此,為此,我們必須創建一個“規則”,該規則將用于在此服務和上述服務之間建立橋梁。
一旦我們有了規則,我們將如圖所示對其進行配置。
在此選項卡中,我們將配置數據到達后要激活的 lambda(在完成配置其他服務之前不要關閉)
AWS Lambda 設置
我們創建一個 Lambda,如屏幕上所示(它非常直觀,應該沒有問題)。
lambda 應該以這種方式看待,使用 lambda 的原因是因為我們需要處理從模塊獲取的數據,以通過消息和我們的 Web 平臺給出響應(執行此過程 2 次,因為我們將配置 2 個 lambda 以連接到 SNS 和 DynamoDB 的服務)
第一個 Lambda SNS 服務:
這是向 SNS 發送通知的代碼,稍后將在 SNS 配置中獲取 TopicARN。
console.log('Loading function'); // Load the AWS SDK var AWS = require("aws-sdk"); // Set up the code to call when the Lambda function is invoked exports.handler = (event, context, callback) => { // Load the message passed into the Lambda function into a JSON object var eventText = JSON.parse(JSON.stringify(event, null, 2)); // Log a message to the console; you can view this text in the Monitoring tab in the Lambda console or in the CloudWatch Logs console // Create a string, extracting the click type and serial number from the message sent by the AWS IoT button // Write the string to the console var temp=parseInt(eventText.temperature) var acc=parseInt(eventText.accelerometer) var moi=parseInt(eventText.moisture) var air=parseInt(eventText.air) var id=eventText.ID var myarray=[0,0,0,0] if(temp<15) { myarray[0]=4 } else if(temp >= 15 && temp < 18) { myarray[0]=3 } else if(temp >= 18 && temp < 19) { myarray[0]=2 } else if(temp >= 21 && temp < 24) { myarray[0]=1 } else if(temp >= 24 && temp < 26) { myarray[0]=2 } else if(temp >= 26 && temp < 28) { myarray[0]=3 } else if(temp >= 28) { myarray[0]=4 } temp=temp*1.8+32 if(acc<3) { myarray[1]=1 } else if(acc >= 3 && acc < 6) { myarray[1]=2 } else if(acc >= 6 && acc < 10) { myarray[1]=3 } else if(acc >= 10) { myarray[1]=4 } if(moi<20) { myarray[3]=4 } else if(moi >= 20 && moi < 30) { myarray[3]=3 } else if(moi >= 30 && moi < 40) { myarray[3]=2 } else if(moi >= 40 && moi < 50) { myarray[3]=1 } else if(moi >= 50 && moi < 65) { myarray[3]=2 } else if(moi >= 65 && moi < 80) { myarray[3]=3 } else if(moi >= 80) { myarray[3]=4 } air=0.5 * (temp + 61.0 + ((temp-68.0)*1.2) + (moi*0.094)) if(air<90) { myarray[2]=1 } else if(air >= 90 && air < 102) { myarray[2]=2 } else if(air >= 102 && air < 122) { myarray[2]=3 } else if(air >= 122) { myarray[2]=4 } var mess=""; if(myarray[3]==1 || myarray[2]==1 || myarray[1]==1 || myarray[0]==1) { mess="Your dog goes in perfect travel conditions" } if(myarray[3]==2 || myarray[2]==2 || myarray[1]==2 || myarray[0]==2) { mess="Your dog is in good condition" } if(myarray[3]==3 || myarray[2]==3 || myarray[1]==3 || myarray[0]==3) { mess="Your dog is fine but the travel conditions are not the best." } if(myarray[3]==4 || myarray[2]==4 || myarray[1]==4 || myarray[0]==4) { mess="Your dog is fine but travel conditions should improve" } // Create an SNS object var sns = new AWS.SNS(); console.log("Received event:",JSON.stringify(myarray, null, 2),air); var params = { Message: mess, TopicArn: "YOURSNSENDPOINT" }; sns.publish(params, context.done); };
第二個 Lambda DynamoDB 服務:
這是將數據發送到 DynamoDB 的代碼。
console.log('Loading function'); var AWS = require("aws-sdk"); exports.handler = (event, context, callback) => { var eventText = JSON.parse(JSON.stringify(event, null, 2)); var temp=parseInt(eventText.temperature) var acc=parseInt(eventText.accelerometer) var moi=parseInt(eventText.moisture) var air=0 var id=eventText.ID var myarray=[0,0,0,0] if(temp<15) { myarray[0]=4 } else if(temp >= 15 && temp < 18) { myarray[0]=3 } else if(temp >= 18 && temp < 19) { myarray[0]=2 } else if(temp >= 21 && temp < 24) { myarray[0]=1 } else if(temp >= 24 && temp < 26) { myarray[0]=2 } else if(temp >= 26 && temp < 28) { myarray[0]=3 } else if(temp >= 28) { myarray[0]=4 } temp=temp*1.8+32 if(acc<3) { myarray[1]=1 } else if(acc >= 3 && acc < 6) { myarray[1]=2 } else if(acc >= 6 && acc < 10) { myarray[1]=3 } else if(acc >= 10) { myarray[1]=4 } if(moi<20) { myarray[3]=4 } else if(moi >= 20 && moi < 30) { myarray[3]=3 } else if(moi >= 30 && moi < 40) { myarray[3]=2 } else if(moi >= 40 && moi < 50) { myarray[3]=1 } else if(moi >= 50 && moi < 65) { myarray[3]=2 } else if(moi >= 65 && moi < 80) { myarray[3]=3 } else if(moi >= 80) { myarray[3]=4 } air=0.5 * (temp + 61.0 + ((temp-68.0)*1.2) + (moi*0.094)) if(air<90) { myarray[2]=1 } else if(air >= 90 && air < 102) { myarray[2]=2 } else if(air >= 102 && air < 122) { myarray[2]=3 } else if(air >= 122) { myarray[2]=4 } // Set the region AWS.config.update({region: 'ap-northeast-1'}); // Create the DynamoDB service object var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'}); var params = { TableName: 'FMPtemp', Item: { 'ID' : {S: id}, 'Array' : {S: JSON.stringify(myarray, null, 2)} } }; // Call DynamoDB to add the item to the table ddb.putItem(params, function(err, data) {if (err) {} else {}}); };
AWSSNS設置
在SNS服務中,我們創建了一個主題
在 SNS 服務中,我們創建了一個主題。
由于我們創建了主題,因此我們可以在希望通知到達的位置創建訂閱。
這是我們可以發送通知的所有方面的一個示例。
為您的第一個 Lambda 保存此 ARN:
AWS DynamoDB 設置:
對于這個項目和我們的 WEB 實現,我們需要在 DynamoDB 中創建 2 個表,因為一個表將用作數據存儲,另一個表將用于可以在 WEB 平臺中使用的臨時變量。
對于此步驟,僅創建了兩個表,如圖所示:
WEB界面設置
Web 平臺可能看起來很簡單,但它在與 AWS 交互的方式上有一個非常有趣的實現。
使用網頁時最大的問題之一是具有臨時變量,因為每次更新頁面時,我們都會丟失變量存儲的所有信息,但是在我的實現中,我直接從 DynamoDB 中提取數據,這要歸功于提供 AWS 的 javascript 開發工具包,因此我可以將信息存儲在數據庫中, 如上圖所示,在名為“FMP”的數據庫中,并保存臨時變量和快速訪問,以便部署和更新網頁“FMPtemp”。
在顯示網頁時,調用FMPtemp數據庫實時獲取寵物的狀態,并根據我們的算法確定寵物的一般狀態,將通過顏色通知,如下圖所示。
每圖標代表以下內容:
溫度:環境溫度
加速度:最大加速度
空氣Q:空氣質量
濕潤:空氣濕氣
顏色范圍:
空氣質量是使用以下公式計算的,使用簡化版本來計算空氣的露點,根據書籍,它必須小于 90:
空氣 Q=0.5 * (溫度 + 61.0 + ((溫度-68.0)1.2) + (濕潤0.094))
最終產品
我們將溫度傳感器組裝在外殼中。
---end---
-
LTE
+關注
關注
15文章
1356瀏覽量
177726 -
SIM卡
+關注
關注
6文章
284瀏覽量
28589 -
DHT11
+關注
關注
19文章
277瀏覽量
57542
原文標題:創客項目秀|基于 Wio LTE的寵物物流安全衛士
文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創客空間】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論