[ PROJECT:BIT ตอนที่ 2] เชื่อมต่อโมดูลวัดฝุ่นละออง PMS7003

ก่อนเข้าสู่การใช้งานโมดูลวัดฝุ่นละออง กลับไปอ่านตอนที่ 1 เรื่อง การแสดงผล 7 Segment 4 หลัก TM1637 ก่อนนะครับเพื่อความเข้าใจที่ชัดเจนขึ้น

 

    โมดูล PMS7003 ใช้การเชื่อมต่อกับไมโครคอนโทรลเลอร์ผ่านการสื่อสารอนุกรม ประกอบด้วยขา TxD สำหรับส่งข้อมูล และขา RxD สำหรับรับข้อมูล ในโหมด Active ที่จะยกตัวอย่าง เลือกใช้งานเพียงรับข้อมูลเท่านั้น อาจเลือกต่อขา RxD เพียงขาเดียวไม่ต้องต่อขา TxD ก็ได้ สำหรับไฟเลี้ยงที่จ่ายให้บอร์ด PMS7003 จะต้องใช้ไฟเลี้ยง 5V เนื่องจากพัดลมที่ใช้งานใช้ไฟเลี้ยง 5V สำหรับขารับส่งข้อมูลนั้นระดับสัญญาณอยู่ที่ 3.3V เมื่อเชื่อมต่อกับ PROJECT:BIT จะต้องใช้ตำแหน่งขาของเซอร์โวมอเตอร์มาเชื่อมต่อแทน เนื่องจากแรงดันไฟที่ตำแหน่งนี้คือ 5V และทำให้จำเป็นต้องต่อไฟเลี้ยงจากอแดปเตอร์ภายนอก การเชื่อมต่อสายแสดงดังรูป

 

เปิด ITEM ที่ซ่อนไว้ของชุดคำสั่งโหมด Serial

คำสั่ง serial on data received จะถูกกระตุ้นเมื่อพบตัวอักษรที่กำหนด (จำกัดไว้ไม่กี่ตัวเท่านั้น)

เนื่องจากการเชื่อมต่อกับโมดูลวัดฝุ่นละอองต้องใช้การสื่อสารอนุกรม ดังนั้นจึงต้องใช้ชุดคำสั่งในโหมด Serial ซึ่งเหตุการณ์ที่ใช้กระตุ้นเพื่อรับข้อมูล คือ serial on data received ในบล็อกคำสั่งมีตัวเลือกเฉพาะการรอรับอักขระพิเศษเพียงไม่กี่ตัวเท่านั้น ทำให้ไม่สามารถตรวจสอบข้อมูลที่เป็นค่าอื่นๆ ส่งมาได้

แล้วถ้าต้องกันตัวอักษรอื่นๆ ทำอย่างไร

ต้องขอบคุณ หนังสือรวมโครงงาน micro:bit จับไอเดียแจ๋ว ใส่บอร์ดจิ๋ว ของ ณรงค์พร เหล่าศรีสิน ที่ไขข้อกระจ่างเรื่องนี้

 

    โดยคำสั่ง serial on data received ถ้าเปิดในโหมด Java Script จะสามารถปรับแต่งค่าข้อมูลที่ต้องการตรวจสอบ เพื่อให้เกิดเหตุการณ์ได้ สำหรับโมดูลวัดฝุ่นละอองจะมีอักขระ BM ส่งมาก่อนข้อมูลอื่นๆ เสมอดังนั้นข้อมูลที่ต้องการตรวจจับคือ BM มีขั้นตอนในการเรียกใช้งานดังนี้

1. ส่วนหัวของ MakeCode ให้เลือกเปลี่ยนเป็นโหมด JavaScript

2. เลือกชุดคำสั่ง Serial

3. ลากชุดคำสั่ง onDataReceived วางที่ส่วนการเขียนโค้ด

4. จะพบชุดรูปแบบคำสั่งของ onDataReceived ปรากฎขึ้น ส่วน serial.delimiters(Delimiters.NewLine)

คือส่วนที่เราจะปรับเปลี่ยน

5. แก้ในส่วนนี้ให้กลายเป็น “BM”

6. เมื่อกลับมาที่ Blocks ตัวกรองในการรอรับค่าจะกลายเป็น “BM”

การกำหนดค่าเพื่อสื่อสารอนุกรม

1. กำหนดตำแหน่งขาพอร์ตที่ใช้เชื่อมต่อ ขา Rx (P13) ต้องเชื่อมต่อกับขา TxD ส่วนขา Tx (P14) ต้องเชื่อมต่อกับขา RxD ของโมดูลวัดฝุ่นละออง

2. เนื่องจาก การรับค่าข้อมูลมีจำนวนมาก จึงควรจองพื้นที่บัฟเฟอร์เพื่อรองรับข้อมูลไว้ด้วยในที่นี้จองไว้ 32 ไบต์ (คำสั่งอยู่ใน more)

