电路

如何用Arduino构建运动检测系统:7个步骤

不要嘲笑我們的性

不要嘲笑我們的性

目录:

Anonim

使用由Arduino编程并由Ubidots驱动的羽毛HUZZAH构建运动和存在生产计数器。

智能家居和智能制造中的有效物理运动和存在检测在老年人环境辅助生活(AAL)解决方案或生产计数系统的应用中非常有用,这些系统可以为更大的MES提供信息。运动和存在检测的其他应用包括但不限于:

  1. 门和门自动化
  2. 停车传感器指定免费点
  3. 远程油箱液位监测
  4. 智能家居和照明及安全设施
  5. 输送线中的单位检测和计数
  6. 在印刷材料上标记检测
  7. 纸板,塑料和纸张内的液体检测倾斜
  8. 距离检测
  9. 人民专柜

虽然存在和运动有许多应用,但收集数据的传感器同样多,例如电容式,电感式,光电式和超声波传感器。根据成本,环境条件和精度要求,应根据环境和应用要求选择最适合的硬件。

在本教程中,我们将重点关注构建实时生产计数器;应用程序将计算传送带上经过的每个单元。我们将使用Arduino IDE对Feather HUZZAH ESP8266,超声波传感器和Ubidots进行编程,以开发我们的应用程序并显示我们的物联网仪表板。

供应:

第1步:要求

  1. 用ESP8266MB7389-100羽毛HUZZAH
  2. 超声波传感器
  3. Arduino IDE 1.8.2或更高版本
  4. Ubidots帐户 - 或 - 教育许可证

第2步:安装

  • 我硬件设置
  • II。固件设置
  • III。 Ubidots应用程序开发(事件,变量和仪表板)

第3步:硬件设置

超声波传感器MB7389-100是工业应用的低成本选择,由于其IPv67等级,在恶劣的天气条件下具有宽范围和低功耗要求。

要开始使用,请将下面的图表镜像到超声波传感器上 羽毛HUZZAH ESP8266.

注意: 传感器读数可以作为模拟读数或PWM;下面我们将解释PWM读数的设置,有关其他信息,请参阅上面显示的示例。

任选 将微控制器和传感器置于IP67外壳内,以防止灰尘,水和其他威胁环境因素。标准案例看起来类似于上面照片中显示的案例。

第4步:固件设置

首先,您应该在Arduino IDE中安装Feather Huzzah并编译代码。请记住通过执行简单的闪烁测试来验证此设置。有关连接羽毛设备的详细信息,请查看此有用的硬件设置指南。

要将传感器数据发送到Ubidots IoT开发平台,请将以下代码复制并粘贴到Arduino IDE中。请记住在代码中指定的Wi-Fi网络名称,密码和Ubidots帐户令牌。

/ ********************************包括图书馆*************** ****************/#包括 / ********************************常数和对象************** ***************** // * Ubidots * / const char * SSID_NAME =“xxxxxxxx”; //放在这里你的SSID nameconst char * SSID_PASS =“xxxxxxxx”; //把你的密码放在这里char * TOKEN =“Assig_your_ubidots_token”; //放在这里你的TOKENconst字符* DEVICE_LABEL =“运动控制”; //您的设备labelconst char * VARIABLE_LABEL =“距离”; //您的变量labelconst char * USER_AGENT =“ESP8266”; const char * VERSION =“1.0”; const char * HTTPSERVER =“industrial.api.ubidots.com”; // Ubidots业务用户// const char * HTTPSERVER =“ things.ubidots.com“; // Ubidots Educational usersint HTTPPORT = 80; / * Ultrasonic Sensor * / const int pwPin1 = 5; //传感器连接的PWM引脚WiFi客户端Ubi; / ********************************辅助功能*** **************************** // **获取正文的长度@arg变量char的类型主体@return dataLen变量的长度* / int dataLen(char * variable){uint8_t dataLen = 0; for(int i = 0; i <= 250; i ++){if(variable i!=' 0'){dataLen ++; } else {break;返回dataLen;} / ********************************主要功能********* ********************** / void setup(){Serial.begin(115200); / *连接到AP * / WiFi.begin(SSID_NAME,SSID_PASS); while(WiFi.status()!= WL_CONNECTED){delay(500); Serial.print( “”); } pinMode(pwPin1,INPUT); WiFi.setAutoReconnect(真); Serial.println(F(“WiFi connected”)); Serial.println(F(“IP地址:”)); Serial.println(WiFi.localIP());} void loop(){/ *传感器读数以毫米为单位返回,如果你想将它转换为英寸只需创建一个指向 - >距离/ 25.4 * /浮点距离的变量= pulseIn(pwPin1,HIGH); sendToUbidots(DEVICE_LABEL,VARIABLE_LABEL,距离); delay(1000);} void sendToUbidots(const char * device_label,const char * variable_label,float sensor_value){char * body =(char *)malloc(sizeof(char)* 150); char * data =(char *)malloc(sizeof(char)* 300); / *存储值的空间发送* / char str_val 10; / * ----将传感器的值转换为char类型----- * / / * 4是最小宽度,2是精度; float值被复制到str_val * / dtostrf(sensor_value,4,2,str_val); / *构建要发送到请求的主体* / sprintf(正文,“{”%s “:%s}”,variable_label,str_val); / *将HTTP请求构建为POST * / sprintf(数据,“POST /api/v1.6/devices/%s”,device_label); sprintf(data,“%s HTTP / 1.1 r n”,数据); sprintf(data,“%sHost:things.ubidots.com r n”,数据); sprintf(data,“%sUser-Agent:%s /%s r n”,data,USER_AGENT,VERSION); sprintf(data,“%sX-Auth-Token:%s r n”,data,TOKEN); sprintf(data,“%sConnection:close r n”,data); sprintf(data,“%sContent-Type:application / json r n”,data); sprintf(data,“%sContent-Length:%d r n r n”,data,dataLen(body)); sprintf(数据,“%s%s r n r n”,数据,正文); / *初始连接* / clientUbi.connect(HTTPSERVER,HTTPPORT); / *验证客户端连接* / if(clientUbi.connect(HTTPSERVER,HTTPPORT)){Serial.println(F(“发布你的变量:”)); Serial.println(数据); / *发送HTTP请求* / clientUbi.print(数据); / *当客户端可用时读取服务器的响应* / while(clientUbi.available()){char c = clientUbi.read(); Serial.write(C); } / *可用内存* /免费(数据);自由(主体); / *停止客户端* / clientUbi.stop();}

专家提示: 您可以通过在Arduino IDE中打开串行监视器来检查您的设备是否正确连接。

您可以通过在帐户设备管理 - >设备中查看设备来验证设备是否在您的Ubidots后端中创建。

通过单击您的设备,您将找到一个名为“距离”的变量,其中存储了传感器的读数。此名称是在您刚刚粘贴在Arduino IDE中的代码中分配的。如果您希望调整自动变量,请通过编辑设备卡或使用正确的变量命名法为您的应用程序刷新更新的代码来完成。

随着羽毛HUZZAH ESP8266连接并向Ubidots报告数据,现在是时候使用Ubidots精心设计的无代码应用程序配置来构建应用程序了。

第5步:Ubidots应用程序开发

Ubidots事件配置

我们发送给Ubidots的当前读数是距离输入。为了将这些读数转换为我们想要的所需输出 - 已安装的单位 - 我们应该按照以下步骤创建一个事件:

  1. 在当前设备“运动控制”内部创建一个名为“盒子”的新默认变量,每次计算一个新单位时它将收到1。
  2. 设备管理 - >事件,然后单击页面右上角的蓝色加号图标以添加新事件。
  3. 配置以“If triggers”开头的事件:

  • 选择一个变量: “距离”
  • 值: 值(默认)
  • 小于或等于传感器和通过*的盒子之间的最大预期距离} *我们的应用需要500mm
  • 对于 0分钟
  • 保存

4.根据应用程序的规范配置触发器后,单击右上角的橙色“加号”图标以添加条件操作。

5.选择“设置变量”作为操作。

6.接下来,选择先前创建的默认变量“boxes”和值“1”。

7.保存更改。如果事件被正确设置,每当传感器和单元之间的距离超过指示的阈值时,它将发送“1”,这表明没有物体接近 - 并且应该计算刚刚经过的新单元。

在Feather特定的设备卡中,您会发现变量“box”,其中在感测到单元存在时发送“1”。

特别适用于工业传送带和单元计数这个原型可以根据您的编码或应用程序开发进行定制,以适应不同的环境或硬件。

8.可视化检测到的单位数(或检测到对象的次数)
现在,使用“boxes”变量,我们将创建一个新的滚动窗口变量,以汇总从定义的垃圾邮件(分钟,小时,天,周等)中的变量“框”接收的读数总量。要执行此开发,请执行以下简单步骤:

将以下凭据分配给新的滚动窗口变量

选择一个设备: 运动控制(或您发送数据的设备名称)

选择一个变量: 盒子

计算:

每个: “1”小时(或根据您的申请要求)

现在为新变量指定一个名称,表示一小时内计算的框(或移动)数,就像“盒子/小时”或“单位/小时”一样。

第6步:仪表板配置

最后,创建一个仪表板以显示感测到的单位数。

转到设备管理 - >仪表板并添加新窗口小部件。此小组件将显示按小时分列的计数框数。

将以下凭据分配给新窗口小部件以显示您的计数。

您希望如何查看数据?: 图表

选择一种小部件: 折线图

添加设备: 运动控制

添加变量: 盒/小时

完。通过这个最终的仪表板开发 - 您的应用程序已经完成,您现在拥有一个高效且有效的运动和存在检测系统。这是我们最终的结果。

第7步: