บทความ ESPino32 ตอนที่ 5 การใช้งาน Analog Input (ADC)

สารบัญ บทความ ESPino32

บทความ ESPino32 ตอนที่ 5 การใช้งาน Analog Input (ADC)

        บทความ ESPino32 ตอนที่ 5 การใช้งาน Analog Input (ADC) เป็นการใช้งานบอร์ดไมโครคอนโทรเลอร์เพื่อทำการรับค่าอินพุตที่มาจากเซ็นเซอร์หรืออุปกรณ์ที่มีเอาต์พุตเป็นค่าแอนะล็อก โดยเซ็นเซอร์หรืออุปกรณ์ที่มีเอาต์พุตเป็นค่าแอนะล็อกจะทำหน้าที่เปลี่ยนปริมาณทางกายภาพ เช่น ความเข้มแสง อุณหภูมิ ค่า pH ไปเป็นค่าปริมาณความต่างศักย์ทางไฟฟ้า ในบทนี้จะเป็นการใช้งานขาแอนะล็อกของบอร์ด ESPino32 ในการอ่านค่าแอนะล็อกจากเซ็นเซอร์เพื่อวัดปริมาณความต่างศักย์ทางไฟฟ้าแล้วตีความหมายย้อนกลับไปว่าปริมาณความต่างศักย์ทางไฟฟ้าที่ได้จากเซ็นเซอร์นั้นมีค่าทางกายภาพเท่าไร ดังรูป การอ่านค่าเซ็นเซอร์จากอุปกรณ์ภายนอก

การอ่านค่าเซ็นเซอร์จากอุปกรณ์ภายนอก

        ADC (Analog to Digital Converter) หรือการแปลงค่าจากสัญญาณแอนะล็อกให้เป็นดิจิทัล ใช้สำหรับวัดความต่างศักย์ทางไฟฟ้าเพื่อนำมาประมวลผลบนไมโครคอนโทรเลอร์ สำหรับบอร์ด ESPino32 จะมี ADC แบบ SAR (Successive Approximation Register) อยู่ 2 ชุด มีความละเอียดขนาด 12 บิต โดยค่าของความละเอียดจะมีค่าเท่ากับ 212  หรือ 4096 ระดับ แรงดันอ้างอิง (Vreferent) มีค่าเท่ากับ 3.3 โวลต์ และค่าของสัญญาณแอนะล็อกที่บอร์ด ESPino32 สามารถอ่านได้มีค่าอยู่ระหว่าง 0-3.3 โวลต์

        สำหรับการใช้งานการอ่านค่าแอนะล็อกนั้น ทางทีมงานขอยกตัวอย่างการใช้งานที่ใช้ Analog Input เพื่อให้ผู้อ่านเข้าใจและเห็นตัวอย่างที่สามารถนำไปประยุกต์ใช้งานได้ง่ายขึ้น เช่น อ่านค่าแอนะล็อกของ Pin ที่ต่ออยู่เซ็นเซอร์วัดค่า pH ในน้ำเพื่อนำค่าแอนะล็อกที่ได้ไปคำนวณออกมาเป็นค่า pH อ่านค่าแอนะล็อกของ Pin ที่ต่ออยู่กับวงจรวัดความเข้มแสงเพื่อนำค่าแอนะล็อกที่ได้ไปตรวจสอบว่าตอนนี้มืดแล้วหรือยัง เป็นต้น

        คำสั่งการใช้งานการอ่านค่าแอนะล็อกของตัวบอร์ด ESPino32 สามารถใช้งานคำสั่ง analogRead ในการอ่านค่าแอนะล็อก เหมือนกับการใช้งานการอ่านค่าแอนะล็อกที่พัฒนาบนแพลตฟอร์มของ Arduino และในส่วนของคำสั่งเรียกฟังก์ชันการใช้งานแอนะล็อกสามารถใช้งานได้โดยอ้างอิงหมายเลขของ Pin ในแถบ ADC1 และ ADC2 สีเขียวอ่อน ดังรูป ESPino32 Pinout

ESPino32 Pinout

รูปแบบการใช้งาน Analog Input

analogRead(pin)

โดย pin คือ หมายเลข pin

        สำหรับค่าความละเอียดของ analog Resolution ของบอร์ด ESPino32 โดยเริ่มต้นแล้ว ค่า analog Resolution จะถูกกำหนดค่าไว้ที่ 12 บิต หรือสามารถอ่านค่าได้ 4096 ระดับ แต่ถ้าต้องการความละเอียดที่น้อยกว่านั้น ผู้ใช้งานสามารถปรับเปลี่ยนค่าความละเอียดตามความต้องการได้ เช่นปรับค่าความละเอียดเป็น 9 บิต 10 บิต 11 บิต และ 12 บิต โดยใช้คำสั่งดังนี้

– analogReadResolution(9);     ค่าแอนะล็อกที่อ่านได้จะมี 512 ระดับ   และค่าที่อ่านได้จะอยู่ระหว่าง 0 – 512

– analogReadResolution(10);   ค่าแอนะล็อกที่อ่านได้จะมี 1024 ระดับ และค่าที่อ่านได้จะอยู่ระหว่าง 0 – 1024

– analogReadResolution(11);   ค่าแอนะล็อกที่อ่านได้จะมี 2048 ระดับ และค่าที่อ่านได้จะอยู่ระหว่าง 0 – 2047

– analogReadResolution(12);   ค่าแอนะล็อกที่อ่านได้จะมี 4096 ระดับ และค่าที่อ่านได้จะอยู่ระหว่าง 0 – 4095

การเปรียบเทียบค่าแอนะล็อกที่บอร์ด ESPino32 อ่านค่าได้กลับไปเป็นค่าความต่างศักย์ทางไฟฟ้า

        บอร์ด ESPino32 สามารถรับค่าแอนะล็อกจากเซ็นเซอร์ต่างๆ เข้ามาประมวลผลได้ แต่ค่าแอนะล็อกที่ตัวบอร์ดอ่านได้นั้นจะเป็นช่วง 0-4095 ซึ่งโดยทั่วไปแล้วจะอ้างอิงเป็นค่าความต่างศักย์ทางไฟฟ้ามากกว่า ดังนั้นจึงต้องมีวิธีการที่จะเป็นค่าแอนะล็อกที่บอร์ด ESPino32 อ่านได้กลับไปเป็นค่าความต่างศักย์ที่ใช้โดยทั่วไป

        วิธีการเปรียบเทียบค่าแอนะล็อกที่บอร์ด ESPino32 อ่านค่าได้กลับไปเป็นค่าความต่างศักย์ทางไฟฟ้าสามารถใช้วิธีเทียบบัญญัติไตรยางค์ ได้ดังนี้

บอร์ด ESPino32 สามารถอ่านค่าแอนะล็อกได้สูงสุด 3.3 โวลต์ แบ่งเป็น 4096 ระดับ (นับตั้งแต่ 0-4095)
ดังนั้นค่า 1 ระดับที่บอร์ด ESPino32 อ่านได้จึงมีค่าเท่ากับ  หรือ 0.80586 x 10-3 โวลต์
ตัวอย่างการเทียบค่าแอนะล็อกที่บอร์ด ESPino32 กลับไปเป็นค่าความต่างศักย์ทางไฟฟ้า

– ค่าแอนะล็อกที่อ่านได้ มีค่าเป็น 0        จะมีค่าเท่ากับ      0 * 0.80586 x 10-3       โวลต์ หรือ 0          โวลต์

– ค่าแอนะล็อกที่อ่านได้ มีค่าเป็น 2048  จะมีค่าเท่ากับ      2048 * 0.80586 x 10-3 โวลต์ หรือ 1.6504 โวลต์

– ค่าแอนะล็อกที่อ่านได้ มีค่าเป็น 4095  จะมีค่าเท่ากับ      4095 * 0.80586 x 10-3 โวลต์ หรือ 3.3        โวลต์

หรือใช้ความสัมพันธ์การเทียบบัญญัติไตรยางค์

ก็สามารถแปลงค่าแอนะล็อกที่บอร์ด ESP32 อ่านได้กลับไปเป็นค่าความต่างศักย์ได้เหมือนกัน

ตัวอย่างการใช้งานการอ่านค่า Analog Input จากตัวต้านทานปรับค่าได้

        การทดลองการอ่านค่าแอนะล็อกจำเป็นจะต้องมีวงจรหรืออุปกรณ์ภายนอกที่ให้เอาต์พุตที่เป็นค่าแอนะล็อกออกมาตัวอย่างการทดลองนี้จึงเลือกอุปกรณ์พื้นฐานอย่างตัวต้านทานปรับค่าได้มาใช้เป็นตัวปรับค่าแอนะล็อกเพื่อให้ผู้ทดลองสามารถเข้าใจพื้นฐานเบื้องต้นได้ง่าย

        ตัวต้านทานปรับค่าได้ หรือ Potentiometer เป็นอุปกรณ์ทางอิเล็กทรอนิกส์ที่มีเอาต์พุตเป็นค่าความต้านทานที่สามารถเปลี่ยนแปลงได้จากการปรับหมุนบนตัวอุปกรณ์ เมื่อจ่ายไฟให้กับตัวต้านทานปรับค่าได้และหมุนตัวต้านทานปรับค่าได้จะเกิดค่าความต่างศักย์ขึ้นที่ขา Vout ของตัวต้านทานปรับค่าได้ ในการทดลองนี้จึงใช้ขาแอนะล็อกของบอร์ด ESPino32 มาอ่านค่าแอนะล็อกที่ได้จากตัวต้านทานปรับค่าได้ โดยเมื่อต่อไฟ 3.3 โวลต์ และ GND เข้าไปที่ตัวต้านทานปรับค่าได้ เอาต์พุตที่บอร์ด ESPino32 อ่านได้จะเป็นมีค่าอยู่ระหว่าง 0 – 4095 หรือค่าแอนะล็อกตั้งแต่ 0 โวลต์ – 3.3 โวลต์

Potentiometer Pinout
ค่า ADC ที่บอร์ด ESPino32 สามารถอ่านได้

ต่อวงจรดังรูป วงจรอ่านค่าแอนะล็อกจากตัวต้านทานปรับค่าได้

วงจรอ่านค่าแอนะล็อกจากตัวต้านทานปรับค่าได้

ตัวอย่างโปรแกรมที่ใช้

บรรทัดที่ 1         ประกาศตัวแปร sensorPin ชนิด Byte ที่เป็นค่าคงที่ให้อยู่ที่ขา A0
บรรทัดที่ 2         ประกาศตัวแปร sensorValue ชนิด integer ให้มีค่าเท่ากับ 0
บรรทัดที่ 3         ประกาศตัวแปร voltageValue ชนิด float ให้มีค่าเท่ากับ 0
บรรทัดที่ 4         สร้างฟังก์ชัน setup()
บรรทัดที่ 5         เปิดฟังก์ชัน setup()
บรรทัดที่ 6         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate อยู่ที่ 115200 บิตต่อวินาที
บรรทัดที่ 7         กำหนดค่าความละเอียดอยู่ที่ 12 bit ทำให้ค่าแอนะล็อกที่อ่านได้อยู่ระหว่าง 0 – 4095
บรรทัดที่ 8         ปิดฟังก์ชัน setup()
บรรทัดที่ 9         สร้างฟังก์ชัน loop()
บรรทัดที่ 10        เปิดฟังก์ชัน loop()
บรรทัดที่ 11        อ่านค่าแอนะล็อกจากขา sensorPin มาเก็บไว้ในตัวแปร sensorValue
บรรทัดที่ 12        นำตัวแปร sensorValue * (3.3/4095.00) มาเก็บไว้ในตัวแปร voltageValue
บรรทัดที่ 13        แสดงคำว่า “Sensor Value: ” ออกทาง Serial Monitor
บรรทัดที่ 14        แสดงค่าในตัวแปร sensorValue ออกทาง Serial Monitor
บรรทัดที่ 15        แสดง tab ออกทาง Serial Monitor
บรรทัดที่ 16        แสดงคำว่า “Voltage Value: ” ออกทาง Serial Monitor
บรรทัดที่ 17        แสดงค่าในตัวแปร voltageValue ออกทาง Serial Monitor และขึ้นบรรทัดใหม่
บรรทัดที่ 18        หน่วงเวลา 100 มิลลิวินาที
บรรทัดที่ 19        ปิดฟังก์ชัน loop()

