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

文章介绍了如何将声音传感器改造成气流检测传感器,通过ArduinoUno进行连接和编程,实现对气流的检测。在改造过程中,主要涉及信号采集、最大值和最小值的确定以及信号处理,以判断是否有气流吹过。用户可以通过调整电位器改变传感器的灵敏度。
摘要由CSDN通过智能技术生成

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
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值