มาเริ่มต้นกันกับ 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 ได้ต่อวงจรแบ่งแรงดันไว้ให้เรียบร้อยแล้ว ไม่จำเป็นต้องต่อวงจรแบ่งแรงดันอีก

ตัว Sensor ZX-HIH4030 ที่ขา output นั้น มีแรงดันออกอยู่ที่ประมาณ 0-5V ก็สามารถต่อวงจร ต่อจาก Vout ของ sensor เข้าที่ขา 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 ก็แก้ปัญหาเรื่องของวงจรแบ่งแรงดันไว้เรียบร้อยแล้ว ก็ขอให้สนุกกับการใช้งานกันนะครับ

ความคิดเห็น

Unknown กล่าวว่า
ถ้าต้องการอ่านค่า sensor ที่เป็น Analog Pin มากกว่าหนึ่งตัวต้องทำไงครับ
Unknown กล่าวว่า
ถ้าต้องการอ่านค่า sensor ที่เป็น Analog Pin มากกว่าหนึ่งตัวต้องทำไงครับ
Team กล่าวว่า
คงต้องใช้ mcu ตัวอื่นมาอ่านแทนครับ บอร์ดตัวนี้จำกัดไว้แค่ pin เดียว
Unknown กล่าวว่า
วัดแรงดันก่อนเข้า A0 ได้ 3.0 พอต่อขาวัดได้ 0.95
ไม่ทราบว่าเป็นเพราะอะไรหรอคะ

โพสต์ยอดนิยมจากบล็อกนี้

ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม : รู้จักกับ Memory

คณิตศาสตร์กับโปรแกรมมิ่งมันเป็นยังไงนะ ตอนที่ 1 เกริ่นพีทาโกรัส

คณิตศาสตร์กับโปรแกรมมิ่งมันเป็นยังไงนะ ตอนที่ 3 โจทย์พีทาโกรัส (จบ)