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

Car Counter using Arduino + Processing + PHP

组件和用品

Arduino UNO
× 1
PIR 运动传感器(通用)
× 2
LED(通用)
× 1
跳线(通用)
× 1

应用和在线服务

Arduino IDE
Samsung ARTIK Cloud for IoT
处理
PHP

关于这个项目

简介

该项目演示了如何使用 Arduino 使用两个传感器计算进出商场的汽车数量,使用 Processing &PHP 将数据发送到云端,然后查看停车场的可用车位数量。此项目不需要以太网或 Wifi 屏蔽!

工作原理

传感器需要放置在停车场的入口和出口点,才能按预期工作。基本上,你增加 count 每次有车进来,出去时递减。每次汽车通过传感器时,系统中的 LED 灯只是指示车辆被正确计数。

处理中

处理 是一种用于在其他计算机上编写程序的开源语言/开发工具。当您希望其他计算机与 Arduino 进行“对话”时很有用,例如显示或保存 Arduino 收集的一些数据。

对于这个项目,我们使用 Processing 来接收数据(汽车数量) 由 Arduino 通过串口发送。将 Processing IDE 下载并安装到您的计算机上。您可以在随附的处理草图中看到非常简单直接的代码行。在这里,我们使用 loadStrings() 方法调用 PHP 文件 .

PHP

PHP 文件 post-message.php 与此处的教程中的文件相同。我们从 Github 页面下载了整个 zip 文件,并在原始文件中编辑了几行代码,以便我们无需登录三星帐户即可使用它。为此,您需要按照此处的说明更改 WAMP 或 XAMP 服务器的端口并为 ARTIK Cloud 安装 CA 证书。或者,您可以使用安装了 SSL 证书的远程或托管服务器。

将文件复制到一个文件夹,例如 acdemo 这样就可以使用 URL http://localhost:8000/acdemo/post-message.php 或 https://www.yourwebsite.com/acdemo/post-message.php

访问它

PHP SDK 中只有两个文件需要编辑:ArtikCloudProxy.phppost-message.php .您可以在此处查看您的客户端和设备 ID。

post-message.php 文件,您需要获取访问令牌和设备 ID。获取令牌的最简单方法是按照此处的步骤操作。请注意,我们发送到云端的唯一数据是汽车数量 进出商场。我们在 Artik Cloud 中创建了一个设备并将其命名为Car Counter 带有一个名为 count 的字段 保存此值。

现在一切都设置好了,是时候开始了!请按照以下简单步骤操作:

Artik云

  • 1.登录您的 Artik Cloud 帐户并转到应用程序> 新应用
  • 2.在下一个屏幕中为您的应用程序输入必要的详细信息。
  • 3.创建完应用程序后,如果将显示在您的仪表板中。单击应用程序名称并查找Show Client ID &Secret .您需要这些 PHP 文件的代码。
  • 4.从侧边菜单中,选择您的应用程序并点击权限 .添加汽车柜台 从设备类型列表中查看阅读 & 权限。

编码

  • 1.将草图上传到您的 Arduino UNO。如果这是您第一次使用 Arduino,请按照以下步骤了解如何执行此过程。
  • 2.运行处理 在处理 IDE 中绘制草图。确保您的 WAMP 服务器开启 此时,如果您使用的是本地计算机而不是托管服务器。
  • 3.如果您根据上面的连接图成功连接了该系统的部件,请通过 PIR 传感器查看它是否工作。
  • 4.登录您的 Artik Cloud 帐户,查看数据是否正确发送。

故障排除

  • 1.打开下面的链接,查看数据是否正确发送到 Artik Cloud。如果没有任何问题,这将显示一个 Json 文件。如果您没有看到 Json 文件,则您可能没有安装上述 SSL 证书。尝试返回并确保正确遵循指示。

http://localhost:8000/acdemo/post-message.php?count=10

下一步做什么

根据以上的汽车数量数据,您可以为商场创建一个应用程序,让购物者在去商场之前可以查看停车位的可用车位数量。您还可以添加另一个指示灯,在停车位已满或未满时亮起。

代码

  • Arduino 代码
  • 处理草图
  • post-message.php
  • ArtikCloudProxy.php
