发帖
2 1 0

【电子DIY作品】电子沙漏+Ai-M62-CBS+8*8点阵

bzhou830
论坛元老

73

主题

1491

回帖

1万

积分

论坛元老

积分
12634
电子DIY 12 2 4 小时前

⛳1. 项目简介

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

✨2. 硬件说明

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

🤞2.1 主控板

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

image.png

image.png

这款模组的资料可在如下链接中找到:Ai-M62系列模组专题 | 安信可科技

💖2.2 MAX7219 8*8点阵

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

MAX7219点阵模块的外观如图:

image.png

MAX7219模块原理图如下:

image.png

😜 2.3 水银开关

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

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

image.png

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

image.png

打印组装后的效果如图

image.png

内部构造如下:

image.png

好了,来看看效果吧:

GIF2025-5-107-16-57.gif

──── 1人觉得很赞 ────

使用道具 举报

有意思。给大佬点赞
厉害
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28683 个
  • 话题数: 40890 篇