ورکشاپ آموزشی - آیسی مدار
رفتن به محتوا

صداسنج پرتابل با رزبری‌پای پیکو و میکروپایتون

ابزار و گجت
۰ نظر
۳۳ نفر
کد ۳۲۵۲

تا حالا برات پیش اومده بخوای بدونی صدای محیط اطرافت چقدر بلنده؟ فرقی نمی‌کنه بخوای استاندارد بودن نویز یه کارگاه رو بسنجی یا فقط از روی کنجکاوی بخوای بدونی صدای اسپیکرت چند دسی‌بله؛ داشتن یه صداسنج همیشه می‌تونه کاربردی و جذاب باشه.

تو این آموزش از آیسی‌مدار قراره یه دستگاه صداسنج دیجیتال، پرتابل و حرفه‌ای بسازیم. مغز متفکر این پروژه، برد محبوب رزبری‌پای پیکو هست که با زبان میکروپایتون برنامه‌ریزی می‌شه. برای شنیدن صداها هم از یه میکروفون باکیفیت I2S استفاده می‌کنیم تا مقادیر رو با دقت بالا بخونه و روی یه نمایشگر جذاب OLED نشون بده.

جذابیت اصلی این پروژه اینه که قرار نیست فقط روی بردبورد بمونه! ما براش یه قاب سه‌بعدی طراحی می‌کنیم و مدارش رو روی PCB می‌بندیم تا یه گجت جیبی شارژی داشته باشیم. پس قطعات رو آماده کن تا بریم سراغ ساخت این صداسنج فوق‌العاده.

  1. اندازه‌گیری لحظه‌ای و دقیق سطح صدا (بر حسب دسی‌بل)
  2. استفاده از پروتکل I2S برای اتصال میکروفون به رزبری‌پای پیکو
  3. نمایش گرافیکی و زنده داده‌ها روی نمایشگر OLED
  4. طراحی و چاپ قاب اختصاصی سه‌بعدی با نرم‌افزار Fusion 360
  5. استفاده از برد مدار چاپی (PCB) برای داشتن یه دستگاه تمیز و حرفه‌ای
مرحله ۱

راه‌اندازی اولیه میکروفون روی بردبورد

مراحل انجام کار:

  1. برد رزبری‌پای پیکو و ماژول میکروفون INMP441 رو روی بردبورد قرار بده و با سیم‌های جامپر، دقیقا طبق نقشه مدار اونا رو به هم وصل کن.
  2. وقتی اتصالات کامل شد، برد رزبری‌پای پیکو رو با یه کابل USB سالم به کامپیوترت متصل کن.
  3. حالا نرم‌افزار Thonny رو باز کن، کدهای مربوط به این بخش رو داخلش قرار بده، با اسم main.py ذخیره کن و دکمه اجرا رو بزن.
JavaScript
from machine import I2S, Pin
import math
import time
import array
# --- CONFIGURATION ---
SCK_PIN = 16
WS_PIN = 17
SD_PIN = 18
# I2S Config
I2S_ID = 0
SAMPLE_RATE = 16000
BITS_PER_SAMPLE = 32
BUFFER_LENGTH = 64
# --- CALIBRATION VALUE ---
DB_OFFSET = -46.72
# Initialize I2S
audio_in = I2S(
I2S_ID,
sck=Pin(SCK_PIN),
ws=Pin(WS_PIN),
sd=Pin(SD_PIN),
mode=I2S.RX,
bits=BITS_PER_SAMPLE,
format=I2S.MONO,
rate=SAMPLE_RATE,
ibuf=2048 # Internal buffer size
)
# Create a buffer to store the raw bytes read from the I2S
read_buffer = bytearray(BUFFER_LENGTH * 4)
print("Starting Decibel Meter...")
while True:
# Read data from the INMP441 into the buffer
num_bytes_read = audio_in.readinto(read_buffer)
# Determine how many samples we actually read
samples_read = num_bytes_read // 4
if samples_read > 0:
# **FIXED: Use array.array to cast bytes to 32-bit signed integers ('i')**
mic_samples = array.array('i', read_buffer)
sum_squares = 0.0
for i in range(samples_read):
# Shift right by 8 to get the correct 24-bit integer value
processed_sample = mic_samples[i] >> 8
# Accumulate sum of squares
sum_squares += processed_sample * processed_sample
# Calculate RMS
rms = math.sqrt(sum_squares / samples_read)
# Avoid log(0) error
if rms <= 0:
rms = 1
# Calculate dB
db = 20.0 * math.log10(rms)
# Apply calibration
final_db = db + DB_OFFSET
# Print to Serial
print(f"Raw dB: {db:.2f} | Final dB: {final_db:.2f}")
time.sleep(0.05)

همون‌طور که تو بخش خط فرمان (Shell) نرم‌افزار می‌بینی، مقادیر سطح صدا دارن به صورت زنده و بر حسب دسی‌بل روی سیستم نمایش داده می‌شن.

مرحله ۲

نکاتی برای تهیه قطعات و طراحی مدار

برای اینکه یه پروژه الکترونیکی مثل همین صداسنج، عمر طولانی و عملکرد پایداری داشته باشه، خیلی مهمه که از قطعات باکیفیت و اورجینال استفاده کنی.

مخصوصا تو پروژه‌هایی که با سیگنال‌های صوتی و آنالوگ سر و کار داریم، نویز قطعات بی‌کیفیت می‌تونه کاملا خروجی رو خراب کنه و اعداد اشتباهی رو بهت نشون بده.

به جای اینکه همیشه از سیم‌های تو در تو و بردبورد استفاده کنی، بهتره وقتی پروژه‌ات نهایی شد، براش یه برد مدار چاپی (PCB) اختصاصی طراحی کنی. این کار هم ظاهر حرفه‌ای‌تری به دستگاهت می‌ده و هم قطعی و اتصالی‌ها رو به صفر می‌رسونه.

ما تو این آموزش برای اینکه کار حسابی تمیز دربیاد، مدارمون رو روی PCB پیاده می‌کنیم و از یه سیستم شارژ باتری هم کمک می‌گیریم تا صداسنج ما کاملا پرتابل و جیبی بشه.

پس حتما موقع تهیه ماژول‌هایی مثل میکروفون و نمایشگر، فروشگاه‌های معتبر رو انتخاب کن تا خیالت از بابت دقت اندازه‌گیری قطعات راحت باشه.

مرحله ۳

اضافه کردن نمایشگر OLED به مدار

حالا وقتشه که نمایشگر OLED رو هم به سیستممون روی بردبورد اضافه کنیم تا دیگه نیازی به کامپیوتر نداشته باشیم.

  1. نمایشگر رو روی بردبورد نصب کن و پایه‌های ارتباط I2C اون رو طبق شماتیک به رزبری‌پای پیکو متصل کن.
  2. بعد از اون، کابل USB رو دوباره به سیستم وصل کن و نرم‌افزار Thonny رو بالا بیار.
  3. اول از همه، فایل کتابخونه ssd1306.py رو دانلود کن و روی حافظه خود رزبری‌پای پیکو ذخیره‌اش کن.
JavaScript
# MicroPython SSD1306 OLED driver, I2C and SPI interfaces
from micropython import const
import framebuf
# register definitions
SET_CONTRAST = const(0x81)
SET_ENTIRE_ON = const(0xA4)
SET_NORM_INV = const(0xA6)
SET_DISP = const(0xAE)
SET_MEM_ADDR = const(0x20)
SET_COL_ADDR = const(0x21)
SET_PAGE_ADDR = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP = const(0xA0)
SET_MUX_RATIO = const(0xA8)
SET_COM_OUT_DIR = const(0xC0)
SET_DISP_OFFSET = const(0xD3)
SET_COM_PIN_CFG = const(0xDA)
SET_DISP_CLK_DIV = const(0xD5)
SET_PRECHARGE = const(0xD9)
SET_VCOM_DESEL = const(0xDB)
SET_CHARGE_PUMP = const(0x8D)
# Subclassing FrameBuffer provides support for graphics primitives
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
class SSD1306(framebuf.FrameBuffer):
def __init__(self, width, height, external_vcc):
self.width = width
self.height = height
self.external_vcc = external_vcc
self.pages = self.height // 8
self.buffer = bytearray(self.pages * self.width)
super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
self.init_display()
def init_display(self):
for cmd in (
SET_DISP | 0x00, # off
# address setting
SET_MEM_ADDR,
0x00, # horizontal
# resolution and layout
SET_DISP_START_LINE | 0x00,
SET_SEG_REMAP | 0x01, # column addr 127 mapped to SEG0
SET_MUX_RATIO,
self.height - 1,
SET_COM_OUT_DIR | 0x08, # scan from COM[N] to COM0
SET_DISP_OFFSET,
0x00,
SET_COM_PIN_CFG,
0x02 if self.width > 2 * self.height else 0x12,
# timing and driving scheme
SET_DISP_CLK_DIV,
0x80,
SET_PRECHARGE,
0x22 if self.external_vcc else 0xF1,
SET_VCOM_DESEL,
0x30, # 0.83*Vcc
# display
SET_CONTRAST,
0xFF, # maximum
SET_ENTIRE_ON, # output follows RAM contents
SET_NORM_INV, # not inverted
# charge pump
SET_CHARGE_PUMP,
0x10 if self.external_vcc else 0x14,
SET_DISP | 0x01,
): # on
self.write_cmd(cmd)
self.fill(0)
self.show()
def poweroff(self):
self.write_cmd(SET_DISP | 0x00)
def poweron(self):
self.write_cmd(SET_DISP | 0x01)
def contrast(self, contrast):
self.write_cmd(SET_CONTRAST)
self.write_cmd(contrast)
def invert(self, invert):
self.write_cmd(SET_NORM_INV | (invert & 1))
def show(self):
x0 = 0
x1 = self.width - 1
if self.width == 64:
# displays with width of 64 pixels are shifted by 32
x0 += 32
x1 += 32
self.write_cmd(SET_COL_ADDR)
self.write_cmd(x0)
self.write_cmd(x1)
self.write_cmd(SET_PAGE_ADDR)
self.write_cmd(0)
self.write_cmd(self.pages - 1)
self.write_data(self.buffer)
class SSD1306_I2C(SSD1306):
def __init__(self, width, height, i2c, addr=0x3C, external_vcc=False):
self.i2c = i2c
self.addr = addr
self.temp = bytearray(2)
self.write_list = [b"\x40", None] # Co=0, D/C#=1
super().__init__(width, height, external_vcc)
def write_cmd(self, cmd):
self.temp[0] = 0x80 # Co=1, D/C#=0
self.temp[1] = cmd
self.i2c.writeto(self.addr, self.temp)
def write_data(self, buf):
self.write_list[1] = buf
self.i2c.writevto(self.addr, self.write_list)
class SSD1306_SPI(SSD1306):
def __init__(self, width, height, spi, dc, res, cs, external_vcc=False):
self.rate = 10 * 1024 * 1024
dc.init(dc.OUT, value=0)
res.init(res.OUT, value=0)
cs.init(cs.OUT, value=1)
self.spi = spi
self.dc = dc
self.res = res
self.cs = cs
import time
self.res(1)
time.sleep_ms(1)
self.res(0)
time.sleep_ms(10)
self.res(1)
super().__init__(width, height, external_vcc)
def write_cmd(self, cmd):
self.spi.init(baudrate=self.rate, polarity=0, phase=0)
self.cs(1)
self.dc(0)
self.cs(0)
self.spi.write(bytearray([cmd]))
self.cs(1)
def write_data(self, buf):
self.spi.init(baudrate=self.rate, polarity=0, phase=0)
self.cs(1)
self.dc(1)
self.cs(0)
self.spi.write(buf)
self.cs(1)
  1. حالا یه فایل جدید باز کن، کدهای اصلی رو داخلش پیست کن، اون رو هم به اسم main.py ذخیره و اجرا کن.
JavaScript
#main.py
from machine import I2S, Pin, I2C
from ssd1306 import SSD1306_I2C
import math
import time
import array
# --- I2S CONFIGURATION (Microphone) ---
SCK_PIN = 16
WS_PIN = 17
SD_PIN = 18
SAMPLE_RATE = 16000
BITS_PER_SAMPLE = 32
BUFFER_LENGTH = 64
DB_OFFSET = -46.72
audio_in = I2S(
0, sck=Pin(SCK_PIN), ws=Pin(WS_PIN), sd=Pin(SD_PIN),
mode=I2S.RX, bits=BITS_PER_SAMPLE, format=I2S.MONO,
rate=SAMPLE_RATE, ibuf=2048
)
read_buffer = bytearray(BUFFER_LENGTH * 4)
# --- OLED CONFIGURATION (Display) ---
OLED_WIDTH = 128
OLED_HEIGHT = 64
i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
oled = SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, i2c)
SMOOTHING_FACTOR = 0.15
smoothed_db = 0.0
is_first_reading = True
# Peak hold for visual effect
peak_db = 0.0
peak_hold_time = 0
PEAK_HOLD_DURATION = 20
print("Starting Professional Decibel Meter...")
def draw_meter_bar(oled, db_value):
"""Draw a professional-looking meter bar with segments"""
# Map dB range (30-90 dB) to bar width (0-100 pixels)
db_min = 30.0
db_max = 90.0
# Clamp value
db_clamped = max(db_min, min(db_max, db_value))
# Calculate bar width (100 pixels max)
bar_width = int((db_clamped - db_min) / (db_max - db_min) * 100)
# Draw border for meter
oled.rect(0, 28, 102, 14, 1)
# Draw segmented bar (10 segments)
for seg in range(10):
seg_start = seg * 10 + 1
seg_end = seg_start + 8
if bar_width > seg_start:
# Fill this segment
fill_width = min(8, bar_width - seg_start)
oled.fill_rect(seg_start + 1, 30, fill_width, 10, 1)
# Draw level indicators
for i in range(0, 101, 20):
oled.vline(i + 1, 42, 3, 1)
# Draw labels
oled.text("30", 0, 46, 1)
oled.text("60", 44, 46, 1)
oled.text("90", 88, 46, 1)
def draw_peak_indicator(oled, peak_value):
"""Draw a small peak hold indicator"""
db_min = 30.0
db_max = 90.0
peak_clamped = max(db_min, min(db_max, peak_value))
peak_pos = int((peak_clamped - db_min) / (db_max - db_min) * 100)
if peak_pos > 0 and peak_pos <= 100:
# Draw peak marker
oled.vline(peak_pos + 1, 29, 12, 1)
while True:
num_bytes_read = audio_in.readinto(read_buffer)
samples_read = num_bytes_read // 4
if samples_read > 0:
mic_samples = array.array('i', read_buffer)
sum_squares = 0.0
for i in range(samples_read):
processed_sample = mic_samples[i] >> 8
sum_squares += processed_sample * processed_sample
rms = math.sqrt(sum_squares / samples_read)
if rms <= 0:
rms = 1
db = 20.0 * math.log10(rms)
final_db = db + DB_OFFSET
if is_first_reading:
smoothed_db = final_db
is_first_reading = False
else:
smoothed_db = (SMOOTHING_FACTOR * final_db) + ((1 - SMOOTHING_FACTOR) * smoothed_db)
# Peak detection with hold
if smoothed_db > peak_db:
peak_db = smoothed_db
peak_hold_time = PEAK_HOLD_DURATION
else:
peak_hold_time -= 1
if peak_hold_time <= 0:
# Slowly decay peak
peak_db = peak_db * 0.95
# Print to Serial Monitor
print(f"Raw: {final_db:.2f} | Smoothed: {smoothed_db:.2f} | Peak: {peak_db:.2f}")
oled.fill(0)
# Title with box
oled.rect(0, 0, 128, 12, 1)
oled.text("dB METER", 35, 2, 1)
# Large dB value display
db_str = f"{smoothed_db:.1f}"
oled.text(db_str, 30, 15, 1)
oled.text("dB", 75, 15, 1)
# Draw meter bar with segments
draw_meter_bar(oled, smoothed_db)
# Draw peak hold indicator
draw_peak_indicator(oled, peak_db)
# Status indicator (small dot that blinks)
if int(time.ticks_ms() / 500) % 2:
oled.fill_rect(122, 2, 4, 4, 1)
oled.show() # Update display
time.sleep(0.05)

عالیه! الان دیگه می‌تونی مقادیر دسی‌بل رو به صورت زنده و گرافیکی روی صفحه نمایش OLED ببینی.

مرحله ۴

طراحی و چاپ قاب سه‌بعدی دستگاه

برای اینکه این پروژه به یه دستگاه واقعی و دستی تبدیل بشه، نیاز به یه قاب محافظ داریم. با استفاده از نرم‌افزارهای طراحی مثل Fusion 360 می‌تونی یه کیس اختصاصی برای قطعاتت طراحی کنی. حتی اگه تو مدل‌سازی سه‌بعدی تازه‌کار باشی، طراحی یه باکس ساده کار سختی نیست. بعد از طراحی، قاب رو با پرینتر سه‌بعدی چاپ کن تا یه ظاهر تمیز، جمع‌وجور و کاملا قابل حمل به صداسنجت بدی.

مرحله ۵

انتقال مدار به PCB و مونتاژ قطعات

برای اینکه دستگاه نهایی ما قابل اعتمادتر بشه و از شر سیم‌های بردبوردی خلاص بشیم، کل مدار رو روی یه برد PCB پیاده می‌کنیم. پین‌هدرها رو سر جاشون قرار بده و رزبری‌پای پیکو رو روی برد لحیم کن.

طبق نقشه، بقیه پین‌هدرها رو برای میکروفون، نمایشگر OLED و قطعات دیگه روی PCB لحیم‌کاری کن. با داشتن شماتیک می‌تونی به راحتی این برد رو خودت طراحی کنی و بسازی.

در نهایت، ماژول شارژ و باتری رو هم به مدار اضافه کن تا بخش منبع تغذیه کامل بشه و دستگاهت بدون نیاز به کابل کار کنه.

مرحله ۶

عیب‌یابی و رفع مشکلات احتمالی

اگه صداسنجت اون‌طوری که انتظار داشتی کار نمی‌کنه، اصلا نگران نباش. بیشتر مشکلات به خاطر سیم‌کشی، تغذیه یا تنظیمات نرم‌افزاریه. بیا قدم‌به‌قدم چکشون کنیم.

1. دستگاه روشن نمی‌شه

دلایل احتمالی:

  1. باتری شارژ نداره.
  2. سیم‌کشی ماژول شارژ TP4056 اشتباهه.
  3. کلید روشن/خاموش مشکل داره.

راه‌حل‌ها:

  1. باتری لیتیومی رو با ماژول کاملا شارژ کن.
  2. پایه‌های B+ و B- رو روی ماژول شارژ دوباره چک کن.
  3. اتصال VCC و GND به برد رو بررسی کن.
  4. مطمئن شو کلید پاور درست سر راه خط تغذیه قرار گرفته باشه.

2. نمایشگر OLED روشن نمی‌شه

دلایل احتمالی:

  1. سیم‌کشی I2C اشتباهه.
  2. آدرس I2C غلط تنظیم شده.
  3. فایل درایور روی برد آپلود نشده.

راه‌حل‌ها:

  1. پین‌های SDA و SCL متصل به پیکو رو چک کن.
  2. آدرس I2C رو تو کد تأیید کن (معمولا 0x3C هست).
  3. مطمئن شو فایل ssd1306.py آپلود شده.
  4. چک کن که تغذیه نمایشگر 3.3 ولت باشه (نه 5 ولت).

3. نمایشگر روشنه ولی چیزی نشون نمی‌ده

دلایل احتمالی:

  1. کد اجرا نمی‌شه.
  2. راه‌اندازی نمایشگر تو کد مشکل داره.
  3. کنتراست یا خود صفحه آسیب دیده.

