这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 坤创E-Geek/天科大新电社 » 【忆往昔征文】之全国大学生智能互联创新大赛参赛心得

共3条 1/1 1 跳转至

【忆往昔征文】之全国大学生智能互联创新大赛参赛心得

菜鸟
2018-08-14 17:55:50     打赏

当代的电子设备都讲究“智能”,“互联”和“创新”这三个字眼,对于嵌入式开发往往少不了这几个关键词,为了更深入的学习,我报名参加了这个比赛。而我通过参加这次比赛也算是学到了不少的东西,获得了颇多的历练。不仅仅是对当前所学知识的汇总,而且也使得现在所学得到了升华,不论结果如何,这是历练我的很好的机会。

         刚好在这个学期,我的老师给我了一个不错的想法:做一个智能水杯。我当时头脑一头雾水:何为智能水杯?听完老师的想法介绍我就总结了以下几点,何为智能水杯。这个智能水杯他可以知人之所需,想人之所想。而且它还要互联,为人提供便捷。这才称之为智能水杯。

         我就这个问题想了一段时间。水杯作为一个个人所用的饮水工具,他要知道使用者每天应该适宜喝多少水,而今天实际喝了多少水。并且应该有一个APP显示相关的数据,分析今天饮水量相对来讲算不算健康。然而要实现这些功能,第一:要有姿态识别,要知道人确实是喝的水,而不是把水倒掉了;第二:要有建议饮水值功能,根据外界的温度湿度,季节等,以及使用者的身高和体重算出一个最合适的饮水值;第三:采集外界相关数据,包括网络数据,与手机APP的连通。

         想要实现这些功能就要用stm32作为主控。而当时我只会51的芯片,对stm32不太了解,正好也赶上河南省大学生机器人大赛,因此stm32的学习一直被搁置。直到机器人比赛结束,我的stm32的学习才进行了一个月。我认为以我的水平根本谈不上设计开发,但是由于老师的鼓励以及我连着几天熬夜的学习,我比对着以前写过的51压力传感器模块的程序写了一个stm32的版本,并且还实验成功了,这让我的信心倍增。并且也稍微掌握了一些stm32的技巧。

         当时,我也整理了一些可能用到的传感器和输入输出设备,主要用到的有这些:123.png



压力传感器:测水量

MPU6050:        姿态判断

光电开关若干:辅助姿态判断以及开盖显示功能实现

DS18B20:测水温

Wifi模块:数据连通

OLED        :水杯界面显示

温湿度传感器:

IMG_20180707_135747.jpg(这个是水杯界面)


(PS.用的是一个STM32C8的最小系统,因为考虑到成本以及体积问题,而且最重要的是我们并没有用太多的IO)

 

首先,stm32的开发不同于5151是直接操作寄存器,并且用sbit以及sfr的方法实现寄存器的映射,而stm32虽然可以效仿51用寄存器映射的方法进行开发,但是由于stm32的寄存器和外设等等的太多了,仍然用这种方法的话开发速度极慢,而且由于调用的资源杂乱和繁多,导致编程时的可读性太差,因此stm32在一般的场合不太适合用直接操作寄存器的方法编程。于是,我就学习了用标准库。当熟练使用标准库之后,一些繁琐的工作就变得简单化,我们只用知道其内部的原理,而不去操作,只用操作已经封装好的函数就可以了。过了一段时间,我也就渐渐的适应了这种编程方法。

         接下来就是分工了,主要是由3个人,我负责水杯的程序设计,另外一个人是写APP和水杯连通,另一个硬件调试。在将近一个多月的开发当中,让我最为头疼的就是这个姿态判断功能以及水量推送了。

         姿态判断,我用的方法是根据人喝水的特点,以及水杯的倾斜的角度来做出姿态判断。此时我们只需写出一个函数即可,它的返回值是两个状态:喝水状态和不喝水状态。但是如何处理这两个状态,如何根据这两个状态判断喝多少水呢?针对这个问题,我想出了一个解决方法:当不喝水的时候,喝水处理是一种预备的状态,当喝水的时候,要获取拿起杯子前段时间水量稳定的数值(且只进行当前一次作为记录),喝水后判断之后水量稳定的数值(且只进行当前一次作为记录),喝水处理恢复预备的状态。也就是说,喝水与不喝水两种状态的处理是处于一种耦合的关系。这时候再用喝水后的水减去喝水前的水,获得的数据就比较准确了。至于判断水量我开启了定时器中断,每0.5s判断10次水量,并且取其平均值,每次的平均值放入一个日志数组存入stm32flash,依次来作为获得之前饮水值的数据。

按照这个思想我对程序进行了一系列的调试以及优化,最终也算是达到了预期的效果,也算是功夫不负有心人。

123456.jpg


(水杯实物图)


另外,我在姿态判断的基础上,又做了两个小功能,一个是盖盖子水杯屏幕会灭,开盖子会亮;另一个是判断喝水姿态之后,如果水温过高会报警。


之后就是水杯与APP的连通了,由于我的队友不是相关专业,他开发APP时颇有鸡肋,因此APP想要的一些高级的功能没有太多的时间做出来了。不过还好,他把一些基础通信的功能已经写好了,由于APP的缘故,我们把推荐饮水量这个功能也交给了32处理了,APP只需把一些数据交给3232处理完之后再传给app,不过这个东西也不难,忙了一段时间也就弄出来了。


12345.png(APP界面)

最后比赛的时候跟我预期的大抵相同,评委问问题的关注点就在于手机和水杯的连通方式以及姿态识别等方面,也向我们提出了一些商业化、产品化的建议。最后得了一个二等奖算是打了个酱油。不过我还是不感到遗憾的,因为我们付出的努力我想大概还不够,毕竟学习是一个逐渐积累的过程,俗话说心急吃不了热豆腐,我们学习技术也是如此,只有有了足够的学习知识的积累,以及开发的经验才谈得上“还行”的水平吧。这次比赛算是为我之后关于stm32的开发收集了宝贵的经验以及经历。

         这个比赛结束之后,我首先想到的就是对这个水杯进行硬件升级,给它尽量做的更小跟精简,毕竟我们现阶段制作的仍然是一个实验品。接下来还会有好多知识有待学习。






助工
2018-08-23 13:11:05     打赏
2楼

为楼主点个赞


高工
2018-08-30 12:52:10     打赏
3楼

你这个水杯还能再改的更牛一点


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]