第三十四篇、基于Arduino uno,获取声音传感器的原始值,将其转换成气体检测传感器——结果导向

0、结果

说明:先来看看串口调试助手显示的结果,第一个值是空气检测到的气体值,对着传感器吹气会被检测到,没有吹气的时候就是0。如果是你想要的,可以接着往下看。

1、外观

说明:虽然声音传感器形态各异,但是原理和代码都是适用的,都可以用它来检测气流。


2、连线

 说明:只需要连接三根线。
uno————声音或气流传感器

         

 3、源程序

说明:将声音检测传感器改成气流检测传感器,并将对应功能进行函数化,方便移植。

/****************************************气流传感器 part****************************************/
/*
  注意:这个程序用声音控制传感器转换成气流检测传感器,这样一个功能。
*/
#define soudPin         A0              // 读取声音传感器模拟量引脚
#define acquisitionTime 50              // 自适应采集时间
#define runMax 3                        // 判断是否开启持续次数
#define runMin 5                        // 判断是否关闭持续次数

unsigned long startMillis = 0;          // 时间
long runCount[2] = {0, 0};              // 运行次数
long triangleValue = 0;                 // 累加数
int signalMax = 0;                      // 存储最大值
int signalMin = 1024;                   // 存储最小值
int sample;                             // 采样原始值
int airflowValue = 0;                   // 气流大小值
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                   // 设置波特率

  startMillis = millis();               // 记录当前时间
  while (millis() - startMillis < acquisitionTime) {
    sample = analogRead(0);             //获取气流原始的最大值和最小值
    if (sample < 1024) {
      if (sample > signalMax) {
        signalMax = sample;
      }
      else if (sample < signalMin) {
        signalMin = sample;
      }
    }
  }
}
void loop() {
  getAirflowChange();                   // 获取吹气变化
}
/****************************************气流传感器 part****************************************/
// 获取气流大小  经过声音传感器3次处理
void getAirflowChange() {
  sample = analogRead(soudPin);         // 获取原始数据值
  /*
    // 原始波形打印
    Serial.print(sample);
    Serial.print(",");
    Serial.print(signalMax);
    Serial.print(",");
    Serial.print(signalMin);
    Serial.print(",");
  */
  // 处理波形
  if (sample > signalMax) {             // 判断原始数据值大于采集最大值
    sample -= signalMax;                // 原始值减最大值
  } else if (sample < signalMin) {      // 判断原始数据值小于采集最大值
    sample = abs(signalMin - sample);   // 得到间隔差值
  } else {                              // 其它情况下
    sample = 0;                         // 等于0
  }
  /*
    // 正值表
    Serial.print(sample);
    Serial.print(",");
  */
  if (sample > 0) {                     // 判断数据是否大于0 // 倒三角
    if (++runCount[0] > runMax) {       // 次数记录自增 如果 大于设定次数后
      runCount[1] = 0;                  // 重置值
      triangleValue += sample;          // 累加值
    }
  } else if (sample == 0) {             // 判断数据如果等于0
    if (++runCount[1] > runMin) {       // 次数记录自增 如果 大于设定次数后
      runCount[0] = 0;                  // 重置值
      runCount[1] = runMin;             // 设定值
      triangleValue = 0;                // 初始值
    }
  }
  if (triangleValue != 0) {             // 如果不等于0  // 获取幅度变化
    airflowValue = triangleValue / runCount[0];   // 得到平均值
    Serial.print("空气值:");
    Serial.println(airflowValue);
  } else {                              // 如果等于0
    airflowValue = 0;                   // 则等于0
    Serial.print("空气值:");
    Serial.println(airflowValue);
  }
}

4、注意事项

说明:如果有什么问题可以评论@我,我将帮助你。在使用该传感器的时候,我发现发出声音的情况下,获取到的信号并不明显,反而对着传感器吹气更加明显,所以就将其改成气流传感器。对着传感器吹气会被检测到。蓝色的电位器可以更改灵敏度。