راه‌حل‌ها:

  1. فایل main.py رو دوباره آپلود و برد رو ریست کن.
  2. کدهای راه‌اندازی (Initialization) رو مرور کن.
  3. مطمئن شو فلت نمایشگر موقع چسب‌کاری پاره نشده باشه.

4. صدایی ثبت نمی‌شه / عدد دسی‌بل ثابته

دلایل احتمالی:

  1. سیم‌کشی میکروفون INMP441 ایراد داره.
  2. پین‌های I2S تو کد اشتباه تعریف شدن.
  3. میکروفون برق نداره.

راه‌حل‌ها:

  1. پایه‌های BCLK، WS و SD رو با کدی که نوشتی مطابقت بده.
  2. تغذیه 3.3 ولت میکروفون رو چک کن.
  3. سوراخ میکروفون نباید با چسب حرارتی مسدود شده باشه.
  4. نزدیک میکروفون دست بزن یا حرف بزن تا واکنشش رو ببینی.

5. اعداد تصادفی و اشتباه نشون داده می‌شن

دلایل احتمالی:

  1. سیم‌های جامپر شل هستن.
  2. نویز الکتریکی وجود داره.
  3. منبع تغذیه ناپایداره.

راه‌حل‌ها:

  1. اتصالات رو محکم کن و از سلامت سیم‌ها مطمئن شو.
  2. از سیم‌های خیلی بلند کنار میکروفون استفاده نکن.
  3. وضعیت باتری و پایداری ولتاژ رو بررسی کن.
  4. بعد از مونتاژ کامل، دستگاه رو یه بار خاموش و روشن کن.

6. خطای آپلود کد در نرم‌افزار Thonny

دلایل احتمالی:

  1. برد تو حالت بوت نیست.
  2. مفسر اشتباه انتخاب شده.
  3. فایل درست ذخیره نشده.

راه‌حل‌ها:

  1. موقع وصل کردن کابل، دکمه BOOTSEL روی برد رو نگه دار.
  2. مفسر MicroPython (Raspberry Pi Pico) رو تو تنظیمات انتخاب کن.
  3. اسم فایل رو دقیقا main.py بذار و روی خود پیکو ذخیره کن.
  4. مطمئن شو فایل کتابخونه‌ها هم آپلود شدن.

7. با کابل کار می‌کنه اما با باتری نه

دلایل احتمالی:

  1. ولتاژ باتری خیلی کمه.
  2. سیم‌کشی ماژول شارژ ایراد داره.
  3. کلید پاور خرابه.

راه‌حل‌ها:

  1. قبل از تست باتری رو کامل شارژ کن.
  2. خروجی ماژول TP4056 به پین‌های تغذیه پیکو رو چک کن.
  3. با مولتی‌متر سلامت کلید پاور رو تست کن.

8. وقتی قاب رو می‌بندم دستگاه از کار می‌افته

دلایل احتمالی:

  1. سیم‌ها تحت فشارن.
  2. اتصالات داخل باکس کنده می‌شن.

راه‌حل‌ها:

  1. قاب رو باز کن و مسیر سیم‌ها رو مرتب کن.
  2. هیچ سیمی نباید موقع بستن در قاب تحت فشار باشه.
  3. قطعات شل رو با چسب حرارتی یا دوطرفه محکم کن.

9. نکات کلی برای دیباگ کردن

  1. همیشه اول مدار رو روی بردبورد ببند و تست بگیر.
  2. قبل از مونتاژ نهایی تو قاب، حتما از کارهایی مثل آپلود کد مطمئن شو.
  3. قطعات رو یکی‌یکی بررسی کن:
  4. برد پیکو
  5. نمایشگر OLED
  6. میکروفون INMP441
  7. یه کابل USB دم دستت باشه تا بتونی سریع خروجی‌ها رو چک کنی.

با انجام این مراحل می‌تونی اکثر مشکلات رایج رو حل کنی و صداسنجت رو بدون دردسر راه بندازی.

⭐ یه نکته حرفه‌ای

اگه پین‌ها رو تغییر دادی، یادت نره تو کدها هم این تغییرات رو اعمال کنی تا تداخلی پیش نیاد.

مرحله ۷

جاگذاری قطعات داخل قاب و مونتاژ نهایی

حالا که همه‌چیز آماده‌ست، بیا قطعات رو داخل قاب سه‌بعدی جاسازی کنیم تا صداسنج پرتابل ما تکمیل بشه.

1. نصب برد رزبری‌پای پیکو

برد پیکو رو که روی PCB سوار کردی، با یه تکه چسب دوطرفه محکم کف قاب بچسبون تا تکون نخوره.

2. فیکس کردن برد داخل قاب

مطمئن شو برد دقیقا وسط قرار گرفته و کمی فشارش بده تا چسب دوطرفه کامل به بدنه بچسبه.

3. جایگذاری باتری

باتری لیتیومی رو هم با چسب دوطرفه کنار برد قرار بده. مراقب باش سیم‌های باتری تو دست‌وپای بقیه قطعات نباشن و تحت فشار قرار نگیرن.

4. نصب ماژول شارژ و کلید

ماژول شارژ TP4056 رو تو شیار مخصوص خودش قرار بده و اگه شل بود با کمی چسب حرارتی محکمش کن. کلید کشویی رو هم به همین شکل تو جایگاهش روی قاب فیکس کن.

5. نصب نمایشگر و میکروفون

نمایشگر OLED و میکروفون INMP441 رو روی پنل جلویی قرار بده و با چسب حرارتی سر جاشون محکم کن. خیلی مراقب باش چسب روی صفحه نمایش یا سوراخ میکروفون نریزه.

6. سیم‌کشی نهایی

با استفاده از سیم‌های جامپر، اتصالات مربوط به پین‌های پیکو رو دقیقا طبق نقشه برقرار کن.

7. اتصالات تغذیه

پایه‌های VCC و GND خروجی ماژول شارژ رو به مدار PCB وصل کن تا برق کل دستگاه تأمین بشه.

8. تکمیل اتصالات

حالا باید سیم‌های مربوط به این دو قطعه رو وصل کنی:

  1. نمایشگر OLED
  2. میکروفون I2S مدل INMP441

این سیم‌ها رو به پین‌هدرهای مربوطه روی PCB بزن. قبل از اینکه قاب رو ببندی، یه بار دیگه همه‌چیز رو با دقت چک کن.

9. بستن در قاب

وقتی از درستی اتصالات و محکم بودن قطعات مطمئن شدی، در قاب رو به آرومی ببند. صداسنج دستی و پرتابل تو آماده استفاده‌ست!

مرحله ۸

نتیجه‌گیری و کلام آخر

خسته نباشی! الان دیگه یه صداسنج دیجیتال و جیبی داری که هم ظاهری خیلی جذاب داره و هم فوق‌العاده دقیق کار می‌کنه. با این دستگاه می‌تونی میزان نویز محیط کارت رو بسنجی، تجهیزات صوتیت رو کالیبره کنی یا تو پروژه‌های دیگه ازش ایده بگیری.

اگه تو مراحل ساخت، راه‌اندازی مدار یا آپلود کدهای میکروپایتون به اروری خوردی، حتما تو بخش نظرات همین پست برامون بنویس تا با هم مشکل رو برطرف کنیم. راستی، اگه ایده‌ای برای اضافه کردن امکانات بیشتر به این دستگاه داری، خیلی خوشحال می‌شیم نظرت رو با بقیه بچه‌ها به اشتراک بذاری.

تیم آیسی‌مدار همیشه اینجاست تا تو مسیر ساخت پروژه‌های الکترونیکی باحال و کاربردی همراهت باشه. دمت گرم که تا آخر این آموزش با ما بودی.

فایل‌های پیوست

PY main.py
PY ssd1306.py
PY main_2.py

تو میتونی اولین سازنده باشی!

اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر

این آموزش با استانداردهای اختصاصی آیسی‌مدار بازنویسی و بهینه‌سازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.

آموزش‌های مشابه

گفتگو‌های کاربران

هنوز نظری ثبت نشده؛ تو شروع کن!