9478|38

1644

帖子

0

资源

纯净的硅(初级)

【花雕动手做】有趣好玩的音乐可视化系列小项目(02)---OLED频谱灯 [复制链接]

 
本帖最后由 eagler8 于 2021-10-5 19:26 编辑

为做这个项目,特意准备了四种规格的OLED有机屏幕

 

0.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

OLED (Organic Light-Emitting Diode)
即有机发光二极管,在手机OLED上属于新型产品,被称誉为“梦幻显示器”。OLED显示技术与传统的LCD显示方式不同,无需背光灯,采用非常薄的有机材料涂层和玻璃基板(或柔性有机基板),当有电流通过时,这些有机材料就会发光。而且OLED显示屏幕可以做得更轻更薄,可视角度更大,并且能够显著的节省耗电量。

 

0--.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

本帖最后由 eagler8 于 2021-10-4 14:28 编辑

07.jpeg

 

 

 

OLED技术特点
(1) OLED 器件的核心层厚度很薄,厚度可以小于 1mm,为液晶的 1/3。
(2) OLED 器件为全固态机构,无真空,液体物质,抗震性好,可以适应巨大的加速度,振动等恶劣环境。
(3) 主动发光的特性使 OLED 几乎没有视角限制,视角一般可达到 170 度,具有较宽的视角,从侧面也不会失真。
(4) OLED 显示屏的响应时间超过 TFT—LCD 液晶屏。TFT—LCD 的响应时间大约使几十毫秒,现在做得最好的 TFT—LCD 响应时间也只有 12 毫秒。而 OLED 显示屏的响应时间大约是几微秒到几十微秒。
(5) OLED 低温特性好,在零下 40 摄氏度都能正常显示,目前航天服上也使用OLED 作为显示屏。而 TFT—LCD 的响应速度随温度发生变化,低温下,其响应速度变慢,因此,液晶在低温下显示效果不好。
(6) OLED 采用有机发光原理,所需材料很少,制作上比采用液体发光的液晶工序少,液晶显示屏少 3 道工序,成本大幅降低。
(7) OLED 采用的二极管会自行发光,因此不需要背面光源,发光转化效率高,能耗比液晶低,OLED 能够在不同材质的基板上制造,厂家甚至可以将电路印刷在弹性材料上——做成能弯曲的柔软显示器。
(8) 低电压直流驱动,5V 以下,用电池就能点亮。高亮度,可达 300 明流以上。
 


回复

1644

帖子

0

资源

纯净的硅(初级)

主要的实验材料

 

01.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

000.jpg

 

MAX9814麦克风放大器模块
MAX9814是一款低成本高性能麦克风放大器,具有自动增益控制(AGC)和低噪声麦克风偏置。器件具有低噪声前端放大器、可变增益放大(VGA)、输出放大器、麦克风偏置电压发生器和AGC控制电路。
●自动增益控制(AGC)  
●3种增益设置(40dB、50dB、60dB)  
●可编程动作时间  
●可编程动作和释放时间比  
●电源电压范围2.7V~5.5V   
●低THD:0.04% (典型值)  
●低功耗关断模式  
●内置2V低噪声麦克风偏置


回复

1644

帖子

0

资源

纯净的硅(初级)

MAX9814麦克风放大器模块电原理图

 

07.jpg

 

07-.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

0.91寸OLED液晶屏显示模块参数
驱动芯片:SSD1306
支持接口:I2C
显示颜色:白色
高分辨率: 128×32
可视角度:大于160°
工作电压:3.3V / 5V
模块大小:36 x 12.5(mm)

 

0-0.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

0.96寸OLED模块主要参数
电压:3V~5V DC
工作温度:-30℃~70℃
驾驶义务:1/64职责
高分辨率:128 * 64
面板尺寸:26.70 * 19.26 * 1.85mm / 1.03 * 0.76 * 0.07英寸(约)
有效面积:21.74 * 11.2mm /0.86*0.44英寸(约)
驱动IC:SSD1306
128 * 64 LED显示模块,支持多种控制芯片。
完全兼容51系列,MSP430系列,STM32 / 2,CSR IC等
超低功耗:全屏点亮0.08W
超高亮度和对比度可调
带嵌入式驱动/控制器
接口类型为IIC

 

0-.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

本帖最后由 eagler8 于 2021-10-6 06:57 编辑

  【花雕动手做】音乐可视化系列小项目(02)---OLED频谱灯

  项目之一:使用MAX9814声音模块测试环境音乐的动态波形

 

  实验开源代码

 

/*
  【花雕动手做】音乐可视化系列小项目(02)---OLED频谱灯
  项目之一:使用MAX9814声音模块测试环境音乐的动态波形
  实验接线:
  MAX9814  Arduino
  VCC        5V
  GND        GND
  OUT        A0
*/

const int sampleWindow = 50; // 以mS为单位的采样窗口宽度(50 mS = 20Hz)
unsigned int sample;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop() {
  unsigned long startMillis = millis(); // 样本窗口的开始
  unsigned int peakToPeak = 0;   // 峰峰值

  unsigned int signalMax = 0;
  unsigned int signalMin = 1024;

  // collect data for 50 mS
  while (millis() - startMillis < sampleWindow)
  {
    sample = analogRead(A0);
    if (sample < 1024)  // 抛出错误的读数
    {
      if (sample > signalMax)
      {
        signalMax = sample;  // 只保存最大级别
      }
      else if (sample < signalMin)
      {
        signalMin = sample;  // 仅保存最低级别
      }
    }
  }
  peakToPeak = signalMax - signalMin;  // max-min =峰峰值幅度
  double volts = (peakToPeak * 5.0) / 166;
  Serial.println(volts);
}

 


回复

1644

帖子

0

资源

纯净的硅(初级)

实验串口返回情况

 

03.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

打开IDE的串口绘图器

 

04.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

05.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

  实验场景图

 

06.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

  【花雕动手做】音乐可视化系列小项目(02)---OLED频谱灯

  项目之一:使用MAX9814声音模块测试环境音乐的动态波形

 

  实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgxMTEzNjE5Mg==.html?spm=a2hcb.playlsit.page.1

 


 


回复

1644

帖子

0

资源

纯净的硅(初级)

  实验场景图  动态图

 

06.gif


回复

1644

帖子

0

资源

纯净的硅(初级)

本帖最后由 eagler8 于 2021-10-6 06:58 编辑

  【花雕动手做】音乐可视化系列小项目(02)---OLED频谱灯

  项目之二:11段分频0.91寸OLED液晶屏声音可视化频谱灯

 

  实验开源代码

 

/*
  【花雕动手做】音乐可视化系列小项目(02)---OLED频谱灯
  项目之二:0.91寸OLED液晶屏声音可视化频谱灯
  实验接线: max9814接A0
  oled模块    Ardunio Uno
  GND---------GND接地线
  VCC---------5V 接电源
  SDA---------A4
  SCL ------- A5
*/

#include "arduinoFFT.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SAMPLES 64 // power of 2
#define SAMPLING_FREQ 8000 // 12 kHz Fmax = sampleF /2 
#define AMPLITUDE 100 // 灵敏度
#define FREQUENCY_BANDS 14
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define BARWIDTH 11
#define BARS 11
#define ANALOG_PIN A0
#define OLED_RESET     -1 // 重置引脚 #(如果共享 Arduino 重置引脚,则为 -1)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
double vImag[SAMPLES];
double vReal[SAMPLES];
unsigned long sampling_period_us;
arduinoFFT fft = arduinoFFT(vReal, vImag, SAMPLES, SAMPLING_FREQ);
//调整参考以去除背景噪声
float reference = log10(60.0);
double coutoffFrequencies[FREQUENCY_BANDS];

void setup() {
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
    for (;;); // Don't proceed, loop forever
  }

  // Setup display
  display.clearDisplay();
  display.display();
  display.setRotation(0);
  display.invertDisplay(false);

  sampling_period_us = (1.0 / SAMPLING_FREQ ) * pow(10.0, 6);

  // 计算截止频率,以对数标度为基数 POt
  double basePot = pow(SAMPLING_FREQ / 2.0, 1.0 / FREQUENCY_BANDS);
  coutoffFrequencies[0] = basePot;
  for (int i = 1 ; i < FREQUENCY_BANDS; i++ ) {
    coutoffFrequencies = basePot * coutoffFrequencies[i - 1];
  }

  // 绘制虚线以分离频段
  for (int i = 0; i < BARS - 1 ; i++) {
    for (int j = 0; j < SCREEN_HEIGHT ; j += 4) {
      display.writePixel((i + 1)*BARWIDTH + 2 , j, SSD1306_WHITE );
    }
  }
  display.drawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, SSD1306_WHITE);
}

int oldHeight[20];
int oldMax[20];
double maxInFreq;

void loop() {
  // 采样
  for (int i = 0; i < SAMPLES; i++) {
    unsigned long newTime = micros();
    int value = analogRead(ANALOG_PIN);
    vReal = value;
    vImag = 0;
    while (micros() < (newTime + sampling_period_us)) {
      yield();
    }
  }

  // 计算 FFT
  fft.DCRemoval();
  fft.Windowing(FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  fft.Compute(FFT_FORWARD);
  fft.ComplexToMagnitude();

  double median[20];
  double max[20];
  int index = 0;
  double hzPerSample = (1.0 * SAMPLING_FREQ) / SAMPLES; //
  double hz = 0;
  double maxinband = 0;
  double sum = 0;
  int count = 0;
  for (int i = 2; i < (SAMPLES / 2) ; i++) {
    count++;
    sum += vReal;
    if (vReal >  max[index] ) {
      max[index] = vReal;
    }
    if (hz > coutoffFrequencies[index]) {
      median[index] = sum / count;
      sum = 0.0;
      count = 0;
      index++;
      max[index] = 0;
      median[index]  = 0;
    }
    hz += hzPerSample;
  }
  // 计算每个频段的中值和最大值
  if ( sum > 0.0) {
    median[index] =  sum / count;
    if (median[index] > maxinband) {
      maxinband = median[index];
    }
  }
  int bar = 0;

  for (int i = FREQUENCY_BANDS - 1; i >= 3; i--) {
    int newHeight = 0;
    int newMax = 0;
    // 计算实际分贝
    if (median > 0 && max > 0 ) {
      newHeight = 20.0 * (log10(median ) - reference);
      newMax = 20.0 * (log10(max ) - reference);
    }

    // 调整最小和最大级别
    if (newHeight < 0 ||  newMax < 0) {
      newHeight = 1;
      newMax = 1;
    }
    if (newHeight >= SCREEN_HEIGHT - 2) {
      newHeight = SCREEN_HEIGHT - 3;
    }
    if (newMax >= SCREEN_HEIGHT - 2) {
      newMax = SCREEN_HEIGHT - 3;
    }

    int barX = bar * BARWIDTH + 5;
    // 删除旧水平中位数
    if (oldHeight > newHeight) {
      display.fillRect(barX, newHeight + 1, 7, oldHeight, SSD1306_BLACK);
    }
    // 删除旧的最大级别
    if ( oldMax > newHeight) {
      for (int j = oldMax; j > newHeight; j -= 2) {
        display.drawFastHLine(barX , j, 7, SSD1306_BLACK);
      }
    }
    // 绘制新的最大级别
    for (int j = newMax; j > newHeight; j -= 2) {
      display.drawFastHLine(barX , j, 7,  SSD1306_WHITE);
    }
    // 绘制新的级别中位数
    display.fillRect(barX , 1, 7, newHeight, SSD1306_WHITE);
    oldMax = newMax;
    oldHeight = newHeight;
    bar++;
  }
  display.drawFastHLine(0 , SCREEN_HEIGHT - 1, SCREEN_WIDTH, SSD1306_WHITE);
  display.display();
}

 


回复

1644

帖子

0

资源

纯净的硅(初级)

  实验场景图

 

07.jpg


回复

1644

帖子

0

资源

纯净的硅(初级)

  【花雕动手做】音乐可视化系列小项目(02)---OLED频谱灯

  项目之二:0.91寸OLED液晶屏声音可视化频谱灯

 

  实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgxMTI1NzEzMg==.html?spm=a2hcb.playlsit.page.1

 


 


回复

1644

帖子

0

资源

纯净的硅(初级)

  实验场景图  动态图

 

09.gif


回复

1644

帖子

0

资源

纯净的硅(初级)

 【花雕动手做】音乐可视化系列小项目(02)---OLED频谱灯

   项目之三:0.96寸OLED液晶屏声音可视化频谱灯

   实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgxMTE1NDAzMg==.html?spm=a2hcb.playlsit.page.1

 


 


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表