หลังจากอัพโหลดโปรแกรม ลงบนบอร์ด ESPino32 เลือกรูปแว่นขยาย หรือกด Ctrl+Shift+M เพื่อเปิด Serial Monitor เพื่อดูผลลัพธ์ของค่าแอนะล็อกที่ได้ ดังรูป เปิด Serial Monitor และสำหรับ Arduino IDE Version 1.6.6 ขึ้นไปสามารถดูผลลัพธ์ของโปรแกรมแบบกราฟได้โดยกด Tool > Serial Plotter หรือ Ctrl+Shift+L ดังรูป เปิด Serial Plotter

เปิด Serial Monitor
เปิด Serial Plotter

ดูผลลัพธ์โปรแกรมที่รัน และทดสอบปรับตัวต้านทานปรับค่าได้ ดังรูป ผลลัพธ์การอ่านค่าแอนะล็อกจากตัวต้านทานปรับค่าได้

ผลลัพธ์การอ่านค่าแอนะล็อกจากตัวต้านทานปรับค่าได้ใน Serial Monitor
ผลลัพธ์การอ่านค่าแอนะล็อกจากตัวต้านทานปรับค่าได้ ซ้าย Serial Plotter

ผลการทดลอง 

        เมื่อบอร์ด ESPino32 เริ่มทำงาน โปรแกรมจะอ่านค่าแอนะล็อกจากขา sensorPin ที่ต่ออยู่กับ LDR จะเห็นได้ว่าเมื่อมีการปรับตัวต้านทานปรับค่าได้ ค่าแอนะล็อกที่บอร์ด ESPino32 อ่านได้จะมีค่าอยู่ระหว่าง 0-4095 และโปรแกรมจะมีการคำนวณค่าแอนะล็อกที่บอร์ด ESPino32 อ่านได้กลับไปเป็นค่าความต่างศักย์ทางไฟฟ้าที่มาจากเอาต์พุตของตัวต้านทานปรับค่าได้ จากนั้นก็วนรอบการทำงานในฟังชัน loop() ต่อไป

ตัวอย่างการใช้งานการอ่านค่า Analog Input เมื่อค่าแอนะล็อกมีค่ามากกว่า 3.3 โวลต์

บอร์ด ESPino32 สามารถอ่านค่าแอนะล็อกสูงสุดได้ 3.3 โวลต์ แต่เซ็นเซอร์หรือวงจรบางประเภทนั้นให้เอาต์พุตที่เป็นค่าแอนะล็อกที่มีค่ามากเกินกว่าความสามารถของบอร์ด ESPino32 ถ้าต้องการอ่านค่าแอนะล็อกที่มีค่ามากกว่า 3.3 โวลต์จำเป็นต้องมีวงจรแบ่งแรงดันคอยลดทอนค่าแอนะล็อกก่อนเข้าตัวบอร์ด ESP32 เพื่อป้องกันไม่ให้เกิดความเสียหายแก่ตัวบอร์ด

        วงจรแบ่งแรงดัน หรือ Voltage Divider Circuit คือวงจรที่นำตัวต้านทาน (Resister) มาต่อกันแบบอนุกรมกับแหล่งจ่ายไฟ แล้วนำทฤษฎี กฎของโอห์ม (Ohm’s Law) มาประยุกต์ใช้ ในการแบ่งแรงดันไฟฟ้าในวงจร

วงจรแบ่งแรงดัน
คำนวณค่าเอาต์พุตจากวงจรแบ่งแรงดัน

           
จากรูป สามารถหาค่าความต้านทานรวมของวงจร (RT) ได้จาก

           (1)

สามารถหาค่ากระแสไฟฟ้าในวงจร (I) ได้จาก

       (2)

      (3)

สามารถหาแรงดันตกคร่อม R2 หรือ VO ได้จาก

(4)

เมื่อแทน (2) ในสมการที่ (4) จะได้ว่า

(5)

 (6)

เมื่อแทน (3) ในสมการที่ (4) จะได้ว่า

(7)

(8)

        ในการนำไปใช้งานจริงนอกเหนือจากการคำนวณหาค่าแรงดันเอาต์พุตจากวงจรและหล่งจ่ายไฟที่มีอยู่แล้ว อาจจำเป็นต้องคำนวณหาค่าความต้านทานที่เหมาะสม เพื่อออกแบบวงจรให้มีคุณสมบัติตามที่ต้องการ เช่น ถ้าต้องการวัดค่าแรงดันไฟฟ้าที่ต้องการ (VS) มีค่าแรงดัน 0 ถึง 45 โวลต์ด้วย ESPino32ที่สามารถอ่านค่าแอนะล็อกสูงสุดได้เพียง 3.3 โวลต์ (V­O) ถ้านำมาเชื่อมต่อกันโดยตรงก็จะทำให้เกิดความเสียหายได้ กรณีนี้ก็สามารถนำวงจรแบ่งแรงดันมาใช้ลดสัดส่วนจาก 0 ถึง 45 โวลต์ เป็น 0 ถึง 3.3โวลต์

        ซึ่งสิ่งที่เราต้องทราบเมื่อต้องการออกแบบวงจรแบ่งแรงดันคือ จะต้องใช้ค่าความต้านทาน (R1 และ R2) ค่าเท่าไร ซึ่งค่าที่ต้องคำนึงถึงในการเลือกซื้อตัวต้านทาน นอกจากค่าความต้านทานแล้ว ยังมีค่าอัตราทนกำลังวัตต์ (W) โดยจะส่งผลต่อขนาด และความสามารถในการทนกระแสไฟฟ้าของตัวต้านทานโดยตรง ค่าอัตราทนกำลังวัตต์ของตัวต้านทานนี้มีหน่วยเป็นวัตต์ โรงงานผู้ผลิตจะผลิตออกมาเป็นค่ามาตรฐานเช่น 1/8, 1/4, 1/2, 1, 2, 3 หรือ 4 วัตต์ เป็นต้น ตัวต้านทานที่มีค่าอัตราทนกำลังวัตต์สูง ก็จะสามารถทนกระแสไฟฟ้าได้สูงกว่า มีขนาดใหญ่กว่า และราคาสูงกว่า

        โดยจากที่ทราบกันดีอยู่แล้วว่า ค่ากำลังวัตต์ ค่ากระแสไฟฟ้า และค่าความต้านทาน มีความสัมพันธ์ เกี่ยวเนื่องกันตามสมการที่ (9)

         (9)

ค่าตัวแปรทั้ง 3 ค่าจะมีการเปลี่ยนแปลง ถ้าค่าใดค่าหนึ่งเปลี่ยนไป ดังนั้น เพื่อให้ง่ายต่อการออกแบบ อาจกำหนดค่าใดค่าหนึ่งเป็นหลัก แล้วจึงคำนวณเพื่อเลือกค่าตัวแปรอื่นๆ ตามมา เช่น กำหนดค่าอัตราทนกำลังวัตต์ที่เราต้องการไว้ก่อนเนื่องจากจะทำให้สามารถกำหนดขนาดของตัวต้านทานในกรณีที่มีพื้นที่จำกัด หรืออาจมีค่าความต้านทานบางค่าอยู่แล้ว ยกตัวอย่างกรณีนี้ กำหนดค่าอัตราทนกำลังวัตต์ของตัวต้านทานที่ 1/2 วัตต์

จากนั้นสามารถนำค่าอัตราทนกำลังวัตต์ไปคำนวณหาค่ากระแสไฟฟ้าในวงจรได้จาก

          (10)

ซึ่งจากสมการที่ (10) จะได้ค่ากระแสไฟฟ้าสูงสุด ที่ตัวต้านทาน 1/2 วัตต์ สามารถทนได้ในวงจรนี้คือ

I = 0.5/45
I = 11.11 มิลลิแอมป์

เมื่อนำไปคำนวณหาค่าความต้านทานรวม (RT) จะได้ว่า

RT = V/ I
RT = 45 โวลต์ / 11.11 มิลลิแอมป์
RT = 4050 โอห์ม

สามารถหาค่า R2 จากสมการที่ (6) ได้ดังนี้

R2 = (3.3 * 4050)/45
R2 = 297 โอห์ม

โดยค่าตัวต้านทานที่มีขายโดยทั่วไปจะเป็นค่ามาตรฐาน ซึ่งค่าใกล้เคียงที่สุดคือ 300 โอห์ม (ตามมาตรฐาน E24 EIA Standard Resistor Values) ดังนั้น R1 จะมีค่าเท่ากับ

R1 = 4050 – 300
R1 = 3750 โอห์ม 
โดยเลือกใช้ค่า 3900 โอห์ม ตามมาตรฐาน

จากนั้นเนื่องจากเราปรับค่าตัวต้านทานตามค่ามาตรฐาน ซึ่งจะทำให้ค่าต่างๆ เปลี่ยนแปลงไปจากที่กำหนดเล็กน้อย เพื่อให้มั่นใจได้ว่า แรงดัน VO จะมีค่าไม่เกินจากค่าที่ Espino32 รับได้ จึงควรคำนวณหาค่า VO จากค่าตัวต้านทานที่เราเลือกใช้ใหม่อีกครั้ง ดังนี้

จากสมการที่ (8) จะได้ว่า

VO = 45 * (3900/(300 + 3900))
VO = 3.21 โวลต์

จะเห็นได้ว่าแรงดัน VO ต่ำกว่าค่าสูงสุดที่ ESPino32 รับได้ หมายความว่าวงจรแบ่งแรงดันที่เราออกแบบขึ้น สามารถวัดค่า VS ได้สูงกว่า 45 โวลต์ คำนวณได้ดังนี้

VS = (3.3 * 45)/3.21
VS = 46.26 โวลต์

ดังนั้น สรุปวงจรแบ่งแรงดันที่เราออกแบบ เพื่อให้ ESPino32 สามารถอ่านค่าแรงดัน 0 – 45 โวลต์ ผ่านแอนะล็อกอินพุตมีดังนี้

แรงดันสูงสุดที่สามารถวัดได้                 46.26 โวลต์

ค่าตัวต้านทาน R1                            3900 โอห์ม 1/2 วัตต์

ค่าตัวต้านทาน R2                            300 โอห์ม 1/2 วัตต์

ตัวอย่างการใช้งานการอ่านค่า Analog Input โดยอ่านค่าความเข้มแสงจาก LDR

        LDR หรือ Light Dependent Resistor เป็นอุปกรณ์ทางอิเล็กทรอนิกส์ที่มีเอาต์พุตเป็นค่าความต้านทานและค่าความต้านทานที่ได้จาก LDR จะขึ้นอยู่กับความเข้มของแสงที่ตกกระทบหน้าสัมผัส โดยเอาต์พุตที่ได้คือถ้ามีแสงมาตกกระทบหน้าสัมผัสของเซ็นเซอร์มากค่าความต้านทานจะมีค่าน้อย และถ้ามีแสงมาตกกระทบหน้าสัมผัสของเซ็นเซอร์น้อยค่าความต้านทานจะมีค่ามาก

        การทดลองการอ่านค่าแอนะล็อกโดยอ่านค่าความเข้มแสงจาก LDR นั้น จะต้องมีวงจรแบ่งแรงดันเข้ามาช่วยในการอ่านค่าแอนะล็อก และในการทดลองนี้จะใช้ Led บนตัวบอร์ด ESPino32 ที่ต่อยู่กับขา GPIO16 มาเป็นเอาต์พุตในการแสดงผล

ต่อวงจรดังรูป วงจรอ่านค่าแอนะล็อกจาก LDR

วงจรอ่านค่าแอนะล็อกจาก LDR

ตัวอย่างโปรแกรมที่ใช้

