stm32F4应用笔记(一)利用蜂鸣器制作的超声波自拍神器
来源:互联网 发布:网络保密八个严禁 编辑:程序博客网 时间:2024/04/27 18:13
简单介绍
超声波自拍神器就是一个用来自拍的东西,下面是一个网页上的广告:
http://it007.com/thread-1699349-1-1.html
简单说就是,如果有一个自拍杆,然后想要自拍的时候,按下开关,然后发出一个超声波,手机接收到了之后就会拍照了——此外,我们还需要下载一个手机APP,叫做Airshooting。
参考资料
我是在某位大神的博客上看到有这么个东西的。
地址如下:
http://www.cirmall.com/circuit/1484/(ST大赛三等奖作品)超声波自拍神器#/details?2
方案介绍
首先手机先到网上下载一个APP(Airshooting),然后打开APP,利用STM32 NUCLEO-F072RB开发板的定时器产生一定频率PWM信号,用来控制蜂鸣器发出声音,当手机接收到蜂鸣器发出的声音后,会执行拍张操作,如果你的手机有前摄像头,还可以控制手机执行切换摄像头操作。
(1)拍照的PWM频率为:先发送250ms的频率为15870Hz的PWM信号(占空比没什么要求,50%左右即可);后发送250ms的频率为15617Hz的PWM信号。这个频率精确度越高,控制的距离就越远。
(2)切换的PWM频率为:先发送250ms的频率为16526Hz的PWM信号(占空比没什么要求,50%左右即可);后发送250ms的频率为15620Hz的PWM信号。
实物图
我也是拿面包板搭建的电路,用的是正点原子的STM32F4开发板。
因为我用的是开发板,所以很多代码都是现成的,自己需要改的部分很少。用的是TIM14_CH1通过PF9端口输出PWM信号。蜂鸣器串联了一个1K电阻,然后一端连着PF9引脚,另一端接地。电路非常简单。
主要的代码片段
PWM的频率和占空比公式
频率:
//Fpwm = 时钟频率 / ((arr+1)*(psc+1))(单位:Hz)
占空比:
//duty circle = TIMxx->CCR1 / arr(单位:%)
int main(void){ Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz delay_init(168); //延时初始化 KEY_Init(); //按键初始化 while(1) { u8 flag=0; flag=KEY_Scan(0); if(flag==2) { /******拍照信号******/ TIM14_PWM_Init(63-1,84-1); delay_ms(250); //先发送250ms的频率为15870Hz的PWM信号(占空比没什么要求,50%左右即可); TIM14_PWM_Init(64-1,84-1); delay_ms(250); //后发送250ms的频率为15617Hz的PWM信号。 RCC->APB1ENR|=0<<8; //TIM14时钟关闭 flag=0; //标志清零 //delay_ms(5000); } if(flag==3) { /******切换镜头信号******/ TIM14_PWM_Init(60-1,84-1); delay_ms(250); //先发送250ms的频率为16526Hz的PWM信号; TIM14_PWM_Init(64-1,84-1); delay_ms(250); //后发送250ms的频率为15620Hz的PWM信号。 RCC->APB1ENR|=0<<8; //TIM14时钟关闭 flag=0; //标志清零 //delay_ms(5000); } }}//TIM14 PWM部分初始化 //PWM输出初始化//arr:自动重装值//psc:时钟预分频数void TIM14_PWM_Init(u32 arr,u32 psc){ //此部分需手动修改IO口设置 RCC->APB1ENR|=1<<8; //TIM14时钟使能 RCC->AHB1ENR|=1<<5; //使能PORTF时钟 GPIO_Set(GPIOF,PIN9,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出 GPIO_AF_Set(GPIOF,9,9); //PF9,AF9 TIM14->ARR=arr; //设定计数器自动重装值 TIM14->PSC=psc; //预分频器不分频 TIM14->CCMR1|=6<<4; //CH1 PWM1模式 TIM14->CCMR1|=1<<3; //CH1 预装载使能 TIM14->CCER|=1<<0; //OC1 输出使能 TIM14->CCER|=1<<1; //OC1 低电平有效 TIM14->CR1|=1<<7; //ARPE使能 TIM14->CR1|=1<<0; //使能定时器14 TIM14->CCR1=arr*0.5; //占空比= TIM14->CCR1 / arr(单位:%)//按键处理函数//返回按键值//mode:0,不支持连续按;1,支持连续按;//0,没有任何按键按下//1,KEY0按下//2,KEY1按下//3,KEY2按下 //4,KEY_UP按下 即WK_UP//注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY_UP!!u8 KEY_Scan(u8 mode){ static u8 key_up=1;//按键按松开标志 if(mode)key_up=1; //支持连按 if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)) { delay_ms(10);//去抖动 key_up=0; if(KEY0==0)return 1; else if(KEY1==0)return 2; else if(KEY2==0)return 3; else if(WK_UP==1)return 4; }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; return 0;// 无按键按下}
遇到的问题
大神博客中说的切换前后摄像头的哪一部分有问题,我没法实现,频率不对——也有可能是我的硬件部分有问题。但是拍照那一部分是可以实现的。
- stm32F4应用笔记(一)利用蜂鸣器制作的超声波自拍神器
- STM32F4应用笔记(二)利用蜂鸣器播放天空之城
- Arduino应用笔记(一)利用蜂鸣器播放天空之城
- 安卓自拍神器Shutter的开发
- STM32F4-IAP学习笔记(一)
- 基于FPGA的超声波测距(一)
- STM32F4制作一个计算器(一) 大数运算
- 树莓派蜂鸣器+超声波测距模块
- STM32F4应用笔记(七)触屏计算器改进版
- 蜂鸣器的结构原理及制作
- STM32F4开发板学习笔记一
- 柔光自拍再进化,最强自拍神器X9s开启预约
- 超声波技术在包装工业的应用
- 用CXA20106制作2CM-400CM的超声波(已出实物)
- Snapchat:“很黄很暴力”自拍分享神器
- Arudino学习(一)读取超声波数值
- 神经网络移植到STM32F4上的应用
- STM32F4应用笔记(三)UCGUI裸机移植——不支持触摸屏
- c#xml文件转换
- centos 6.5 下安装supervisor心得
- XML文档中的xmlns、xmlns:xsi和xsi:schemaLocation理解
- js点击放大图片
- 使用Alluxio高效存储Spark RDD
- stm32F4应用笔记(一)利用蜂鸣器制作的超声波自拍神器
- 依赖、关联、聚合和组合及其之间区别的简单理解
- 浅谈Redis数据库的键值设计
- MTK Android 5.X selinux权限问题
- 公众号付费势不可挡,罗胖、轻课们开启新教育时代?
- samba漏洞修复专题
- JavaScript学习总结(五)原型和原型链详解
- swagger 使用方式
- [BZOJ2299][HAOI2011]向量(数论)