×

基于AWS IoT EduKit构建Pandemic智能系统

消耗积分:0 | 格式:zip | 大小:0.58 MB | 2022-11-03

陈静

分享资料个

描述

公共交通主管

你要解决什么问题?

随着大流行在全球范围内得到控制,许多国家正在向前开放其城市以恢复势头,但由于这些原因,人们正在离开家园进行工作、公共集会、紧急情况等。

  • 世界各地的大量人口没有私人车辆,因此他们必须借助公共交通工具(如公共汽车、火车、出租车等)前往工作、活动或任何地方。
  • 这些公共交通工具确实可以证明是 Covid-19 病毒的感染区,这可能会导致一波又一波的爆发。

你打算构建什么来解决这个问题?它与现有解决方案有何不同?为什么有用?

为了控制有关 Covid-19 指南和上述问题的安全措施,我将基于“AWS IoT EduKit”构建一个 Pandemic 智能系统,它可以通过多种方式使用,例如,

1. 计算应在公共汽车/火车内旅行的固定人数,以维护当局发布的安全指南。(机器学习可用于此)

2. 根据上述指南计算所有旅客的体温。

3. 弄清楚旅行者之间的社交距离。

4. 摸清公共交通封闭环境内的空气质量,采取多种措施保持空气流通,“防止病毒传播”。

5. 制作基于上述所有要点的 AV(视听)反馈系统和警报系统,通过实施该技术,每个人都可以以经济的方式遵循安全准则。

6. 当情况超出可行的安全措施限制时发出警报,并指导当局重新控制。

  • >它不同于现有技术,因为它具有移动性、更智能、易于使用、体积小且成本更低。它是用户友好的,简单易行!
  • > AWS IoT EduKit 配备了所有必要的技术,以一种可行、简单和经济的方式解决上述问题,因为它拥有物联网、机器学习、TinyML、Alexa 和其他可以足够使用的技术,这真的很有用战略上。

您的解决方案如何运作?主要特点是什么?请指定您将如何在您的解决方案中使用 Core2 for AWS IoT EduKit。

我们的解决方案适用于物联网、机器学习、TinyML、与传感器网格集成的 Alexa,用于空气质量、温度测量、与 AWS IoT EduKit 集成的摄像头。主要特点:

1. 根据指南确定人们是否正确佩戴口罩(机器学习可用于此)

2. 根据上述指南计算所有旅客的体温。

3. 弄清楚旅行者之间的社交距离。

4. 摸清公共交通封闭环境内的空气质量,采取多种措施保持空气流通,“防止病毒传播”。

5. 基于上述所有要点的反馈系统和警报系统,通过实施该技术,每个人都可以以经济的方式遵循安全准则。

6.当情况超出可行的安全措施范围时发出警报,并指导当局重新控制。

入门

1. 开发任何电子项目(包括微处理器、威廉希尔官方网站 、编程语言等)首先需要的是一个可以由 IDE 轻松提供的开发环境。

所以在这里,我们将为这个项目安装一个合适的 IDE,它是带有 PlatformIO 的 Visual Studio Code。

为了不让写的内容太长太无聊,我提一下 Amazon AWS Edukit Workshop 的官方教程链接:

按照此链接安装所有先决条件,例如:

  • git & git 依赖
  • Silicon Labs USB 到 UART 桥接设置
  • Visual Studio 代码安装
  • 平台IO
  • 智能手机应用程序等

智能恒温器 - 控制不必要的家用冷却/加热设备的使用

在我的项目中,我们将实施智能恒温器设置,借助它我们将控制家庭/公共空间冷却/加热设备(基于您自己的领土天气条件)以节省电力/燃料,无论我们在公共交通工具、公共空间甚至家中。

由于智能恒温器实施的设置和步骤相当长,而且不会让这一切变得无聊,我将分享官方 Edukit Workshop 链接,以便您可以在自己的 AWS IOT Edukit 上跟踪和实施智能恒温器。

但是,我将分享我自己通过 Smart Thermostat 实现的所有内容:

#因此,首先,我们将实施经济的解决方案,以节省空间内的电力并有效地使用冷却/加热设备,而不会让它不必要地浪费电力。

  • 为此,我们将使用IoT Core Cloud和我们的物理M5Stack Core2 机器同步数据 MQTT消息传递协议我希望您已经正确地遵循了 AWS Edukit 教程的所有步骤,从分配证书、策略到实施HVAC 应用程序并充分利用Shadows的功能!!!;)

状态,同时加热空间

 

poYBAGNiFU-AMWYQAAIzg6vGtfM63.jpeg
 

 

  • 最后!当您开始在您的设备上接收更新以及使用 MQTT 通过 IOT Core 过度订阅主题以及当检测到制冷/制热的室温变化更新时侧栏 LED 也开始显示红色/蓝色时,您可以现在将其与电源继电器连接到交流电源设备上,以在智能空间内进行冷却/加热

注意:由于安全原因以及我所在地区没有 Grove Relay,我无法使用直流电源设备。

更远

从这里下载我的智能恒温器代码版本:https ://github.com/SAILARK001/Smart-Thermostat/blob/main/ST_1.c

1. 打开代码并跳转到第 174 行。在这里你会发现一个名为 'pin_read_task()' 的 void 函数来读取 GPIO 引脚状态(数字 -> 0 或 1)。

pYYBAGNiFVGAKQjRAABSIifc_8U069.png
 

此 GPIO 引脚连接到 Arduino。Arduino 从 Grove 空气质量传感器 v1.3 接收有关空气质量指数的数据,通过代码中指定的 GPIO 引脚(数字形式 0 或 1)将数据发送到 M5Stack IOT Edukit。

  • 这里 arduino 正在上传一个代码,该代码确定周围空气的 AQI,并将 M5Stack 的 GPIO 引脚更新为 0 或 1。如果 arduino 传输 1/HIGH,这意味着 AQI 对“公共空间”有害,新鲜空气必须被传阅。注意:Arduino 方面发生了什么,我们很快就会学习。
  • 如果传输 0/LOW,循环新鲜空气的通风风扇将关闭,使其成为公共空间的经济实施方案。

2. 现在,跳转到ST_1.c的第 182 行在这里,您将找到通过 M5Stack 的 GPIO 引脚写入数字命令的功能。该引脚可激活通风风扇以提供新鲜空气,并使用 2.5m 过滤器过滤空气,以抵抗进入公共空间的 covid-19 病毒和有害 pm 颗粒该引脚在公共空间内超出 AQI 范围时被激活。

三、逻辑解释:

  • Core2ForAWS_Port_Write(GPIO_NUM_14, 输出);

ESP_LOGI(标签,“GPIO %d 上的输出:%s”,GPIO_NUM_14,输出?“HIGH”:“LOW”);

在这里,Core2 Edukit M5Stack 的 GPIO 编号 14 在 Outout 模式下被激活,并且相应地提到了高/低状态的逻辑。

  • 然后是 do-while 循环 - 用于计算 M5Stack 的输入引脚状态。虽然输入为 1(来自带有 AQI 传感器的 arduino 的二进制数据)意味着 AQI 足够高以激活通风风扇,但 M5Stack 端口 C 的第 26 个 GPIO 被激活并且风扇开始运行。
  • 最后,程序最后的 main 函数调用 read 和 write 函数来执行重要的任务!!!
pYYBAGNiFVSAfyUiAABAwNKI8Vc959.png
 

所以在这里,这个问题的故事中的问题陈述的第 4 点正在得到解决:

弄清楚公共交通封闭环境内的空气质量,并采取各种措施保持空气流通,以“防止病毒传播”。

本节是在 AWS IOT Core 的帮助下完成的,我们在其中使用了 IOT Core 服务,例如 MQTT、检测器模型、IOT 分析、IOT Lambda、Arduino 和各种传感器。

注意:我无法向您展示它在 Smart Spaces 数据集和模型上的实施,因为根据我对该项目的预算,我已经超出了 AWS Sagemaker 的费用。

但是,我相信您已经遵循 AWS Edukit Workshot for Smart Spaces的教程,它主要用于消除收到的任何错误值改进应用程序的工作以实现精确的结果建议使用“ Smart Spaces”模型以确保该项目的准确性!

找出第二条 covid-19 指南 - 社交距离

在这里,我们将使用 M5Stack 开发的另一种很棒的软件技术,它是基于 MicroPython 的 UIFlow 它用于开发基于 M5Stack 的智能交互式图形用户界面(GUI)。

它们是大量基于 Grove 的传感器,可与 M5Stack 结合使用,并结合 UIFlow

 
 
 
poYBAGNiFViAADF1AAC5OdAUrh8499.png
 
1 / 2
 

但是在这里,在这个模块中,我们将只使用蜂鸣器、PIR 和继电器传感器单元

保持和分析遵守适当的社交距离,以便控制 Covid-19 病毒传播,如本项目问题陈述和解决方案第 3 点所述。为此,正在应用 2 种方法:

  • 被动红外 - PIR:由于基本的 PIR 传感器具有约 120 度的传感器场,我们将使用锥形投影将其展开角度控制到 20 度,以便只能识别站在其下方的一个人。这些传感器的网格将放置在公共交通工具内,以便当 2 人靠近时,备用传感器会检测到它们并发出警告警报。所以,为此,
  • 我们将蜂鸣器连接到 Arduino 并为 arduino 指定输入引脚,以便当 M5Stack 的 PIR 程序对 M5Stack 的端口 C 执行 (HIGH/1) 时,arduino 代码将激活 Arduino 上的输出引脚然后将其连接到蜂鸣器,蜂鸣器将充当警告警报以保持更安全的距离!

注意:您一定在想,为什么我们不能将蜂鸣器直接连接到 M5Stack 上?原因:UIFlow IDE 在 Units 部分没有 Buzzer 选项,因此,我们将声明一个“中继”单元并将输出发送到 arduino 以间接发出警报。现在,按照前面的教程...

UIFlow 社交距离报警系统教程

1. 按照以下步骤安装 UIFlow 软件:https ://docs.m5stack.com/en/quick_start/m5core/m5stack_core_get_started_MicroPython

2.安装软件,选择设备:

pYYBAGNiFVyAUX4LAABw4yKyAjE338.png
 

3. 按照视频中的步骤在 Edukit M5Stack 上编程和设置 UIFlow

 

4. 设置并上传您制作的 UIFlow 程序后,您的屏幕将如下所示:

poYBAGNiFWCAZ3kaAATZItNnDRM349.jpg
 

5. 还将输出引脚连接到 Arduino。输出引脚是 UIFlow 程序中作为继电器提到的引脚。将 M5Stack 的端口 C 上的引脚 Rx 连接到 Arduino 的数字引脚 2。代码片段如下,供 Arduino 从 M5Stack 读取:

// THIS IS JUST A PARTIAL PROGRAM SNIPPET, WHOLE PROGRAM IS DOWNLOADABLE BELOW
const int buzzer = 9; //buzzer to arduino pin 9 // DECLARE BEFORE VOID SETUP
pinMode(2,INPUT);   //DECLARE INSIDE VOID SETUP
pinMode(buzzer, OUTPUT); // Set buzzer - pin 9 as an output
    Serial.begin(9600);
//DECLARE IN VOID LOOP
Serial.println("High pollution!");
          digitalWrite(12,HIGH);
THIS IS JUST A PARTIAL PROGRAM SNIPPET, WHOLE PROGRAM IS DOWNLOADABLE BELOW

6. 像这样进行连接:

pYYBAGNiFWKAbRU-AAC56zFcud4826.jpg
 
poYBAGNiFYOAEZ-QAA4sbqQgJ3M830.jpg
与 Core2 的 PIR 连接
 

7、现在到了重要的一步:

  • 我没有制作多个编码文件,而是将所有 Arduino 特定代码合并到一个文件中,您可以在下面下载或在此处复制代码表格,因为此代码还包含 AQI 传感器和其他功能的代码:
/*
    Grove_Air_Quality_Sensor.ino
    Demo for Grove - Air Quality Sensor.

    Copyright (c) 2019 seeed technology inc.
    Author    : Lets Blu
    Created Time : Jan 2019
    Modified Time:

    The MIT License (MIT)

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
*/
#include "Air_Quality_Sensor.h"

AirQualitySensor sensor(A0);
const int buzzer = 9; //buzzer to arduino pin 9

void setup(void) {
  pinMode(2,INPUT); 
  pinMode(12,OUTPUT);//LED

  pinMode(buzzer, OUTPUT); // Set buzzer - pin 9 as an output
    Serial.begin(9600);
    while (!Serial);

    Serial.println("Waiting sensor to init...");
    delay(20000);

    if (sensor.init()) {
        Serial.println("Sensor ready.");
    } else {
        Serial.println("Sensor ERROR!");
    }
}

void loop(void) {
    int quality = sensor.slope();

    Serial.print("Sensor value: ");
    Serial.println(sensor.getValue());

    if (quality == AirQualitySensor::FORCE_SIGNAL) {
        Serial.println("High pollution! Force signal active.");
    } else if (quality == AirQualitySensor::HIGH_POLLUTION) {
        Serial.println("High pollution!");
          digitalWrite(12,HIGH);
          delay(5000);
          digitalWrite(12,LOW);
    } else if (quality == AirQualitySensor::LOW_POLLUTION) {
        Serial.println("Low pollution!");
    } else if (quality == AirQualitySensor::FRESH_AIR) {
        Serial.println("Fresh air.");
    }
if(digitalRead(2)==HIGH){
  tone(buzzer, 1000); // Send 1KHz sound signal...
  delay(1000);        // ...for 1 sec
  //noTone(buzzer);     // Stop sound...
  //delay(1000);        // ...for 1sec
}
else{
  noTone(buzzer); 
}
    delay(1000);
}

智能空气质量维护

现在是第三个也是最重要的实施,智能空气质量维护。

这也是 Edukit IoT Core2 M5Stack + Arduino(使用 AQI 传感器 Grove v1.3)之间进行的整个设置的一部分

首先,像这样固定所有组件:

pYYBAGNiFYiAeC7KAACTCkht0pM842.png
 
  • 在此之后,在 VSCode PlatforIO CLI 终端上运行此命令:
pio run --environment core2foraws --target monitor

我希望您已经在智能恒温器注册表中替换了我的 Smart Thermostat & Air quality control.h 文件。

运行命令后,您将看到如下内容:

pYYBAGNiFYyALY8TAAEsFgAJVwQ115.png
 

在公共空间的空气质量指数测量值超过“70”后,将通过连接到 M5Stack 的写入(输出)引脚 GPIO 14 的继电器激活风扇。

pYYBAGNiFZ-AfzgEAAiZH7RitIQ940.jpg
 

该风扇配备 PM2.5 过滤器,可过滤公共交通工具/空间内的任何可能威胁,如 Covid-19 病毒、有害污染物等。

pYYBAGNiFbiAHn5CAAeJWCQKGn8168.jpg
 

输出读数:

  • 当空气新鲜时,AQI 传感器通过 arduino 的输出为“0”

 

poYBAGNiFbqAUgE2AAEhZjQM46I486.png
 
  • 当空气被污染时,AQI 传感器通过 arduino 的输出为“1”,GPIO 14 激活为“HIGH”

 

poYBAGNiFcCAd2n0AAHSCnX207I342.png
 

 

 

#所以,最后问题陈述和解决方案的第五点正在解决...... :)

 

组合所有模块后,公共运输监督员将如下所示并且功能齐全!;)

 
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于AWS IoT EduKit构建Pandemic智能系统',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);