อ่านเซนเซอร์ถี่แค่ไหนถึงจะพอดีกับงาน

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

ถ้าเอาความถี่สูงสุดไปใช้กับทุกชั้นพร้อมกัน ทั้งอ่าน ทั้งเขียนลงหน่วยความจำ และทั้งส่งขึ้นเครือข่าย อุปกรณ์อาจทำงานหนักเกินความจำเป็นของคำถามที่ระบบอยากตอบ และฝั่งรับก็ได้ข้อมูลซ้ำที่ความหมายไม่ต่างจากค่าก่อนหน้ามากนัก กราฟดูหนาขึ้น แต่การตัดสินใจอาจไม่ได้ดีขึ้นตามจำนวนจุด
สิ่งที่ควรถามก่อนล็อกตัวเลขช่วงเวลา จึงเป็นว่าต้องเห็นการเปลี่ยนแปลงภายในเวลานานแค่ไหน และค่าที่ซ้ำกันโดยแทบไม่ขยับ จำเป็นต้องเก็บทุกครั้งหรือไม่ ถ้าคำตอบคือต้องการเห็นแนวโน้มชั่วโมงต่อชั่วโมง การเก็บถี่ระดับวินาทีตลอดทั้งวันอาจไม่ใช่คำตอบของคำถามนั้น
ลองแยกตัวอย่างสั้นๆ ในหัว เช่น อุณหภูมิห้องที่เปลี่ยนช้า กับค่าที่ต้องใช้ตัดระบบเมื่อเกินเกณฑ์ทันที สองงานนี้อาจใช้เซนเซอร์คนละชนิดหรือชนิดเดียวกันก็ได้ แต่รอบที่เหมาะกับแต่ละงานไม่จำเป็นต้องเท่ากัน การเริ่มจากลักษณะการเปลี่ยนของสิ่งที่วัด จึงตรงกว่าการเริ่มจากตัวเลขสูงสุดในเอกสารเซนเซอร์
แยกช่วงอ่าน ช่วงประมวลผล และช่วงส่ง
ช่วงอ่านคือการได้ค่าจากเซนเซอร์ตามที่ฮาร์ดแวร์และไลบรารีทำได้ ช่วงประมวลผลอาจเป็นการกรอง คำนวณค่าเฉลี่ยในช่วงสั้นๆ หรือตัดค่าที่ผิดปกติ ส่วนช่วงส่งหรือบันทึกคือการเอาผลนั้นไปให้ระบบอื่นหรือเก็บลงที่เก็บข้อมูล
สามช่วงนี้อาจคนละจังหวะได้ เช่น อ่านบ่อยเพื่อจับการเปลี่ยนเร็ว แต่ส่งขึ้นไปเมื่อค่าขยับเกินเกณฑ์ หรือส่งเป็นรอบที่ฝั่ง dashboard ต้องการจริงๆ การออกแบบแบบนี้ช่วยให้ไม่ต้องยึดตัวเลขเดียวครอบทั้งท่อข้อมูล
ถ้าใช้ MQTT หรือระบบส่งค่าแบบกระจาย การแยกช่วงส่งออกจากช่วงอ่านยังช่วยเรื่องชื่อ topic และผู้รับด้วย เพราะฝั่งแสดงผลอาจอยากได้ค่าที่นิ่งพออ่าน ส่วนฝั่งควบคุมอาจอยากได้สัญญาณเมื่อมีการเปลี่ยนชัดเจน การบังคับให้ทุกผู้รับได้ข้อมูลถี่เท่ากันทุกครั้ง จึงไม่จำเป็นเสมอไป
ตอนเลือกช่วงเวลา เอกสารเซนเซอร์บอกได้แค่ว่าชิปอ่านได้เร็วแค่ไหน หรือแนะนำเงื่อนไขทางไฟฟ้าอย่างไร อย่างเอกสารตระกูล SHT4x บอกบริบทของตัววัดอุณหภูมิและความชื้นได้ แต่ไม่ได้บอกว่างานของคุณควรเก็บถี่แค่ไหน คำตอบนั้นมาจากลักษณะการเปลี่ยนของสิ่งที่วัด และจากสิ่งที่ระบบปลายทางจะทำกับค่าเหล่านั้น
บทนี้ยังไม่ใส่ตัวเลขรอบที่วัดจากโต๊ะทดลอง เพราะช่วงเวลาที่เหมาะกับแต่ละงานต้องดูจากข้อมูลจริงของงานนั้น การเริ่มจากคำถามเรื่องการตอบสนองและการเก็บ จึงมาก่อนการล็อกตัวเลขลงในเฟิร์มแวร์ และถ้าจะลงตัวเลขในภายหลัง ควรจดด้วยว่าวัดจากสภาพใด อ่านกี่รอบ และดูผลที่ฝั่งรับอย่างไร ไม่ใช่ยืมตัวเลขจากงานอื่นมาใส่ให้เรื่องดูครบ
วิธีทดลองรอบโดยไม่ต้องล็อกค่าถาวรตั้งแต่แรก
ช่วงต้นอาจเริ่มจากรอบที่คิดว่าพอสำหรับงาน แล้วดูว่าข้อมูลที่ได้ช่วยตอบคำถามจริงหรือยัง ถ้ากราฟแทบไม่ขยับแต่ปริมาณข้อมูลเยอะ อาจลดรอบส่งได้ ถ้าเริ่มพลาดจังหวะที่ต้องการตอบสนอง อาจต้องอ่านถี่ขึ้นเฉพาะช่วงตัดสินใจ โดยไม่จำเป็นต้องเพิ่มรอบบันทึกทั้งหมดตามไปด้วย
การแยกชั้นแบบนี้ทำให้ปรับทีละจุดได้ โดยไม่ต้องรื้อทั้งเฟิร์มแวร์ทุกครั้งที่อยากลองจังหวะใหม่ และยังช่วยให้คุยกับคนดู dashboard ได้ตรงขึ้นว่าที่เห็นบนหน้าจอคือค่าดิบทุกครั้ง หรือค่าที่สรุปแล้วตามรอบที่ตกลงกัน
สิ่งที่ฝั่งรับอยากได้ไม่ใช่จำนวนจุดสูงสุดเสมอไป
คนที่เปิด dashboard มักอยากรู้ว่าตอนนี้ค่าเป็นเท่าไร และมีแนวโน้มเปลี่ยนไปทางไหน ไม่ได้ต้องการเห็นจุดหนาแน่นจนอ่านไม่ออกเสมอไป ถ้าส่งถี่เกินความจำเป็นของหน้าจอ ทั้งฐานข้อมูลและกราฟจะเต็มไปด้วยค่าที่ความหมายใกล้กันมาก โดยที่คำถามหลักยังตอบได้ไม่ชัดขึ้น
ดังนั้นตอนคุยเรื่องรอบกับคนดูผล ลองแยกให้ชัดว่ากำลังคุยเรื่องความละเอียดของกราฟ หรือเรื่องความเร็วในการตอบสนองเมื่อค่าผิดปกติ สองเรื่องนี้อาจใช้คนละรอบได้ และไม่จำเป็นต้องยึดตัวเลขเดียวตลอดทั้งระบบ
เมื่อมีข้อมูลจริงจากงานนั้นค่อยล็อกตัวเลขลงเฟิร์มแวร์ และจดเงื่อนไขการทดลองไว้ด้วย จะได้ไม่ย้อนกลับมาเดาภายหลังว่าทำไมถึงเลือกรอบนั้น หรือทำไมฝั่งรับถึงดูหนาหรือดูช้าเกินงาน
อย่าให้เอกสารความเร็วสูงสุดเป็นคำตอบของงาน
เอกสารเซนเซอร์มักบอกช่วงที่ชิปอ่านได้หรือเงื่อนไขทางไฟฟ้า ซึ่งจำเป็นตอนต่อวงจรและตอนเลือกไลบรารี แต่การเอาตัวเลขความเร็วสูงสุดไปเป็นรอบบันทึกโดยตรง มักข้ามคำถามว่าใครจะใช้ค่าเหล่านั้นทำอะไร
ถ้ายังไม่มีผลวัดจากงานจริง ให้เริ่มจากคำถามเรื่องการตอบสนองและการเก็บก่อน แล้วค่อยทดลองปรับรอบทีละชั้น เมื่อมีข้อมูลค่อยล็อกตัวเลข และไม่ยืมรอบจากโปรเจกต์อื่นมาใส่เพียงเพื่อให้เฟิร์มแวร์ดูครบตั้งแต่ต้น
พอมีผลจากงานจริงค่อยย้อนมาล็อกตัวเลขในเฟิร์มแวร์ พร้อมเงื่อนไขที่วัด จะได้ไม่กลายเป็นการเดารอบจากเอกสารอย่างเดียว
การเก็บถี่โดยไม่มีคำถามรองรับ มักได้แค่ไฟล์หนาขึ้น ไม่ได้แปลว่าระบบเข้าใจงานดีขึ้น
สรุป
อ่านเซนเซอร์ถี่ได้ ไม่ได้แปลว่าต้องบันทึกและส่งทุกค่าที่อ่านได้ การแยกช่วงอ่าน ช่วงประมวลผล และช่วงส่ง แล้วดูว่าต้องตอบสนองต่อการเปลี่ยนแปลงเร็วแค่ไหน ช่วยให้เลือกรอบที่พอดีกับงานได้โดยไม่ยึดความเร็วสูงสุดของชิปเป็นคำตอบเดียว


