15762| 21
|
[项目] 【FireBeetle Board-ESP32应用教程】让你的打火机可穿戴 |
对于一个烟民来说,是否有过想抽烟却找不到打火机的经历?是否想过如果打火机可穿戴该有多好?没错,我就经历过这样的痛苦。话不多说,先晒两张照片:![]() ![]() ![]() 我的打火机和传统的打火机不一样,是采用电弧打火的,通过触控按钮来控制打火。触控按钮采用FireBeetle Board-ESP32主板GPIO自带的触摸功能。而且,可以看出,他还是一个手表。下面我将制作过程分享给大家。 一、硬件清单 电弧点火器高压升压线圈×1 NPN三极管×1 51Ω电阻×1 1KΩ电阻×1 1N4007二极管×1 大功率NPN三极管×1 FireBeetle Board-ESP32主板×1 FireBeetle Covers-Proto Board×1 FireBeetle Covers-24×8 LED Matrix×1 3.7V锂电池×1 注意:部分原件可以在DFRobot商城采购到。 二、硬件连接 1、电路原理图,如下图所示: ![]() 将电子元器件按照图中的方式焊接在FireBeetle Covers-Proto Board板上,并将打火机的控制引脚用导线与D3连通,可以直接连接到FireBeetle Covers-Proto Board的D3,因为FireBeetle系列是pin to pin兼容的。 将Vcc连接到FireBeetle Covers-Proto Board板的Vcc,GND连接到FireBeetle Covers-Proto Board的GND(如果你看不懂原理图那就没得救了)。 2、连接触摸导线 DFR0478 FireBeetle Board-ESP32主板 自带触摸功能,这里用的是T3(A4)和T5(MCLK/IO12)(触摸引脚对应的端口可以查看FireBeetle Board-ESP32用户使用手册)。将A4和MCLK/IO12分半用导线引出来。 3、将LED灯板、ESP32主板和焊接好元件的扩展板连接在一起,如下图所示: ![]() 连接的方式可以采用排针和排母插接的方式,方便中间放置锂电池。 三、组装外壳 外壳采用3D打印机打印,源文件下载地址,点击下载。 组装前需要先下载代码到主板,源代码在压缩文件包中,程序如下: [mw_shl_code=applescript,true]#include "DFRobot_HT1632C.h" #include <TimeLib.h> #define DATA D6 #define CS D2 #define WR D7 DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS); int threshold = 40; bool touch1detected = false; bool touch2detected = false; String twoDigits(int digits){ if(digits < 10) { String i =String(digits); return i; }else { return String(digits); } } uint8_t utf8ascii(byte ascii) { static uint8_t LASTCHAR; if ( ascii < 128 ) { LASTCHAR = 0; return ascii; } uint8_t last = LASTCHAR; LASTCHAR = ascii; switch (last) { case 0xC2: return (ascii); break; case 0xC3: return (ascii | 0xC0); break; case 0x82: if (ascii == 0xAC) return (0x80); } return 0; } void updataClock(void){ String timenow = String(hour())+":"+twoDigits(minute())+":"+twoDigits(second()); uint16_t length = timenow.length() + 1; uint16_t k = 0; char* str = (char*)malloc(length*sizeof(char)); timenow.toCharArray(str,length); length--; for(uint16_t i=0;i<length;i++){ char c = utf8ascii(str); if(c!=0) str[k++] = c; } str[k] = 0; ht1632c.clearScreen(); ht1632c.print(str); free(str); } void gotTouch1(){ touch1detected = true; } void gotTouch2(){ touch2detected = true; } void setup() { Serial.begin(115200); pinMode(D3,OUTPUT); digitalWrite(D3,LOW); ht1632c.begin(); ht1632c.isLedOn(true); ht1632c.clearScreen(); delay(500); touchAttachInterrupt(T5, gotTouch1, threshold); touchAttachInterrupt(T3, gotTouch2, threshold); } void loop() { if(touch1detected){ touch1detected = false; ht1632c.clearScreen(); ht1632c.print("1"); }else if(touch2detected){ touch2detected = false; ht1632c.clearScreen(); ht1632c.print("2"); }else{ updataClock(); } delay(50); } [/mw_shl_code] 将触控导线分别穿过外壳预留的按钮安装孔,如下图所示: ![]() 然后,将螺丝弹垫用热风枪吹热,这样方便固定螺丝弹垫到外壳(这个就是触控按钮了 ![]() ![]() ![]() ![]() ![]() ![]() ![]() 注意:不要用手去拿弹垫,小心烫手。 将弹垫固定到外壳,确保弹垫和导线连接: ![]() 注意:在固定前,需要将高压线圈的两个输出导线穿过外壳: |
© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed