Input devices
Sensors, MCU, microphone

Introdcution

The homework of this week is aimed at using sensors to measure something with a microcontroller. I developed a Raspberry Pi Pico W development board during Electronic Production Week, and I can use it with a Dupont thread to communicate with a sensor breakout. However, not all the input devices listed on the online inventory are actually still in stock, so the devices I found in the actual inventory are listed here:

6-axis motion sensor: GY-521 MPU-6050

GPS Module: NEO-6M

Laser TOF distance sensor: adafruit VL53L0CX

Digital Microphone: ICS43434 I2S MEMS Breakout (randomly found in the corner of an unlabeled drawer, not sure whether it can work)

Doppler Radar: RCWL-0516

I will focus on the digital microphone this time, because I want to build a device that can listen to questions during stargazing with a microphone, translate them into text, and then send them to the OpenAI API, receive back the answers from the internet, and then use a speaker to output.

The hierarchy of an embedded system:

  1. MCU development board and MCU

MCU: Micro Controller Unit 微控制器 (e.g.: RP2040, esp32), including CPU/RAM etc inside

MCU development board: (e.g. : Raspberry pi pico W / XIAO RP2040),

with MCU, USB port, 3v3 power regulator chip, wifi module, etc

  1. Hardware interfaces for communication
1)GPIO: General Purpose Input/Output

Multipurpose, can be defined for different functions

2)UART: Universal Asynchronous Receiver/Transmitter (1 to 1)

Serial communication 异步串口通信 (TX/RX, 2 lines), without clock, needs a Baud rate

3)I2C: Inter-Integrated Circuit (Bus Communication, 总线通信, n to n)

(SDA/SCL, 2 lines) slower but multiple devices can be connected to two bus lines

Serial Clock Line (SCL): used to synchronize all devices’ communication rates

Serial Data Line (SDA): used to transfer the data between the master and the slave

Needs pull-up resistors to maintain the high level!

4)SPI: Serial Peripheral Interface (1 to n, fast communication)

Serial Clock (SCK)

MOSI (Master Out Slave in)

MISO (Master In Slave Out)

CSn/CS (Chip Select, used to select different slavessuoy)

5)I2S: Integrated Interchip Sound

BCLK (Bit Clock): The clock reference from the MCU to the microphone

DOUT (Data out): The real sound data output from the microphone to the MCU

LRCLK (Left-Right Clock): Select the Left and right channels (for MCU to identify the channels)

SEL (Channel select): low level means left channel and high level means right channel (for the microphone to define the channels that it’s working on)

The debugging of my old development board

As I mentioned, I plan to use the board I designed two weeks ago, but I didn’t have the proper cable to do this. As a result, I will test the function of it first.

However, I noticed the OLED screen can’t work properly. As a result, I used the multimeter to test the pins on the OLED, and the GND pin was measured as ~3V relative to the GND of the board, which means the GND pin was not connected properly. I added more tins to the cold joint, and the GND pin was measured as normal voltage.

But the screen still can’t work properly. Then I measured the other 3 pins, and noticed the VCC pin was ~1V while the SCL/SDA pins were ~2V. This does not make sense because VCC should reach 3.3V. Okay, it’s a cold joint again, but the trace and cold joints are all under the board, so I can only use the fly wire to fix it. It finally looks like this:

8-1

The testing of a digital microphone

From I2S I discussed before, to connect the breakout properly, I need:

Two power pins: 3V3 and GND (white and black lines); Data from microphone: DOUT to GP1 (purple line); BCLK to GP0 (blue line); LRCL to GP2 (while line, not necessary); SRL to GND (choose left channel, not necessary). And look out, this digital microphone has a small hole as a voice input position.

8-2

I used the test code from Neil and changed the pin number for the Raspberry Pi Pico W, just randomly chose three GPIO. However, I still can’t get any effective signal back from the microphone, since it always outputs the high-level “1”

8-3

I doubt whether the breakout board I randomly found is a broken one, since I tested it with the same setup on another commercial development board and it still can’t work. I plan to use the logic anaylzer or XIAO rp2040 to test it again to figure out where the bug is.