ETT :: Article :: ARM:STM32:STM8 :: Arduino STM32: EP4 DIY Temperature Measurement

© 2020,จารุต บุศราทิจ

ในบทความนี้เราจะใช้เจ้าบอร์ด ET-STM32F103 เชื่อมต่อกับเซ็นเซอร์อุณหภูมิ DS18x20 จากชุด PROBE DS18B20 HAT ซึ่งเป็นเซ็นเซอร์ทำงานแบบ 1-Wire ของบรัษัท Dallas และใช้สายต่อแบบกันน้ำยาว 100cm. หลังจากนั้นแสดงผลบนจอ LCD 16x2 I2C ที่เราได้ใช้งานไปเมื่อครั้งที่แล้ว โดยครั้งนี้เมื่อเราทำเสร็จก็เรียกได้ว่ามีเครื่องวัดอุณหภูมิที่ทำงานได้ทั้งบนบกและในน้ำเลยทีเดียวครับ (กันน้ำ แต่กันได้เท่าไรไม่รู้ครับ เพราะผมลองแช่ลงในแก้วน้ำ ^_____^ )

เป้าหมาย

อุปกรณ์ที่ต้องใช้

มาทำความรู้จัก 1-Wires

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() เราทำอะไรบ้าง ... เราทำดังนี้เลย

มาดูผลของการทำงานกันครับ ภาพแรกวัดแบบปกติ

คราวนี้จุ่มน้ำกันครับ ^______^

สรุป

เป็นอย่างไรบ้างครับ การเขียนโปรแกรมเพื่อใช้บอร์ด ET-STM32F103 ในการทำงานด้านไมโครคอนโทรลเลอร์ สะดวกขึ้นมากเลย เมื่อเทียบกัยการเขียนโค้ดแบบสมัยก่อนที่เป็น gcc-arm (ต้องเกิดทันถึงจะเข้าใจ) พอมีผู้ทำให้ใช้กับ Arduino IDE ได้นี่สะดวกมากมาย ไลบรารีพร้อมสรรพกันเลย ... คราวหน้ามาต่อกันเรื่องการใช้ 7-segment กับขา PB0 กันต่อครับ คราวหน้าเราอ่านข้อมูลสัญญาณแอนาล็อกเข้ามา แล้วทำการตรวจสอบว่าค่าที่รับเข้ามาเป็น H หรือ L หรือ Error ตามช่วงค่า Voltage มาตรฐาน TTL ครับ ขอให้สนุกกับการเขียนโปรแกรมครับผม มีสิ่งใดใช้สิ่งนั้น (เหมือนผมรื้อเจอบอร์ด ET-STM32F103 ที่สะสมไว้ อิ ๆ เลยเอามาใช้ หลังจากท้อและปล่อยร้างไปนานมากครับ)

:----: บทความก่อนหน้านี้ :----: บทความตอนถัดไป (next) :----:

--ไม่สามารถเข้าถึงฐานข้อมูลได้--