เวลาที่เราออกไปสำรวจถ้ำเนี่ย เรามักจะไม่มีข้อมูลทางภูมิศาสตร์หรือภาพอ้างอิงมากนัก โดยเฉพาะเวลาที่ใช้ไฟฉายหรือไฟประดิษฐ์ ที่มักจะให้แสงสว่างไม่ค่อยเพียงพอ แถมเทคโนโลยีที่เราใช้กันประจำอย่าง GPS หรือระบบระบุตำแหน่งอื่นๆ ก็ใช้การไม่ได้ใต้ดินอีกต่างหาก การสำรวจถ้ำเลยเป็นกิจกรรมที่ท้าทายมากสำหรับมนุษย์ เพราะเราต้องเผชิญกับสภาพแวดล้อมที่ขาดข้อมูลอ้างอิงทางภูมิศาสตร์ และทัศนวิสัยที่จำกัด แหล่งกำเนิดแสงประดิษฐ์ก็มักจะสลัวและส่องไม่ครอบคลุมพื้นที่กว้าง อีกทั้งเทคโนโลยีในชีวิตประจำวันอย่าง GPS หรือระบบ Geolocation อื่นๆ ก็ทำงานไม่ได้ในสภาพแวดล้อมใต้ดินที่มืดสนิทและเต็มไปด้วยสิ่งกีดขวางทางกายภาพ
คอนเซปต์
โปรเจคนี้เกิดขึ้นเพื่อตอบโจทย์ความท้าทายจาก Arduino, K-Way และ Edge Impulse ที่ว่า "Arduino และ K-Way ร่วมกับ Edge Impulse กำลังร่วมมือกันคิดค้นไอเดียใหม่สำหรับเสื้อผ้าอัจฉริยะ" เป้าหมายหลักของมันคือการสนับสนุนนักสำรวจถ้ำด้วยข้อมูลเพื่อการตัดสินใจที่แม่นยำขึ้นและข้อมูลสำหรับทำแผนที่ถ้ำ รวมถึงการเก็บข้อมูลสภาพแวดล้อมที่ปกติจะเก็บแค่บางครั้งบางคราวในช่วงการสำรวจเฉพาะกิจเท่านั้น
เป้าหมายหลักคือการมอบข้อมูลเพิ่มเติมให้กับนักสำรวจถ้ำ เพื่อสร้างแผนที่ถ้ำที่แม่นยำขึ้น และเก็บข้อมูลสภาพแวดล้อมบางส่วนที่ปกติจะเก็บแค่เป็นครั้งคราวในช่วงการสำรวจบางครั้งเท่านั้น
ข้อมูลจะถูกแบ่งออกเป็นสองกลุ่มหลัก:
- ประเภทการเคลื่อนไหว ซึ่งอนุมานได้จากโมเดลแมชชีนเลิร์นนิงเพื่อระบุรูปแบบการเคลื่อนไหวภายในถ้ำ
- คุณภาพอากาศ หรืออย่างน้อยก็ค่าของ Co2 พร้อมระบบแจ้งเตือนหากระดับ Co2 สูงเกินไป วัดระดับ CO2 และให้สัญญาณเตือนเมื่อระดับแก๊สเกินมาตรฐานความปลอดภัย
เสื้อผ้าอัจฉริยะ
ขนาดของบอร์ด Nicla Sense ME และเคสพลาสติกที่ให้มานั้นกะทัดรัดมาก เหมาะจะเอาไปทำเป็นอุปกรณ์สวมใส่ (wearable) ตัวหลักของอุปกรณ์คือ Nicla Sense ME ซึ่งมีขนาดเล็กมาก (แค่ 22.86 x 22.86 มม.) และถูกบรรจุอยู่ในเคสพลาสติกที่เหมาะสำหรับงาน wearable ถ้าจะใช้ในถ้ำที่มีโคลนล่ะก็ ควรมีเกราะป้องกันเพิ่มเติมเพราะพอร์ต USB ไม่มีฝาปิด อย่างไรก็ตาม เนื่องจากการสำรวจถ้ำมักเจอทั้งโคลนและความชื้นสูง การป้องกันเพิ่มเติมรอบพอร์ต USB จึงเป็นสิ่งจำเป็นเพื่อป้องกันความเสียหายจากภายนอก
เพราะความท้าทายนี้เป็นความร่วมมือกับ K-Way มันจึงเป็นโอกาสดีที่จะพูดถึงความสำคัญของการมีเสื้อผ้าที่เหมาะสมสำหรับกิจกรรมกลางแจ้ง แจ็กเก็ตที่ส่งมากับ Nicla Sense ME เป็นรุ่นบางเบา มันเหมาะที่จะใช้ระหว่างทางไปยังปากถ้ำหรือหลังจากออกจากถ้ำแล้ว แต่ก็กะทัดรัดพอที่จะพกเข้าไปในถ้ำได้ โดยใส่ในกระเป๋าเล็กๆ เพื่อใช้ในช่วงที่เคลื่อนไหวช้าลงหรือหยุดพัก สำหรับเสื้อผ้าอัจฉริยะแล้ว แจ็กเก็ต K-Way รุ่นบางเบาที่ส่งมากับ Nicla Sense ME นั้นเหมาะมากสำหรับสวมใส่ระหว่างเดินทางไปยังปากถ้ำหรือหลังจากออกจากถ้ำเพื่อรักษาอุณหภูมิร่างกาย ยิ่งไปกว่านั้น เพราะมันบางและพับเก็บได้ นักสำรวจสามารถพกแจ็กเก็ตนี้ในกระเป๋าเล็กๆ เพื่อใช้ในช่วงพักระหว่างสำรวจ ซึ่งการไม่เคลื่อนไหวเป็นเวลานานในถ้ำที่มีความชื้นสูงอาจนำไปสู่ความเสี่ยงของการเป็น Hypothermia ได้ สำหรับถ้ำที่เย็นและชื้นกว่าหรือโปรเจคที่ต้องการเวลาในการวัดและหยุดนานขึ้น แจ็กเก็ตรุ่นที่อุ่นกว่าอาจจะเหมาะสมกว่า
การเทรนโมเดล
โมเดลนี้ถูกเทรนจากชุดข้อมูลหลักสองชุด
ชุดหนึ่งถูกสร้างขึ้นโดยใช้โทรศัพท์มือถือ และโฟกัสไปที่การเคลื่อนไหวที่พบได้เฉพาะในถ้ำเป็นพิเศษ เช่น การคลาน ชุดข้อมูลที่สร้างขึ้นเองนี้มุ่งเน้นไปที่การเคลื่อนไหวเฉพาะที่พบในถ้ำ ซึ่งแตกต่างจากการเดินปกติบนพื้นราบ
อีกชุดหนึ่ง ถูกนำมาจาก repository สาธารณะ (1) ชุดข้อมูลสาธารณะนี้ถูกใช้เพื่อเร่งกระบวนการพัฒนาต้นแบบโมเดลในเบื้องต้น
เหตุผลหลักที่ใช้ชุดข้อมูลสาธารณะที่มีอยู่แล้วคือเพื่อเร่งความเร็วให้กับเวอร์ชันเริ่มต้นของโมเดล
เนื่องจากวิธีที่เราเคลื่อนไหวในถ้ำนั้นช้ากว่าและแตกต่างจากการเคลื่อนไหวบนภูมิประเทศปกติ แนวคิดคือจะนำโมเดลไปเทรนใหม่ด้วยข้อมูลที่ได้จากการสำรวจถ้ำจริงๆ ในขั้นตอนต่อไป ในรอบแรกนี้ผมทำงานกับข้อมูลจาก Accelerometer เท่านั้น แต่ผมเชื่อว่ามันจะดีขึ้นมากถ้าใช้ Gyroscope ร่วมด้วย แนวทางในอนาคตเกี่ยวข้องกับการรวมข้อมูลจาก ไจโรสโคป มาประมวลผลร่วมกัน ซึ่งจะเพิ่มมิติของการหมุนและเอียง ช่วยให้แยกแยะการเคลื่อนไหวในแนวดิ่งและการคลานผ่านทางแคบๆ ได้แม่นยำขึ้น
ข้อมูลที่ใช้ฝึกโมเดลนี่ต้องทำความสะอาดให้ดีกว่านี้แน่นอน โดยเฉพาะข้อมูลระหว่างการเดินขึ้น/ลงเนิน กับเดินปกติ เพราะฟีเจอร์พวกนี้มันมารวมกันเป็นก้อนใหญ่เลย งานนี้เวอร์ชั่นแรกเราใช้ข้อมูลจาก Accelerometer เป็นหลัก แม้ว่าผลทดสอบแรกบน Edge Impulse จะได้ Accuracy 78.5% ตอนเทรน และ 65.8% ตอนทดสอบ แต่เราก็ยังพบว่าฟีเจอร์ของข้อมูลการเดินขึ้น/ลงเนิน กับเดินปกติ มันยังทับซ้อนกันอยู่เยอะเลย
Ambient sense - ตรวจจับสภาพแวดล้อม
ด้วยเซ็นเซอร์ Bosch BME688 ที่ติดตั้งมาใน Nicla Sense ME มันสามารถให้ค่าต่างๆ ของสภาพแวดล้อมได้มากกว่าแค่ค่าอุณหภูมิ, ความชื้นสัมพัทธ์ และความดันอากาศแบบทั่วไป เซ็นเซอร์ Bosch BME688 นี่เป็นเซ็นเซอร์แก๊สอัจฉริยะที่ใช้ AI ในการวิเคราะห์ความเข้มข้นของแก๊สต่างๆ มันไม่ใช่แค่วัดอุณหภูมิ, ความชื้น และความดัน แต่ยังสามารถคำนวณดัชนีคุณภาพอากาศภายในอาคาร (IAQ), bVOC (สารประกอบอินทรีย์ระเหยง่ายในลมหายใจ) และค่าที่เทียบเท่ากับ CO2 ได้อีกด้วย
มันสามารถส่งออกค่าเป็นดัชนีสำหรับคุณภาพอากาศ (IAQ), bVOC และค่าที่เทียบเท่ากับ CO2 ได้ ในขั้นตอนนี้ CO2 คือค่าที่เราสนใจที่สุด ด้วยเหตุผลหลักๆ 2 ข้อ:
- ความปลอดภัย - แสดงระดับผ่านไฟ LED และสร้างสัญญาณเตือน (หากเชื่อมต่อกับอุปกรณ์ผ่านบลูทูธ) หากค่าถูกพิจารณาว่าอันตราย แจ้งเตือนผ่านไฟ LED บนบอร์ด และส่งสัญญาณเตือนไปยังอุปกรณ์ที่เชื่อมต่อบลูทูธหากระดับแก๊สเป็นอันตรายต่อระบบทางเดินหายใจ
- เพื่อการศึกษาเพิ่มเติม - บันทึกค่าต่างๆ เพื่อใช้ในการศึกษาระบบนิเวศของถ้ำต่อไป บันทึกข้อมูลเพื่อศึกษาการเปลี่ยนแปลงของระบบนิเวศในถ้ำเมื่อเวลาผ่านไป
ตัวบ่งชี้ระดับ CO2
ค่าที่เทียบเท่ากับ CO2 สามารถส่งผ่าน BLE ไปยังแอปพลิเคชันได้โดยตรง (หากมีการใช้งาน)
นอกจากนั้นแล้ว ไฟ LED ยังกระพริบด้วยสีที่สอดคล้องกับแต่ละช่วงของค่า เพื่อให้สังเกตง่าย ระบบกำหนดช่วงสีของไฟ LED ตามระดับความเข้มข้นของแก๊ส CO2 ดังนี้:
ต่ำกว่า 5,000 ppm: สีเขียว (ปกติ)
ระหว่าง 5,000 ppm ถึง 10,000 ppm: สีเหลือง (ต้องเฝ้าระวัง)
ระหว่าง 10,000 ppm ถึง 15,000 ppm: สีฟ้า
ระหว่าง 15,000 ppm ถึง 25,000 ppm: สีน้ำเงิน (อันตราย)
สูงกว่า 25,000 ppm: สีแดง (อันตรายร้ายแรง, ต้องอพยพทันที)
การจัดการแบตเตอรี่
การสำรวจถ้ำอาจใช้เวลาตั้งแต่ไม่กี่ชั่วโมงไปจนถึงทั้งวัน ในกิจกรรมแบบนี้ การใช้งานได้อย่างต่อเนื่องเป็นสิ่งสำคัญมาก เราจึงออกแบบกลยุทธ์ประหยัดพลังงานดังนี้:
เพื่อประหยัดแบตเตอรี่ เราสามารถปิดการส่งข้อมูลผ่าน BLE ของเซ็นเซอร์บางตัวที่ไม่จำเป็นต้องส่งไปยังแอปพลิเคชัน เช่น Accelerometer และ Gyroscope เทคนิค Selective BLE Transmission นี้จะปิดการส่งข้อมูลดิบจาก Accelerometer และ Gyroscope ผ่านบลูทูธ เนื่องจากเซ็นเซอร์เหล่านี้ถูกประมวลผลภายในบอร์ด (Local Inference) อยู่แล้ว จึงไม่จำเป็นต้องส่งข้อมูลปริมาณมากตลอดเวลา เซ็นเซอร์เหล่านี้ยังจำเป็นสำหรับการทำ Inference ในตัวบอร์ด แม้ว่าโมเดลปัจจุบันจะใช้แค่ข้อมูลจาก Accelerometer ก็ตาม
ในเวลาเดียวกัน เนื่องจากท่าทางการเคลื่อนไหวในการสำรวจถ้ำค่อนข้างช้า จึงไม่จำเป็นต้องทำ Inference ทุกสองสามวินาที การเพิ่มช่วงเวลา Sleep/Delay ให้ยาวขึ้นเหมาะสมกว่าและช่วยประหยัดแบตเตอรี่ได้ ห้าหรือสิบวินาทีดูเหมือนจะเป็นค่าที่เหมาะสม ซึ่งต้องทดสอบในทางปฏิบัติแน่นอน เทคนิค Adaptive Inference Timing นี้ปรับให้ระบบทำ Inference ทุก 5 หรือ 10 วินาที แทนที่จะทำแบบเรียลไทม์ ซึ่งช่วยลดภาระการทำงานของโปรเซสเซอร์ได้อย่างมาก
โหมดขนส่ง (Transport mode)
เจ้า Nicla Sense เนี่ยมันไม่มีปุ่มเปิดปิดไฟให้กดนะน้อง และการจะแกะเคสเล็กๆ อันนี้เพื่อถอดแบตเตอรี่ออกทุกทีก็ไม่ใช่เรื่องที่ทำได้ง่ายๆ เลย
เราจึงมีวิธีคือให้มันหลับลึก (deep sleep) ไปเลยจนกว่าจะถึงเวลาต้องใช้งาน เช่น ตอนจะเข้าไปในถ้ำหรือถึงปากถ้ำแล้ว เนื่องจากบอร์ดไม่มีปุ่มเปิดปิดและเคสก็เล็ก การถอดแบตบ่อยๆ ยาก เราก็เลยใช้ฟีเจอร์ ShipMode ของวงจรจัดการไฟ (PMIC) ที่อยู่บนบอร์ดนี่แหละ
เวอร์ชันปัจจุบันนี้ เราแค่ส่งคำสั่ง "shutdown" ผ่านพอร์ตอนุกรม (serial port) ไปให้มัน จากนั้นถ้าถอดแหล่งจ่ายไฟภายนอกออกภายใน 30 วินาทีหลังจากสั่ง มันก็จะเข้าสู่โหมด ShipMode ทันที ส่วนการปลุกมันก็ง่ายมาก แค่เสียบไฟเข้าไปใหม่ เช่น ใช้ Powerbank หรือแหล่งจ่าย USB ก็ตื่นแล้ว! สรุปคือ ส่งคำสั่ง "shutdown" ผ่าน Serial Port แล้วถอดไฟภายนอกภายใน 30 วิ มันก็จะหลับลึก และจะตื่นอีกทีเมื่อเสียบไฟจาก Powerbank หรือ USB เข้าไป
ตอนนี้ยังไม่รองรับการสั่งผ่าน BLE นะจ๊ะ ต้องรออัพเดทกันต่อไป
เซ็นเซอร์วัดแก๊ส (CO2, iAQ และ bVOC) จะเริ่มส่งค่าที่อัพเดทและแม่นยำได้ก็ต่อเมื่อบอร์ดบูตมาแล้วประมาณ 5~10 นาที *หมายเหตุ:* เซ็นเซอร์แก๊ส (BME688) ต้องการเวลา warm-up ประมาณ 5-10 นาทีหลังบูตเพื่อให้ค่าที่อ่านได้แม่นยำ
ปัญหาหรือข้อจำกัดในปัจจุบัน
ณ ตอนนี้ รุ่นพี่ยังทำแอปพลิเคชัน (ทั้งมือถือและเว็บ) สำหรับอ่านผลการทำ Inference ผ่านบลูทูธออกมาใช้งานได้ไม่สมบูรณ์เลย นอกจากนี้ระบบอ่านผลผ่านแอปบลูทูธก็ยังอยู่ระหว่างการพัฒนาเพื่อให้เสถียรที่สุดก่อนเอาไปใช้ในสนามจริง
ตอนอ่านผล Inference ผ่าน Serial Monitor เนี่ย มันพบว่าสถานะ "นิ่ง (Idle)" หลายครั้งถูกตรวจจับผิดเป็น "คลาน (Crawling)" และในทางกลับกันก็มี ทั้งๆ ที่ฟีเจอร์สองอย่างนี้มันค่อนข้างห่างกันและกราฟความแม่นยำตอนเทรนกับตอนทดสอบก็ออกมาดีมาก สาเหตุยังต้องตามหาต่อไป แต่คาดว่าน่าจะมาจากคุณภาพของข้อมูลฝึก หรือตัวเลือกต่างๆ ในโมเดลที่เราเลือก (ซึ่งตอนนั้นใช้ค่า default ของ Edge Impulse นั่นแหละ) จากผลทดสอบเบื้องต้นพบความไม่แม่นยำในการแยกสถานะ "Idle" กับ "Crawling" บางครั้งระบบก็สลับกันตรวจจับ แม้กราฟความแม่นยำจะดูดีก็ตาม ปัญหานี้น่าจะมาจากคุณภาพของข้อมูลฝึกหรือการตั้งค่าพารามิเตอร์เริ่มต้นใน Edge Impulse ที่อาจยังไม่เหมาะกับสภาพแวดล้อมจริง
หมายเหตุท้ายเรื่อง:
(1) เครดิตชุดข้อมูล MotionSense:
@inproceedings{Malekzadeh:2019:MSD:3302505.3310068,
author = {Malekzadeh, Mohammad and Clegg, Richard G. and Cavallaro, Andrea and Haddadi, Hamed},
title = {Mobile Sensor Data Anonymization},
booktitle = {Proceedings of the International Conference on Internet of Things Design and Implementation},
series = {IoTDI '19},
year = {2019},
isbn = {978-1-4503-6283-2}