เซนเซอร์อุณหภูมิสายยาว อ่านได้บ้างไม่ได้บ้าง

เซนเซอร์อุณหภูมิที่ต่อสายสั้นอยู่ข้างบอร์ดอาจอ่านได้สบาย แต่พอต้องเอาหัววัดไปติดอีกจุด เราก็ต้องต่อสายให้ยาวขึ้น และเริ่มมีทั้งข้อต่อ สายที่เดินใกล้อุปกรณ์อื่น หรือจุดที่อยู่ไกลจากแหล่งจ่ายไฟเข้ามาเกี่ยวข้อง
ในจังหวะนี้ อาการอ่านได้บ้างไม่ได้บ้างจึงไม่ได้หมายความว่าโค้ดที่เคยใช้พังไปเองเสมอไป ระบบที่กำลังสื่อสารกันเปลี่ยนจากชุดสายสั้นบนโต๊ะเป็นอีกชุดหนึ่งแล้ว แม้ชื่อเซนเซอร์จะยังเป็น DS18B20 เหมือนเดิมก็ตาม
บทนี้เลยอยากค่อยๆ ไล่จากเส้นทางไฟกับสายข้อมูล ไปจนถึงวิธีรับค่าที่ได้ครับ เพราะถ้ารับตัวเลขทุกครั้งเป็นอุณหภูมิจริง เราอาจเก็บปัญหาของสายลงฐานข้อมูลโดยไม่รู้ตัว
รู้จักการต่อที่ใช้อยู่ก่อนเพิ่มความยาว
DS18B20 สื่อสารผ่าน 1-Wire ซึ่งสามารถมีอุปกรณ์หลายตัวบนบัสเดียวและใช้รหัสประจำตัวแยกกันได้ แต่ชื่อ 1-Wire ไม่ได้หมายความว่าต่อสายเส้นเดียวโดยไม่ต้องมีทางกลับของกระแส การต่อยังต้องมีกราวด์อ้างอิงร่วมกันตามวงจรที่ใช้
ตัวเซนเซอร์รองรับทั้งการจ่ายไฟผ่านขา VDD และแบบ parasite power ที่อาศัยสายข้อมูล เงื่อนไขการดูแลไฟในช่วงแปลงอุณหภูมิจึงต่างกันด้วย หากทำระบบใหม่และยังมีอิสระเรื่องสาย การแยกไฟเลี้ยงกับข้อมูลจะช่วยให้เราไล่ปัญหาแต่ละส่วนได้ตรงไปตรงมาขึ้น แต่ก็ยังต้องตรวจแรงดันที่หัววัดจริง
สำหรับหัววัดสำเร็จรูปที่มีสายออกมาหลายสี อย่าใช้สีเป็นหลักฐานแทนเอกสารของตัวที่ซื้อ เพราะรูปแบบการเข้าหัวอาจต่างกันไป ควรยืนยันขาไฟ ข้อมูล และกราวด์ก่อนเสียบ รวมถึงดูว่ามีวงจรหรืออุปกรณ์อื่นอยู่ในหัวต่อหรือไม่

เมื่อบันทึกรูปแบบการต่อแล้ว ค่อยเริ่มจากเซนเซอร์หนึ่งตัวกับสายสั้นให้ทำงานได้เป็นฐาน หลังจากนั้นจึงเพิ่มความยาวตามลำดับ จะได้มีจุดเทียบว่าปัญหาเริ่มเมื่อเปลี่ยนส่วนใด แทนการเปลี่ยนทั้งสาย แหล่งจ่าย และไลบรารีพร้อมกัน
pull-up กับรูปร่างของสายมีผลร่วมกัน
สายข้อมูลต้องมี pull-up ตามวงจรที่เหมาะสม แต่ค่าที่เห็นในตัวอย่างสั้นๆ ไม่ได้เป็นคำรับรองว่าใช้ได้กับเครือข่ายสายทุกขนาด เมื่อสายยาวขึ้นหรือมีหลายกิ่ง ความจุและการสะท้อนของสัญญาณก็เป็นสิ่งที่ต้องคิดเพิ่ม
ถ้าเราแยกสายออกจากบอร์ดเป็นหลายกิ่งยาวๆ เพียงเพราะเดินติดตั้งสะดวก รูปแบบนั้นอาจดูไม่ต่างจากการต่อพ่วงในรูปวงจร แต่ทางไฟฟ้าไม่เหมือนกันแล้ว เอกสารการออกแบบ 1-Wire ระยะไกลจึงให้ความสำคัญกับรูปแบบเครือข่ายและอินเทอร์เฟซฝั่งควบคุมด้วย ไม่ได้มีคำตอบเป็นตัวต้านทานค่าเดียว
ลองวาดเส้นทางสายตามที่ติดตั้งจริง มีจุดแยกที่ไหน ระยะของแต่ละกิ่งเท่าไร และจุดต่อผ่านอะไรบ้าง ข้อมูลชุดนี้ช่วยให้การตรวจมีเป้าหมาย โดยเฉพาะเมื่ออาการเกิดเฉพาะบางหัววัดหรือเฉพาะตอนอุปกรณ์ใกล้เคียงเริ่มทำงาน
ถ้าจะลองปรับ pull-up ก็ควรตรวจข้อจำกัดการดึงสายและแรงดันร่วมกัน ไม่ลดค่าลงเรื่อยๆ โดยหวังว่าจะทำให้สายแข็งแรงขึ้นอย่างเดียว การปรับควรมีเหตุผลและทดสอบกับรูปแบบสายที่ตั้งใจใช้จริง
อ่านค่าต้องรอให้การแปลงเสร็จด้วย
กระบวนการอ่านไม่ได้มีเพียงขอข้อมูลแล้วรับอุณหภูมิทันที แต่ต้องเริ่มการแปลงและรอให้พร้อมตามความละเอียดกับโหมดที่ใช้ หากรีบอ่านก่อนเสร็จ ผลที่เห็นก็อาจไม่ใช่การวัดรอบใหม่ที่เรากำลังรออยู่
ไลบรารีบางตัวจัดการการรอให้ ขณะที่บางรูปแบบเปิดให้โปรแกรมไปทำงานอื่นระหว่างนั้นได้ จึงควรดูว่าคำสั่งที่เรียกเป็นแบบใด และเวลาในระบบของเราตรงกับข้อกำหนดของเซนเซอร์หรือไม่ การใส่ delay เพิ่มโดยไม่รู้ตำแหน่งอาจทำให้ดูเหมือนดีขึ้น แต่ยังอธิบายไม่ได้ว่าขั้นตอนเดิมพลาดตรงไหน
เมื่อมีหลายหัววัด รหัสประจำตัวของแต่ละตัวก็ควรถูกจับคู่กับจุดติดตั้งไว้ ไม่อาศัยเพียงลำดับที่ไลบรารีค้นพบ เพราะการถอดเปลี่ยนตัวหนึ่งอาจทำให้ลำดับที่โปรแกรมใช้ไม่ตรงกับห้องหรือถังที่เคยบันทึกไว้

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


