INMP441 to cyfrowy mikrofon MEMS, który udostępnia dane audio przez interfejs I2S. Podłącz SCK jako zegar I2S, WS jako sygnał word-select (lewo/prawo) oraz SD jako szeregową linię danych audio, a zasilaj go napięciem 1,8–3,3 V ze wspólną masą GND.
| Pin | Sygnał | Opis |
|---|---|---|
SCK |
SCK | top-left through-hole pin |
WS |
data | top-center through-hole pin |
L/R |
digital | top-right through-hole pin |
SD |
data | bottom-left through-hole pin |
VDD |
power 1.8v - 3.3v | bottom-center through-hole pin |
GND |
ground | bottom-right through-hole pin |
| Z | Do | Przewód |
|---|---|---|
board:5V |
x1:VDD |
red |
board:GND |
x1:GND |
black |
board:D3 |
x1:WS |
green |
board:D2 |
x1:SCK |
blue |
board:D4 |
x1:SD |
yellow |
board:GND.1 |
x1:L/R |
black |
Ten przykład został napisany i sprawdzony kompilacją dla arduino-uno. Codey Online dostosuje go do każdej innej obsługiwanej płytki.
// INMP441 microphone example for Arduino Uno
//
// Note: The Arduino Uno (AVR) does not have a built-in I2S peripheral or
// a standard preinstalled I2S library, so this sketch demonstrates a simple
// software-based read of the microphone clock/data lines using direct pin reads.
// This is not a full audio recorder, but it is a beginner-friendly example that
// compiles on Uno and shows how to detect microphone activity.
#include <Arduino.h>
const byte PIN_BCLK = 2; // SCK on the INMP441
const byte PIN_LRCLK = 3; // WS on the INMP441
const byte PIN_DATA = 4; // SD on the INMP441
volatile bool lastBclk = LOW;
uint32_t readOneI2SSample() {
// Wait for a rising edge on BCLK, then sample DATA.
bool current = digitalRead(PIN_BCLK);
while (current == lastBclk) {
current = digitalRead(PIN_BCLK);
}
lastBclk = current;
uint32_t sample = 0;
for (int i = 0; i < 24; i++) {
// Wait for next clock edge
bool clk = digitalRead(PIN_BCLK);
while (clk == lastBclk) {
clk = digitalRead(PIN_BCLK);
}
lastBclk = clk;
sample <<= 1;
if (digitalRead(PIN_DATA)) {
sample |= 1;
}
}
return sample;
}
void setup() {
Serial.begin(115200);
pinMode(PIN_BCLK, INPUT);
pinMode(PIN_LRCLK, INPUT);
pinMode(PIN_DATA, INPUT);
Serial.println("INMP441 microphone demo started");
Serial.println("L/R connected to GND selects the left channel.");
Serial.println("Speak near the microphone and watch the values change.");
}
void loop() {
// The INMP441 sends 24-bit audio data synchronized to BCLK/WS.
// On an Uno this software example is only suitable for basic learning.
uint32_t raw = readOneI2SSample();
// Convert to signed-ish 24-bit range for display.
int32_t sample = (int32_t)(raw & 0x00FFFFFF);
if (sample & 0x00800000) {
sample |= 0xFF000000;
}
long magnitude = labs(sample);
Serial.print("Raw: ");
Serial.print(sample);
Serial.print(" Magnitude: ");
Serial.println(magnitude);
delay(20);
}
Opisz, co chcesz zbudować. Codey Online napisze kod, narysuje schemat połączeń, skompiluje projekt i wgra go na płytkę bezpośrednio z przeglądarki.
Zacznij za darmo