yilin zhuang
Created July 20, 2023

LoRaWAN Noise Sensor with SenseCAP

Explore sound with Arduino IDE! Build a noise detector using LM358-based sound sensor & Seeed Studio XIAO RP2040 in SenseCAP S2110.

57
LoRaWAN Noise Sensor with SenseCAP

Things used in this project

Hardware components

Seeed Studio Grove - Sound Sensor Based on LM358
×1
Seeed Studio SenseCAP S2110 Sensor Builder
×1
Seeed Studio SenseCAP S2100 - LoRaWAN® Data Logger/DTU
×1

Software apps and online services

Arduino IDE

Hand tools and fabrication machines

Seeed Studio Universal 4 Pin Buckled 30cm Cable

Story

Read more

Schematics

SenseCAP S2110 Sensor Builder

Code

sensorClass.hpp

C/C++
#ifndef _SENSOR_Sound_H
#define _SENSOR_Sound_H

#include "sensorClass.hpp"

#define SENSOR_ANALOG_S_PIN A0

// 参考电压(根据具体传感器和Arduino设置)
const float Vref = 5.0; // 假设使用5V供电

class sensorSound : public sensorClass
{
public:
    sensorSound() : sensorClass("Sound"){};
    ~sensorSound(){};

    uint16_t init(uint16_t reg, bool i2c_available);
    bool connected();
    bool sample();

    enum
    {
        Sound_INDEX = 0,
        MAX
    };
};

uint16_t sensorSound::init(uint16_t reg, bool i2c_available)
{
    uint16_t t_reg = reg;

    for (uint16_t i = 0; i < sensorSound::MAX; i++)
    {
        sensorClass::reg_t value;
        value.addr = t_reg;
        value.type = sensorClass::regType_t::REG_TYPE_S32_ABCD;
        value.value.s32 = 0;
        t_reg += sensorClass::valueLength(value.type);
        m_valueVector.emplace_back(value);
    }

    _connected = true;
    return t_reg - reg;
}

bool sensorSound::sample()
{
    GROVE_SWITCH_ADC;
    pinMode(SENSOR_ANALOG_PIN, INPUT);

    // 读取声音传感器输出的模拟电压值
    uint32_t raw = 0;

    raw = analogRead(SENSOR_ANALOG_PIN);
    
    /*
    for(int i = 0; i < 32; i++) {
        raw += analogRead(SENSOR_ANALOG_PIN);
    }
    raw >>= 5;*/
    
    if ( raw == 0 ) raw = 1;

    float value = 20 * log10(raw / 0.01);

    m_valueVector[sensorSound::Sound_INDEX].value.s32 = value * SCALE;

    return true;
}

bool sensorSound::connected()
{
    return _connected;
}

#endif

Credits

yilin zhuang
9 projects • 3 followers

Comments