มาเริ่มต้นกันกับ NodeMcu v.2 ตอนที่ 6 ADC Pin กับการอ่านค่า Analog
ในบทความนี้เจ้าของบล็อกจะพูดถึงกับการอ่านค่า Analog จาก Sensor ZX-HIH4030 จาก INEX ครับ สำหรับ NodeMCU จะมี Pin ที่สามารถอ่านค่า Analog ได้เพียง 1 pin คือ Pin ADC ซึ่งก็สามารถกำหนด Pin โดยกำหนดตัวแปรเท่ากับ A0 ก็ได้เหมือนกับ Arduino หรือจะกำหนดให้เท่ากับ Pin ที่ 17 ก็ได้ ความหมายเดียวกับ A0
Analog Pin หรือ ADC Pin ใน ESP8266 ESP-12E นั้นสามารถรับ Input ได้เพียงแค่ 0-1v เท่านั้น ซึ่งในการต่อ Sensor ต้องใช้วงจรแบ่งแรงดันเพื่อลดแรงดันก่อนที่จะต่อสายสัญญาณเข้าขา ADC เพราะฉะนั้นต้องคำนึงถึงตรงนี้ด้วย แต่ใน NodeMCU V2 นี้สามารถต่อสายสัญญาณตรง ๆ จาก Sensor เข้า ADC Pin ของบอร์ดได้เลย เพราะว่าใน Board ของ NodeMCU V2 นั้น ที่ขา ADC ได้ต่อวงจรแบ่งแรงดันไว้ให้เรียบร้อยแล้ว ไม่จำเป็นต้องต่อวงจรแบ่งแรงดันอีก
เสร็จในส่วนของ Hardware กันแล้วมาดูในส่วนของ Software กันบ้าง โปรแกรมที่เราจะเขียนนั้นจะใช้ library ในการช่วยคำนวณสูตร เพราะต้องนำค่า Vout ที่เป็นแรงดันมาเปลี่ยนให้เป็นค่าความชื้นที่เราต้องใช้กัน ในส่วนของ library นั้นสามารถโหลดได้จาก ที่นี่ เมื่อโหลดมาแล้วก็ลองเลือก Examples ของ library ที่เราโหลดมาแล้วลอง upload โปรแกรมลงบอร์ด
ปรับแก้ไข code ของ example นิดหน่อยใช้สำหรับ NodeMCU ที่ปรับคือ pin ที่อ่านค่า analog ครับ ของ NodeMCU จะเป็น A0 แล้วก็ปรับ ARDUINO_VCC จาก 5 ก็เป็น 3.3 ครับ เพราะ NodeMCU ใช้ไฟเลี้ยงเพียง 3.3v
การใช้งานเราก็พิมคำสั่งตาม example ซึ่งสูตรคำนวณต่าง ๆ จะถูกคำนวณอยู่ใน library ไว้แล้ว เราแค่เรียก function ก็สามารถใช้งานได้เลย ส่วนผลลัพธ์ของโปรแกรมก็จะได้ตามรูปด้านล่างนี้
จากรูปเราก็จะได้ค่ามาสองค่า คือ ค่าที่ยังไม่ถูก calibrate และค่าที่ถูก calibrate เรียบร้อยแล้ว ก็จะเสร็จการอ่านค่าจาก analog
อธิบายเพิ่มเติมเกี่ยวกับ ADC Pin
เนื่องจาก ESP8266 นั้นใช้ไฟเลี้ยงอยู่ที่ 3.3v และที่ analog pin รับ input ได้เพียง 0-1v เท่านั้น ต่างจาก arduino ที่ใช้ไฟเลี้ยงที่ 5v และ analog pin ก็สามารถรับ input ได้ถึง 0-5v ซึ่ง sensor ทั่วไปนั้นส่วนมาก Vout ของ sensor จะมีแรงดันอยู่ที่ประมาณ 0-5v ถ้าเป็น Analog Pin ทั่วไปของ arduino สามารถรับ input ได้สบาย ๆ แต่ในส่วนของ ESP8266 นั้นจำเป็นต้องต่อวงจรแบ่งแรงดันคำนวณหาค่าแรงดันที่ไม่เกิน 1v มากนะ เพื่อที่ ADC Pin ของ ESP8266 สามารถอ่านค่าได้อย่างปลอดภัย
เมื่อ NodeMCU V2 ออกมา ซึ่งทางผู้ผลิตก็ได้คำนึงถึงจุดนี้ ภายในบอร์ดของ NodeMCU นั้นจึงได้ต่อวงจรแบ่งแรงดันไว้ภายในบอร์ด ซึ่งผู้ใช้งานไม่ต้องมานั่งต่อวงจรเอง สามารถต่อสายสัญญาณจาก Vout ของ sensor เข้าไปที่ Analog Pin ของบอร์ดตรง ๆ ได้เลย
ค่าที่อ่านได้จาก Analog Pin นั้น ถ้าเราจ่ายไฟที่ 0v ค่าที่อ่านได้จาก analogRead() ก็จะได้เท่ากับ 0 ถ้าหากจ่ายไฟไปที่ analog pin 3.3v ค่าที่อ่านได้จาก analogRead จะได้เท่ากับ 1023 หมายความว่าแรงดันที่อ่านจะอยู่ระหว่าง 0-3.3v ที่ขา Analog Pin ของ NodeMCU
หวังว่าบทความนี้จะทำให้ผู้อ่านเข้าใจในเรื่องของ ADC Pin ใน ESP-12E กันมากขึ้นนะครับ ซึ่ง NodeMCU ก็แก้ปัญหาเรื่องของวงจรแบ่งแรงดันไว้เรียบร้อยแล้ว ก็ขอให้สนุกกับการใช้งานกันนะครับ
ปรับแก้ไข code ของ example นิดหน่อยใช้สำหรับ NodeMCU ที่ปรับคือ pin ที่อ่านค่า analog ครับ ของ NodeMCU จะเป็น A0 แล้วก็ปรับ ARDUINO_VCC จาก 5 ก็เป็น 3.3 ครับ เพราะ NodeMCU ใช้ไฟเลี้ยงเพียง 3.3v
การใช้งานเราก็พิมคำสั่งตาม example ซึ่งสูตรคำนวณต่าง ๆ จะถูกคำนวณอยู่ใน library ไว้แล้ว เราแค่เรียก function ก็สามารถใช้งานได้เลย ส่วนผลลัพธ์ของโปรแกรมก็จะได้ตามรูปด้านล่างนี้
จากรูปเราก็จะได้ค่ามาสองค่า คือ ค่าที่ยังไม่ถูก calibrate และค่าที่ถูก calibrate เรียบร้อยแล้ว ก็จะเสร็จการอ่านค่าจาก analog
อธิบายเพิ่มเติมเกี่ยวกับ ADC Pin
เนื่องจาก ESP8266 นั้นใช้ไฟเลี้ยงอยู่ที่ 3.3v และที่ analog pin รับ input ได้เพียง 0-1v เท่านั้น ต่างจาก arduino ที่ใช้ไฟเลี้ยงที่ 5v และ analog pin ก็สามารถรับ input ได้ถึง 0-5v ซึ่ง sensor ทั่วไปนั้นส่วนมาก Vout ของ sensor จะมีแรงดันอยู่ที่ประมาณ 0-5v ถ้าเป็น Analog Pin ทั่วไปของ arduino สามารถรับ input ได้สบาย ๆ แต่ในส่วนของ ESP8266 นั้นจำเป็นต้องต่อวงจรแบ่งแรงดันคำนวณหาค่าแรงดันที่ไม่เกิน 1v มากนะ เพื่อที่ ADC Pin ของ ESP8266 สามารถอ่านค่าได้อย่างปลอดภัย
เมื่อ NodeMCU V2 ออกมา ซึ่งทางผู้ผลิตก็ได้คำนึงถึงจุดนี้ ภายในบอร์ดของ NodeMCU นั้นจึงได้ต่อวงจรแบ่งแรงดันไว้ภายในบอร์ด ซึ่งผู้ใช้งานไม่ต้องมานั่งต่อวงจรเอง สามารถต่อสายสัญญาณจาก Vout ของ sensor เข้าไปที่ Analog Pin ของบอร์ดตรง ๆ ได้เลย
ค่าที่อ่านได้จาก Analog Pin นั้น ถ้าเราจ่ายไฟที่ 0v ค่าที่อ่านได้จาก analogRead() ก็จะได้เท่ากับ 0 ถ้าหากจ่ายไฟไปที่ analog pin 3.3v ค่าที่อ่านได้จาก analogRead จะได้เท่ากับ 1023 หมายความว่าแรงดันที่อ่านจะอยู่ระหว่าง 0-3.3v ที่ขา Analog Pin ของ NodeMCU
หวังว่าบทความนี้จะทำให้ผู้อ่านเข้าใจในเรื่องของ ADC Pin ใน ESP-12E กันมากขึ้นนะครับ ซึ่ง NodeMCU ก็แก้ปัญหาเรื่องของวงจรแบ่งแรงดันไว้เรียบร้อยแล้ว ก็ขอให้สนุกกับการใช้งานกันนะครับ
ความคิดเห็น
ไม่ทราบว่าเป็นเพราะอะไรหรอคะ
แสดงความคิดเห็น