4029|9

114

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

无按键厨房定时器 [复制链接]

      虽然使用108MH主频的单片机做一个定时器,有点 大才小用了,但是小小的作品也用到了定时器、ADC、中断和GPIO等模块。作品原理主要是使用三轴加速度传感器采集角度信息并转化为需要的定时时间,同时使用它采集动作信息,作为定时器控制信号。

1.开发环境:
      开发工具使用的是True STUDIO,基于ARM GCC的集成开发环境。这个适用于STM32的开发环境同样可以用于GD32F350的开发,但是需要自己修改连接文件,貌似启动文件就不需要修改了。

2.软件流程:
       软件的流程是ADC采集三轴加速度的加速度值,依据Z轴的加速变换情况判断是否有动作发生,用来启动或是复位定时器。同时使用XY轴的加速度值计算加速度传感器的倾斜角度,根据倾斜角度计确认定时时间。定时时间到时,蜂鸣器发出蜂鸣声提醒。

3.使用方法:
      如果用手在Z轴方向晃动加速度传感器,则计时器复位或重新开始。主要难度是使用加速度传感器的动作检测,这里没有使用复杂的算法,使用了ADC模拟看门狗的功能,动作识别效果一般。

4.作品总结:
      作品优点,无按键使用,只要摇晃定时器就可以启动或停止定时器;缺点:没有计时显示功能,后期可以考虑增加显示屏。

5.主函数源代码:
      主函数如下,文末附上源文件,
int main(void) {

    /* system clocks configuration */
    rcu_config();
    nvic_config();
    /* systick configuration */
    systick_config();
    /* GPIO configuration */
    gpio_config();
    /* DMA configuration */
    dma_config();
    /* ADC configuration */
    adc_config();
    /*initial other devices*/
    timer_config();
    gpio_config_timer();

    gd_eval_com_init(EVAL_COM1);
    gd_eval_led_init(LED1);
    gd_eval_led_init(LED2);
    gd_eval_led_init(LED3);
    gd_eval_led_init(LED4);
    gd_eval_led_init(LED5);

    Led_demo();
    dis_frequency();
    cpu_id();
    delay_1ms(5000);
    p_func = alarm_msg;
    timer_enable(TIMER1);

    while (1) {
        ap_counter++;
        alarm_status1 = 3;
        alarm_status2 = 0;
        alarm_status0 = alarm_run(alarm_msg);
        data = 0;
        adc_interrupt_enable(ADC_INT_WDE);
//        delay_1ms(10);
        switch (ap_status) {

        case 0:
            if (1 == data) {
                ap_status = 1;

            }
            break;
        case 1:
            if (ap_counter % 1000 == 0) {
                delay_1ms(10);
                if (0 == data) {
                    ap_status = 2;
                    printf("!!\r\n");
                } else {
                    ap_status = 0;
                }
            }
            break;
        case 2:
            alarm_status2 = 1;
            ap_status = 0;
            break;
        default:
            break;

        }

        adc_disp();

        if (alarm_status0 == 1 && alarm_status2 == 1) {
            alarm_status1 = 1;
        } else if (alarm_status0 == 0 && alarm_status2 == 1) {
            alarm_status1 = 0;
        }

        switch (alarm_status1) {
        case 1:
            alarm_reset();
            printf("Alarm_reset.\r\n");
            break;
        case 0:
            gd_eval_led_off(LED4);
            delay_1ms(200);
            gd_eval_led_on(LED4);
            g_dmacomplete_flag = 0;
            delay_1ms(1000);
            while (g_dmacomplete_flag != 1)
                ;
            alarm_init(get_angle() * 60000 / 6);
            alarm_start();
            printf("Alarm start.\r\n");
            break;
        default:
            break;
        }
        if (alarm_status0) {
            printf("Counter: %d minutes\r\n",
                    (int) alarm_get_counter() / 60000);
        }

    }
}
6.系统框图如下:

演示视频:视频

补充内容 (2018-10-1 05:36):
后面增加了oled屏显示功能。

frame.PNG (12.57 KB, 下载次数: 0)

frame.PNG

GD32F350.zip

20.95 KB, 下载次数: 13

源码

此帖出自GD32 MCU论坛

最新回复

nmg
附给评委补充材料:serialworldGD32 可以用GCC开发吗?点击查看serialworldGD-LINK 连接GD32F350RB开发板报错?点击查看serialworldARM GCC GD32F350RB MCU启动文件和连接文件分享点击查看serialworldGD32不用ide开发环境如何下载程序点击查看serialworldGD32F350开启FPU后是否不能使用编译器自带的math函数?点击查看   详情 回复 发表于 2018-10-25 08:59
点赞 关注(1)
 

回复
举报

5263

帖子

239

TA的资源

管理员

来自 2楼
 
附给评委补充材料:
serialworld
GD32 可以用GCC开发吗?
serialworld
GD-LINK 连接GD32F350RB开发板报错?
serialworld
ARM GCC GD32F350RB MCU启动文件和连接文件分享
serialworld
GD32不用ide开发环境如何下载程序
serialworld
GD32F350开启FPU后是否不能使用编译器自带的math函数?

此帖出自GD32 MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
占楼,用于作品图片。
此帖出自GD32 MCU论坛
 
 
 

回复

693

帖子

7

TA的资源

版主

4
 
楼主,本人菜鸡一个,想问几个问题
1、ADC采集三轴加速度的加速度值,请问您这个姿态传感器是MPU6050吗?
2、只要摇晃定时器就可以启动或停止定时器,这个定时器是个实物模块??
此帖出自GD32 MCU论坛
 
 
 

回复

5263

帖子

239

TA的资源

管理员

5
 
缺了个演示视频,看大赛评选细则:https://www.eeworld.com.cn/huodon ... 201808/index.html#5

按照说明补充一下作品提交的资料,每部分要求提交的资料都有分值的
此帖出自GD32 MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(中级)

6
 
bqgup 发表于 2018-9-23 08:53
楼主,本人菜鸡一个,想问几个问题
1、ADC采集三轴加速度的加速度值,请问您这个姿态传感器是MPU6050吗?
...

1.三轴加速度传感器使用的是ADXL335,你可以网上查一下这个芯片的资料。
2.定时器指的是程序里的软件定时器。
此帖出自GD32 MCU论坛

点评

谢谢楼主,这个加速度传感器很好,本人菜鸟,多谢指导  详情 回复 发表于 2018-9-24 09:20
 
 
 

回复

693

帖子

7

TA的资源

版主

7
 
serialworld 发表于 2018-9-24 05:58
1.三轴加速度传感器使用的是ADXL335,你可以网上查一下这个芯片的资料。
2.定时器指的是程序里的软件定时 ...

谢谢楼主,这个加速度传感器很好,本人菜鸟,多谢指导
此帖出自GD32 MCU论坛
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(中级)

8
 
本帖最后由 serialworld 于 2018-9-30 22:33 编辑

添加项目图片,不带oled屏和带oled屏的照片。

photo.jpg (1.19 MB, 下载次数: 0)

photo.jpg

clock alarm.jpg (281.54 KB, 下载次数: 0)

clock alarm.jpg
此帖出自GD32 MCU论坛
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(中级)

9
 
本帖最后由 serialworld 于 2018-10-8 18:51 编辑

演示视频:视频
此帖出自GD32 MCU论坛
 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(中级)

10
 
不错,支持一下。
此帖出自GD32 MCU论坛
 
个人签名科技飞速发展,学习永无止境。变压器有载调压,一小时万次切换。
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表