3. สำหรับการอ่านข้อมูลนั้น จะใช้คำสั่ง serial read buffer (คำสั่งอยู่ใน more) เพื่ออ่านข้อมูลทั้ง 32 บิตมาเก็บไว้ในตัวแปร PM (กลายเป็นตัวแปรแบบอาเรย์)

การตรวจสอบความถูกต้องของข้อมูล

 

    เมื่อได้ข้อมูลมาแล้ว จะต้องตรวจสอบข้อมูลก่อนว่ามีความถูกต้องหรือไม่ โดยข้อมูลในไบต์ 30 และ 31 เป็นข้อมูล 16 บิตของผลรวมของข้อมูลไบต์ 0 ถึง 29 เอาไว้ ดังนั้นเพื่อตรวจสอบ จึงต้องเขียนโค้ดเพื่อนำข้อมูลตั้งแต่ไบต์ 0 ถึงไบต์ 29 มารวมกัน โดยวิธีการวนลูปบวกค่าข้อมูลทีละไบต์ไปเรื่อยๆ เก็บผลลัพธ์ไว้ในตัวแปร SUM สำหรับการดึงข้อมูลทีละไบต์ เนื่องจากตัวแปร PM เป็นตัวแปรอาเรย์ สามารถใช้คำสั่ง get value at เพื่อดึงข้อมูลออกมาทีละไบต์ผ่านตัวชี้ (index) ของคำสั่ง for ได้

เห็นหลักการกันเยอะแล้ว ลงมือกันเลย…

การอ่านค่าฝุ่นละออง ที่ 2.5 ug/m3 แสดงผลที่ 7 Segment

 

    เมื่อนำค่าที่ได้เปรียบเทียบกับค่าผลรวมในตัวแปร temp ถ้าตรงกันแสดงว่าค่าข้อมูลทั้งหมดถูกต้อง ให้นำค่าผลลัพธ์ ซึ่งอยู่ในไบต์ 13 (บน) กับไบต์ 14 (ล่าง) มาแสดงที่หน้าจอ 7 segment 4 หลัก ผ่านตัวแปรชื่อ tm ถ้าค่าผลลัพธ์จากการเปรียบเทียบไม่เท่ากัน ให้แสดงเครื่องหมาย X ออกที่หน้าจอ LED 5×5

การอ่านค่าฝุ่นละออง 3 โหมด 1.0 /2.5/10 ug/m3 แสดงผลที่ 7 Segment

คุณสมบัติของโมดูลวัดค่าผุ่นละออง สามารถแสดงค่าได้ที่ความหนาแน่นของฝุ่นได้ถึง 3 ระดับคือ PM1.0 ,PM2.5 และ PM10 ดังนั้นเพื่อให้ เครื่องวัดของเราแสดงได้ทั้ง 3 โหมด ให้เขียนโค้ดเพิ่มเติมจากตัวอย่างก่อนหน้านี้เล็กน้อย

    1. สร้างตัวแปร ADDR เพื่อเก็บค่าตำแหน่งไบต์ข้อมูลเริ่มต้น

    2. ใช้ปุ่มกด A B และ A+B เพื่อเป็นตัวเลือก ระดับความหนาแน่นของฝุ่นละออง

    3. ให้หน้าจอ LED 5×5 แสดงตัวเลขเพื่อระบุว่าอยู่ในโหมดอ่านค่ารูปแบบใด โดยให้

        1 แทน PM1.0 เมื่อกดปุ่ม A

        2 แทน PM2.5 เมื่อกดปุ่ม B

        3 แทน PM10 เมื่อกดปุ่ม A+B

    4. ขณะเริ่มต้นทำงาน ให้แสดงผลในโหมด PM2.5

https://makecode.microbit.org/_EfpLX8AbXeUC

การทำงานของโปรแกรม    

    ส่วนที่เพิ่มเติมหลักๆ สำหรับโปรแกรมนี้คือ การใช้ตัวแปร ADDR เป็นตำกำหนดตำแหน่งสำหรับการนำค่ามาแสดง แต่เนื่องจากตำแหน่งของข้อมูลมีทั้งไบต์บน และ ล่าง สำหรับไบต์ล่างนั้น จะใช้วิธีบวกค่าขึ้น 1 ค่าแทน เช่น ADDR มีค่า 12 ไบต์ล่างที่นำมาบวกคือไบต์ 13 (ADDR +1)

ผลการทำงาน

    เมื่อจ่ายไฟเข้าที่ตัวบอร์ดครั้งแรก LED 5×5 จะแสดงเลข 2 ซึ่งหมายถึงโหมดการวัดเป็นค่าความหนาแน่น PM2.5 แต่เมื่อกดปุ่ม A ค่าตัวเลขแสดงที่หน้าจอจะเปลี่ยน และที่ LED 5×5 ก็จะเปลี่ยนเป็นเลข 1 เพื่อระบุว่าเป็นโหมดการวัด PM1.0 ท้ายสุดทดสอบกดปุ่ม A และ B พร้อมกัน LED 5×5 จะแสดงเลข 3 ค่าที่วัดจะอยู่ในโหมด PM10

Facebook Comments