查看: 4860|回复: 8

Arduino音乐频谱灯,动次打次

[复制链接]
  • TA的每日心情
    慵懒
    2020-3-8 11:08
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    发表于 2019-10-1 23:24 | 显示全部楼层 |阅读模式
    本帖最后由 carlbeven 于 2019-10-2 12:04 编辑

    利用音频模拟信号值范围对比来控制LED灯的闪烁,达到频谱灯的效果.

    材料:arduino uno led二极管 电阻 杜邦线 3.5mm耳机插头 AUX线  耳机母座




    int si = 0;
    int mas = 5;
    int mis = 500;
    ////////////////////////////初始一个峰值和谷值

    void sigch()
    {
      ////////////////unsigned long nowtime = millis();
      //////////////////unsigned long steptime = nowtime + 10000;


      int sig = analogRead(A0);
      if (sig > mas)
      {
        mas = sig;
      }
      if (sig < mis)
      {
        mis = sig;
      }
      int eql = (mas + mis) / 2;
      //Serial.print("sig");
      //Serial.println(eql);
      //Serial.print("  ");
      //Serial.println(eql);
      // Serial.print("  case  ");
      //delay(50);
    //////////////////////////////////////灵敏度调试

      if (  (eql * 0.93 < sig && sig  < eql * 0.96) || (eql * 1.03 < sig && sig < eql * 1.06))
      {
        si = 1;
      }
      if (( eql * 0.87 < sig && sig  < eql * 0.93) || (eql * 1.06 < sig && sig  < eql * 1.12))
      {
        si = 2;

      }

      if (  (eql * 0.81 < sig && sig  < eql * 0.87) || (eql * 1.12 < sig && sig  < eql * 1.18))
      {
        si = 3;

      }
      if (  (eql * 0.69 < sig && sig  < eql * 0.75) || (eql * 1.18 < sig && sig  < eql * 1.24))
      {
        si = 4;

      }
      if ( (eql * 0.63 < sig && sig  < eql * 0.69) || (eql * 1.24 < sig && sig  < eql * 1.3))
      {
        si = 5;

      }
      if ((eql * 0.4 < sig && sig  < eql * 0.63) || (eql * 1.3 < sig && sig  < eql * 1.6))
      {
        si = 6;

      }
    }

    void setup() {

      Serial.begin(9600);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(7, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
    }
    void alloff()
    {
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
    }
    // the loop routine runs over and over again forever:
    void loop() {
      sigch();

      switch (si)
      {
        case 1:
          digitalWrite(5, HIGH);
          digitalWrite(6, LOW);
          digitalWrite(7, LOW);
          digitalWrite(8, LOW);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 2:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, LOW);
          digitalWrite(8, LOW);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 3:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, LOW);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 4:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 5:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(9, HIGH);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 6:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          delay(50);
          break;

        default:
          alloff();
    break;
      }
    }






    可以用废弃的耳机剪开得到插头,引出左或右声道作为模拟信号输入(小白一个,不太懂这些,谅解);


    IMG_20191001_232140.jpg

    我用的AUX线、耳机插头、耳机母座方便些,引出其中一声道作为A0模拟信号读取,然后母座接上音响就可以同时播放音乐和灯光效果。



    IMG_20191002_112754.jpg



    LED的接线的话不说了。
    IMG_20191002_111842.jpg

    重点是获取eql平均值:

    eql.png
    摸索后发现eql是静音时的输出数值,我用的计算方法是找出峰值和谷值求平均。但是每首歌的谷值mis会变,上一首歌的mis可能会保留到下一首歌,所以这个部分的程序还在摸索中。eql和音量,切歌灯有关系,也求大神指点解决方法。

    自带水泥,村口集合!!!!!!!!!!!!!!
    #在抖音,记录美好生活#
    http://v.douyin.com/ubnx4c/
    复制此链接,打开【抖音短视频】,直接观看视频!
    (视频时后来的配音,鼓点对不上)




    eql.png
  • TA的每日心情
    慵懒
    2020-3-8 11:08
  • 签到天数: 17 天

    [LV.4]偶尔看看III

     楼主| 发表于 2020-4-11 21:55 | 显示全部楼层
    dafei0011 发表于 2020-4-11 21:50
    esp8266+麦克风+ws2812+手机切音乐频谱灯模式,那就完美了。

    哈哈 我今天刚整在一起。小爱同学+blinker 两种方式控制灯效,当然包括这个音乐频谱灯
  • TA的每日心情
    奋斗
    2020-2-11 23:37
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2019-10-3 21:38 | 显示全部楼层
    很酷哦,很酷哦很酷哦很酷哦很酷哦

    该用户从未签到

    发表于 2019-11-29 10:49 | 显示全部楼层
    用LM3914也可以,这个是输出电压的进行的比较的,频谱还要FFT..
  • TA的每日心情
    慵懒
    2020-3-8 11:08
  • 签到天数: 17 天

    [LV.4]偶尔看看III

     楼主| 发表于 2020-3-30 22:31 | 显示全部楼层
    最近更新了用ws2812的教程,详见网盘,原理类似。
    链接:https://pan.baidu.com/s/1wX9q0ThXr-CZrzwNqdZ6_g
    提取码:qo2d

    该用户从未签到

    发表于 2020-4-11 21:50 | 显示全部楼层
    carlbeven 发表于 2020-3-30 22:31
    最近更新了用ws2812的教程,详见网盘,原理类似。
    链接:https://pan.baidu.com/s/1wX9q0ThXr-CZrzwNqdZ6_g ...

    esp8266+麦克风+ws2812+手机切音乐频谱灯模式,那就完美了。

    该用户从未签到

    发表于 2020-4-11 23:32 | 显示全部楼层
    你用的Blinker都是专业付费版吗?  免费版的都用不了MQTT,没法玩儿啊
  • TA的每日心情
    慵懒
    2020-3-8 11:08
  • 签到天数: 17 天

    [LV.4]偶尔看看III

     楼主| 发表于 2020-4-12 20:22 | 显示全部楼层
    dafei0011 发表于 2020-4-11 23:32
    你用的Blinker都是专业付费版吗?  免费版的都用不了MQTT,没法玩儿啊

    可以啊,我用miot的

    该用户从未签到

    发表于 2020-5-12 12:50 | 显示全部楼层
    carlbeven 发表于 2020-3-30 22:31
    最近更新了用ws2812的教程,详见网盘,原理类似。
    链接:https://pan.baidu.com/s/1wX9q0ThXr-CZrzwNqdZ6_g ...

    太单调了一点吧,颜色做些渐变,再酷炫一点吧,亮度和色彩随律动渐变是不是比单色频谱音柱效果要好呀,可以用Fastled库?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    Arduino如何输出ASCii 的控制字符串ENQ为05H
    Arduino如何输出ASCii 的
    程序段 void loop() { Serial.print("ENQ1234"); } Arduino会转换成ASCii码发送
    点阵时钟 验证报错 求大神帮个忙
    点阵时钟 验证报错 求大神
    智慧食堂,让吃饭有着不一样的体验!
    智慧食堂,让吃饭有着不一
    以后凭脸吃饭啦!不在乎颜值、不管是谁,小编告诉你:只要“脸”就可以! “吃饭5分
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表