บทความ ESPino32 ตอนที่ 13 การใช้งานเซ็นเซอร์

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

บทความ ESPino32 ตอนที่ 13 การใช้งานเซ็นเซอร์

        บทความ ESPino32 ตอนที่ 13 การใช้งานเซ็นเซอร์ เป็นการใช้งานบอร์ดไมโครคอนโทรเลอร์เพื่อทำการใช้งานเซ็นเซอร์ต่างๆ ในบทความนี้จะใช้บอร์ด ESPino32 ต่อใช้งานเซ็นเซอร์พื้นฐานบางประเภท เช่น

– DHT22 Temperature and Humidity Sensor ใช้สำหรับวัดค่าอุณหภูมิและความชื้นสัมพัทธ์ในอากาศ

– DS18B20 Temperature Sensor ใช้สำหรับวัดค่าอุณหภูมิ

– BH1750 ใช้สำหรับวัดความสว่างของแสง

– PIR Motion Sensor ใช้สำหรับตรวจจับความเคลื่อนไหวของสิ่งมีชีวิต

– Ultrasonic Sensor ใช้สำหรับตรวจจับระยะทางระหว่าง Ultrasonic Sensor และวัตถุที่ตรวจสอบ

การติดตั้งไลบรารี่สำหรับใช้งานกับเซ็นเซอร์ต่างๆ บนโปรแกรม Arduino IDE

        ไลบรารี่ (Library) คือ ชุดโปรแกรมตัวอย่างสำหรับการใช้งานเซ็นเซอร์หรือโมดูลอื่นๆ ที่อำนวยความสะดวกให้แก่ผู้ใช้งาน ทำให้ผู้ใช้งานสามารถดูตัวอย่างการใช้งานฟังก์ชันต่างๆได้โดยง่าย การติดตั้งไลบรารี่สามารถติดตั้งได้หลายวิธี วิธีที่ง่ายที่สุดคือติดตั้งผ่าน Library Manager (ใช้ได้ตั้งแต่เวอร์ชัน 1.6.2 ขึ้นไป) การติดตั้งไลบรารี่นั้นมีอยู่หลายวิธีสามารถดูข้อมูลการติดตั้งไลบรารี่เพิ่มเติมได้จาก https://www.arduino.cc/en/Guide/Libraries

ขั้นตอนการติดตั้งไลบรารี่บนโปรแกรม Arduino IDE

1. เลือก Sketch > Include Library > Manage Libraries…

2. ค้นหาเซ็นเซอร์โมดูลหรือโมดูลอื่นๆที่เกี่ยวข้อง ในช่องค้นหา > เลือกเวอร์ชันของไลบรารี่ (แนะนำเป็นเวอร์ชันล่าสุด) > Install

3. เมื่อติดตั้งไลบรารี่สำเร็จจะแสดงคำว่า “INSTALLED” ขึ้นหลังแพ็กเกจของไลบรารี่ที่เลือก

4. เลือกตัวอย่างโปรแกรม ทดสอบ Compile และใช้งาน

Temperature and Humidity Sensor สำหรับวัดค่าอุณหภูมิและความชื้นสัมพัทธ์ในอากาศ

        DHT11/DHT22 Temperature and Humidity Sensor คือเซ็นเซอร์สำหรับวัดอุณหภูมิและความชื้นสัมพัทธ์ในอากาศ สามารถนำเซ็นเซอร์ไปประยุกต์ใช้ในงานด้าน IoT, Smart Farm, Temperature Monitor, Whether Station หรืองานด้านอื่นๆที่เกี่ยวข้องกับการวัดอุณหภูมิและความชื้นสัมพัทธ์ในอากาศได้ ในตัวอย่างนี้จะใช้บอร์ด ESPino32 ในการอ่านค่าข้อมูลจากเซ็นเซอร์ DHT22 แล้วทำการแสดงผลเป็นอุณหภูมิและความชื้นสัมพัทธ์ในอากาศ

DHT22 Temperature and Humidity Sensor

