bobo | NPC | 创造力: | 帖子: | 发消息 | 串个门 | 加好友 | 打招呼
2017-6-16 13:45:14 [显示全部楼层]
15115浏览
查看: 15115|回复: 5

[项目] 使用FireBeetle Board ESP32 制作电子徽章

[复制链接]
如果你在参加派对的时候希望大家能记住你的名字。使用FireBeetle Board ESP32来制作一个电子徽章,可以成为聚会活动中很酷的东西。

部件清单:
3、400mAh 3.7V锂电池 长50mm 宽20mm 厚度4.2mm
4、圆形磁铁 直径15mm
5、一角硬币
6、401胶水
使用FireBeetle Board ESP32 制作电子徽章图1


资料清单:
1、Arduino IDE  你可以在Arduino官网下载最新版本的IDE

2、FireBeetle Board ESP32板子的库文件 (登录DFRobot的 wiki资料库可以找到说明)
https://wiki.dfrobot.com.cn/_SKU_DFR0478_FireBeetle_Board_ESP32%E4%B8%BB%E6%9D%BF%E6%8E%A7%E5%88%B6%E5%99%A8V4_0



制作完成的效果图:
使用FireBeetle Board ESP32 制作电子徽章图2
使用FireBeetle Board ESP32 制作电子徽章图3

在FireBeetle Covers-24x8 LED Matrix上显示滚动字符
首先我们需要将下载的FireBeetle Covers-24x8 LED Matrix驱动库ZIP文件导入到Arduino IDE,此时才能够使用这个点阵。
使用 点阵库里面的Scrolling例子烧录,看看是否可以滚动显示 "DFROBOT 2017"

  1. #include "DFRobot_HT1632C.h"
  2. #define DATA D6
  3. #define CS D2
  4. #define WR D7
  5. //#define RD D8
  6. DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS);
  7. char str[] = " DFROBOT 2017";
  8. void setup() {
  9.   Serial.begin(115200);
  10.   // put your setup code here, to run once:
  11.   ht1632c.begin();
  12.   ht1632c.isLedOn(true);
  13.   ht1632c.clearScreen();
  14.   delay(500);
  15. }
  16. void loop() {
  17.   // put your main code here, to run repeatedly:
  18.   ht1632c.print(str,50);
  19.   //delay(100);
  20. }
复制代码

测试FireBeetle Board ESP32 内部霍尔传感器
你可能发现了一个问题,无法关闭显示,除非你拔掉电池。
我们是否可以通过其他的方式来关闭显示呢,通过查询ESP32的数据手册,我们发现模块内部居然还集成了一个霍尔传感器,我们是不是可以通过这个霍尔传感器检测外部磁场来做一些事情。
首先我们来测试下这个霍尔传感器,以下是测试代码:

  1. int sensorValue = 0;        // value read from the sensor
  2. void setup() {
  3.     // put your setup code here, to run once:
  4.   Serial.begin(9600);
  5. }
  6. void loop() {
  7. // put your main code here, to run repeatedly:
  8. sensorValue = hallRead();
  9. Serial.println(sensorValue);
  10. delay(100);
  11. }
复制代码
代码很简单,就是不停的通过串口打印出霍尔传感器的采集到的磁场强度数据。以下是捕捉到的数据:
使用FireBeetle Board ESP32 制作电子徽章图4

可以看到,我手上的传感器在没有磁铁靠近的情况下大概在 30 这样的数字
然后我们将磁铁的一面贴近FireBeetle Board ESP32 主板安装ESP32模块背面的PCB位置
使用FireBeetle Board ESP32 制作电子徽章图5
数字大概在 -2到-9之间。

我们用磁铁的另外一面靠近 FireBeetle Board ESP32 背面
使用FireBeetle Board ESP32 制作电子徽章图6
数值在48到53之间

这说明磁铁靠近模块,霍尔传感器的数据的确会有变化,使用霍尔传感器的读数来切换LED点阵的亮灭是可行的。
根据以上的数据我设定如果霍尔传感器的数据大于35或者小于10,判断为磁铁贴近FireBeetle Board ESP32主板。
所以我们是不是可以在衣服上面固定一个磁铁,当电子徽章吸附在衣服上的时候自动显示?

