Nanobit with microPython ตอนที่ 6

อ่านค่าเซนเซอร์ต่างๆ บนบอร์ด Nanobit

อ่านค่าแสงจาก Nanobit LED 5×5

Nanobit สามารถอ่านค่าแสงได้จาก LED 5×5 โดยให้ LED ซึ่งเป็นอุปกรณ์เซมิคอนดัคเตอร์ทำหน้าที่เป็นตัวรับแสง โดยจะเป็น LED 9 จุด ในตำแหน่งดังรูป


คำสั่งที่ใช้อ่านค่าแสง

คำสั่ง read_light_level() เป็นฟังก์ชั่นอยู่ในคลาส display โดยจะคืนค่าความสว่างของแสงในช่วง 0-255

ตัวอย่างที่ 23 อ่านค่าแสงแสดงผลหน้าต่าง REPL

 
 
from microbit import *
while True: 
    print(display.read_light_level(),end=' ')
    sleep(200)

 

การทำงาน

ตัวอย่างนี้จะอ่านค่าแสงจาก LED 5×5 แล้วนำค่าแสดงที่หน้าต่าง REPL จะต้องคลิก Open Serial เพื่อเปิดหน้าต่าง REPL ดูค่าที่เกิดขึ้น สังเกตว่าค่าที่แสดงจะแสดงต่อเนื่องในบรรทัดเดียวกัน เนื่องจากใช้พารามิเตอร์ end= ‘ ‘
ต่อท้ายคำสั่ง print นั่นเอง

ตัวอย่างที่ 24 สั่งเปิด/ปิดไฟด้วยแสง

เอาการอ่านค่าแสงมาใช้ประโยชน์ ส่องแสงไป 1 ครั้งให้ไฟติด และติดค้างไว้ ส่องแสงไปอีกครั้งให้ไฟดับ และดับค้างไว้

 
 
from microbit import *
x=False
while True:
    if display.read_light_level() >100:
        while display.read_light_level()>100: pass
        if x:
            pin15.write_digital(0)
            x=False
        else:
            pin15.write_digital(1)
            x=True
การทำงาน

ตัวอย่างนี้กำหนดตัวแปร x ขึ้นมาแบบ boolean และกำหนดให้เป็นเท็จ จากนั้นเมื่อแสงตกกระทบมากกว่า 100 จะวนรอจนกว่าแสงตกกระทบกลับมาน้อยกว่า 100 อีกครั้ง แล้วตรวจสอบค่า x ถ้าเป็นจริงให้ LED ที่ขา P15 ดับ ปรับค่า x ใหม่ให้เป็นเท็จ ถ้าค่า x เดิมเป็นเท็จ ให้ LED ที่ขา P15 ติดและปรับค่า x ใหม่ให้เป็นจริง

อ่านค่าอุณหภูมิ จากตัว CPU ของ Nanobit

ค่าอุณหภูมิเป็นการนำค่าที่อ่านได้จากเซนเซอร์วัดอุณหภูมิในตัว CPU เนื่องจาก CPU ของ Nanobit ทำงานที่ความถี่ค่อนข้างต่ำคือ 16MHz จึงไม่เกิดความร้อนที่ตัวมันเลย สามารถนำค่าอุณหภูมินี้ เป็นอุณหภูมิจริงของสภาวะแวดล้อมภายนอกได้

คำสั่งแสดงค่าอุณหภูมิ

คำสั่ง temperature()
จะคืนค่าอุณหภูมิ หน่วยเป็นองศาเซนเซียสออกมา

ตัวอย่างที่ 25 แสดงค่าอุณหภูมิที่ LED 5×5

 
 
from microbit import *
while True: 
    display.scroll(temperature())
    sleep(200)
การทำงาน

หน้าจอ LED 5×5 จะแสดงอุณหภูมิ หน่วยเป็นเซนเซียสแบบเลื่อน ไปเรื่อยๆ ให้ทดสอบเอามือแตะที่ไมโครคอนโทรลเลอร์ ดูว่าอุณหภูมิมีการเปลี่ยนแปลงหรือไม่

โมดูล music สำหรับสร้างเสียง

โมดูลสำหรับสร้างเสียง ทั้งการกำหนดความถี่และสร้างเสียงจากตัวโน๊ต รวมถึงเมโลดี้สำเร็จรูปต่างๆ

เริ่มต้นใช้งานจะต้องเพิ่มโมดูลเข้ากับโปรแกรมก่อน โดย

import music

คำสั่ง music.pitch(freq,duration,pin,wait)

เป็นคำสั่งสำหรับสร้างความถี่เสียงออกลำโพงตามระยะเวลาที่กำหนด โดย

   freq เป็นค่าความถี่เสียงหน่วยเป็น Hz

   duration เป็นระยะเวลาที่เสียงดังหน่วยเป็นมิลลิวินาที ถ้าไม่กำหนดเสียงจะดังต่อเนื่องไปเรื่อยๆ

   pin เป็นตำแหน่งขาถ้าไม่กำหนดจะเป็นขา P0

   wait ถ้าเป็น True เป็นการรอให้เล่นเสียงจบค่อยทำคำสั่งต่อไป ถ้าไม่กำหนดจะให้ค่าเป็น True อยู่แล้ว

ตัวอย่าง

music.pitch(2000,200)

#สร้างเสียงออกลำโพงด้วยความถี่ 2000Hz ดัง 0.2 วินาที

คำสั่ง music.play(music,pin,wait,loop)

music เป็นโน๊ตดนตรีที่เก็บในรูปข้อความ เช่น ‘C4:4’ โดย C4 คือตัวโน๊ต C ใน octave ที่ 4 เลข 4 ที่ตามมาเป็นระยะเวลาการสร้างตัวโน๊ตตามจังหวะที่กำหนด

ตัวอย่าง

music.play(‘C4:4’)

ค่า music สามารถกำหนดเป็นตัวแปร List ได้

ตัวอย่าง
 
 
notes= ['c4:1', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4','e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5']
music.play(notes)

ภายในโมดูล music ก็ได้เตรียมโน๊ตเมโลดี้สำเร็จรูปเอาไว้ในใช้งานอีกหลายตัว เรียกดูผ่านหน้าต่าง REPL ได้ตามนี้

ตัวอย่าง

music.play(music.RINGTONE)

   pin เป็นตำแหน่งขาถ้าไม่กำหนดจะเป็นขา P0

   wait ถ้าเป็น True เป็นการรอให้เล่นเสียงจบค่อยทำคำสั่งต่อไป ถ้าไม่กำหนดจะให้ค่าเป็น True อยู่แล้ว

   loop ถ้าเป็น True จะให้เล่นโน๊ตซ้ำต่อเนื่องไปเรื่อยๆ

ส่วนที่เหลือหาข้อมูลเพิ่มเติมได้จาก https://microbit-micropython.readthedocs.io/en/v1.0.1/music.html

 

ตัวอย่างที่ 26 สร้างเสียงถ้าอุณหภูมิเกินค่าที่ตั้งไว้

บนบอร์ด AX-Nanobit มีลำโพงเปียโซขนาดเล็กติดตั้งอยู่ แล้วเชื่อมต่อกับขา P0 สามารถเขียนโค้ดสร้างเสียงได้จากชุดคำสั่งในโมดูล music

 
 
from microbit import *
import music
while True: 
    if temperature()>32:
        music.pitch(2000,200)
การทำงาน

ในตัวอย่างจะวนลูปต่อเนื่องตรวจสอบค่าอุณหภูมิเกินกว่า 32 องศาจะสร้างเสียงออกลำโพง

โมดูลวัดความเร่ง Accelerometer

โมดูลวัดความเร่งนอกจากจะใช้เพื่อวัดความเร่งในแนว X Y Z แล้วยังตรวจสอบการเขย่าและการเอียงด้วย ประกอบด้วย

การเอียง

up,down,left,right,face up ,face down

การตรวจจับความเร่งเทียบกับแรงดึงดูดของโลก

shake,freefall,3g,6g,8g

สำหรับการตรวจจับความเร่งในแนวแกน เรียกใช้งานผ่านคำสั่ง

accelerometer.get_x()

accelerometer.get_y()

accelerometer.get_z()

เป็นการอ่านค่าความเร่งในแนวแกนที่กำหนดมีค่าระหว่าง -1023 ถึง 1023 เป็นค่าความเร่งหน่วยเป็น milli-g

กรณีต้องการอ่านค่าทั้ง 3 แกนออกมาพร้อมกันจะมีคำสั่ง

accelerometer.get_values()

นอกจากนี้ยังมีคำสั่งที่คืนค่าสถานะการเอียงหรือการเขย่าในขณะนั้นออกมาด้วยคือ

accelerometer.current_gesture()

โดยค่าที่จะคืนเป็นข้อความสตริงประกอบด้วย “up”, “down”, “left”, “right”, “face up”, “face down”, “freefall”, “3g”, “6g”, “8g”, “shake”

ซึ่งนอกจากอ่านค่าแล้วยังตรวจสอบว่าใช่ gesture ที่ต้องการหรือไม่โดยใช้

accelerometer.is_gesture(name)

โดย name คือชื่อของ gesture ที่ต้องการตรวจสอบ ถ้าตรวจพบ gesture ที่ตรวจสอบจะคืนค่าเป็น True

accelerometer.was_gesture(name)

ถ้าตรวจพบ gesture ที่ตรวจสอบหลังจากคำสั่งเรียกใช้ครั้งหลังสุด จะคืนค่าเป็นจริง was จะมองค่าย้อนกลับไปไกลว่า is นั่นเอง

ส่วนคำสั่ง

accelerometer.get_gesture()

จะคืนค่า gesture ที่เกิดขึ้นทั้งหมด หลังจากนั้นจะเคลียร์ค่าทั้งหมดทิ้งด้วย การเรียกใช้คำสั่งครั้งต่อไปก็จะเป็นค่าทั้งหมดที่เกิดขึ้นหลังจากเคลียร์แล้ว ชนิดข้อมูลเป็นแบบ tuple (เหมือนกับ list แต่เปลี่ยนแปลงค่าไม่ได้)

ตัวอย่างที่ 27 แสดงการเอียงในแนวแกน X

เมื่อทำการเอียงบอร์ด AX-Nanobit ให้แสดงทิศทางการเอียงซ้าย (L) และขวา (R) ออกมาที่ LED 5×5 ถ้าอยู่ตรงกลางแสดง (-)

 
 
from microbit import *
while True: 
    reading = accelerometer.get_x() 
    if reading > 200: 
        display.show("R") 
    elif reading < -200: 
        display.show("L") 
    else: 
        display.show("-")
การทำงาน

อ่านค่าความเร่งในแนวแกน x เก็บค่าในตัวแปร reading ถ้าค่ามากกว่า 200 แสดงว่าเป็นทิศทางด้านขวา แสดง R ถ้าค่าน้อยกว่า -200 ให้แสดง L ส่วนค่าตรงกลางระหว่าง 2 ค่านี้ให้แสดง –

ตัวอย่างที่ 28 เขย่าเพื่อสุ่มค่าตัวเลข

gesture ‘shake’ จะถูกกระตุ้นเมื่อมีการเขย่าตัวบอร์ด เมื่อตรวจพบก็ให้สุ่มค่าตัวเลข 0-9 แสดงที่ LED 5×5

 
 
from microbit import *
import random
while True:
    if accelerometer.was_gesture('shake'):
        display.show(random.randint(0,9))

 

 

มดูลเข็มทิศอิเล็กทรอนิกส์ : Compass

บอร์ด Nanobit ติดตั้งเซนเซอร์วัดสนามแม่เหล็กซึ่งเมื่อนำมาวัดสนามแม่เหล็กโลก ก็ใช้ทำหน้าที่เป็นเข็มทิศได้ โดยมีคำสั่งสำหรับอ่านค่าทิศทางและสนามแม่เหล็กดังนี้

compass.calibrate()

สำหรับปรับแต่งโมดูลเข็มทิศให้ทำงานแม่นยำขึ้น โดยจะมีข้อความแจ้งให้ผู้ใช้เอียงบอร์ดจนกว่า LED 5×5 จะติดจนเต็มทั้งหน้าจอ โดยทุกครั้งที่โหลดโค้ดที่มีคำสั่งเกี่ยวกับเข็มทิศ โปรแกรมจะเรียกใช้การปรับแต่งเสมอ

compass.heading()

สำหรับอ่านค่ามุม 0-359 องศารอบตัว ตำแหน่ง 0 คือทิศเหนือ

compass.get_field_strength()

สำหรับอ่านค่าความเข้มสนามแม่เหล็กรอบตัวบอร์ด

ตัวอย่างที่ 29 แสดงทิศทางผ่านหน้าต่าง REPL

 
 
from microbit import *
while True:
    angle = compass.heading()
    print (angle,end=',')
    sleep(100)

 


การทำงาน

ค่าที่อ่านได้จากเข็มทิศจะเก็บในตัวแปร angle จากนั้นนำไปแสดงที่หน้าต่าง REPL โดยเพื่อให้แสดงข้อมูลได้ทีละมากๆ ก่อนขึ้นบรรทัดใหม่ คำสั่ง print จึงต่อท้ายด้วยพารามิเตอร์ end=’,’ เพื่อให้ใส่เครื่องหมาย , ต่อท้ายข้อมูล

หมายเหตุ ก่อนการใช้งานครั้งแรกจะต้องพลิกเอียงบอร์ดจน LED ติดเต็มเสียก่อน

Facebook Comments Box

Press Ctrl+C to copy the following code.
"