找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1695|回复: 12
打印 上一主题 下一主题
收起左侧

怎样通过超声波模块实现手势调亮暗,求设计思路

[复制链接]
跳转到指定楼层
楼主
ID:407566 发表于 2018-11-12 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主控芯片是51单片机,通过与超声波模块连接,怎样才能实现通过手势实现调整灯的亮度。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:303383 发表于 2018-11-12 18:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:157238 发表于 2018-11-12 20:12 | 只看该作者
51单片机我不是很清楚了,不过stm32的话可以用定时器输出pwm波,你可以通过获取超声波检测到的距离然后自己找到一个合适的换算公式  (初值=k*距离)初值是pwm输出占空比的分子。这样的话应该可以实现吧。好像51也可以通过定时器输出pwm。。
回复

使用道具 举报

地板
ID:142291 发表于 2018-11-12 22:16 | 只看该作者
超声波可以测距啊,手掌的距离就可以联系到亮度啦
回复

使用道具 举报

5#
ID:407566 发表于 2018-12-1 10:22 | 只看该作者
le51 发表于 2018-11-12 20:12
51单片机我不是很清楚了,不过stm32的话可以用定时器输出pwm波,你可以通过获取超声波检测到的距离然后自己 ...

emmm,你好,我是用51,但不知道该怎么把pwm和超声波结合起来
回复

使用道具 举报

6#
ID:407566 发表于 2018-12-1 15:14 | 只看该作者
123321yyy 发表于 2018-11-12 22:16
超声波可以测距啊,手掌的距离就可以联系到亮度啦

可是具体要怎么把超声波测到的距离和pwm调光结合在一起啊
回复

使用道具 举报

7#
ID:437183 发表于 2018-12-1 16:14 | 只看该作者
如果使用超声波模块,应该是根据不同的距离实现亮度的控制
回复

使用道具 举报

8#
ID:437192 发表于 2018-12-1 16:34 | 只看该作者
传感器啊
回复

使用道具 举报

9#
ID:437192 发表于 2018-12-1 16:34 | 只看该作者
如果使用超声波模块,应该是根据不同的距离实现亮度的控制
回复

使用道具 举报

10#
ID:436752 发表于 2018-12-1 18:10 | 只看该作者
#include"reg52.h" typedef unsigned char uchar; typedef unsigned int uint; sbit ENA=P0^0; sbit IN1=P0^1; sbit IN2=P0^2; sbit IN3=P0^3; sbit IN4=P0^4; sbit ENB=P0^5; uint k,j; #define OFF ENA=0;ENB=0; #define ON ENA=1;ENB=1; #define LEDL(key) P2&=(0xfe<<key);           //指定对应的二极管发亮 #define LEDH(key) P2|=(0x01<<key);          //指定LED熄灭 #define QX(x,y) IN1=x,IN2=y; #define QY(x,y) IN3=x,IN4=y; void main()               {                 void init();                 //初始化定时器 void LEDOM();            //流水灯函数声明 void daley(uint,uint);          //延时函数声明 void (*p)(uint,uint);          //定义一个(uint,uint)的函数指针 void OL_bt(uint x,uint y);          //PWM调制函数声明 p=OL_bt; QX(1,0); QY(1,0); init(); while(1) {   LEDOM();    (*p)(1000,100); } } void init()                       //定时器中断初始化 {   TMOD=0x01;                                    //设置定时器0为工作方式1   EA=1;                                         //开总中断   ET0=1;  TR0=1;                                       //定时器0中断允许         } OStime() interrupt 1 { static char n; if(n==0) {   OFF;   TH0=(65536-j)/256;   TL0=(65536-j)%256;   n=1;    return; } if(n==1) {   ON;      TH0 = (65536-k)/256;                           TL0 = (65536-k)%256;      n=0;   return; }     } void OL_bt(uint x,uint y)             //改变x,y的值来改变PWM来调速 x增大y减小速度减小  x减小y增大速度增大 { k=y; j=x; } void daley(uint x,uint y) { uint a,b; for(a=x;a>0;a--)   for(b=y;b>0;b--); } void LEDOM() { LEDL(0); daley(100,100); LEDL(1); daley(100,100); LEDL(2); daley(100,100); LEDL(3); daley(100,100); LEDL(4); daley(100,100); LEDL(5); daley(100,100); LEDL(6); daley(100,100); LEDL(7); daley(100,100); LEDH(0); daley(100,100); LEDH(1); daley(100,100); LEDH(2); daley(100,100); LEDH(3); daley(100,100); LEDH(4); daley(100,100); LEDH(5); daley(100,100); LEDH(6); daley(100,100); LEDH(7); daley(100,100); }            调光程序和距离一起,转载自大神aabbcc
回复

使用道具 举报

11#
ID:407566 发表于 2018-12-2 15:33 来自手机 | 只看该作者
le51 发表于 2018-11-12 20:12
51单片机我不是很清楚了,不过stm32的话可以用定时器输出pwm波,你可以通过获取超声波检测到的距离然后自己 ...

大神,可以具体讲一下吗,要哭了
回复

使用道具 举报

12#
ID:407566 发表于 2018-12-2 15:39 | 只看该作者
1904700334 发表于 2018-12-1 18:10
#include"reg52.h" typedef unsigned char uchar; typedef unsigned int uint; sbit ENA=P0^0; sbit IN1=P0 ...

这是实现什么功能呀
回复

使用道具 举报

13#
ID:407566 发表于 2018-12-2 20:43 | 只看该作者
88877789 发表于 2018-12-1 16:14
如果使用超声波模块,应该是根据不同的距离实现亮度的控制

是的,但我不知道该用什么方法来实现
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表