通过检测霍尔传感器数值来开关LED点阵
在这里,我们将LED点阵显示和霍尔传感器检测相结合,开发出可以通过外部磁铁来开关LED点阵。
首先,我们使用401胶水将硬币粘贴在FireBeetle Board ESP32的背面。
这里需要注意以下3点:
1、硬币的位置可以参考下面的图片,如果离ESP32模块的位置太远,有可能不能可靠识别。
2、401胶水不要点太多,否则会四处流动。
3、10分钟后等胶水凝固,在来进行下一步。
使用FireBeetle Board ESP32 制作电子徽章图7
使用FireBeetle Board ESP32 制作电子徽章图8
我们添加如下代码:
  1. #include "DFRobot_HT1632C.h"
  2. #define DATA D6
  3. #define CS D2
  4. #define WR D7
  5. //#define RD D8
  6. int sensorValue = 0;        // value read from the sensor
  7. DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR, CS);
  8. char str[] = "I'M BOBO FROM CHINA";
  9. void setup() {
  10.   // put your setup code here, to run once:
  11.   ht1632c.begin();
  12.   ht1632c.isLedOn(true);
  13.   ht1632c.clearScreen();
  14.   delay(500);
  15. }
  16. void loop() {
  17.   // put your main code here, to run repeatedly:
  18.   sensorValue = hallRead();
  19.   if ((sensorValue > 35) || (sensorValue < 10)) {
  20.     ht1632c.inLowpower(false);
  21.     ht1632c.print(str, 50);
  22.   }
  23.   else {
  24.     ht1632c.inLowpower(true);
  25.   }
  26. }
复制代码

下载完成后我们可以测试下效果。当磁铁靠近硬币,显示屏显示字符。当远离硬币。显示屏关闭。

FireBeetle Board ESP32 低功耗测试
此时虽然我们完成了磁铁靠近后LED点阵熄灭,降低了功耗。但是发现FireBeetle Board ESP32主板还有20多毫安的功耗。我们是否可以让ESP32也进入低功耗,进一步减少项目在不使用的时候的电流呢?通过查询FireBeetle Board ESP32 主板的使用说明书,里面有介绍低功耗的控制函数。


我们将程序改为如下:
  1. #include "DFRobot_HT1632C.h"
  2. #include <esp_deep_sleep.h>
  3. #define DATA D6
  4. #define CS D2
  5. #define WR D7
  6. //#define RD D8
  7. int sensorValue = 0;        // value read from the sensor
  8. DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR, CS);
  9. char str[] = "I'M BOBO FROM CHINA";
  10. void setup() {
  11.   // put your setup code here, to run once:
  12.   ht1632c.begin();
  13.   ht1632c.isLedOn(true);
  14.   ht1632c.clearScreen();
  15.   delay(500);
  16. }
  17. void loop() {
  18.   // put your main code here, to run repeatedly:
  19.   sensorValue = hallRead();
  20.   if ((sensorValue > 35) || (sensorValue < 10)) {
  21.     ht1632c.inLowpower(false);
  22.     ht1632c.print(str, 50);
  23.   }
  24.   else {
  25.     ht1632c.inLowpower(true);
  26.     ESP.deepSleep(5000000);
  27.   }
  28. }
复制代码

在这里,我们使用ESP.deepSleep(5000000); 这个函数让FireBeetle Board ESP32主板深度睡眠 5秒钟。睡眠后实际测试加上LED点阵的漏电流一共在1毫安左右。
5秒钟后 FireBeetle Board ESP32主板自动唤醒,快速读取一次霍尔传感器,如果判断没有磁铁靠近又立即进入睡眠5秒状态。

至此,项目完成了,你可以将磁铁通过别针安装在衣服上,或者直接吸附到铁材料上面。也可以像我一样直接将磁铁放到衬衣口袋里面。我们将制作的电子徽章吸附到衣服上面,徽章自动循环显示。当取下后自动停止显示。是不是很吸引眼球。

Chocho2017  初级技匠

发表于 2017-6-16 13:49:35

哈哈,抢沙发咯。胸牌很赞,有外壳就好了。
回复

使用道具 举报

mooncakez  初级技师

发表于 2017-6-17 10:32:24

很不错的胸牌~
回复

使用道具 举报

nicho  中级技匠

发表于 2017-6-17 11:26:04

硬币还能这么用呀~
回复

使用道具 举报

20060606  高级技匠

发表于 2020-8-13 05:36:09

为啥要粘硬币?散热?
回复

使用道具 举报

hhhhc  学徒

发表于 2022-3-5 19:01:43

20060606 发表于 2020-8-13 05:36
为啥要粘硬币?散热?

这个也是我想问的啊,为什么要粘硬币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail