⛳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的充电口。背部保留三个按钮的位置。本项目中实际上只使用了一个按钮的位置,给设备开关机使用。

打印组装后的效果如图

内部构造如下:

好了,来看看效果吧:
