加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

重力感应式蓝牙 FM 收音机设计(源码、详细制作讲解、视频演示)

2016/12/21
19
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

先说说硬件环境,使用的是STM32F4DISCO(自带加速度)+Si4703+LCD5110。软件设计上,虽然应用的核心功能是收音机了,但是和大部分的应用相似,没有良好的用户交互界面,使用体验是要大打折扣的。所以下面的文字大部分都集中在用户交互设计上。

首先是控制部分,加速度计可以提供上下左右4个方向的控制,在应用中给音量增减和电台下上切台使用。由于敲击功能没有实现,因此电台的开关交给了开发板上的用户按键。用户按键原计划使用callback来实现功能,但是测试木有成功啊。不过既然加速度值也是用polling的话,那不如按键也一起好了。扫描使用最原始的方式,扫描到以后,延时10ms,然后再判断是否按下。加速度计在使用时,也存在类似的抖动,因此也使用了相同的逻辑来消抖。同时,通过测试,给定了一个加速度计倾转的阈值:g=0.3,也就是说当某个方向(不含z)的g大于0.3,表示有用户动作发生。

接下来就是显示界面了。整个5110有6行高度为8的字符可用,每行84个点。应用要显示的核心内容是电台频率和音量,内容不多,因此可以适当放大。最终频率选择了12*24的字体,占用3行,又不会把整行撑满;音量做了以模拟的bar显示,用竖条|||||||的多少表示音量的打下,占用两行;这样还多出一行,用来显示一个固定字符串“PY FM Radio”。

整体界面如下图所示:

事先用其他方式确定了若干个本地效果较好的电台,放到了radiolist中。当发现有左右手势的时候,取出radiolist中的下一个电台频率值,发送给Si4703,并更新显示界面,电台频率是绕圈改变的,也就是说到了radiolist的最后一个,下一次就回到了第一个。当发现有上下手势时,对volume进行响应的改变,并发送给Si4703,并更新显示界面。音量最大15,最小0(表示静音)。当发现有用户按键动作时,在开关状态之间切换。关闭时,清除屏幕,关闭Si4703;开机时,正常显示,FM工作。

视频演示:

说明:

        设计过程中发现了浮点数运算的精度问题。比如频率99.6Mhz,在list当中是存成996的,显示的时候,通过运算channel=str(996/10),将电台转为浮点字符串99.6。前期调试的时候,用的电台较少,没有问题。后面把所有电台都加上时,发现有些电台,比如890,做了除法运算以后,变成了89.0001,导致显示行方向溢出。最后通过字符串截取的方式取到自己想要的长度。python似乎没有printf?

目前还有一些小问题,比如加速度识别的抖动有时候还会出现,音量有时候会有跳变等等。最后通过视频看下具体效果吧。

详细的制作讲解和main.py见附件内容。

  • bluepyradio_upload.zip
    描述:其他module和main一并附上
  • 详细的制作详见.txt
    描述:详细的制作讲解,请查看链接

相关推荐

电子产业图谱