亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

GPS 数据记录器、空间分析和 Azure IoT 中心。

组件和用品

Arduino UNO
× 1
Raspberry Pi 2 B 型
× 1
Adafruit Ultimate GPS Breakout
× 1
9V to Barrel Jack Connector
× 1
9V 电池(通用)
× 1
光敏电阻
× 1
LED(通用)
3 种透明色、1 种红色、1 种黄色和 1 种绿色
× 6
SparkFun 按钮开关 12mm
× 2
滑动开关
× 3
电阻 10k ohm
× 4
电阻 221 ohm
× 3
无焊面包板半尺寸
× 1
无焊面包板全尺寸
× 1
跳线(通用)
× 1
带适配器的Sandisk 16GB MicroSD
× 2

应用和在线服务

Microsoft Windows 10 IoT Core
Microsoft Azure
Arduino IDE
Microsoft Visual Studio 2015
Google Earth Professional
量子地理信息系统
Microsoft Windows 10 企业版

关于这个项目

简介

当前的移动技术已经变得非常先进且易于使用,几乎所有类型的设备上都有 GIS 信息地图。该项目可以制作成课堂活动,向孩子们教授开源硬件、移动计算、地理空间技术和云计算的基础知识。

该项目由 3 个部分组成:

1) Arduino GPS 数据记录器

在帮助下,年幼的孩子可以制作一个记录 GPS 位置信息、光线测量和被定位物体类型的设备。他们可以到户外并标记预定事物(标志、树木、公园长椅等)的位置。这样可以更好地了解周围的世界,并更好地了解 GIS 地图上显示的数据。夜间公共区域的低光照水平可能是一个安全问题。在大人的陪伴下,他们可以在晚上出去收集光线测量值以供进一步分析。

2) GIS 可视化与分析

在地图上可视化在现场收集的位置。通过执行空间点插值分析估计区域的光照水平并将结果显示在地图上。

3) 使用 Windows 10 IoT Core 和 Azure IoT Hub

进行GIS可视化和分析后,使用Windows 10 IoT Core和Azure IoT Hub上传和分发数据。这使系统可以轻松扩展以支持现场数千个数据收集器和设备上的数据管理。

Arduino GPS 数据记录器

以下视频提供了 Arduino Uno GPS 数据记录器设备的概述和快速演示。源代码和面包板图可以在下面找到。

以下是有关组件的更多信息。

光敏电阻

这些模拟传感器测量光的亮度并且非常易于使用。请参阅此处的源代码示例。模拟读数将测量 0 - 1023,但除非光线非常明亮,否则大多数读数将低于 200。在构建您的设备时,请尝试一些简单的读数,以便您知道会发生什么。

前任。明日光1000左右,白天室外遮阳900左右,晚上直射路灯170左右。

微型 SD 插槽

可以在 Arduino IDE 的 File> Examples> SD> Datalogger 下找到很好的例子。

Adafruit 终极 GPS

易于使用的 GPS。按照此处的示例将 GPS 库安装到您的 Arduino IDE 中。

卫星定位状态 LED

水平精度稀释 (HDOP) 是对来自 GPS 的 X、Y 位置精度的测量。 HDOP 值越低,位置越准确。如果 GPS 有一个定位点,它将返回带有纬度和经度位置的 HDOP 值。有关 GPS 精度稀释的更多信息,请点击此处。

  • 红色 - 无卫星定位
  • 黄色 - HDOP> 1.5 的卫星修复。
  • 绿色 - 使用 HDOP <=1.5 进行卫星修复。

二进制特征类型滑动开关

三个滑动开关用于基数 10 0 - 7 的二进制表示。最左边的开关代表 2^2 或 4。中间的开关代表 2^1 或 2。最右边的开关代表 2^0 或 1。添加基于的值在开关状态上给出 0 - 7 以 10 为基数的数字,该数字对应于正在收集的功能类型。理想情况下,使用 Arduino GPS 数据记录器的人会理解代码的含义。

例如:

OFF OFF OFF =0 0 0 =0 =光传感器读数OFF OFF ON =0 0 1 =1 =Park BenchOFF ON OFF =0 1 0 =2 =RockOFF ON ON =0 1 1 =3 =垃圾CanON OFF OFF =1 0 0 =4 =TreeON OFF ON =1 0 1 =5 =PayphoneON ON OFF =1 1 0 =6 =LamppostON ON =1 1 1 =7 =喷泉 

按钮

每次按下按钮时,设备都会将一行逗号分隔值 (CSV) 文本附加到 microSD 卡上的 datalog.csv。

数据格式为:

纬度,经度,LIGHT_VALUE,FEATURE_TYPE

  • 纬度和经度 来自 GPS。
  • LIGHT_VALUE 是来自光敏电阻的模拟读数。
  • FEATURE_TYPE 是 0 - 7 值,具体取决于上述 3 个二进制开关的开/关设置。

CSV 数据示例:

 <代码> 40.77221,-73.97392,105,540.77139,-73.97394,60,140.77051,-73.97460,150,640.77225,-73.97650,25,340.77171,-73.97462,43,240.77283,-73.975033,54,1  

没有液晶显示器?

可以用 1602 LCD 屏幕和更多按钮替换多个 LED,但存在问题。

  • 拥有 GPS、microSD 卡插槽和 1602 LCD 的代码可以编译并部署到 Arduino Uno,但 microSD 卡插槽不稳定。移除 LCD 稳定了 microSD 卡插槽,因此添加了 LED 以提供足够的用户通知。使用具有更多资源的 Arduino 设备(例如 MEGA)可能会允许使用 1602 LCD 以及 GPS 和 microSD 卡插槽。
  • 9V 电池对于 Arduino GPS 数据记录器来说很方便,但在为 1602 LCD 显示器供电时,电池续航时间不长。它不是一个关键组件,所以它必须去。

GIS可视化与分析

可视化 GPS 点

拥有 CSV 格式的 GIS 数据很好,但不是很有用,除非您可以在地图上看到它。从 Arduino GPS 数据记录器中弹出 microSD 卡,然后插入安装了 Google Earth Professional 的 Windows 10 计算机。转到此处获取安装和许可说明。将文本文件从 microSD 卡复制到计算机并在文本编辑器中打开。在文本文件顶部添加以下行作为列标题并将其另存为 .CSV 文件。

纬度,经度,LIGHT_VALUE,FEATURE_TYPE

使用 Google Earth Professional 转到“文件”菜单并选择“导入...”浏览 .CSV 文件并将其导入。通过选项为代表不同要素类型的图标创建不同的地图样式,并在 Google Earth Professional 中显示点位置。必须使用 Google 地球的专业版。常规版本的 Google 地球无法导入 .CSV 文件。

使用量子 GIS (QGIS) 进行空间分析

QGIS 是一种流行的免费开源 GIS,其安装程序和教程可在此处获得。使用 QGIS,您可以对 GPS 位置的光传感器属性进行空间分析,以识别公园等公共区域夜间照明充足和不足的区域。

步骤 1 - 加载边界、步行路径和其他有关被评估照明不足区域的相关信息。

第 2 步 - 将来自 GPS 数据记录器的 .CSV 文件中的点加载到 QGIS 地图中。应用点符号系统和标签,以便您可以直观地看到光值。

这些点将显示光传感器值,因此您可以看到哪里亮(蓝色)哪里暗(红色)。尝试分析更大的区域时,仅查看点数据是不够的。

步骤 3 - 对点数据执行插值,以更好地了解点周围和点之间的区域。当您拥有某些位置的数据并希望估计已知位置之间的值时,使用插值法。此处提供有关插值的更多信息。

插值可以更好地了解公园内的光值。通过在已知位置提供更多光传感器读数,可以改进这种分析。

第 4 步 - 收集更多光传感器读数并将其加载到 QGIS 中。

第 5 步 - 在更大的数据集上重新运行插值。

您可以看到第二个插值显示了与第一个插值相似的模式,但由于添加了额外的点,因此它具有更多细节。

使用 Windows 10 IoT Core 和 Azure IoT 中心。

扩大规模

Arduino GPS 数据记录器是一种廉价且简单的设备,可以将传感器信息记录到 microSD 卡中。这些设备可以在地理上广泛分布以收集信息。如果您需要设计一个系统来管理来自这些设备的信息可能是一项具有挑战性的任务。

通过使用 Windows 10 IoT Core 和 Azure IoT 中心作为消息传递系统的基础,设备数量可以轻松扩展到数千台设备提供信息。

首先尝试这些例子

在继续之前,强烈建议您遵循适用于 .NET 的 Azure IoT 中心入门教程。入门教程将带您完成创建 Azure 试用帐户、设置 Azure IoT 中心和开发允许您发送和接收 IoT 中心消息的核心示例的步骤。

还可以下载 Azure IoT 中心设备资源管理器,以便轻松管理连接到 Azure IoT 中心的 Windows 10 IoT 核心设备。从这里下载源代码和/或安装程序。

Raspberry Pi 2 上的 Windows 10 IOT 核心

使用 Windows 10 开发机器,下载适用于 Raspberry Pi 2 的 Windows 10 IoT Core,并使用 Windows IoT Image Helper 刷写 micoSD 卡。

在 Raspberry Pi 2 中安装 microSD 卡,将其插入以太网,并确保它在启动时列在开发机器上的 Windows IoT Core Watcher 中。

如下图所示,在面包板上连接一个按钮。请参阅本页底部的示意图。也可以在本页底部找到指向以下源代码的链接。

用于数据上传的通用 Windows 应用

在 Windows 10 计算机上启动 Visual Studio 2015,然后选择“文件”>“新建”>“项目”。为通用 Windows 应用程序选择空白应用程序模板。调用新项目 IoTHubClientSendEvent。使用 Nuget,引入 Microsoft.Azure.Devices.Client 和 Newtonsoft.Json。还要为 UWP 的 Windows IoT 扩展添加参考,以访问 Raspberry Pi2 上的 GPIO。

Visual Studio 准备就绪后,将以下 using 语句添加到 Mainpage.xaml.cs 页面的顶部以引入必要的库以与 Azure 通信并与 GPIO 引脚连接:

using Windows.Devices.Gpio;using Newtonsoft.Json;using Microsoft.Azure.Devices.Client;using System.Text; 

将以下变量和常量添加到 MainPage 类。 deviceId 值应为在 Azure IoT 中心设备资源管理器中配置的设备名称。

private const int buttonPin =6;private GpioPin buttonGPIO; static DeviceClient deviceClient;static string deviceId ="MakerChallengeDevice2";static string uploadFile ="data.csv"; 

为 JSON 序列化添加一个 evData 类,并将其添加到 MainPage 类中。

 class evData { public string id { get;放; } 公共字符串数据 { 获取;放; } } 

将这两行添加到 MainPage 函数。获取

的值

如上所述,来自 Azure IoT 中心设备资源管理器的 DEVICE_CONNECTION_STRING。

deviceClient =DeviceClient.CreateFromConnectionString("DEVICE_CONNECTION_STRING", TransportType.Http1);initGPIO(); 

添加初始化GPIO的函数

private void initGPIO(){ var gpio =GpioController.GetDefault(); buttonGPIO =gpio.OpenPin(buttonPin); // 检查是否支持输入上拉电阻 if (buttonGPIO.IsDriveModeSupported(GpioPinDriveMode.InputPullUp)) buttonGPIO.SetDriveMode(GpioPinDriveMode.InputPullUp); else buttonGPIO.SetDriveMode(GpioPinDriveMode.Input); // 设置去抖动超时以过滤掉按钮按下时的开关弹跳噪声GPIO.DebounceTimeout =TimeSpan.FromMilliseconds(50); // 注册 ValueChanged 事件,以便我们的 buttonPin_ValueChanged // 在按钮按下时调用函数 buttonGPIO.ValueChanged +=buttonPin_ValueChanged; } 

接下来,添加一个函数来调用按钮单击处理程序。

private void buttonPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) { // 按下按钮时发送消息 if (e.Edge ==GpioPinEdge.FallingEdge) { sendMessageToIOTHub(); } } 

添加实际的 sendMessagetoIOTHub() 函数以向 Azure IoT 中心发送消息。

 private static async void sendMessageToIOTHub() { string myString; var msg =new evData(); if (File.Exists(uploadFile)) { myString =System.IO.File.ReadAllText(uploadFile); } else { myString ="刚刚签入!!"; msg.id =deviceId; msg.data =myString; var messageString =JsonConvert.SerializeObject(msg); var message =new Message(Encoding.ASCII.GetBytes(messageString));等待 deviceClient.SendEventAsync(message); } 

为默认的 Debug x86 编译解决方案以确保它有效。接下来,将目标更改为 Release ARM 并选择 Remote Machine。

如果 Windows 10 IOT Core 设备在网络上,Visual Studio 2015 将看到它并允许您将其设置为部署目标。

快速提示:

在将应用程序部署到 Windows IOT Core 之前,右键单击项目并选择属性。在应用程序面板上,单击包清单按钮。单击“打包”选项卡并将“包名称”更改为给定名称(例如 IoTHubClientSendEvent)。如果您不这样做,将很难在 Windows 10 IOT Core Web 界面中识别您的应用程序。

现在转到“构建”菜单并选择“部署解决方案”。部署完成后,在 Windows IOT Core Watcher 中找到 Windows 10 IOT Core 设备。右键单击该行并选择 Webbrowser Here。使用本地管理员用户登录,然后单击左侧的应用程序链接。从“已安装的应用程序”下拉列表中选择刚刚部署的应用程序的名称,然后单击“开始”。

让我们暂时离开这里,开发用于监控 IoT 中心的应用程序。

用于从 Azure IOT 中心接收消息的通用 Windows 应用程序

在 Windows 10 上启动 Visual Studio 2015 并创建一个新的 C# Windows 控制台应用程序。将项目命名为 IoTEventHubReceiver .使用 Nuget,添加 WindowsAzure.ServiceBusNewtonsoft.Json .

将以下 using 语句添加到 Program.cs 文件的顶部:

using System.IO;using System.Threading;using Newtonsoft.Json;using Microsoft.ServiceBus.Messaging; 

将类添加到 IoTEventHubReceiver 类中,用于将在从 Azure IoT 中心接收后反序列化的 JSON 数据。

class evData{ public string id { get;放; } 公共字符串数据 { 获取;放; }} 

添加一些变量以从 Azure IoT 中心接收消息。从 Azure IoT 中心设备管理器获取 IOT_HUB_CONNECTION_STRING 的值。

static string connectionString ="IOT_HUB_CONNECTION_STRING";static string iotHubD2cEndpoint ="messages/events";static EventHubClient eventHubClient; 

将这两行添加到 main() 函数中以创建 EventHubClient 并开始接收消息:

eventHubClient =EventHubClient.CreateFromConnectionString(connectionString, iotHubD2cEndpoint);SynchMessages();  

最后添加 SynchMessages() 函数来设置连续循环,以及 ReceiveMessages 来接收消息并将它们保存到磁盘。

private static async void SynchMessages(){ while (true) { var d2cPartitions =eventHubClient.GetRuntimeInformation().PartitionIds; foreach (d2cPartitions 中的字符串分区) { ReceiveMessagesFromDeviceAsync(partition); } }}私有异步静态任务ReceiveMessagesFromDeviceAsync(string partition){ v​​ar eventHubReceiver =eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow); while (true) { EventData eventData =await eventHubReceiver.ReceiveAsync(); if (eventData ==null) 继续;字符串数据 =Encoding.UTF8.GetString(eventData.GetBytes()); evData d =JsonConvert.DeserializeObject(data); StreamWriter writer =new StreamWriter("c:\\gps\\download\\" + d.id + "." + DateTime.Now.Year + "." + DateTime.Now.Month + "." + DateTime.Now .Day + "." + DateTime.Now.Hour + "." + DateTime.Now.Minute + "." + DateTime.Now.Second + ".csv"); writer.Write(d.data); writer.Close(); Console.WriteLine(string.Format( "Message 从 {0}.\n{1} 收到", d.id, d.data)); }} 

在开发工作站上,创建一个“c:\gps\download”文件夹,用于保存接收到的消息。

运行应用程序以发送和接收 Azure IoT 中心消息

启动 IoTEventHubReceiver 程序并等待显示控制台屏幕。接下来,按下连接到运行 Windows 10 IoT Core 的 Raspberry Pi 2 上的 GPIO 的按钮和 IoTHubClientSendEvent 程序。按下按钮会发送一条消息“刚刚登记!”文本到 Azure IoT 事件中心。开发机控制台收到消息后会显示如下消息。

收到来自MakerChallengeDevice2的消息。刚刚签入! 

也可以将文本文件的内容作为消息发送,只要文本小于 256KB,因为这是 Azure 物联网中心的当前最大消息大小。请参阅 sendMessageToIOTHub() 上面的函数以查看文件是如何读取和序列化的,并查看 ReceiveMessagesFromDeviceAsync() 上面的函数来查看消息是如何反序列化并写入文件的。

目前,Windows 10 IoT Core 不允许通过代码访问绝对路径的文件,但经过多次故障排除后,我发现它可以引用与可执行文件位于同一目录中的文件。通常这不是最佳实践,但它有效。要将文本文件放在应用程序文件夹中,请右键单击 Windows 10 IoT Core Watcher 中的设备,然后选择打开网络共享。使用本地管理员用户进行身份验证并浏览到:

c$\Data\Users\DefaultAccount\AppxLayouts

查找具有已部署应用程序名称的文件夹,将一个文本文件放入其中,可执行文件可以读取该文件。对于此示例,文本文件必须称为 data.csv 并且必须小于 256 KB。一个很好的示例是一个 CSV 文件,其中列出了纬度、经度、光传感器读数和特征类型。点击连接到Raspberry Pi2 GPIO的按钮,控制台会显示如下:

从 MakerChallengeDevice2.LAT,LNG,LT,TYP45.45926,-110.57361,45,645.78546,-110.02487,156,3 收到的消息 

扩展文件上传 - 如果您按照适用于 .NET 的 Azure IoT 中心入门示例进行操作,您将在后续步骤部分找到将文件上传到 Azure Blob 存储的示例。

总结

该项目演示了如何创建一个简单的 Arduino GPS 数据记录器来记录信息、分析收集到的数据并使用云来管理收集到的信息。这个项目有很多扩展点,例如:

  • 在 Arduino GPS 数据记录器上记录来自不同传感器类型的信息。
  • 使用 WIFI、蓝牙或蜂窝网络将信息直接从 Arduino 设备上传到 Azure。
  • 执行不同类型的空间分析,以便更好地做出有关环境的决策。
  • 开发一个地图网络应用程序来显示原始或分析过的信息。
  • 使用 Azure Stream Analystics 中的事件处理器对 IoT 中心接收到的数据进行处理。

代码

Arduino GPS 数据记录器
Arduino GPS Datalogger 的草图和接线图。https://github.com/ShawnCruise/ArduinoGPSDataLogger
Azure IoT 中心示例
在 Windows 10 IoT Core 上部署的通用 Windows 应用程序以将消息发送到 Azure IoT 中心。https://github.com/ShawnCruise/AzureIotHubExample
Azure SDK
从这里获取 Azure IoT 设备资源管理器。https://github.com/Azure/azure-iot-sdks/blob/master/tools/DeviceExplorer/doc/how_to_use_device_explorer.md
Windows 10 IoT 核心示例
部署到 Windows 10 IoT Core 的示例。https://github.com/ms-iot/samples

示意图

GPSDataLogger.fzz RPi2%20IOT%20Core.fzz

制造工艺

  1. Avnet Silica 在 2019 嵌入式世界展示 AI 和物联网技术
  2. Windows 10 IoT Core 和 SHT15
  3. 温湿度数据记录仪
  4. IOT - 使用 ESP8266、Arduino 和超声波传感器的智能罐
  5. 生日快乐:灯光和声音
  6. u-blox LEA-6H 02 GPS 模块,带有 Arduino 和 Python
  7. 使用 Alexa 和 Arduino IoT Cloud 完全控制您的电视
  8. 吉他快速拨片和踩踏踏板!
  9. WiFi ESP8266 和 DHT22 传感器
  10. 基于 GPS 的廉价而准确的时钟
  11. Azure IoT 游泳池
  12. PCB 和物联网指南