5、基本原理

        声音传感器是一种可以将声波信号转化为电信号的电子元件,其原理基于压电效应。

        通常情况下,声音传感器由压电晶体、负载电阻、放大电路等部分组成。其中,压电晶体是最核心的传感器部分。它由一些具有压电效应的材料制成,例如二氧化锆、石英晶体等。当动态声压力作用于压电晶体时,材料会产生微小的变形,并在内部产生电荷。这些电荷在晶体的两端产生电压差,从而将声波信号转换为电信号输出。

        为了更好地捕捉和测量声音的强度和频率,声音传感器一般需要通过放大电路进行信号放大和滤波处理。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
硬件部件: Arduino Micro × 1个 无焊面包板一半尺寸 × 1个 MPS20N0040D-D压力传感器× 1个 LM358-N运算放大器× 1个 电阻1M欧姆 × 2 连接线套件,22 AWG × 1个 婴儿吸鼻器× 1个 5mm水族馆航空管× 1个 三通气管接头× 1个 软件应用程序和在线服务: Arduino IDE 手动工具和制造机: 剥线钳和切割器,32-20 AWG /0.05-0.5mm²单芯和绞线 在这个项目中,我们将构建一个简单的USB MIDI即插即用呼吸控制器。它的设计使用了容易找到的廉价组件,因此总成本仍然可以承受,并且大大低于商业上的等价物。这是仅使用气压传感器的基本版本,但计划将来对其进行升级以包括咬合和点头/倾斜传感器。 该项目假定您具有一些非常基础的电子学和Arduino知识,但由于不涉及焊接,因此即使是初学者也可以构建它。当然,更高级的用户可以将所有东西焊接在永久原型板上。由于Internet上有出色的教程,因此我不讨论IDE /库的安装以及上载代码的说明。 过采样用于平滑传感器的输入,效果非常好。您还可以根据自己的喜好调整范围,甚至拨入自定义曲线来调整控制器的行为。 由于传感器也可以测量负压,因此当您吸入空气而不是吹气时,会有第二个控制器消息流输出。两种类型的消息都可以由用户设置。例如,您可以将打击设置为弯音向上,而将其设置为弯音向下。默认情况下,两者均设置为控制器编号 建立步骤 1.如图/示意图所示,将Arduino插入面包板。 完整电路: 2.将传感器和运算放大器插入各自的位置,并根据侧面的小凹痕注意方向。 3.将电阻器的支脚切成适当的长度后,将其插入。 4.切/剥实心电缆,并将其放置在各自的位置。为了使这一点更易于理解,我将红色用于5V,将黑色用于接地,将黄色用于信号,但是您当然可以使用所有可用的东西。 5.如图所示,连接烟嘴,管道,三通接头和吸气器。您将需要切割一段“排气管”。 吹口,管道,连接器和排气口已连接: 6.按下三向连接器,使其适合传感器。它应该保持原状。 连接器安装到传感器: 7.安装Arduino IDE,并从“工具”->“管理库”安装所需的两个库(过采样和USB-MIDI)。用USB电缆将Arduino连接到计算机。上传附件代码。 8.应该设置好了,Arduino现在应该在您的DAW /音乐软件中显示为MIDI设备。启用它,并将其与键盘一起路由到支持呼吸控制器的插件。 调试模式下输出的示例串行绘图仪图(蓝色:黄色,红色:空中绘制): 收割者DAW中的CC消息: 这种设计的一个物理缺点是唾液将不可避免地在管中流动并会引起明显的气流波动。三通连接器用于通过将唾液引导至“排气”管来解决此问题。为了最大程度地减少管道中的残留唾液,请通过调节管道长度来确保从咬嘴到三通接头之间存在连续的坡度。如果管子悬挂在三通接头的水平线以下,唾液将被卡在其下部,从而引起波动。吸气器的婴儿侧部分(包括其过滤器)连接到排气口,以最大程度地减少滴水和噪音,并增加流向传感器的空气流量。 在代码中,您可以根据自己的喜好调整,包括自定义曲线。注释描述了如何执行此操作。如果发现很难达到127点,则减小最大范围,或者如果太容易,则增大它。无论何时更改,都将需要重新上传代码。 将Arduino启动后的前几个读数取平均,以校准其余位置。连接/重置设备时,请勿吹入管子。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值