บรรทัดที่ 1         ประกาศตัวแปร sensorPin ชนิด Byte ที่เป็นค่าคงที่ให้อยู่ที่ขา A0
บรรทัดที่ 2         ประกาศตัวแปร threshold ชนิด integer ที่เป็นค่าคงที่ให้มีค่าเท่ากับ 2000
บรรทัดที่ 3         ประกาศตัวแปร sensorValue ชนิด integer ให้มีค่าเท่ากับ 0
บรรทัดที่ 4         สร้างฟังก์ชัน setup()
บรรทัดที่ 5         เปิดฟังก์ชัน setup()
บรรทัดที่ 6         ใช้งานฟังก์ชัน Serial โดยตั้งอัตราเร็ว Baud rate อยู่ที่ 115200 บิตต่อวินาที
บรรทัดที่ 7         กำหนดให้ LED_BUILTIN ที่อยู่ขา GPIO16 เป็น OUTPUT
บรรทัดที่ 8         กำหนดค่าความละเอียดอยู่ที่ 12 bit ทำให้ค่าแอนะล็อกที่อ่านได้อยู่ระหว่าง 0 – 4095
บรรทัดที่ 9         ปิดฟังก์ชัน setup()
บรรทัดที่ 10        สร้างฟังก์ชัน loop()
บรรทัดที่ 11        เปิดฟังก์ชัน loop()
บรรทัดที่ 12        อ่านค่าแอนะล็อกจากขา sensorPin มาเก็บไว้ในตัวแปร sensorValue
บรรทัดที่ 13        แสดงคำว่า “Sensor Value: ” ออกทาง Serial Monitor
บรรทัดที่ 14        แสดงค่าในตัวแปร sensorValue ออกทาง Serial Monitor
บรรทัดที่ 15        ตรวจสอบว่าค่า sensorValue มีค่ามากกว่าค่า threshold หรือไม่ และเปิดฟังก์ชันถ้าค่าในตัวแปร sensorValue มากกว่าค่า threshold
บรรทัดที่ 16        ให้ขา LED_BUILTIN มีสถานะเป็น High ทำให้ Led ดับ
บรรทัดที่ 17        แสดงคำว่า “ LED OFF” ออกทาง Serial Monitor และขึ้นบรรทัดใหม่
บรรทัดที่ 18        ปิดฟังก์ชันถ้าค่า ในตัวแปร sensorValue มากกว่าค่า thresholdและเปิดฟังก์ชัน ถ้าค่า sensorValue ไม่มากกว่าค่า threshold
บรรทัดที่ 19        ให้ขา LED_BUILTIN มีสถานะเป็น Low ทำให้ Led ติด
บรรทัดที่ 20        แสดงคำว่า “ LED ON” ออกทาง Serial Monitor และขึ้นบรรทัดใหม่
บรรทัดที่ 21        ปิดฟังก์ชัน ถ้าค่า sensorValue ไม่มากกว่าค่า threshold
บรรทัดที่ 22        หน่วงเวลา 100 มิลลิวินาที
บรรทัดที่ 23        ปิดฟังก์ชัน loop()

ผลการทดลอง 

        เมื่อบอร์ด ESPino32 เริ่มทำงาน โปรแกรมจะอ่านค่าแอนะล็อกที่ได้จากวงจรแบ่งแรงดันรูปด้านบน จะเห็นได้ว่าเมื่อมีแสงมาตกกระทบที่ตัว LDR มากค่าแอนะล็อกที่บอร์ด ESPino32 อ่านได้จะมีค่ามากไปด้วย และถ้าตรวจสอบค่าแล้วพบว่าค่าแอนะล็อกที่อ่านได้มีค่ามากกว่าค่า threshold ที่ตั้งไว้โปรแกรมจะสั่งให้ Led ดับ แล้วแสดงคำว่า “ LED OFF” ออกมา เมื่อนำวัตถุมาบังไม่ให้แสงตกใส่ LDR บอร์ด ESPino32 จะอ่านค่าแอนะล็อกได้น้อยลงโปรแกรมจึงสั่งให้ Led ติด แล้วแสดงคำว่า “ LED ON” ออกมา หรือสรุปสั้นๆได้ว่า สว่างไฟดับ มืดไฟติด

ผลลัพธ์การอ่านค่าแอนะล็อกโดยอ่านค่าความเข้มแสงจาก LDR

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

หมายเหตุ การอ่านค่าแอนะล็อกของบอร์ด ESPino32 ปัจจุบันยังเกิดปัญหาอยู่จากตัว ADC ภายในของ ESP32 ทำให้ค่าแอนะล็อกที่อ่านได้ไม่เป็นเชิงเส้นตรงตามความเป็นจริง ดังนั้น หากต้องการความเที่ยงตรงในการอ่านค่าแนะนำให้ใช้โมดูลหรือไอซีสำหรับอ่านค่า ADC โดยเฉพาะ เช่น ADS1115MCP3008 เป็นต้น

สารบัญ บทความ ESPino32