อ่านค่าเซนเซอร์ต่างๆ บนบอร์ด 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 ติดเต็มเสียก่อน