查看: 2059|回复: 1

blinker物联网教程——14、智能停车场

[复制链接]

该用户从未签到

发表于 2021-3-12 21:18 | 显示全部楼层 |阅读模式
本帖最后由 海神 于 2021-6-7 11:07 编辑

简介

每当你开车出行到达一个地方需要停车的时候,你是否还在为寻找停车位而烦恼呢?你是否在寻找车位时浪费了太多的时间呢?有了智能停车场,我们就可以快速判断并找到停车场的空缺位置,为自己找到合适的停车位置。
在商场或者办公大楼下的停车场,车位上都会安装一个车位指示灯,用来指示该车位是否有停车,当发现是红灯的时候说明该车位已经被车辆占用,指示灯为绿灯则说明车位是空车位,我们可以通过车位前方的指示灯快速识别空车位,快速找到车位我们才能避免提车浪费太多时间。
tcc.png
而怎样检测车位下是否有车辆占用,实际上大多是采用超声波传感器安装在车位正上方,超声波传感器则是用来测量距离。当下方有车辆时,超声波检测到的距离相比空车位时发生变动。所以我们就可以判断出车位下方存在车辆。
本节我们将超声波传感器连接在WiFiduino中,wifiduino接入网络后后,将检测到的距离数据反馈到云端,再发送到手机APP,这样我们就能知道停车场的具体情况啦。

超声波测距
超声波传感器是利用超声波的特性研制而成的传感器。我们使用的超声波传感器一般会用来测距,相比其他测距传感器有着简单易用、灵敏度高等特点。对于超声波传感器各种特性,超声波检测广泛应用在工业、国防、生物医学等方面。

超声波测距的原理
采用IO触发测距,给至少10us的高电平信号;
模块自动发送8个40KHz的方波,自动检测是否有信号返回;
有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.距离=(高电平时间*声速(340m/s))/2;
tcc1.png
具体步骤
首先采用数字引脚给超声波模块Trig引脚至少10μs的高电平信号,触发SR04模块测距功能;
tcc2.png
触发后,模块会自动发送840KHz的超声波脉冲,并自动检测是否有信号返回。这步会由模块内部自动完成。
tcc3.png
如有信号返回,Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。此时,我们能使用pulseIn() 函数获取到测距的结果,并计算出距被测物的实际距离。
tcc4.png

超声波传感器的引脚定义
超声波传感器引脚 定义
vcc VCC
  trig 发送端
echo 接收端
gnd GND

硬件

wifiduino主控器*1
wifiduino传感器扩展板*1
超声波传感器*1
LED灯模块红色*1
LED灯模块绿色*1

软件

blinker app

代码
在该示例代码中,我们采用一个文本控件,将超声波传感器采集到的距离值实时远程的传到blinker app中。
  1. #define BLINKER_WIFI
  2. #include <Blinker.h>

  3. char auth[] = "d8bdba0xxxx";
  4. char ssid[] = "moxxxxn";
  5. char pswd[] = "1803808xxxx";

  6. #define TEXTE_1 "TextKey"   //设置文本组件的键名为“TextKey”

  7. BlinkerText Text1(TEXTE_1);    //新建一个文本对象

  8. const int TrigPin = D5;
  9. const int EchoPin = D4;

  10. float cm;  
  11. float distance_read = 0;

  12. float distance(){
  13.     //发一个10ms的高脉冲去触发TrigPin
  14.   digitalWrite(TrigPin, LOW);
  15.   delayMicroseconds(2);
  16.   digitalWrite(TrigPin, HIGH);
  17.   delayMicroseconds(10);
  18.   digitalWrite(TrigPin, LOW);
  19.   cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
  20.   cm = (int(cm * 100.0)) / 100.0; //保留两位小数
  21.   return cm;
  22. }
  23. void heartbeat()    //设置心跳包,59秒发送一次测得的数据,避免服务器的数据资源浪费。
  24. {
  25.   Text1.print(distance_read);  
  26. }

  27. void setup()
  28. {
  29.     Serial.begin(115200);
  30.     BLINKER_DEBUG.stream(Serial);
  31.     BLINKER_DEBUG.debugAll();
  32.     pinMode(LED_BUILTIN, OUTPUT);
  33.     digitalWrite(LED_BUILTIN, LOW);
  34.     Blinker.begin(auth, ssid, pswd);
  35.     Blinker.attachHeartbeat(heartbeat);
  36.     pinMode(TrigPin, OUTPUT);
  37.     pinMode(EchoPin, INPUT);
  38. }
  39. void loop()
  40. {
  41.    Blinker.run();
  42.   distance_read = distance();
  43. }
复制代码
blinker 定制软件界面

点击右上方解锁按键,进入编辑模式,添加一个为文本组件,作为超声波传回数据的显示接口。
tcc1.png tcc2.png
将键名修改为程序里定义的“TextKey”,文本默认不显示额外信息。完成编辑,点击右上角的勾号。 然后,我们还可以添加两个帮助显示的文本,达到好的显示效果 。
点击右上角解锁,完成添加组件。

硬件连接

将扩展板堆叠在wifiduino主板上,超声波传感器通过4P连接线连接在扩展板上的4P接口上。
TCC64.png
观察现象

检查当正常开启超声波检测后,观察手机app中显示的测距数据,这样就可以远程的实时观察某个距离数据了。
tcc3.png

进阶

以上实验我们实现了远程的超声波测距。但和我们想要完成的车位警示还有一些区别。当获取距离值后,我们在程序中就可以将数据作为判断,当小于某一数值时,说明车位已被占用,这时候点亮红色LED灯,否则点亮绿色LED

代码

  1. #define BLINKER_WIFI
  2. #include <Blinker.h>

  3. char auth[] = "d8bdba0xxxx";
  4. char ssid[] = "moxxxxn";
  5. char pswd[] = "1803808xxxx";

  6. #define TEXTE_1 "TextKey"   //设置文本组件的键名为“TextKey”
  7. #define RLEDPIN  D8   //定义红色LED引脚
  8. #define GLEDPIN  D9   //定义绿色LED引脚
  9. BlinkerText Text1(TEXTE_1);    //新建一个文本对象

  10. const int TrigPin = D5;
  11. const int EchoPin = D4;


  12. float cm;  
  13. float distance_read = 0;

  14. float distance(){
  15.    //发一个10ms的高脉冲去触发TrigPin
  16. digitalWrite(TrigPin, LOW);
  17. delayMicroseconds(2);
  18. digitalWrite(TrigPin, HIGH);
  19. delayMicroseconds(10);
  20. digitalWrite(TrigPin, LOW);
  21. cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米
  22. cm = (int(cm * 100.0)) / 100.0; //保留两位小数
  23. return cm;
  24. }
  25. void heartbeat()    //设置心跳包,59秒发送一次测得的数据,避免服务器的数据资源浪费。
  26. {
  27. Text1.print(distance_read);  
  28. }

  29. void setup()
  30. {
  31.    Serial.begin(115200);
  32.    BLINKER_DEBUG.stream(Serial);
  33.    BLINKER_DEBUG.debugAll();
  34.    pinMode(LED_BUILTIN, OUTPUT);
  35.    digitalWrite(LED_BUILTIN, LOW);
  36.    Blinker.begin(auth, ssid, pswd);
  37.    Blinker.attachHeartbeat(heartbeat);
  38.    pinMode(TrigPin, OUTPUT);
  39.    pinMode(EchoPin, INPUT);
  40.    pinMode(RLEDPIN, OUTPUT);
  41.    pinMode(GLEDPIN, OUTPUT);
  42. }
  43. void loop()
  44. {
  45.   Blinker.run();  //与blinker同步数据
  46. distance_read = distance(); //超声波采集一次数据
  47. if (distance_read <= 50) {  //距离值小于等于50cm时
  48.     digitalWrite(RLEDPIN,HIGH);
  49.     delay(1000);       //延时1秒

  50.   } else {
  51.     digitalWrite(GLEDPIN,HIGH);  
  52.     delay(1000);
  53. }
复制代码

硬件接线图

tcc65.png



blinker物联网教程目录

签到天数: 1 天

[LV.1]初来乍到

发表于 2021-4-16 14:38 | 显示全部楼层
厉害厉害厉害
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

atmega32u4芯片的主控最多有多少引脚?
atmega32u4芯片的主控最多
想自己diy一个键盘,涉及到的引脚比较多,淘宝找了下没找到相应的主控 需要atmega32u4
Arduino与S7-200 PLC 进行Modbus通信测试
Arduino与S7-200 PLC 进行
Modbus是一种串行通信协议,Modbus已经成为工业领域通信协议的业界标准,并且现在是工
Arduino Nano V3.0无法烧录问题
Arduino Nano V3.0无法烧
在t宝上买的那种改了“USB转TLL”芯片的nano板,上手后无法烧录程序,L灯闪烁(我的UN
请教一个有关NodeMCU和舵机的问题
请教一个有关NodeMCU和舵
[*]问题现象 我尝试使用网页控制NodeMCU引脚的方式来控制舵机。但是在程序烧进去
arduino pid麦克纳姆轮小车程序详解
arduino pid麦克纳姆轮小
之前发过几个帖子,大家可以参考,但经过多次尝试,整套系统升级了,优化了很多地方目录:
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表