主要内容

原型与声纳接近传感器

这个例子展示了如何使用ThingSpeak原型™使用wi - fi连接Arduino®。你读和写通道数据与ThingSpeak通信库。在这个例子中,一个可调阈值是读取ThingSpeak创建一个接近传感器。的硬件由Arduino MKR100声纳传感器和一个指示导致显示当一个对象存在。

原型项目可能需要多个传感器再引燃的代码来调整校准参数,如温度传感器。硬件调整增加了复杂性,降低了可靠性和很难达到当您的项目部署。相反,你可以阅读从ThingSpeak校准参数和实时变化的参数。你可以提高你的质量测量当你调整一个调优参数存储在ThingSpeak。

金宝app支持的硬件

  • Arduino MKR1000

  • Arduino Uno,大型、由于或达芬奇与无线网络或以太网连接

  • 粒子光子(一些代码和方案调整)

在这个例子中,一个声纳传感器监控一个订书机和帖子的测量通道。声纳传感器是通过发送脉冲,测量的时间脉冲返回一个对象。系统使用的距离阈值读取ThingSpeak阈值和测量距离。领导在订书机时。

在您完成这个示例中,您将看到邻近数据和设置在你的频道。ThingSpeak通道视图显示以下邻近数据和设置:

  • 阈值设置为15厘米

  • 十个测量每个平均

  • 读标志被设置为强迫阅读校准参数

  • 数据显示有人“借来的”订书机上午11点,后来返回到一个新的位置

所需的硬件

  • Arduino MKR1000或其他Arduino以太网或无线网络连接

  • HC-SR04声纳传感器

  • 跳线(至少4个)

  • 领导

  • 小电阻(100Ω- 1 kΩ)

  • USB电缆

频道设置

1)创建一个ThingSpeak通道,如图所示收集数据的新渠道。将数据存储在第一个字段,存储设备设置在连续的领域。设备设置包括距离阈值,平均数量的测量,一个标志来控制设备是否在每个循环更新设置。

2)启用字段1,2,3,4频道设置视图。区分字段,每个字段提供一个描述性的名称。这张图片显示了一个单通道配置为收集数据在第一个字段和校准参数存储在字段2,3,4。

3)注意适当的读和写的API密钥API密钥选项卡中频道设置视图(图中圈)。

4)填充校准领域使用浏览器窗口。你可以复制的文本API密钥选项卡或修改本文编写API密匙。每个URL直接输入到您的浏览器的地址栏,改变你的API编写关键API写的关键通道。

a。设置阈值检测对象(50厘米是一个很好的起点):

https://api.thingspeak.com/update?api_key =写API KEY&field2 =阈值

b。设置测量平均的数量:

https://api.thingspeak.com/update?api_key =写API KEY&field3 = NUMTOAVERAGE

c。设置控制标志的设备定期检查新设置:

https://api.thingspeak.com/update?api_key =写API KEY&field4 = 1

浏览器返回的条目数量通道。如果您刚刚创建的频道,你看到一个1,2,3,当你填充三个需要校准字段。

示意图和联系

1)连接VCC在mkr 5 V - 1000。

2)地面传感器连接到Arduino地面。

3)连接三角针Arduino销8。

4)回声销连接到Arduino销12。

5)连接一个电阻Arduino销5,并连接的电阻器领导的一项指标。领导的阳极连接到地面。

计划你的Arduino

1)下载最新Arduino IDE。

2)添加Arduino和ESP8266 ThingSpeak图书馆库管理器。选择草图>包括图书馆>管理库。选择ThingSpeak将它添加到您的草图。

3)添加WiFi101图书馆在图书馆的经理。注意:确保安装的0.13版本库。在0.14版本中有一个漏洞,导致文章失败。选择草图>包括图书馆>管理库。选择WiFi101将它添加到您的草图。

4)创建应用程序。打开一个新窗口的Arduino IDE并保存文件。添加代码中提供的代码部分。确保无线网络信息编辑、通道ID,和API键。

5)成功上传程序之后,您可以使用串行监控输出监视器。如果存在一个对象在一个距离小于设定的阈值,然后你设备的帖子距离你的频道。试着尝试测量的数量平均,看看你的测量波动变化。一旦你设置参数,你可以改变的值读取标志10。一旦你的设备读取这个标志为0,它停止检查ThingSpeak参数,节省功率和带宽。

代码

1)包括图书馆和初始化控制针。

# include < ThingSpeak。h > # include < WiFi101。h > # define triggerPin 8 # define echoPin 12 # define LEDpin 6

2)定义和初始化变量。确保无线网络信息编辑、通道ID,和API键。找到你的频道ID主页顶部的通道。

/ /网络信息const char *名称=“名称”;const char *密码=“xxxxxxxxxx”;/ / ThingSpeak信息char * writeAPIKey =“XXXXXXXXXXXXXXXX”;char * readAPIKey = " YYYYYYYYYYYYYYYY”;const长channelID = 000000;const unsigned int firstReadFieldNumber = 2;const unsigned int secondReadFieldNumber = 3;const unsigned int switchField = 4;/ /字段数(1 - 8)改变状态的设备。决定是否从ThingSpeak读取数据。 // Other constants const unsigned long postingInterval = 60L * 1000L; // Post data every 60 seconds // Global variables unsigned long lastConnectionTime = 0; long lastUpdateTime = 0; float distanceThreshold = 0; bool getInfo = 1; // Set this to zero if you don’t want to read data from ThingSpeak anymore (i.e. calibration complete) int points = 7; WiFiClient client;

3)初始化输入和输出插脚,和阅读中第一次校准参数设置例行公事。

无效的设置(){系列。开始(9600);pinMode (triggerPin、输出);pinMode (LEDpin、输出);pinMode (echoPin、输入);connectWifi ();以“开始”);/ /从ThingSpeak得到初始参数。distanceThreshold = readTSData (channelID firstReadFieldNumber readAPIKey);点= readTSData (channelID secondReadFieldNumber readAPIKey);}

4)主循环执行时,每次取多个测量。如果数据没有被写入ThingSpeak,把数据写入到输出通道。同样,如果读国旗最后被解读为真,在每个周期检查校准数据和旗帜。

浮空循环(){距离= 0;/ /确保有一个互联网连接。如果(WiFi.status () ! = WL_CONNECTED) {connectWifi ();}(uint16_t循环= 0;循环<点;循环+ +){距离+ = getDistance (triggerPin echoPin);/ /测量、存储测量延迟的总和(5);}距离=距离/分;如果(距离< distanceThreshold) {digitalWrite (LEDpin、高);其他}{digitalWrite (LEDpin、低); } Serial.println("Ave: "+ String(distance)+ " cm"); if (millis() - lastUpdateTime >= postingInterval) { lastUpdateTime = millis(); if (!(getInfo==0)){ distanceThreshold = readTSData(channelID,firstReadFieldNumber,readAPIKey); points = readTSData(channelID,secondReadFieldNumber,readAPIKey); getInfo = (bool)readTSData(channelID,switchField,readAPIKey); } if (distance < distanceThreshold){ // Write data to ThingSpeak channel. writeTSData(channelID, 1, distance, writeAPIKey); } } delay(500); // Provide some delay between measurements. }

5)使用这些函数与ThingSpeak读写数据。

int writeTSData(长TSChannel, unsigned int TSField,浮动数据,char * ReadAPIKey) {int writeSuccess = ThingSpeak。writeField (TSChannel TSField,数据,writeAPIKey);/ /写数据通道返回writeSuccess;}/ /使用这个函数如果你想同时多个字段。/ * int writeTDData(长TSChannel, unsigned int TSField1 data1浮动,unsigned int TSField2, data2 char * ReadAPIKey) {ThingSpeak.setField (TSField1 data1);ThingSpeak.setField (TSField1、data2);writeSuccess = ThingSpeak。writeFields (TSChannel writeAPIKey);返回writeSuccess;}* /浮动readTSData(长TSChannel, unsigned int TSField, char * ReadAPIKey){浮动数据= 0;data = ThingSpeak.readFloatField (TSChannel TSField ReadAPIKey); Serial.println(" Data read from ThingSpeak "+String(data)); return data; }

6)使用getDistance得到一个测量的传感器。

浮动getDistance (int tPin int ePin){长时间距离;digitalWrite (tPin、低);/ /重置触发器销。delayMicroseconds (2);digitalWrite (tPin、高);/ /开始测量。delayMicroseconds (10);/ / digitalWrite (tPin、低);/ /完成脉冲。时间= pulseIn (ePin、高); // Wait for a reflection pulse. distance = (duration/2) / 29.1; // Calculate the appropriate distance using the estimated speed of sound. // This section is useful when debugging the sensor. /* if (distance >= 200 || distance <= 0){ Serial.println("Out of range"); } else { Serial.print(distance); Serial.println(" cm"); } */ return distance; }

7)将您的设备连接到一个无线网络使用connectWiFi函数。

int connectWifi(){而(WiFi.status () ! = WL_CONNECTED) {WiFi。开始(ssid、密码);延迟(2500);系列。println(“连接到WiFi”);}以(“连接”);ThingSpeak.begin(客户端);}