找回密码
 立即注册

QQ登录

只需一步,快速开始

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

本人新手,想请教下如何通过声音控制一颗led的亮灭

  [复制链接]
跳转到指定楼层
楼主
问题:声音通过驻极体,经过放大电路放大(如图所示,这是抄一个实际板子上面的),输出位置的电压是0.95V,如果说话,可以跳动到4.2V,声音大小不同,电压变化也不同,反正电压都在0.95-4.2V范围内,我后来直接接到51单片机的P3.2 I/O口,用中断0程序,发现没反应。这种判断有电压变化,然后控制另外一个I/O口的1颗LED灯进行亮灭,有声音就亮,声音大就亮多一些,是不是一定要用A/D转换的单片机或者外接A/D采集IC,例如ADC0809这样的。有没有什么好的方案,请大神指点。

51hei截图20200717182425.jpg (113.63 KB, 下载次数: 32)

声控放大

声控放大
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:541982 发表于 2020-7-17 21:31 | 只看该作者
ad转换 pwm输出
回复

使用道具 举报

板凳
ID:541982 发表于 2020-7-17 21:32 | 只看该作者
ad转换,pwm控制亮灭 等!
回复

使用道具 举报

地板
ID:332444 发表于 2020-7-17 21:46 | 只看该作者
说清楚是要亮灭还是要亮度逐渐变化?要求不同设计起来也不同。
回复

使用道具 举报

5#
ID:452950 发表于 2020-7-17 23:06 | 只看该作者
如果只要有声音就亮不需要AD转换,要检测声音大小就要AD转换

1.png (91.59 KB, 下载次数: 54)

1.png
回复

使用道具 举报

6#
ID:471889 发表于 2020-7-18 09:17 | 只看该作者
电路不是你这样子玩!你要对你声音分级,比如你声音的频率或其他项,这些应在前期处理好,单片机在内部对应你的数据作判断并输出结果
回复

使用道具 举报

7#
ID:290070 发表于 2020-7-19 19:15 | 只看该作者
谢谢大家,我想做的只是要求有声音就亮的,没有声音就灭,比较简单。我用了下面这个电路,通过定时器T0检测P2^4口可以。P2.4口默认是高电平的,这样可以接受输入,我发现一说话,那排灯是可以亮灭的,但是有个疑问就是:我用万用表测了P2.4口的电压,说话和没说话有变化,但是看到数值都是高电平,从测量看没有变成低电平,有声音信号输入,但是灯光为什么可以变化,现在有疑惑。用的是这段程序:
#include "reg51.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define led P1  //流水灯控制
sbit voice=P2^0; //声音输入  1101 1011
u8 code tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//上到下
u8 code tab2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//下到上
u8 code tab3[]={0xe7,0xdb,0xbd,0x7e};//中间到两边
u8 code tab4[]={0x7e,0xbd,0xdb,0xe7};//两边到中间
u8 he[4]={0,0,0,0};

u8 num=0;
u8 counter=0;//定时计数
u8 counter1=0;//定时计数
bit flag=0;//切换闪烁
bit flag1=0;

void delay1m(u16 x)
{
  u16 i,j;
  for(i=0;i<x;i++)  //连数x次,约xms
      for(j=0;j<120;j++); //数120次,约1ms
}

void time0_time1_init()
{
  TMOD=0x11;
  TH1=(65535-50000)/256;
  TL1=(65535-50000)%256;
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  TR0=0;
  ET0=1;
  TR1=1;
  ET1=1;
  EA=1;
}

void main()
{
  voice=1;          //输入的I/O口要先置1,高电平;
  time0_time1_init();
  delay1m(2000);
  while(1)
  {
     if(!flag1)
            {
                  if(!voice)
                  {
                    num++;flag1=1;
                        he[0]=he[1]=he[2]=he[3]=0;
                        if(num>=5){num=0;}
                        TR0=1;
                  }
               
                }
  }
}

void time1_interrupt()  interrupt 3
{
  TH1=(65535-50000)/256;
  TL1=(65535-50000)%256;
  counter++;
  if(counter>=6)
     {
           counter=0;
           switch(num)
             {
                   case 0:if(flag==0){led=0x00;flag=1;}else {led=0xff;flag=0;} break;//闪烁
                   case 1: led=tab1[he[0]];he[0]++; if(he[0]>=8) he[0]=0;break;//上到下
                   case 2: led=tab2[he[1]];he[1]++; if(he[1]>=8) he[1]=0;break;//下到上
                   case 3: led=tab3[he[2]];he[2]++; if(he[2]>=4) he[2]=0;break;//中间到两边
                   case 4: led=tab4[he[3]];he[3]++; if(he[3]>=4) he[3]=0;break;//两边到中间
                   default:break;
                 }
         }
}

void time0_interrupt() interrupt 1
{
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  counter1++;
  if(counter1>=20)
    {
          counter1=0;
          flag1=0;
          TR0=0;
        }   
}
回复

使用道具 举报

8#
ID:420836 发表于 2020-7-20 07:19 | 只看该作者
很久以前,声控灯非常流行,从原理上讲,您的要求与此相同。
回复

使用道具 举报

9#
ID:733205 发表于 2020-7-20 08:54 | 只看该作者
用PWM输出
回复

使用道具 举报

10#
ID:808700 发表于 2020-7-28 17:16 | 只看该作者
要求灯的亮度的话就pwm输出,,
回复

使用道具 举报

11#
ID:691907 发表于 2020-7-29 08:48 | 只看该作者
如5楼加个电压比较器LM393即可
回复

使用道具 举报

12#
ID:609192 发表于 2020-8-1 15:44 | 只看该作者
great_splendid 发表于 2020-7-19 19:15
谢谢大家,我想做的只是要求有声音就亮的,没有声音就灭,比较简单。我用了下面这个电路,通过定时器T0检测 ...

说话和不说话量出来的电压数值分别是多少,要知道,不是0V才是低电平,5V才是高电平。举个例子,某款单片机的规格书标注高电平是3.3V~5V,那么3.3V以下的电压对于这款单片机来说就是低电平。
回复

使用道具 举报

13#
ID:382454 发表于 2020-8-1 16:00 | 只看该作者
要有一个整形电路才行,整形出来是方波。
回复

使用道具 举报

14#
ID:280000 发表于 2020-9-11 17:24 | 只看该作者
可以买那种声音识别模块,或者声音传感器,通过AD检测声音的模拟量转化为数字量,最后判断声音的大小
回复

使用道具 举报

15#
ID:10947 发表于 2020-9-11 18:32 | 只看该作者
D1 D2 C4 R4都可以不要,单片机IO口直接接到三极管C极就可以
回复

使用道具 举报

16#
ID:807182 发表于 2020-9-16 15:20 | 只看该作者
声控用AD,采集高低电平来控制
回复

使用道具 举报

17#
ID:106821 发表于 2020-9-17 11:50 | 只看该作者
电平整好了就行
回复

使用道具 举报

18#
ID:143767 发表于 2020-9-17 12:28 | 只看该作者
不用AD,在你的图基础上后面加一个LM393电压比较器再把输出接到单片机的I/O口就行了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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