© 2020,จารุต บุศราทิจ
ในบทความนี้เราจะใช้เจ้าบอร์ด ET-STM32F103 เชื่อมต่อกับเซ็นเซอร์อุณหภูมิ DS18x20 จากชุด PROBE DS18B20 HAT ซึ่งเป็นเซ็นเซอร์ทำงานแบบ 1-Wire ของบรัษัท Dallas และใช้สายต่อแบบกันน้ำยาว 100cm. หลังจากนั้นแสดงผลบนจอ LCD 16x2 I2C ที่เราได้ใช้งานไปเมื่อครั้งที่แล้ว โดยครั้งนี้เมื่อเราทำเสร็จก็เรียกได้ว่ามีเครื่องวัดอุณหภูมิที่ทำงานได้ทั้งบนบกและในน้ำเลยทีเดียวครับ (กันน้ำ แต่กันได้เท่าไรไม่รู้ครับ เพราะผมลองแช่ลงในแก้วน้ำ ^_____^ )
1-Wire เป็นการสื่อสารกับอุปกรณ์โดยใช้สายสัญญาณในการรับและส่งข้อมูลเพียง 1 เส้น (ไม่รวมเส้นไฟจ่ายเข้าอุปกรณ์ 1-Wire กับสายกราวด์นะครับ) คราวนี้ไอซีตัวนี้มีคุณสมบัติอย่างไรบ้าง
ที่ต้องระวังอย่างมากในการใช้งาน คือ ตัวเซ็นเซอร์ต้องการ R-Pull up ที่ขานำออก โดยต้องใช้ R ที่มี 4.7K ดังภาพนี้ครับ
จากภาพด้านบน เราจะต้องต่อสายวงจรจาก PROBE DS18B20 HAT ซึ่งมีสายไฟ 3 เส้น คือ สีดำสำหรับต่อเข้าร่วมกับกราวด์ของ ET-STM32F103 สายสีแดงต่อเข้ากับไฟของของบอร์ด และอีก 1 เส้น (สายสีเหลือง) ต่อเข้ากับ R 4.7k โดยขาอีกข้างหนึ่งของ R ต่อเข้ากับไฟ และต่อสายจากตรงที่อยู่ระหว่างไฟจาก R และจาก R ไปเข้าเซ็นเซอร์นี้เข้ากับพอร์ PB0 ซึ่งลำดับขาของพอร์ต PB0 เป็นดังนี้ครับ
สายและเซ็นเซอร์ DS18B20 เป็นดังนี้ครับ
ส่วนภาค LCD 16x2 I2C ต่อสายเหมือนครั้งที่แล้วครับ ...เอาล่ะ ตรวจสายไฟให้เรียบร้อย เราจะเริ่มติดตั้งไลบรารีของ DS18B20 กันล่ะครับ
xxx
ไลบรารีที่เราจะใช้มีชื่อว่า LiquidCrystal_I2C มาเริ่มกันที่เข้าเมนู Sketch แล้วเลือก Include Library แล้วเลือกรายการย่อย Manage Libraries ... เพื่อเรียกหน้าต่างติดตั้งไลบรารีดังภาพด้านล่างนี้ครับ
1. เริ่มจากเข้าไปที่เมนู Sketch เลือก Include Library แล้วเลือก Manage Libraries...
2. ที่หน้าต่างด้านล่างนี้ ให้พิมพ์หา onewire แล้วเลือกติดตั้งได้เลย
3. ติดตั้งกันต่อครับ คราวนี้หาคำว่า dallasTemperature แล้วติดตั้งได้เลย เทาสนี้ก็พร้อมใช้เจ้า DS18B20 กันแล้วล่ะครับ
เมื่อเขียนเสร็จ Verify ผ่าน (หรือแก้ไขเสร็จแล้ว) ก็อัพโหลดเข้าบอร์ดกันได้เลย หน้าตาผลลัพธ์ก็จะเป็นดังนี้ครับ โดยโปรแกรมที่เราเขียนมีคำสั่งดังต่อไปนี้
ในบรรทัดที่ 1 และ 2 มีการเรียกใช้ Wire.h และ OneWire.h หลังจากนั้นเรียกใช้ LiquidCrystal_I2C.h และ DallasTemperature.h ตามลำดับ เพื่อใช้งาน I2C LCD กับ DS18B20 ครับ
บรรทัดที่ 5 ผมกำหนดไว้ว่า ผมได้เชื่อมต่อขา PB0 เข้ากับบัส 1-Wire
แล้วสร้างวัตถุชื่อ ds1b20 จากคลาส DallasTemperature โดยระบุว่าได้เชื่อมต่อขา PB0 เข้ากับบัสนี้
คราวนี้ก่อนใช้งานต้องสั่งเริ่มให้ทำงานกันก่อน คือ บรรทัดที่ 18 ได้เรียก ds1820.begin() เพื่อให้วัตถุนี้เริ่มต้นทำงานครับ
ในฟังก์ชัน loop() เราทำอะไรบ้าง ... เราทำดังนี้เลย
มาดูผลของการทำงานกันครับ ภาพแรกวัดแบบปกติ
คราวนี้จุ่มน้ำกันครับ ^______^
:----: บทความก่อนหน้านี้ :----: บทความตอนถัดไป (next) :----: