20. Wio Terminal EP.07, กราฟแสดงค่าความดังของเสียง


Wio Terminal EP.07,  กราฟแสดงค่าความดังของเสียง

นับวันก็ใกล้จะจบ การใช้งาน WioTerminal เบื้องต้น แล้วนะครับ โพสนี้ก็จะแนะนำวิธีการเขียนโค้ด เพื่อวัดค่าความดังของเสียง โดยใช้ไมโครโฟน ที่ฝังอยู่ภายใน โดยหลักการแล้ว คล้ายกันกับการวัดค่าความสว่างของแสง ในโพสก่อนนี้ จะต่างกันก็ตรงวิธีการคำนวณ

 คำอธิบาย

    โค้ดที่เขียนนี้ ก็ยังคงมีการใช้ฟังก์ชั่น ชื่อ stext และ draw_axis ซึ่งมีการปรับปรุงจากโพสก่อนนี้เล็กน้อย  และมีส่วนที่เปลี่ยนแปลงคือ แก้ไข light = ADC(Pin(Map.WIO_LIGHT, Pin.IN)) เป็น mic = ADC(Pin(Map.WIO_MIC, Pin.IN))

ขั้นตอนการทำงาน

    1. วนรอบอ่านค่าความสว่างของแสง จำนวน 10 ครั้ง
    2. นำค่าเสียงที่ได้ มาหาค่าเฉลี่ย
    3. แปลงค่า ให้เหมาะสมในการแสดงผล
    4. แสดงค่าความดังที่รับได้ 
    5. นำผลที่ได้ ไปสร้างกราฟ จำนวน 300 จุด เมื่อเต็มหน้าจอแล้ว จะรีเฟรช เพื่อเริ่มแสดงใหม่


เขียนโค้ด ใช้ทดสอบ

from machine import LCD, Pin, Map
from machine import ADC
import time
lcd = LCD()

#  รับค่าจากไมโครโฟน
mic = ADC(Pin(Map.WIO_MIC, Pin.IN))

def stext(txt, px1, py1, c1, b1):
    lcd.setTextColor(c1, b1)
    lcd.drawString(txt+"   ", px1, py1)

def draw_axis(x1, y1, x2, y2, cl):
    lcd.drawLine(x1, y1, x1, y2, cl)
    lcd.drawLine(x1, y2, x2, y2, cl)
    lcd.drawString("t", 300, 210)
    lcd.drawString("V", 10, 10)

# main ส่วนโปรแกรมหลัก    
lcd.fillScreen(lcd.color.BLACK)
lcd.setTextSize(2)

draw_axis(2, 2, 318, 238, lcd.color.CYAN)
value = 0
px = 4
py = 0   
while True:
    #  วนรอบอ่านค่า 10 ครั้ง
    for i in range(10):
        value = mic.read() + value
    value = int(value/10)  # เฉลี่ย 10 ครั้ง
    # แปลงค่าเพื่อแสดงผลบนจอ
    val = 280 - int(value*280/1200) 
    dump = int(value*100/1200)
    stext("Raw: " + str(val), 40, 30, lcd.color.RED,lcd.color.BLACK)
    stext("Percent: " + str(dump), 160, 30, lcd.color.CYAN,lcd.color.BLACK)
    px = px + 2
    #  พลอตกราฟ
    lcd.drawPixel(px, val, lcd.color.YELLOW)
    time.sleep(0.05)  # 50 milliseconds
    #  รีเฟลชหน้าจอ เมื่อเต็ม
    if px > 300:
        px = 4
        lcd.fillScreen(lcd.color.BLACK)
        draw_axis(2, 2, 318, 238, lcd.color.CYAN)

 
ข้อสังเกตุ !! ขั้นตอนการแปลงค่า ในตัวอย่างนี้ เป็นเพียงการแปลงข้อมูลให้เหมาะสมในการแสดงผลเท่านั้น หากต้องการค่าที่มีหน่วย เดซิเบล โปรดค้นคว้าเพิ่มเติม


 ผลที่ได้จากการทำงาน

   

รูปที่ 2 ผลจากการทำงานของคำสั่ง



โพสต์ยอดนิยมจากบล็อกนี้

14. Wio Terminal EP.01 , เริ่มตันกับ Wio Terminal ด้วย circuitPython

28. Wio Terminal GPS

24. Wio Terminal EP.11, อนาล็อกมิเตอร์ วัดความสว่างของแสง