การใช้งาน DHT22 Temperature and Humidity Sensor จะใช้ขา DATA เพียงขาเดียวในการรับ/ส่งข้อมูล บนโมดูลDHT22 จะมีแค่ขาสำหรับใช้งานจำนวน 4 ขา (เวลาใช้งานจริง 3 ขา ในกรณีที่ใช้แค่ตัวโมดูลต้องต่อตัวต้านทาน pull-up ที่ขา DATA ด้วย) ดังรูป DHT22 Pinout

DHT22 Pinout

ต่อวงจรดังรูป ESPino32 ใช้งาน DHT22

ESPino32 ใช้งาน DHT22

หลังจากต่อวงจรเสร็จแล้ว ให้ผู้ใช้งานติดตั้งไลบรารี่ “DHT” ลงในโปรแกรม Arduino IDE โดยติดตั้งผ่านทาง Library Manager ในลิสต์จะมีหลายรายการ ให้ผู้ใช้งานเลือกไลบรารี่ ของ Adafruit (ถ้าใช้ไลบรารี่ของ Adafruit ต้องเพิ่ม https://github.com/adafruit/Adafruit_Sensor ด้วย) ดังรูป ติดตั้งไลบรารี่ DHT ผ่านทาง Library Manager

ติดตั้งไลบรารี่ DHT ผ่านทาง Library Manager

หลังจากติดตั้งไลบรารี่สำเร็จแล้ว สามาเรียกใช้งานตัวอย่างโปรแกรมโดยเลือก File > Example > DHT Library > DHTtester ดังรูป เรียกใช้งานตัวอย่างโปรแกรม DHTtester จาก DHT Sensor Library

เรียกใช้งานตัวอย่างโปรแกรม DHTtester จาก DHT Sensor Library

        เนื่องจากตัวอย่างโปรแกรม DHTtester ใช้ขา 2 ซึ่งเป็นขา GPOI02 ของโมดูล ESP32 เป็นขา Strapping Pins เวลาต่อเซ็นเซอร์ DHT22 ค้างไว้จะไม่สามารถอัพโหลดโปรแกรมลงบนบอร์ดได้ จึงต้องเปลี่ยนขาการใช้งานเป็นขาอื่นๆ (ใช้งานได้เฉพาะขาที่เป็น I/O ดังรูป ESPino32 Pinout)

ESPino32 Pinout

ESPino32 Pinout

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

บรรทัดที่ 1         เรียกใช้งานไลบรารี่ DHT
บรรทัดที่ 2         define ค่าคงที่ DHTPIN ให้มีค่าเท่ากับ 4 (ขาบอร์ดที่ต่อกับเซ็นเซอร์ DHT22)
บรรทัดที่ 3         define ค่าคงที่ DHTTYPE ให้มีค่าเท่ากับ DHT22 (ชนิดของเซ็นเซอร์ DHT)
บรรทัดที่ 4         เรียกใช้ไลบรารี่ DHT โดยใช้ชื่อออปเจค dht ที่มีพารามิเตอร์คือ DHTPIN และ DHTTYPE
บรรทัดที่ 5         สร้างฟังก์ชัน setup()
บรรทัดที่ 6         เปิดฟังก์ชัน setup()
บรรทัดที่ 7         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate ของ Serial อยู่ที่ 9600 บิตต่อวินาที
บรรทัดที่ 8         แสดงคำว่า “DHTxx test!” และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 9         เริ่มใช้งานออปเจค dht
บรรทัดที่ 10        ปิดฟังก์ชัน setup()
บรรทัดที่ 11        สร้างฟังก์ชัน loop()
บรรทัดที่ 12        เปิดฟังก์ชัน loop()
บรรทัดที่ 13        หน่วงเวลา 2000 มิลลิวินาที
บรรทัดที่ 14        ประกาศตัวแปร h ชนิด float จากนั้นอ่านค่าความชื้นสัมพัทธ์ในอากาศมาเก็บไว้ในตัวแปร h
บรรทัดที่ 15        ประกาศตัวแปร t ชนิด float จากนั้นอ่านอุณหภูมิในหน่วยองศาเซลเซียสมาเก็บไว้ในตัวแปร t
บรรทัดที่ 16        ประกาศตัวแปร f ชนิด float จากนั้นอ่านอุณหภูมิในหน่วยองศาฟาเรนไฮต์มาเก็บไว้ในตัวแปร f
บรรทัดที่ 17           ตรวจสอบค่าในตัวแปร h หรือ t หรือ f ว่ามีเท่ากับเป็น nan หรือเปล่า และเปิดฟังก์ชันถ้าค่าในตัวแปร h หรือ t หรือ f ว่ามีเท่ากับเป็น nan
บรรทัดที่ 18        แสดงคำว่า “Failed to read from DHT sensor!” และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 19        ใช้คำสั่ง return ทำให้วนรอบการทำงานใหม่อีกครั้งหนึ่ง
บรรทัดที่ 20        ปิดฟังก์ชันถ้าค่าในตัวแปร h หรือ t หรือ f ว่ามีเท่ากับเป็น nan
บรรทัดที่ 21        ประกาศตัวแปร hif ชนิด float จากนั้นใช้ตัวแปร f และ ตัวแปร h เข้าฟังก์ชันคำนวนค่า Heat Index มาเก็บไว้ในตัวแปร f
บรรทัดที่ 22        ประกาศตัวแปร hic ชนิด float จากนั้นใช้ตัวแปร f ตัวแปร h และ false เข้าฟังก์ชันคำนวนค่า Heat Index มาเก็บไว้ในตัวแปร hic
บรรทัดที่ 23        แสดงคำว่า “Humidity: ” ออกทาง Serial Monitor
บรรทัดที่ 24        แสดงค่าในตัวแปร h ออกทาง Serial Monitor
บรรทัดที่ 25        แสดง tab ออกทาง Serial Monitor
บรรทัดที่ 26        แสดงคำว่า “Temperature: ” ออกทาง Serial Monitor
บรรทัดที่ 27        แสดงค่าในตัวแปร t ออกทาง Serial Monitor
บรรทัดที่ 28        แสดงคำว่า “ *C ” ออกทาง Serial Monitor
บรรทัดที่ 29        แสดงค่าในตัวแปร f ออกทาง Serial Monitor
บรรทัดที่ 30        แสดงคำว่า “ *F” และ tab ออกทาง Serial Monitor
บรรทัดที่ 31        แสดงคำว่า “Heat index: ” ออกทาง Serial Monitor 
บรรทัดที่ 32        แสดงค่าในตัวแปร hic ออกทาง Serial Monitor
บรรทัดที่ 33        แสดงคำว่า “ *C ” ออกทาง Serial Monitor
บรรทัดที่ 34        แสดงค่าในตัวแปร hif ออกทาง Serial Monitor
บรรทัดที่ 35        แสดงคำว่า “ *F” ออกทาง Serial Monitor
บรรทัดที่ 36        ปิดฟังก์ชัน loop()

ผลการทดลอง

        เมื่อบอร์ด ESPino32 เริ่มทำงาน โปรแกรมจะอ่านค่าจากเซ็นเซอร์ DHT22 แล้วนำค่าที่ได้ใส่ลงในตัวแปร h t และ f จากนั้นจะนำค่าในตัวแปรไปตรวจสอบว่ามีค่าเท่ากับ nan หรือไม่ ถ้ามีค่าเป็น nan โปรแกรมจะแสดงคำว่า “Failed to read from DHT sensor!” แล้วกลับไปตรวจสอบใหม่อีกครั้ง หากโปรแกรมอ่านค่าใส่ในตัวแปร h t และ f แล้วมีไม่เท่ากับ nan จะแสดงค่าที่อ่านได้ออกมาทาง Serial Monitor ดังรูป ผลลัพธ์การอ่านค่าจากเซ็นเซอร์จาก DHT22 จากนั้นโปรแกรมจะกลับไปวนรอบการทำงานในฟังก์ชัน loop() ต่อไป

ผลลัพธ์การอ่านค่าจากเซ็นเซอร์จาก DHT22

DS18B20 Temperature Sensor สำหรับวัดค่าอุณหภูมิ

        DS18B20 Temperature Sensor คือเซ็นเซอร์สำหรับวัดอุณหภูมิ (-55 °C ถึง 125 °C) สามารถนำเซ็นเซอร์ไปประยุกต์ใช้ในงานด้าน IoT, Smart Farm, Temperature Monitor, Whether Station หรืองานด้านอื่นๆที่เกี่ยวข้องกับการวัดอุณหภูมิได้ คล้ายๆกับ DHT11/DHT22 Temperature and Humidity Sensor ข้อดีของ DS18B20 Temperature Sensor คือมีรูปแบบแพ็คเกจของตัวเซ็นเซอร์หลากหลายรูปแบบ เช่น รูปแบบไอซี รูปแบบหัวเซ็นเซอร์แบบกันน้ำ ทำให้สามารถใช้วัดอุณหภูมิในของเหลวได้ ดังรูป DS18B20 Temperature Sensor ในตัวอย่างนี้จะใช้บอร์ด ESPino32 อ่านค่าข้อมูลจากเซ็นเซอร์ DS18B20 Temperature Sensor แล้วทำการแสดงผลเป็นอุณหภูมิแสดงออกทาง Serial Monitor โดยผู้ใช้งานสามารถเลือกใช้แพ็กเกจของเซ็นเซอร์ DS18B20 ให้เหมาะสมกับชนิดของงานที่ใช้ได้ตามต้องการ

DS18B20 Temperature Sensor

การใช้งาน DS18B20 Temperature Sensor จะใช้ขา DQ เพียงขาเดียวในการรับ/ส่งข้อมูล (1-Wire) ดังรูป DS18B20 Pinout เวลาใช้งานต้องต่อตัวต้านทาน 4.7kΩ pull-up ไว้ที่ขา DQ ด้วย

DS18B20 Pinout

ต่อวงจรดังรูป ESPino32 ใช้งาน DS18B20

ESPino32 ใช้งาน DS18B20

หลังจากต่อวงจรเสร็จแล้ว ให้ผู้ใช้งานติดตั้งไลบรารี่ “DS18B20” (DallasTemperature) และไลบรารี่ “OneWire” ลงในโปรแกรม Arduino IDE โดยติดตั้งผ่านทาง Library Manager ดังรูป ติดตั้งไลบรารี่ DS18B20 และไลบรารี่ OneWire ผ่านทาง Library Manager

ติดตั้งไลบรารี่ DS18B20 และไลบรารี่ OneWire ผ่านทาง Library Manager

หลังจากติดตั้ง Library สำเร็จแล้ว สามาเรียกใช้งานตัวอย่างโปรแกรมโดยเลือก File à Example à DallasTemperature à Simple ดังรูป เรียกใช้งานตัวอย่างโปรแกรม Simple จาก DallasTemperature Library

เรียกใช้งานตัวอย่างโปรแกรม Simple จาก DallasTemperature Library

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

        เนื่องจากตัวอย่างโปรแกรม Simple ใช้ขา 2 ซึ่งเป็นขา GPOI02 ของโมดูล ESP32 เป็นขา Strapping Pins เวลาต่อเซ็นเซอร์ DS18B20 ค้างไว้จะไม่สามารถอัพโหลดโปรแกรมลงบนบอร์ดได้ จึงต้องเปลี่ยนขาการใช้งานเป็นขาอื่นๆ (ใช้งานได้เฉพาะขาที่เป็น I/O เช่นเดียวกับตัวอย่างการใช้งาน DHT22)

บรรทัดที่ 1         เรียกใช้งานไลบรารี่ OneWire
บรรทัดที่ 2         เรียกใช้งานไลบรารี่ DallasTemperature
บรรทัดที่ 3         define ค่าคงที่ ONE_WIRE_BUS ให้มีค่าเท่ากับ 4 (ขาที่ต่อกับ DS18B20)
บรรทัดที่ 4         เรียกใช้ไลบรารี่ OneWire โดยใช้ชื่อออปเจค OneWire ที่มีพารามิเตอร์คือ ONE_WIRE_BUS
บรรทัดที่ 5         เรียกใช้ไลบรารี่ DallasTemperature โดยใช้ชื่อออปเจค sensors ที่มีพารามิเตอร์คือ &OneWire
บรรทัดที่ 6         สร้างฟังก์ชัน setup()
บรรทัดที่ 7         เปิดฟังก์ชัน setup()
บรรทัดที่ 8         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate ของ Serial อยู่ที่ 9600 บิตต่อวินาที
บรรทัดที่ 9         แสดงคำว่า “Dallas Temperature IC Control Library Demo” และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 10        เริ่มใช้งานออปเจค sensors
บรรทัดที่ 11        ปิดฟังก์ชัน setup()
บรรทัดที่ 12        สร้างฟังก์ชัน loop()
บรรทัดที่ 13        เปิดฟังก์ชัน loop()
บรรทัดที่ 14        แสดงคำว่า “Requesting temperatures…” และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 15        ใช้งานฟังก์ชันอ่านค่าอุณหภูมิจากออปเจค sensors
บรรทัดที่ 16        แสดงคำว่า “DONE” และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 17        แสดงคำว่า “Temperature for the device 1 (index 0) is:” ออกทาง Serial Monitor
บรรทัดที่ 18        แสดงค่าอุณหภูมิที่อ่านได้จากออปเจค sensors ลำดับแรก และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 19        หน่วงเวลา 1000 มิลลิวินาที
บรรทัดที่ 20        ปิดฟังก์ชัน loop()

ผลการทดลอง

        เมื่อบอร์ด ESPino32 เริ่มทำงาน โปรแกรมจะอ่านค่าจากเซ็นเซอร์ DS18B20 และแสดงค่าที่อ่านได้ออกมาทาง Serial Monitor ดังรูป ผลลัพธ์การอ่านค่าจากเซ็นเซอร์จาก DS18B20 จากนั้นโปรแกรมจะกลับไปวนรอบการทำงานในฟังก์ชัน loop() ต่อไป

ผลลัพธ์การอ่านค่าจากเซ็นเซอร์จาก DS18B20

BH1750 Lux Sensor สำหรับวัดความสว่างของแสง

BH1750 Lux Sensor คือเซ็นเซอร์สำหรับวัดความสว่างของแสง สามารถวัดความสว่างของแสงได้ตั้งแต่ 1 lx ถึง 65535 lx เชื่อมต่อกับบอร์ดไมโครคอนโทรเลอร์ผ่านทาง I2C Bus สามารถนำเซ็นเซอร์ไปประยุกต์ใช้ในงานด้าน IoT, Smart Farm, Lux Monitor, ระบบควบคุมการเปิด-ปิดอัติโนมัติจากความเข้มแสงในระดับต่างๆ หรืองานอื่นๆที่เกี่ยวข้องกับการวัดความเข้มแสง ในตัวอย่างนี้จะใช้บอร์ด ESPino32 อ่านค่าข้อมูลจาก BH1750 Lux Sensor แล้วทำการแสดงผลเป็นอุณหภูมิแสดงออกทาง Serial Monitor

ต่อวงจรดังรูป ESPino32 ใช้งาน BH1750

ESPino32 ใช้งาน BH1750

หลังจากต่อวงจรเสร็จแล้ว ให้ผู้ใช้งานติดตั้งไลบรารี่ “BH1750” ลงในโปรแกรม Arduino IDE โดยติดตั้งผ่านทาง Library Manager ดังรูป ติดตั้งไลบรารี่ BH1750 ผ่านทาง Library Manager

ติดตั้งไลบรารี่ BH1750 ผ่านทาง Library Manager

หลังจากติดตั้ง Library สำเร็จแล้ว สามาเรียกใช้งานตัวอย่างโปรแกรมโดยเลือก File > Example > BH1750FVI > BH1750FVI_Sample ดังรูป เรียกใช้งานตัวอย่างโปรแกรม BH1750FVI_Sample จาก BH1750FVI Library

เรียกใช้งานตัวอย่างโปรแกรม BH1750FVI_Sample จาก BH1750FVI Library

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

บรรทัดที่ 1         เรียกใช้งานไลบรารี่ Wire
บรรทัดที่ 2         เรียกใช้งานไลบรารี่ BH1750FVI
บรรทัดที่ 3         ประกาศตัวแปร ADDRESSPIN แบบ uint8_t ให้มีค่าเท่ากับ 13 (ขาที่ต่อกับ ADDR ของโมดูล BH1750)
บรรทัดที่ 4         เรียกใช้ไลบรารี่ BH1750FVI โดยตั้งค่าพารามิเตอร์ DEVICEADDRESS ให้มีค่าเท่ากับ k_DevAddress_H
บรรทัดที่ 5         เรียกใช้ไลบรารี่ BH1750FVI โดยตั้งค่าพารามิเตอร์ DEVICEMODE ให้มีค่าเท่ากับ k_DevModeContentHighRes
บรรทัดที่ 6         เรียกใช้ไลบรารี่ BH1750FVI โดยใช้ชื่อออปเจค LightSensor ที่มีพารามิเตอร์คือ ADDRESSPIN DEVICEADDRESS และ DEVICEMODE
บรรทัดที่ 7         สร้างฟังก์ชัน setup()
บรรทัดที่ 8         เปิดฟังก์ชัน setup()
บรรทัดที่ 9         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate ของ Serial อยู่ที่ 115200 บิตต่อวินาที
บรรทัดที่ 10        เริ่มใช้งานออปเจค LightSensor
บรรทัดที่ 11        แสดงคำว่า “Running…” และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 12        ปิดฟังก์ชัน setup()
บรรทัดที่ 13        สร้างฟังก์ชัน loop()
บรรทัดที่ 14        เปิดฟังก์ชัน loop()
บรรทัดที่ 15        ประกาศตัวแปร lux แบบ uint16_t และอ่านค่าจากออปเจค LightSensor มาเก็บไว้ในตัวแปร lux
บรรทัดที่ 16        แสดงคำว่า “Light: ” ออกทาง Serial Monitor
บรรทัดที่ 17        แสดงค่าในตัวแปร lux ออกทาง Serial Monitor
บรรทัดที่ 18        หน่วงเวลา 250 มิลลิวินาที
บรรทัดที่ 19        ปิดฟังก์ชัน loop()

ผลการทดลอง

        เมื่อบอร์ด ESPino32 เริ่มทำงาน โปรแกรมจะตั้งค่าพารามิเตอร์ต่างๆที่ใช้สำหรับการอ่านข้อมูลแบบอนุกรม I2C จากนั้นโปรแกรมจะอ่านค่าจากเซ็นเซอร์ BH1750 และแสดงค่าที่อ่านได้ออกมาทาง Serial Monitor ดังรูป ผลลัพธ์การอ่านค่าจากเซ็นเซอร์จาก BH1750 จากนั้นโปรแกรมจะกลับไปวนรอบการทำงานในฟังก์ชัน loop() ต่อไป

ผลลัพธ์การอ่านค่าจากเซ็นเซอร์ BH1750

PIR Motion Sensor สำหรับตรวจจับความเคลื่อนไหวของสิ่งมีชีวิต

        PIR Motion Sensor คือ เซ็นเซอร์สำหรับตรวจจับคลื่นรังสี Infrared ที่แพร่ออกมาจากสิ่งมีชีวิตที่มีการเคลื่อนไหว และให้เอาต์พุตออกมา 2 อย่างคือ “ตรวจพบการเคลื่อนไหว” และ “ไม่พบการเคลื่อนไหว” สามารถนำเซ็นเซอร์ไปประยุกต์ใช้ในงานด้านตรวจจับการเคลื่อนไหวของสิ่งมีชีวิต หรือ ตรวจจับการบุกรุกในงานด้านรักษาความปลอดภัย ในตัวอย่างนี้จะใช้บอร์ด ESPino32 อ่านค่าข้อมูลจาก PIR Motion Sensor จากนั้นแสดงผลเป็น “ตรวจพบการเคลื่อนไหว” และ “ไม่ตรวจพบการเคลื่อนไหว” ออกทาง Serial Monitor

ในตัวอย่างนี้ใช้ PIR Motion Sensor ที่มีเอาต์พุตที่ขา OUT เป็นแบบดิจิทัล High หรือ Low และเลือกจั๊มเปอร์ให้มีเอาต์พุตเมื่อตรวจพบการเคลื่อนไหวให้มีผลลัพธ์เป็น High ดังรูป PIR Motion Sensor Pinout

PIR Motion Sensor Pinout

ต่อวงจรดังรูป ESPino32 ใช้งาน PIR Motion Sensor

ESPino32 ใช้งาน PIR Motion Sensor

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

บรรทัดที่ 1         ประกาศตัวแปร pirPin ชนิด int ที่เป็นค่าคงที่ให้มีค่าเท่ากับ 4 (ขาที่ต่อกับ PIR Motion Sensor)
บรรทัดที่ 2         สร้างฟังก์ชัน setup()
บรรทัดที่ 3         เปิดฟังก์ชัน setup()
บรรทัดที่ 4         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate ของ Serial อยู่ที่ 9600 บิตต่อวินาที
บรรทัดที่ 5         กำหนดให้ pirPin เป็น INPUT
บรรทัดที่ 6         ปิดฟังก์ชัน setup()
บรรทัดที่ 7         สร้างฟังก์ชัน loop()
บรรทัดที่ 8         เปิดฟังก์ชัน loop()
บรรทัดที่ 9         ประกาศตัวแปร pirState และอ่านค่าสถานะทางดิจิทัลจากขา pirPin จากนั้นนำมาเก็บไว้ในตัวแปร pirState
บรรทัดที่ 10        แสดงค่าในตัวแปร pirState และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 11        หน่วงเวลา 10 มิลลิวินาที
บรรทัดที่ 12        ปิดฟังก์ชัน loop()

ผลการทดลอง

        เมื่อบอร์ด ESPino32 เริ่มทำงาน โปรแกรมจะอ่านข้อมูลสถานะทางดิจิทัลจากขา pirPin ใส่ในตัวแปร pirState และแสดงค่าในตัวแปร pirState ออกทาง Serial Monitor ดังรูป ผลลัพธ์การอ่านค่าจาก PIR Motion Sensor จากนั้นโปรแกรมจะกลับไปวนรอบการทำงานในฟังก์ชัน loop() ต่อไป

ผลลัพธ์การอ่านค่าจาก PIR Motion Sensor

Ultrasonic Sensor สำหรับตรวจจับระยะทางระหว่าง Ultrasonic Sensor และวัตถุที่ตรวจสอบ

Ultrasonic Sensor คือเซ็นเซอร์ตรวจจับระยะทางระหว่าง Ultrasonic Sensor และวัตถุที่ตรวจสอบ โดยอาศัยหลักการทำงานคือตัวส่งส่งข้อมูลในรูปแบบของคลื่นเสียงออกไปในอากาศให้คลื่นเสียงนั้นไปกระทบกับวัตถุที่ต้องการตรวจสอบ จากนั้นตัวรับจะรับข้อมูลคลื่นเสียงที่สะท้อนกลับมาเพื่อคำนวณหาระยะทาง เซ็นเซอร์ที่ใช้ในตัวอย่างบทความนี้สามารถตรวจจับระยะทางได้ตั้งแต่ 2cm ถึง 4m  สามารถนำเซ็นเซอร์ไปประยุกต์ใช้ในงานต่างๆ เช่น ใช้กับหุ่นยนต์เพื่อตรวจจับสิ่งกีดขวาง วัดปริมาณน้ำในถัง หรืองานอื่นๆที่เกี่ยวข้องกับการวัดระยะทาง ในตัวอย่างนี้จะใช้บอร์ด ESPino32 เขียนโปรแกรมเพื่ออ่านค่าข้อมูลจาก Ultrasonic Sensor ดังรูป Timing diagram ของ Ultrasonic Sensor แล้วทำการแสดงผลเป็นระยะทางที่วัดได้ออกทาง Serial Monitor

Timing diagram ของ Ultrasonic Sensor

ต่อวงจรดังรูป ESPino32 ใช้งาน Ultrasonic Sensor

ESPino32 ใช้งาน Ultrasonic Sensor

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

บรรทัดที่ 1         ประกาศตัวแปร trigPin ชนิด int ที่เป็นค่าคงที่ให้มีค่าเท่ากับ 33 (ขา trig ของ Ultrasonic)
บรรทัดที่ 2         ประกาศตัวแปร echoPin ชนิด int ที่เป็นค่าคงที่ให้มีค่าเท่ากับ 32 (ขา echo ของ Ultrasonic)
บรรทัดที่ 3         ประกาศตัวแปร duration ชนิด long
บรรทัดที่ 4         ประกาศตัวแปร distance ชนิด int
บรรทัดที่ 5         สร้างฟังก์ชัน setup()
บรรทัดที่ 6         เปิดฟังก์ชัน setup()
บรรทัดที่ 7         กำหนดให้ trigPin เป็น OUTPUT
บรรทัดที่ 8         กำหนดให้ echoPin เป็น INPUT
บรรทัดที่ 9         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate ของ Serial อยู่ที่ 9600 บิตต่อวินาที
บรรทัดที่ 10        ปิดฟังก์ชัน setup()
บรรทัดที่ 11        สร้างฟังก์ชัน loop()
บรรทัดที่ 12        เปิดฟังก์ชัน loop()
บรรทัดที่ 13        สั่งงานให้ขา trigPin มีสถานะเป็น LOW
บรรทัดที่ 14        หน่วงเวลา 2 ไมโครวินาที
บรรทัดที่ 15        สั่งงานให้ขา trigPin มีสถานะเป็น HIGH
บรรทัดที่ 16        หน่วงเวลา 10 ไมโครวินาที
บรรทัดที่ 17        สั่งงานให้ขา trigPin มีสถานะเป็น LOW
บรรทัดที่ 18        อ่านช่วงเวลา เมื่อขา echoPin มีสถานะเป็น HIGH มาเก็บไว้ในตัวแปร duration
บรรทัดที่ 19        นำค่าในตัวแปร duration * 0.034 / 2 มาเก็บไว้ในตัวแปร distance
บรรทัดที่ 20        แสดงคำว่า “Distance: ” ออกทาง Serial Monitor
บรรทัดที่ 21        แสดงค่าในตัวแปร distance ออกทาง Serial Monitor
บรรทัดที่ 22        แสดงคำว่า “ cm” และขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 23        หน่วงเวลา 1000 มิลลิวินาที
บรรทัดที่ 24        ปิดฟังก์ชัน loop()

ผลการทดลอง

        เมื่อบอร์ด ESPino32 เริ่มทำงาน โปรแกรมจะสั่งให้ขา trigPin มีสถานะ LOW เป็นเวลา 2 ไมโครวินาที จากนั้นสั่งให้ขา trigPin มีสถานะ HIGH เป็นเวลา 10 ไมโครวินาที จากนั้นสั่งให้ขา trigPin มีสถานะ LOW อีก 10 ไมโครวินาทีเพื่อสั่งงานให้ Ultrasonic Sensor ส่งข้อมูลออกไป ขณะที่ Ultrasonic Sensor เริ่มส่งข้อมูลคลื่นเสียงออกไปขา echoPin จะมีสถานะเป็น HIGH หลังจากส่งข้อมูลออกไปโปรแกรมจะจับระยะเวลาขณะที่สถานะทางลอจิกของขา echoPin มีสถานะเป็น HIGH เพื่อนำมาเข้าสูตรคำนวนและแสดงค่าที่ได้ออกมาทาง Serial Monitor ดังรูป ผลลัพธ์การอ่านค่าจาก Ultrasonic Sensor

ผลลัพธ์การอ่านค่าจาก Ultrasonic Sensor

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