Arduino 代码Arduino
这是向串行显示汽车计数并打开 LED 以指示汽车通过 PIR 传感器的代码。
int pirPinIN =7;int pirPinOUT =10;int led =13;static long counter =0;无效设置(){ pinMode(pirPinIN,输入); pinMode(pirPinOUT,输入); pinMode(led,输出);数字写入(LED,低); Serial.begin(9600);} void loop(){ long now =millis(); if (digitalRead(pirPinIN) ==HIGH) { counter++; Serial.println(计数器);数字写入(LED,高);延迟(500);数字写入(LED,低); } if (digitalRead(pirPinOUT) ==HIGH) { counter--; Serial.println(计数器);数字写入(LED,高);延迟(500);数字写入(LED,低); }}
处理草图Java
此处理草图读取模拟端口上的传入值,然后使用串行通信功能输出值。
import processing.serial.*;Serial myPort; // 从 Serial classString 创建对象 val; // 从串口接收到的数据无效 setup(){ // 我知道我的 mac 上串口列表中的第一个端口 // 是 Serial.list()[0]。 // 在 Windows 机器上,这通常会打开 COM1。 // 打开您正在使用的任何端口。 String portName =Serial.list()[0]; //将0更改为1或2等以匹配您的端口 myPort =new Serial(this, portName, 9600);}void draw(){ if ( myPort.available()> 0) { // 如果数据是可用,val =myPort.readStringUntil('\n'); // 读取它并将其存储在 val int count =parseInt(val); if(count>=0){ loadStrings("http://localhost:8000/acdemo/post-message.php?count="+val); } } 打印(val); //在控制台打印出来}
post-message.phpPHP
此代码获取处理草图传递的值并将计数发布到云端。
setAccessToken("YOUR_ACCESS_TOKEN");$data ='{"count":'.$count.'}';$payload =array("data"=>$data,"sdid" =>"YOUR_DEVICE_ID","type"=>"message");$payload =json_encode($payload, JSON_HEX_QUOT | JSON_HEX_TAG);$response =$proxy->sendMessage($payload);header('Content-Type:application /json');echo json_encode($response);
ArtikCloudProxy.phpPHP
这是连接到 Artik 云所需的 ArtikCloudProxy 类。将它保存到与 post-message.php 相同的文件夹中,某个地方可以访问网络。对配置进行必要的更改。
&count="; const API_MESSAGES_POST ="/messages"; # 成员 public $token =null;公共 $user =null; public function __construct(){ } /** * 设置访问令牌并查找用户个人资料信息 */ public function setAccessToken($someToken){ $this->token =$someToken; $this->user =$this->getUsersSelf(); } /** * API 调用 GET */ 公共函数 getCall($url){ $ch =curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Authorization:bearer'.$this->token)); $json =curl_exec($ch); $status =curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($status ==200){ $response =json_decode($json); } else{ var_dump($json); $response =$json; } 返回 $response; } /** * API 调用POST */ 公共函数postCall($url, $payload){ $ch =curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, (String) $payload); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Authorization:Bearer '.$this->token)); $json =curl_exec($ch); $status =curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($status ==200){ $response =json_decode($json); } else{ var_dump($json); $response =$json; } 返回 $response; } /** * GET /users/self API */ public function getUsersSelf(){ return $this->getCall(ArtikCloudProxy::API_URL .ArtikCloudProxy::API_USERS_SELF); } /** * POST /message API */ public function sendMessage($payload){ return $this->postCall(ArtikCloudProxy::API_URL .ArtikCloudProxy::API_MESSAGES_POST, $payload); } /** * GET /historical/normalized/messages/last API */ public function getMessagesLast($deviceCommaSeparatedList, $countByDevice){ $apiPath =ArtikCloudProxy::API_MESSAGES_LAST; $apiPath =str_replace("", $deviceCommaSeparatedList, $apiPath); $apiPath =str_replace("", $countByDevice, $apiPath);返回 $this->getCall(ArtikCloudProxy::API_URL.$apiPath); }}

示意图

连接 2 个 PIR 传感器和 LED 的示意图

制造工艺

  1. 使用按钮通过 PWM 调光灯光
  2. 使用 ARDUINO 的超声波悬浮机器
  3. IOT - 使用 ESP8266、Arduino 和超声波传感器的智能罐
  4. 钢铁侠
  5. 找到我
  6. 如何使用 Arduino 测量地球质量
  7. Arduino 加湿器控制
  8. Sonar 使用 arduino 并在处理 IDE 上显示
  9. 使用 MAX30100 可穿戴脉搏传感器和 Arduino
  10. 使用 Alexa 和 Arduino IoT Cloud 完全控制您的电视
  11. 情人节创意 - 一起度过的天数计数器(照片)
  12. 如何使用 Arduino 和 Processing IDE 制作指南针