×

通过Telstra窄带网络的Arduino MKR NB 1500

消耗积分:0 | 格式:zip | 大小:0.16 MB | 2023-02-03

分享资料个

描述

最初发表于DIYODE 杂志第 40 期,2020 年 11 月。

介绍

有时您可能需要一个项目来监控远程位置的真实情况并将该数据无线传输给最终用户。例如,它可能是一系列远程泵站,它们是您的财产或运营的关键基础设施。您可能需要监测空气质量以了解坑内气体的积聚,监测流速以衡量泵的性能,也许还需要监测备用电池的电压。它也可以是您财产周围大门的远程气象站或门禁系统。

对于您自己或员工来说,经常出差到每个站点来监控系统是不切实际的。因此,自动化是您最好的解决方案。

好消息是您可以通过多种方式做到这一点。例如,回到第 21 期,我们创建了一个基于 LoRa/Arduino 的物联网设备,在我们的测试中,它能够在近 7.5 公里的距离内将数据从发送器单元传输到接收器。当时我们对这个项目的影响力印象深刻,但事后看来,考虑到澳大利亚的国土面积为 769.2 万平方公里,7 公里是微不足道的。除了距离问题,还有其他问题会使 LoRa 在这种情况下不受欢迎。

LoRa 是一个共享网络,在 915MHz - 928MHz 之间的共享工业、科学和医学 (ISM) UHF 无线电频段上运行。这个波段不需要澳大利亚政府的许可就可以继续传输,这意味着任何人都可以自由使用这个波段,因此,这个小波段可能会变得拥挤。

解释这种拥堵的最好方法是将 ISM 频段想象成酒馆或酒吧内的空间,而您和您的朋友是这个酒吧的客户,所有人都以与 IoT 节点几乎相同的方式进行通信。随着越来越多的人(客户)进入场地,背景噪音越来越大,因为其他客户试图在场地有限的空间内进行交流。这使您别无选择,只能重复相同的消息。

如果你不这样做,你的交流就会被其他交流的积累淹没。如果您的项目是一个简单的气象站,LoRa 可以作为一些丢失的通信在这里和那里的影响最小。但是,如果像我们假设的情况那样,使用关键任务设备(例如我们的远程泵站),失去通信可能是灾难性的。

另一方面,基于蜂窝的物联网使用网络提供商严格控制的专用频谱。只有经过批准的客户才能在该空间进行交流,实质上是为您和您的朋友预留 VIP 休息室。

那么,如果您需要与距离比 LoRa 节点允许的距离更远的设备进行通信,或者如果您有关键任务需求,您有什么选择?好吧,感谢Arduino 和 Telstra 之间的合作,我们得到了答案。

diyode_mkrnb1500_npPM5HGBB8.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

Arduino MKR NB 1500 板的顶视图和底视图

Arduino 开发了 Arduino MKR NB 1500,这是一款基于物联网的 32 位 Arm Cortex M0+ 微控制器开发板,带有 u-blox SARA-R4 多频段长期演进 4G (LTE-M) / NB-IoT 窄带模块。开发板拥有 256KB 的闪存和 32KB 的静态 RAM,这应该给你相当多的编程空间。

diyode_mkrnb1500_specs_4CiHeB5FGG.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

Arduino MKR NB 1500 板令人印象深刻的规格

总共有 15 个数字 I/O 引脚 D0 – D14,其中 11 个具有 PWM 功能。在模拟端,我们有 7 个模拟 I/O 引脚,它们都可以用作数字引脚,2 个可以用作 PWM。结合起来,这使得 MKR 1500 成为功能丰富的开发板,具有足够的内存和 I/O,甚至可以用于一些具有挑战性的项目。

当然,在这种情况下,一切都与从项目传输和接收信号的能力有关,为此,我们拥有 Telstra 机器对机器 (M2M) LTE-M 网络。

从覆盖图中可以看出,该网络覆盖了澳大利亚300万平方公里的区域,为人口最稠密的地区提供服务。因此,只要您的设备在覆盖地图的范围内,您就可以开始了。

Telstra 在澳大利亚的交互式窄带覆盖地图

但是拥塞怎么办?好吧,这也包括在内。与具有共享频谱的 LoRa 不同,Telstra 网络是一个专用频谱网络,同时只有有限的用户在该频谱上。同样,基地塔使用称为调度程序的软件作为中介工作,确保设备不会试图在彼此之上交谈/通信。

这可以防止通信丢失,也意味着您可以使用较低的传输功率。这非常适用于可能需要电池供电的远程设备,因为电池和相关支持硬件(如太阳能电池板)的尺寸减小了。

除了这些好处之外,您还可以在 Telstra LTE-M 网络上获得多方面的身份验证安全性。直到最近,安全性在物联网世界中通常都是事后才想到的。总的来说,这可能是简单化思维的结果。

我们大多数人会认为我们支持物联网的咖啡机相当安全。毕竟,从表面上看,如果有人要控制,最糟糕的事情就是毁了你早上的咖啡。但是,请务必记住,您的网络安全取决于最薄弱的环节。

如果您的咖啡机连接到您的无线局域网 (WLAN),技术娴熟的坏人可能会通过您的咖啡机访问您网络上的其他设备。以 2017 年遭到黑客攻击的北美赌场为例。黑客通过物联网鱼缸监视器获得了对系统的访问权限。虽然这显然是一个极端案例,但它证明了不良行为者是如何进行越来越多的创造性攻击的。

因此,安全现在越来越成为物联网的焦点,尤其是在物联网设备可用于企业间谍活动的企业界。这使得未直接连接到您的 WiFi 网络的基于单元的物联网设备更具吸引力。在 LTE-M 网络中,使用通用集成电路卡 (UICC) 验证通信,我们通常将其称为用户识别模块或 SIM 卡。

此卡是验证网络访问权限的第一步。这种相互身份验证不仅确保设备是它声称的身份,而且网络/服务器也是它声称的身份。

为了将这两种技术结合在一起,Arduino 开发了物联网云。这使您不仅可以使用 1500 NB 和 Telstra 网络非常轻松地创建物联网应用程序,还可以在世界任何地方的任何计算机或移动设备上访问和显示数据。这使您不仅可以随时检查项目的传感器数据,还可以对其做出响应。

diyode_mkrnb1500_io_hnunsHR35Y.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

例如,让我们继续假设的泵站。该泵站存在一个问题,即需要远程控制泵的流量。有了这个系统,您不仅可以实时可靠地监控真实世界的传感器数据,还可以根据需求实时做出反应,甚至可以根据不可预见的情况做出反应。

流量套餐

感谢 Arduino 和 Telstra 之间的合作,您可以从 Telstra 以 119 美元的价格购买带有 SIM 卡的 Arduino MKR NB 1500 板,其中包括前 6 个月每月 10MB 的免费数据!我们进行了计算,对于许多物联网项目来说,这是大量数据。

您需要的数据量将完全取决于您正在创建的项目类型。如果您需要实时到第二个传感器数据,那么与只需要每 10 秒左右更新一次相比,您将需要更多数据。

例如,Arduino MKR NB 1500 上的整数是 32 位值。因此,如果您要在一个月内每秒发送一个 32 位整数,您将使用每月 10MB 计划中的大部分。这是计算出来的,因为一个月有 2、592、000 秒,因此仅此值就需要 8.3 MB 的数据。

注意:这不考虑发送的实际数据包帧之上的任何开销。

但是,如果您每 10 秒发送一次相同的整数,您将使用 1MB 多一点的数据,如果将其减少到 30 秒,数据使用将减少到 0.0108MB。好消息是这一切都可以在 Arduino IoT Cloud 软件中轻松控制。

在 6 个月的免费数据之后,您将需要注册 M2M 数据计划。根据您将使用的数据,有许多计划可供选择。每月 100KB 数据的起价为 2.40 美元。您可以在这里查看不同的计划:https ://diyode.io/040dataplans

动手原型:

diyode_mkrnb1500_prototype_ve6oBa3Vjm.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

使用三个气体传感器动手构建原型

所需零件:

1 x Arduino MKR NB 1500 带 Telstra M2M LTE-M Sim 和帐户

1 x MQ4 甲烷传感器(核心电子:SEN0129 )

1 x MQ6 LPG 传感器(核心电子:SEN0131 )

1 x MQ7 一氧化碳传感器(核心电子:SEN0132 )

* 还需要面包板和原型制作硬件。

原型:

与我们的许多其他评论一样,我们喜欢亲身体验我们评论的内容,所以让我们使用 Telstra 窄带网络对 MKR NB 1500 板进行测试。

我们检查这个硬件的主要目标是让它在一个实际的,尽管是假设的,真实世界的应用程序中工作。因此,我们对硬件的第一个修补将是创建一个简单的远程空气质量项目,该项目可用于密闭空间,以确保在派遣人员进入该空间之前该空间可以安全进入。

注意:我们使用的传感器不是为在一个人的生命依赖于它们的情况下使用而设计的,它们也不够准确。这只是一个示例情况,人们可以针对该示例情况实施该技术。我们不建议您将此项目用于现实世界的密闭空间监控。

我们首先看一下该技术将是一个简单的单边通信示例,其中单元只是发送传感器数据。在不久的将来,我们打算创建一个更大的双向通信项目,我们不仅可以接收传感器数据,还可以远程控制设备。

如果您想自己复制此项目,我们提供了零件清单、Fritzing 图、代码和构建说明。

diyode_mkrnb1500_fritzing_7dOVo7Ef00.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

Fritzing 使用 Arduino MKR NB 1500 板和三个气体传感器

传感器

在这个项目中,我们使用了零件仓库中已有的传感器。可能无法从您当地的电子产品零售商处获得相同的部件,但是,我们列出了DFRobot制造的类似传感器。这些可在Core Electronics获得,并使用与我们使用的传感器相同的传感器技术,但是,占地面积不同。

3 针传感器引出线

diyode_mkrnb1500_3-pin_sensor_l2l0s0mhKX.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

4 针传感器引出线

diyode_mkrnb1500_4-pin_sensor_lnLDSlXZRs.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

Arduino MKR NB 1500 上的 GPIO 引脚不支持 5V。因此,我们需要确保来自传感器的输入不超过 3.3V。在最大浓度下,传感器能够在模拟输出上输出 4V,这可能会损坏 Arduino MKR NB 1500。因此,我们将实施分压器以将电压降至 3.3V 最大值以下。对于我们的演示,我们将简单地使用 R1 和 R2 均设置为 10KΩ 的分压器,这将使输出降低一半。这意味着 Arduino 是安全的,但会降低传感器读数的准确性。

如果我们将其开发为一个合适的项目,我们将实施一种更精确的方法来限制电压,而不会影响传感器的精度。但是,作为演示,它工作正常。

无论您使用哪种传感器,都需要连接传感器,使传感器的模拟输出引脚连接到 10KΩ - 10KΩ 分压器,分压器的连接点连接到 Arduino MKR NB 1500 的模拟引脚。同样,每个传感器需要 5V 和接地。这三个都必须与 Arduino MKR NB 1500 共享共同点。

对于我们的项目,我们通过 USB 端口为 Arduino MKR NB 1500 供电,并通过单独的 5V 电源为传感器供电。我们这样做是因为三个传感器加在一起可能需要高达 350mA 的电流,而我们不希望我们的 PC 在编程期间提供那么大的电流。完成 Arduino 编程后,您可以使用 Vin 引脚从同一 5V 电源直接为 Arduino 和传感器供电。

Arduino 创建物联网

创建电路后,我们将注意力转向对设备进行编程。这完全是通过 Arduino Create IoT 云完成的,您可以在这里找到它:https ://create.arduino.cc/iot/

使用 Arduino Create IoT Cloud 构建项目非常简单。本质上,这是一个 4 步过程:

创建设备

创建一个东西

创建草图

创建仪表板

完成这些简单的步骤后,您将在 Telstra M2M 蜂窝网络上拥有一个正常运行的物联网设备,只要设备位于覆盖区域内,它就可以将传感器数据发送到地球上的任何位置。考虑到让程序运行所需的时间非常少,这是一个令人印象深刻的壮举。

我们将更详细地描述这些步骤。

创建设备

对于大多数制造商而言,创建/设置设备将很简单。然而,在我们的案例中,我们遇到了与 Portenta H7 开发板审查相同的问题。该系列微控制器没有专用的 USB 转串口转换器芯片。相反,他们使用微控制器本身来处理 USB 通信,这对绝大多数制造商来说非常好,但在我们的 Windows 台式电脑上,我们必须手动强制微控制器进入引导加载程序模式。我们通过在一秒钟内按两次重置按钮来完成此操作,然后选择出现的新 com 端口。不过,我们必须多次重复此过程才能获得成功的时机。最后,我们发现更换到没有同样问题的 Windows 笔记本电脑更容易。因此,

首先,将您的网络浏览器指向 Arduino Create IoT 网站:https ://create.arduino.cc/iot/

如果尚未这样做,您将需要创建一个帐户或登录。

从顶部菜单中选择设备。

diyode_mkrnb1500_iot_cloud_step1_hTXdPs3h25.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

选择添加设备按钮。

diyode_mkrnb1500_iot_cloud_step2_pAFooBU0M7.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

选择“设置 Arduino 设备”按钮。

diyode_mkrnb1500_iot_cloud_step3_G2veHFkJcB.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

几秒钟后,系统可能会要求您安装 Arduino Create Agent 插件。安装这个,最终,您会看到一个屏幕,表明该软件已找到兼容的 Arduino 设备已连接。

如果这是您的设备,请选择配置按钮。

diyode_mkrnb1500_iot_cloud_step4_bzwFtQJ7RC.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

这样做之后,您将获得一个随机生成的名称。我们建议您将此名称更改为可以识别其用途的名称。对于我们的示例,我们将其称为 DIYODE_MKR_1500。

diyode_mkrnb1500_iot_cloud_step5_v6lvqx3k7e.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

输入适当的名称后,选择下一步按钮。Create 软件现在将创建您设备的一个实例。在此过程中,软件似乎将草图上传到开发板并进行了一系列检查和测试。

注意:在我们的测试中,这是我们发现一些问题的地方,似乎源于前面提到的 USB / Bootloader 问题。如果您在此处收到错误消息,请尝试使用不同的计算机或将设备置于引导加载程序模式,然后再添加上面的名称。

diyode_mkrnb1500_iot_cloud_step6_Luurlp7TLV.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

如果一切顺利,您应该会看到这里显示的窗口。

diyode_mkrnb1500_iot_cloud_step7_y64f90RZFL.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

如果它不起作用,您可能会看到一条令人担忧的消息,如此处所示。如果是这样,请不要绝望。我们有同样的错误,我们的硬件没有任何问题。我们只是简单地重复了这个过程,它运行良好。

diyode_mkrnb1500_iot_cloud_step8_DE9wf5KYRB.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

创建一个东西

正确设置设备后,您现在可以设置整个项目,Arduino Create 称之为“事物”。在我们的例子中,我们的“东西”将是一个气体传感器,因此,我们的东西将被命名为 DYODE_Gas_Sensor。

只需为您的东西命名,然后将其链接到在上一步中创建和命名的设备。

diyode_mkrnb1500_iot_cloud_step9_4NyvJBeMw1.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

从这里,选择添加属性按​​钮,这将允许您添加属性实例,例如您的传感器。这样做会自动生成代码来处理来自该属性的预期数据的传输。

diyode_mkrnb1500_iot_cloud_step10_jFtjl5TV9D.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

这将带您进入以下屏幕,您可以在其中为要添加的属性从所有功能中进行选择。

对我们来说,该属性将是一个传感器,因此我们将以传感器命名它,以明确我们指的是什么传感器。

变量名称是我们需要在代码中引用的名称。此名称应与所使用的传感器相关,这将使编码过程更容易。

我们的传感器是模拟传感器,因此,假设是 10 位 ADC,我们预计它会返回一个介于最小值 0 和最大值 1024 之间的正数。因此,我们可以将类型定义为 int,表示整数,并相应地设置最小值和最大值。

为了获得许可,我们将它们设置为只读,这是有道理的,因为我们只需要从它们接收模拟信号。

更新设置为定期,周期为 30 秒。正如我们之前所说,您发送的数据量将决定您将在计划中使用的数据量。如果您不需要最多第二个数据,您可以通过增加周期来节省成本。

我们还选择了 Show history visualization,它似乎将历史数据存储在 Arduino Cloud 中,允许我们在创建仪表板后稍后查看。

我们的财产屏幕看起来像这里显示的那个。

diyode_mkrnb1500_iot_cloud_step11_5S9juLVrS8.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

重复该过程,直到添加完所有传感器。

diyode_mkrnb1500_iot_cloud_step12_8tmxubeBcB.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

接下来,选择右上角的编辑草图按钮开始编码部分。

要向您的项目添加五个以上的属性,您需要拥有一个帐户和一个付费的 Arduino 创客计划,这将提供此处列出的好处。Maker 计划可直接从 Arduino 数字商店购买,每月费用为 6.99 美元。https://store.arduino.cc/digital/create

diyode_mkrnb1500_iot_cloud_step13_N1qNSTwXGf.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

创建草图

下一步对于之前使用过Arduino的人来说应该是比较熟悉的一步,也就是编码。这里令人印象深刻的是自动化。Arduino 会根据您在添加属性时的选择来处理所有通信方面的事情。不需要“大脑”工作。

我们需要做的就是创建一个简单的草图,将所需的传感器值放入一个变量中,与我们之前创建的一个或多个变量名称相匹配。Arduino 软件负责传输和计时,我们无需费力。

这使我们的编码任务非常简单。

对于我们来说,我们只需使用AnalogRead()函数来读取传感器所连接的模拟引脚,并将该值放入相应的变量中。我们不需要转换任何东西,因为我们可以像这里显示的那样传输原始数据。

 

#include "thingProperties.h"
int readSensor;
void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500); 
  Serial.println("Hello world");
  // Defined in thingProperties.h
  initProperties();
  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}
void loop() {
  ArduinoCloud.update();
  // Your code here 
  sensor1 = analogRead(1);
  carbonMonoxide = analogRead(2);
  methaneSensor = analogRead(3);
  Serial.println(sensor1);
  Serial.println(carbonMonoxide);
  Serial.println(methaneSensor);
  delay(1000);
 }

 

diyode_mkrnb1500_iot_cloud_step14_54nOJ3qvab.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

如果你想处理你的数据而不是简单地发送原始数据,那也很简单。您需要做的就是对传感器值执行数学运算,完成后,将结果放入在添加属性部分创建的相应变量名中。为了帮助您,Arduino 在生成代码的注释中包含了这些变量名称。

diyode_mkrnb1500_iot_cloud_step15_YqsdlINpNq.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

一旦您对代码感到满意,就可以将其上传到开发板。将电路板插入计算机上的 USB 并直接从该 Web 界面上传。

在此之后,您的最后一步是创建一个仪表板,以便您可以查看设备中的数据。

创建仪表板

从 Arduino Create IoT 主页选择仪表板按钮。

diyode_mkrnb1500_iot_cloud_step16_htURqotGyx.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

选择添加,您将看到一个图形元素列表。这些可用于提供 I/O 或以其他方式显示来自或去往 IoT 设备的数据。

对于我们的项目,我们滚动到列表的最底部并选择了图表选项。这将使我们能够以易于理解和即时衡量的方式轻松绘制和显示原始传感器数据。

diyode_mkrnb1500_iot_cloud_step17_snmxRgYrYG.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

当然,如果您想在这里进行试验,您一定会发现许多有趣的方式来交互和显示来自您设备的数据。快速浏览一下肯定给我们一些灵感,让我们对这个令人兴奋的硬件的未来用例有所了解。

diyode_mkrnb1500_iot_cloud_step18_zlR1Jyx2w9.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

选择显示数据的方式后(在我们的例子中使用图形元素),您可以将元素放置在 GUI 仪表板工作平面上。然后您需要将元素链接到特定属性。对我们来说,我们将这张图与一氧化碳传感器联系起来。

diyode_mkrnb1500_iot_cloud_step19_VoyXq72lz5.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

重复相同的过程以添加其他元素并将它们链接到所需的属性。

diyode_mkrnb1500_iot_cloud_step20_Nz4t2YlMxS.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

远程访问项目

Arduino 创建了一个名为 Arduino IoT Cloud Remote 的移动应用程序,它允许您访问完全相同的仪表板,尽管经过修改以适合手机屏幕。

ANDRIOD:https ://play.google.com/store/apps/details?id=cc.arduino.cloudiot

苹果:https ://apps.apple.com/us/app/id1514358431

diyode_mkrnb1500_iot_cloud_step21_yf0QAsGBt2.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max

我们的最终想法

基于我们动手测试的成功,我们对 Arduino 硬件和 Telstra 网络提供的性能和易用性印象深刻。

因此,我们很高兴看到社区在何处以及如何使用该系统实施项目。

我们可以看到大量的利基应用,从用于定位和禁用被盗车辆的汽车设备到偏远农田、矿区等的水资源管理项目。

这种组合确实为爱好者们带来了不可思议的力量,这在几年前还显得不可思议。

 

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

评论(0)
发评论

下载排行榜

全部0条评论

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