首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【DIY】用Wi-Fi蓝牙模组Ai-M62-CBS做一个电子沙漏

【DIY】用Wi-Fi蓝牙模组Ai-M62-CBS做一个电子沙漏

原创
作者头像
安信可科技
发布2025-07-08 10:36:10
发布2025-07-08 10:36:10
1410
举报
文章被收录于专栏:DIYDIY

以下作品由安信可社区用户

bzhou830制作

1. 项目简介

本项目通过M62模组设计的超级mini板搭配两个8*8点阵,并利用水银开关作为重力检测部件完成一个电子沙漏。外壳采用3D打印的方式制作一个大小合适的外形。另外搭配锂电池和充放电模块,实现便携不插线的使用。

2. 硬件说明

硬件上主要使用了Ai-M62-CBS开发板,两个Max7219点阵模块,水银开关,充放电模块,锂电池。

2.1 主控板

本项目采用的主控是Ai-M62-CBS开发板,这个超级迷你的板子是莫工在2024年设计的。大小非常的迷你,大概和一个usb-ttl的大小还要短一点点,外形如下图。

这款模组的资料可在如下链接中找到:

Ai-M62系列模组专题 | 安信可科技

2.2 MAX7219 8*8点阵

MAX7219 片内包括 BCD 译码器、多路扫描控制器、字和位驱动器和 8×8 静态 RAM。外部只需要一个电阻设置所有 LED 显示器字段电流。MAX7219 和微处理器只需三根导线连接,每位显示数字有一个地址由微处理器写入。允许使用者选择每位是 BCD 译码或不译码。使用者还可选择停机模式、数字亮度控制、从 1~8 选择扫描位数和对所有 LED 显示器的测试模式。

MAX7219点阵模块的外观如图:

MAX7219模块原理图如下:

2.3 水银开关

水银开关,又称倾侧开关,是电路开关的一种,以一接着电极的小巧容器储存着一小滴水银,容器中多数为真空或注入惰性气体。可能是由于各种加速度传感器价格的降低,这种元器件见到的并不多了。

本项目中使用水银开关主要是检测沙漏的上下朝向,从而决定沙砾的流动方向。

3. 代码实现

两个点阵屏模块和M62的接线按照如下进行

#define Max7219_pinDIN GPIO_PIN_10 #define Max7219_pinCS GPIO_PIN_11 #define Max7219_pinCLK GPIO_PIN_12 #define Max7219_2_pinDIN GPIO_PIN_28 #define Max7219_2_pinCS GPIO_PIN_29 #define Max7219_2_pinCLK GPIO_PIN_30

在主函数中开启定时器,定时器的一个周期沙漏的沙子流动一次。

void timer0_isr(int irq, void *arg) { bool status = bflb_timer_get_compint_status(timer0, TIMER_COMP_ID_0); if (status) { bflb_timer_compint_clear(timer0, TIMER_COMP_ID_0); printf("timer0 comp0 trigger\r\n"); step(); } } void timer_init() { /* timer clk = XCLK/(div + 1 )*/ struct bflb_timer_config_s cfg0; cfg0.counter_mode = TIMER_COUNTER_MODE_PROLOAD; /* preload when match occur */ cfg0.clock_source = TIMER_CLKSRC_XTAL;//选择外部时钟晶振,40MHz cfg0.clock_div = 39; /* for bl616/bl808/bl606p is 39, for bl702 is 31 */ cfg0.trigger_comp_id = TIMER_COMP_ID_0; /* 比较值ID1,当计数达到1000000时,根据前面的分频一微秒一个计数,也就是总共1秒 */ cfg0.comp0_val = 1000000; /* match value 0 */ cfg0.comp1_val = 1500000; /* match value 1 */ cfg0.comp2_val = 2500000; /* match value 2 */ /* 重装载值,开始的值,以及比较完所有ID个数后重启的值 */ cfg0.preload_val = 0; /* preload value */ timer0 = bflb_device_get_by_name("timer0"); /* Timer init with default configuration */ bflb_timer_init(timer0, &cfg0); bflb_irq_attach(timer0->irq_num, timer0_isr, NULL); bflb_irq_enable(timer0->irq_num); /* Enable timer */ bflb_timer_start(timer0); }

4. 外形设计

这里的外壳直接采用MakerWorld上的设计。前面板安装两个点阵屏,侧开一个type-c的充电口。背部保留三个按钮的位置。本项目中实际上只使用了一个按钮的位置,给设备开关机使用。

打印组装后的效果如图

内部结构如图

好了,来看看效果吧:

动图封面
动图封面

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档