介绍

物联网(Internet of Things,IoT)近年来一直是互联网的流行词,除了对大众群众具有强烈的意义之外,它正在推动数据在机器间的混洗扩展到网络。说实话,物联网是未来技术的下一个前沿。

本文介绍了物联网的一般概念及其在现实世界中的应用,我们还将在本文的后面部分讨论如何构建功能性物联网应用程序。如果你是一个技术爱好者,那么你已经准备好了这篇文章。

什么是物联网?

那么,这个词是不言自明的:连接到互联网的东西。这一行可以用多种方式来解释。但是一个简单的解释可能是 - 将网络连接添加到设备网络,使其能够与用户和其他设备进行通信。总的来说,物联网提升了对我们现实世界的高度认识,并且提供了一个平台来监视对我们的意识暴露的反应。设备网络可能包含自己的IP地址,并可以相互连接以自动执行定义的任务。2014年,全球物联网市场收入达到6558亿美元。预计到2020年,市场规模将达到8.9万亿美元。

IoT&Real World(来源:LinkedIn)

历史

卡耐基梅隆大学于1982年制造了一台改装的焦炭机器,据说这是第一台互联网连接设备。麻省理工学院自动识别中心的联合创始人凯文·阿什顿(Kevin Ashton)在1999年创造了“物联网”(Internet of Things)这个术语。十年后,物联网已经获得全球认可,并在2008 - 09年度成为重大技术进步。

应用

物联网可以以多种方式应用于我们的现实世界。想想一个当你面前出现的时候,你的前门开启的世界,但是当一个陌生人到达前面的台阶时,它会被锁住。灯光会自动打开,检测到您在房间中的存在,但在您离开房间时会自动关闭。咖啡开始酝酿时,你的声音命令它为你做一个。手表为您的爷爷准备了健康表,并在您出门时发现任何严重问题时向您的手机发送警报声。所以很显然,可能性和应用领域是无限的。你已经开始梦想了,不是吗?

物联网应用(来源:SlideShare)

本条的结果

在这篇文章中,我们将构建一个主要针对人们安全事物的物联网项目。无论您是初学者还是专业人士,本文将教您如何将您的想法转化为令人敬畏的物联网对象。我们将在整篇文章中逐步讨论“事物”的协调和实施。我们走吧!

兔子在哪里?

让我们谈谈我们将在这篇文章中启动的想法。众所周知,地震是人类最大的灭绝性自然力量之一。由于在到达之前没有办法得到通知,生命和财产的损失往往跨越灾难的程度。

在这篇文章中,我们将摒弃一种近似的方式来检测物联网系统的波动,并且让自己意识到移动设备的高频冲击波。我们将使用Android作为测试移动平台。所以我们找到了兔子,对不对?让我们抓住它!

背景

我记录说,自1548年以来,我住在孟加拉国,这个地震历史悠久的国家。该国四面环绕着高地震活动区,其中包括缅甸北部的喜马拉雅弧和西隆高原,东部的阿拉干·马马复背斜和东北部复杂的纳卡 - 迪桑 - 贾夫隆冲断带。

从统计调查中发现,所述地区所在的印度板块在五千万年前与亚洲相撞。从那以后,盘子继续向北推进亚洲,向下推动喜马拉雅山,推动山脉。

近年来,相应的地区附近发生了一些大地震。可能我们很多人都听说过尼泊尔和印度地震造成的巨大损失,这些地震造成数千人死亡,损失了数十亿美元的财产。在这两种情况下,我国也面临着重大的地震事件以及几处生命和财产损失。

据国家地理杂志(CNN)其他一些值得信赖的消息来源报道,按照不久的将来,该国可能面临一场可能会发生9.0级大地震的悲惨命运。甚至在对其影响进行假设之前,计划灾难性的损失水平也不难,这次地震将成为世界上人口最密集的地区之一。

暂时的假设使我找到一种方法来认识地震活动,如果我们能够以某种方式测量有害的,并使人们在死亡时期意识到他们的安全庇护所,那么可以在很大程度上挽救他们宝贵的生命。但在此之前,我们需要学习一些有关地震波的基本知识。

孟加拉国 - 印度 - 缅甸地区隐藏的断层(来源:CNN)

地震波

地震波传播振动,震动源将震动源的能量向四面八方传播。这些波在地球内部传播,可以用地震仪等敏感探测器进行测量。科学家们已经在世界各地建立了地震仪来追踪地壳的运动。(分析:地震波)

所以它基本上是某种弹性波,可能是由于像地震,爆炸或大的山体滑坡这样的冲动而产生的。地震可以产生三种类型的地震波:P(主波),S(次波)和表面波。

P波

也被称为纵波或纵波或主波。这是地震波中速度最快的一种,它首先比其他地震波快速到达地震仪台,因此名为“小学”。这一波可以通过固体岩石和流体,如水或地球的液体层。它沿着它们传播的方向摇动地面,以1.5-8公里/秒的速度在地壳中行进。

P波(点击查看动画,来源:地震)

S波

被称为在地震台站到达p波后期的剪切波或次波。略微1.7比P波慢倍。它垂直于他们正在传播的方向摇动地面。但是S波不能通过流体或气体传播,因为流体和气体不能传递剪切应力,而S波是剪切材料的波。

一般来说,地震会产生比压缩波更大的剪切波,接近地震的大部分破坏是剪切波引起的强烈振动的结果。

S波(点击查看动画,来源:地震)

表面波

与上述不同,这种波浪不会深入地球内部。通常产生比体波更低的频率,因此容易区分地震记录。有两种类型的表面波:爱波和瑞利波。虽然它是在物体(P&S)波后到达的,但它是表面波与地震有关的破坏和破坏的责任。

表面波(点击查看动画,来源:地震)

要了解这些不同类型的地震波的全面影响,让我们来看看这个图像的动画。

地震的地震波(点击查看动画,来源:地震)

抛光计划

从上面的研究中,我们对地震的事件有清晰的了解。当然,我们所有人都会支持一个呼叫,小波或者P波在地壳中传播得更快,在其他破坏性的波浪方面,它们是有利可图的。当它一闪而过,如果我们能够收集足够的数据来检测它,那么提前发出即将到来的可怕地震事件的警告显然是可能的。

即使通过计算P波和S波的到达时间之间的差异,也可以粗略估计到地震焦点的距离。作为一个经验法则:将两个波浪之间的时间乘以5将得到以英里为单位的焦点距离(来源:加州大学伯克利分校地震实验室)。

假设地震发生在地震台,相应的地震图记录了P波和S波的到达时间为04:00:20和04:00:26.62。所以这里两波的时差是6.62s。应用上述理论,从车站到地震重点的距离将近似(6.62 * 5)= 33英里。

所以根据经验法则,

到地震的距离=((P波到达时间) - (S波到达时间))* 5

做数学

我们来做一些数学。

案例1:猜猜地震已经产生,重点是距离你的位置112英里。由于P波在地壳中以大约6.0km / s的速度传播,所以时间要求达到你的位置 - ((1.6 * 112)/ 6)= 29.87s。

S波比P波慢1.7倍,3.5千米/秒的地壳,所以为了达到你的位置,它需要 - ((1.6 * 112)/ 3.5)= 51.2秒。

这两个波之间的时间差是=(51.2-29.87)= 21.33,差别是近似值,因为行进速度可能因多种因素而变化,但是实际结果不会变化太大(基于上述公认的引用)。

情况2:现在猜测距离你的位置12公里的距离最近的一个。那么P波会在((1.6 * 12)/ 6)= 3.2秒的时间内达到你的位置。

S波将需要 - ((1.6 * 12)/ 3.5)= 5.48秒。

所以,这种情况下的时间差是=(5.48-3.2)= 2.28s。

从上面的例子可以清楚地看到,在地震的焦点远离你的时候,P波和S波的时差会增大,而当它接近的时候,波的时差就会减小。

到目前为止,根据我们的想法,我们应该计划如何记录P波,让人们意识到即将到来的冲击波。

收集组件

现在是时候收集我们在工作中需要的主要组件。为了检测地震活动可能产生的振动,我们将使用压电振动传感器。

格罗夫 - 压电振动传感器

它适用于测量灵活性,振动,冲击和触摸。宽动态范围(0.001Hz〜1000MHz)保证了卓越的测量性能。而且,我们可以通过用螺丝调节板载电位器来调节其灵敏度。(来源:格罗夫 - 压电式振动传感器)

格罗夫 - 压电振动传感器板(型号:SEN04031P)

USB到串行编程器

它提供了一系列USB到串行转换器电缆,用于提供USB和串行UART接口之间的连接。可提供一系列电缆,通过各种连接器接口提供5V,3.3V或用户指定信号电平的连接。(来源:USB到串行编程器)

您可能需要安装驱动程序才能使用。我们的开发设备包含Windows 7 64位操作系统,因此我们已经为此模块安装了相应的驱动程序。

USB到串行编程器

Wifi模块

