top of page

STEM|使用 Raspberry Pi Pico 組合一個聲控的 WS2812B LED 閃燈系統

使用 Raspberry Pi Pico 組合一個聲控的 WS2812B LED 閃燈系統。這需要結合幾個組件和一些編程來實現聲音控制功能。下面是實現這個系統的基本步驟和所需的元件:

所需元件:

  1. Raspberry Pi Pico

  2. WS2812B LED 燈帶

  3. 聲音傳感器(例如 KY-038 或類似的聲音檢測模塊)

  4. 必要的連接線

  5. 電源(例如 USB 電源或適配器)



一個聲控的 WS2812B LED 閃燈系統

基本步驟:

  1. 設置開發環境: 你可以使用 MicroPython 或 C/C++ 來編寫控制程序。本文主要以 MicroPython 為例,因為它相對簡單且易於上手。

  • 首先,下載並安裝 MicroPython 固件到 Raspberry Pi Pico。你可以從 Raspberry Pi 官網 下載固件,並按照說明將其燒錄到 Pico 上。

  1. 連接硬件

  • 將 WS2812B LED 燈帶連接到 Raspberry Pi Pico 的 GPIO 引腳。通常需要連接三條線:電源 (5V)、地 (GND) 和數據線(可以選擇任一 GPIO 引腳,例如 GPIO 16)。

  • 將聲音傳感器的數據輸出引腳連接到 Raspberry Pi Pico 的一個 GPIO 引腳(例如 GPIO 15)。同時,連接聲音傳感器的電源和地線。

  1. 編寫 MicroPython 代碼 你需要一個驅動程序來控制 WS2812B LED 燈帶。你可以使用 neopixel 庫,它是專門為這種 LED 燈帶設計的。確保你已經安裝了這個庫。

import machine

import neopixel

import utime


# 設置 WS2812B

num_leds = 8 # 根據你的 LED 燈帶數量調整

pin = machine.Pin(16, machine.Pin.OUT)

np = neopixel.NeoPixel(pin, num_leds)


# 設置聲音傳感器

sound_sensor = machine.Pin(15, machine.Pin.IN)


def clear_leds():

for i in range(num_leds):

np[i] = (0, 0, 0)

np.write()


def flash_leds():

for i in range(num_leds):

np[i] = (255, 0, 0) # 紅色,可以根據需要更改顏色

np.write()

utime.sleep(0.1)

clear_leds()

utime.sleep(0.1)


clear_leds() # 初始化清空 LED


while True:

if sound_sensor.value() == 1: # 檢測到聲音

flash_leds()

utime.sleep(0.01) # 防止佔用過多 CPU 資源

  1. 上面的代碼會在檢測到聲音時閃爍 WS2812B LED 燈帶。聲音傳感器的輸出引腳連接到 Pico 的 GPIO 15,引腳檢測到高電平(聲音信號)時觸發 LED 閃爍。





  1. 運行和測試

  • 將代碼上傳到 Raspberry Pi Pico,並在 Pico 上運行。你可以使用 Thonny IDE 來進行編輯和上傳。

  • 測試聲音傳感器的靈敏度,調整其閾值電位器(如果有)以確保能夠準確檢測到聲音。

  • 確保 LED 燈帶和聲音傳感器都正常工作,並根據需要調整代碼中的參數,例如 LED 顏色和閃爍時間。

小提示:

  • 根據你的具體應用需求,你可能需要進一步優化代碼,例如增加噪音過濾、調整閃爍模式等。

  • 確保 LED 燈帶的電源供應充足,特別是在使用長燈帶時,可能需要額外的外部電源。


構建一個聲控的 WS2812B LED 燈帶系統,這可以應用在各種場景,如音樂律動燈光效果、聲控裝飾燈等。

最新文章

查看全部

STEM|如何建立自己的AI系統

建立自己的 AI 系統是一個複雜的過程,需要具備豐富的技術知識和實踐經驗。以下是一些關鍵步驟: 1. 確定目標和應用場景 首先要明確 AI 系統的目標和應用場景,例如是用於自然語言處理、圖像識別還是其他領域。這將決定系統的架構和所需的技術棧。 2. 選擇合適的機器學習框架 目前市面上有很多成熟的機器學習框架,如 TensorFlow、PyTorch、Keras 等,開發者需要選擇適合自己應用場景的

Comments


bottom of page