为了将传感器数据传输到便携式移动设备,我们将需要一个WiFi模块。在我们的案例中,我们使用了Wifi模块 - ESP8266。它是一个独立的SOC,集成了TCP / IP协议栈,可以让任何微控制器访问WiFi网络。它能够托管应用程序或卸载来自其他应用程序处理器的所有Wi-Fi网络功能。(来源 - WIFI模块 - ESP8266)

我们需要一些工作来定制模块并使其可编程。我们需要为上下文管理几件事情,

  • Veroboard(模块将驻留在哪里)
  • 一些男性连接器
  • 三个10K电阻用于VC控制
  • 两个外部按钮用于重新启动并重置模块

  

重新建模的WIFI模块(型号 - ESP8266)

使Wifi模块可编程

一些忙碌的作品在我们前面,以使这个WiFi模块可编程。我们希望将这个模块与熟悉的Arduino IDE连接起来,将代码上传到开发板。因此,我们需要查看专用于上述芯片型号ESP8266 的GITHUB项目。

从官方网站下载Arduino IDE 。安装完成后,转至“文件”→“首选项”→“附加板管理器URL”并粘贴此链接。

图1.1:配置Arduino IDE以编程重新建模的WIFI模块

现在回到IDE的工具àBoard \ Boards Manager的家中,向下滚动,找到“ESP8266社区”esp8266的选项,点击它并按下安装按钮。有耐心,直到它完成安装。

图1.2:配置Arduino IDE以编程重新建模的WIFI模块

您可以通过右键单击我的电脑à管理à设备管理器à端口来检查相应的开发设备的可用端口,如果它们相同,请使用IDE的工具à端口进行双重检查。

转至Arduino IDE,选择ToolsàBoard→向下滚动并选择“Node MCU 1.0(ESP-12E Module)”。现在wifi模块准备好吃代码了!在此之前,我们需要弥补我们的电路。

完成电路

电路原理图

您需要了解电路原理图以及面包板,母 - 母连接器等的基本知识来连接这些东西,这是后面将要讲到的电路图。

电路原理图

电路设计

根据图表,我们现在将连接起来,我们将需要一个面包板和一些电线。

将东西连接到面包板

除了代码(随着移动设备端),使用WiFi模块将数据从传感器上传到我的本地IP地址,这是一个真正的“哈哈”时刻!

现在是编写wifi模块代码的时候了,我们通过一个叫做connectify的工具创建一个本地的wifi网络,你也可以使用你的wifi路由器。

转到arduino IDE并写下面的代码。

隐藏   缩小    复制代码
#include <ESP8266WiFi.h>

const char* ssid = "SweetHeart";    // username of your network
const char* password = "123456780";  // password of your network// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated// constants won't change :
const long interval = 500;           // interval at which to blink (milliseconds)int sensorValue = 0;WiFiServer server(80);void setup() {Serial.begin(115200);delay(10);// Connect to WiFi networkSerial.println();Serial.println();Serial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");//Start the serverserver.begin();Serial.println("Server started");//Print the IP addressSerial.print("Use this URL to connect: ");Serial.print("http://");Serial.print(WiFi.localIP());Serial.println("/");}void loop() {// Check if a client has connectedWiFiClient client = server.available();if (!client) {return;}// Wait unlil the client sends some dataSerial.println("new client");while (!client.available()) {delay(1);}// Read the first line of the requestString request = client.readStringUntil('\r');Serial.println(request);client.flush();unsigned long currentMillis = millis();if (currentMillis - previousMillis >= interval) {// save the last time you blinked the LEDpreviousMillis = currentMillis;sensorValue = analogRead(A0);}// Return the responseclient.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println("");  // do not forget this oneclient.println("<!DOCTYPE HTML>");client.println("<html>");String webpage = "<head><meta http-equiv=""refresh"" content=""1""></head>";webpage += "<body>";//webpage += "Value: ";webpage += String(sensorValue);webpage += "</body></html>";client.println(webpage);Serial.println("Client disconnected");Serial.println("");}

如果所有的事情都按照上面的步骤完成,代码将成功地加载到模块中(将电路板连接到电源,通过WiFi模块闪烁指示灯可以确定程序加载),还要确保引导模式在模块中被激活。现在根据端口号打开串口监视器,如果代码运行成功,你会看到你的本地IP地址的值上传(并继续更新值)。

从编程的WIFI模块获取本地IP

将IP地址输入到浏览器中,如果所描述的东西以正确的方式运行,将会看到输出。

          

来自本地IP的压电传感器的值

触摸压电传感器,你会看到上传值的突然变化,根据代码值每隔1秒更新(刷新),它可以根据选择进行更改。

与Android连接

正如我们正在获得我们所需的传感器价值我们的本地IP地址,所以它的时间广播价值到我们的移动设备。因此,我们使用Android作为移动操作系统平台(该模块可以将价值广播到任何平台)。

正如我们已经看到的那样,我们将传感器值作为http响应打印,所以从客户端(读取android)我们需要解析这些值,这对我们来说就足够了。

为了解析一个http响应,我们将使用这里为android编写的库,名为OkHTTP。让我们写下代码。

隐藏   复制代码
public class GetResponse {OkHttpClient client = new OkHttpClient();String run(String url) throws IOException {Request request = new Request.Builder().url(url).build();Response response = client.newCall(request).execute();return response.body().string();}
}
隐藏   复制代码
GetResponse example = new GetResponse();try {String response = example.run("http://192.168.25.103");Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();} catch (IOException e) {
}

这里的事情变得有趣了,不是吗?我们已经成功地捕捉到了一些振动的传感器值,并将这些值传输到了一个运行在同一个WIFI网络中的Android设备。但是,如果发生地震或地震活动,你可能会住在你家的外面,可能在你的办公室或咖啡店,然后呢?在这种情况下,事情不会帮助你,但是现在我们将把事情搞砸。

远程连接

我们需要将该值传输到我们的移动客户端可以解析该值的远程源。因此,我们正在使用一个称为ngrok的辉煌工具。你可以为他们的文档执行。

下载并安装该工具后,只需带上cmd窗口并导航到已经安装的文件夹。把这个命令:

ngrok http your_local_ip_address:8080

执行命令并在浏览器中连同“https:// localhost:4040”一起在本地主机上执行。您将从ngrok获得2个通用链接,现在您可以在android客户端的java代码中使用它们中的任何一个,因为这两个链接现在都是通用的,并且可以在世界的任何地方访问。好玩,不是吗?

让电话意识到

所有的事情都按预期完成。最后一部分是解析相应的html值,我们将从通用链接中获得该值,并使我们的移动设备知道如何处理这个值。让解析。

我们现在只会从html响应中获得预期的值。现在我们将为该值设置一个过滤器,如果响应值在任何时候超过过滤器值,我们的移动设备将生成警报音。

对于滤波器值,我们使用512,通常压电传感器根据其接收到的振动频率给出在0-1024范围内的值。所以我们设定一个恰好在其范围的一半的值,超过这个值就会产生报警音。

我们以前的代码会在这里改变一点。

隐藏   复制代码
GetResponse example = new GetResponse();try {String response = example.run("http://92832de0.ngrok.io");//Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();String htmlTextStr = Html.fromHtml(response).toString();if (Integer.valueOf(htmlTextStr) > 512) {Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);if (alert == null) {alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);}Ringtone ring = RingtoneManager.getRingtone(getApplicationContext(), alert);ring.play();}} catch (IOException e) {
}

我们将定时器定制这个东西。从android客户端,我们将每5秒钟发出一次对应的通用地址请求。所以我们需要一个计时器的方法来实现这一点。

隐藏   复制代码
private int mInterval = 5000; // 5 seconds by default, can be changed later
private Handler mHandler;
隐藏   复制代码
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);.....mHandler = new Handler();startRepeatingTask();
}
隐藏   复制代码
void startRepeatingTask() {mStatusChecker.run();
}
隐藏   缩小    复制代码
Runnable mStatusChecker = new Runnable() {@Overridepublic void run() {try {//this function can change value of mInterval.GetResponse example = new GetResponse();try {String response = example.run("http://92832de0.ngrok.io");//Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();String htmlTextStr = Html.fromHtml(response).toString();if (Integer.valueOf(htmlTextStr) > 512) {Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);if (alert == null) {alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);}Ringtone ring = RingtoneManager.getRingtone(getApplicationContext(), alert);ring.play();}} catch (IOException e) {}} finally {mHandler.postDelayed(mStatusChecker, mInterval);}}
};

兴趣点

我们已经成功地从移动设备上做出了一个检测地震活动的原型,从这里来的未来的兴趣是无数的。我们已经开始了这项研究工作,牢记在不久的将来我们地区可能发生的大地震。我们要大规模地扩大这项工作,寻找一些资金,以便我们继续这项研究工作,这个解决方案能够真正帮助人们渡过难关。在当前的情况下,解决方案可以发挥至关重要的作用,挽救百万人的生命。

通过一些先进的研究(我们继续建模),可以获得关于地震振动的90%以上的准确结果,因此一些计算可以帮助用户知道他与地震聚焦点之间的距离(读他/她的移动设备)。我们会尽快更新这篇文章,只要我们得到一些很好的结果。我们也欢迎您的建议,以扩大我们的解决方案,因为这是为了我们,拯救人类。

本篇文章由@筱乐译@CSDN博客@千讯工作室

用Android和IOT检测地震波相关推荐

  1. android 绕过root检测,公主连结怎么绕过root检测 绕过root检测方法一览

    公主连结刷初始怎么绕过root检测呢?很多小伙伴想刷初始可是经常被root检测,有没有什么办法才能绕过检测呢? 实机可以用magisk自带的hide功能,xposed框架可以选择rootcloak,A ...

  2. 算法移植优化(三)android dlib 人脸检测使用

    android dlib 人脸检测使用 一.编译阶段 1.在cmakelist.txt中加入: include(src/main/cpp/dlib/cmake) 然后再链接dlib库就可以了: tar ...

  3. Android内存泄漏检测工具使用手册

    Android内存泄漏检测工具使用手册 前言 LeakCanary 在Android中接入LeakCanary LeakCanary内存泄漏分析 内存泄漏上报到服务端 Shark Shark分析当前应 ...

  4. [免费专栏] Android安全之检测APK中调试代码是否暴露敏感信息

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  5. Android基础性能检测与分析

    本文内容:基于Android基础性能检测与分析 版权声明:本文为原创文章,未经允许不得转载 博客地址:http://blog.csdn.net/kevindgk 前言 UI性能分析 应用启动时间计算以 ...

  6. Android应用安全检测工具简介

    Android应用安全检测工具简介 1.测试工具集 Appie – 轻量级的软件包, 可以用来进行基于Android的渗透测试, 不想使用VM的时候可以尝试一下. Android Tamer – 可以 ...

  7. Android模拟器识别检测技术

    Android模拟器识别检测技术 Android模拟器常常被用来刷单,如何准确的识别模拟器成为App开发中的一个重要模块,目前也有专门的公司提供相应的SDK供开发者识别模拟器. 目前流行的Androi ...

  8. android检测张嘴眨眼,Android/IOS 活体检测(眨眼,摇头,点头,张嘴,远近)

    更新记录 1.1.2(2021-05-24) ios优化活体算法 1.1.1(2021-05-17) v1.1.1_release(2020.05.14) 添加框的绘制 在计算人脸关键点变化的过程上加 ...

  9. Android模拟器的检测

    Android模拟器的检测 需求:最近有一个需求,要检测出模拟器,防止恶意刷流量刷注册. 1.基于特征属性来检测模拟器,比如IMSI,IDS,特殊文件等等. 这个方案局限性太大,貌似现在大部分模拟器默 ...

最新文章

  1. ios开发多线程篇--异步加载网络图片GCD
  2. mysql优化之sakila测试数据库
  3. 编程语言分类及python所属类型
  4. 怎么建立微信生态用户增长模型?
  5. 各高校寒假时间公布_高校放假哪家长?多所高校寒假时间公布!
  6. 庖丁解InnoDB之UNDO LOG
  7. 为什么建议你使用枚举?
  8. 【Python】Python中的类型转换
  9. 什么时候以及为什么基于树的模型可以超过神经网络模型?
  10. SpringMVC运行原理
  11. SQL Server实现列转行
  12. 两相四线混合式步进电机用双H桥驱动电路之Multisim仿真及优化
  13. PS教程:利用自定义形状快速打造图案
  14. Ubuntu下载软件包网速过慢的解决方法
  15. PS cc 2019自由变换默认等比例缩放操作问题的解决方法
  16. 西部素质教育杂志西部素质教育杂志社西部素质教育编辑部2022年第13期目录
  17. .jpeg 格式图片URL在浏览器里默认是下载
  18. 解决IISASP调用XmlHTTP出现msxml3.dll (0x80070005) 拒绝访问的错误
  19. ABAP编程中对内表的定义,后面接一个OCCURS (n)是代表什么意思。
  20. 怎么制作证件照电子版?安利下面这三款软件给你

热门文章

  1. 大一python简答题_Python练习题及参考答案
  2. Linux中usb设置burst,详细解读Linux系统中ntpq命令的使用
  3. Docker常用操作帅哥专供版
  4. html个人新闻网站,html,js,css实现
  5. 用c语言写一个求和的程序,C语言实现两数求和
  6. mac mysql 自动启动_Mac设置Mysql开机启动
  7. 删除电脑被占用的串口
  8. RO,RW,ZI,FLASH,RAM前世今生
  9. 毕业设计 树莓派指纹识别与RFID考勤系统 - 嵌入式 单片机 物联网
  10. 电商干货!手淘宝贝关键词排名查询