บทความสร้างเครื่องนับจำนวนด้วยบอร์ด ESPino เป็นบทความสร้างเครื่องมือสำหรับนับจำนวนด้วยอุปกรณ์อิเล็กทรอนิกส์ โดยบทความนี้ใช้งานบอร์ด ESPino (ESP8266) ที่เป็นบอร์ดไมโครคอนโทรเลอร์ที่มี WiFi ในการประมวลผล สามารถประยุกต์ใช้นับจำนวนสินค้าผ่านสายพานลำเลียง นับจำนวนคนเดินผ่าน นับจำนวนรถเข้าออก หรืออื่นๆตามต้องการและจากนั้นก็จะทำการอัพเดทข้อมูลไปเเสดงผลยังเเอพพลิเคชัน Blynk เพื่อดูข้อมูลแบบเรียลไทม์ใน Smart Device ดังรูป เครื่องนับจำนวนด้วยบอร์ด ESPino
หลักการทำงาน Photoelectric sensor
Photoelectric Sensor คือเซ็นเซอร์สำหรับวัดประเภทอินฟราเรดอย่างหนึ่ง ทำงานโดยอาศัยหลักการสะท้อนหรือการหักเหของแสงจากตัวส่ง (Emitter) ไปยังตัวรับ (Receiver) ให้เอาต์พุตเป็นลอจิก LOW เมื่อเกิดการสะท้อนของสัญญาณอินฟราเรดกลับมา หรือให้เอาต์พุตเป็นลอจิก HIGH เมื่อไม่มีการสะท้อนของสัญญาณอินฟราเรด ดังรูป เอาต์พุตของ Photoelectric Sensor
เอาต์พุตของ Photoelectric Sensor
หลังจากรู้หลักการทำงานของเซ็นเซอร์ Photoelectric Sensor แล้ว เราจะนำหลักการนี้มาประยุกต์ใช้งานร่วมกับบอร์ด ESPino เพื่อให้เกิดโครงงานชิ้นนี้ขึ้นมา
อุปกรณ์ที่ใช้
- ESPino Wifi Development Board (ETEE052) จำนวน 1 pcs บอร์ดไมโครคอนโทรลเลอร์พร้อมโมดูลสื่อสารเครือข่ายคอมพิวเตอร์ไร้สาย ใช้โมดูล WROOM-02 ชิพ ESP8266 เป็นไมโครคอนโทรลเลอร์ 32-bit ความเร็ว 80 MHz พร้อมหน่วยความจำแฟลชเมมโมรี่ขนาด 4 MB รองรับการเชื่อมต่อเครือข่ายมาตรฐาน IEEE 802.11 b/g/n สามารถพัฒนาบนแพลตฟอร์ม Arduino ได้
- Photoelectric Sensor (EFDV285) จำนวน 1 pcs เซ็นเซอร์ประเภทอินฟราเรดที่มีระยะการทำงานที่ 3 – 50 ซม. สัญญาณรบกวนมีผลน้อยเนื่องจากเป็นแสงอินฟราเรด ง่ายต่อการนำไปประกอบชิ้นงาน นอกจากนี้ยังสามารถนำไปต่อยอดใช้งานกับงานหุ่นยนต์หลบสิ่งกีดขวาง และงาน automation อื่นๆ อีกด้วย
- (TM1637) 7-Segment 4-Digit Display Module (EFDV669) จำนวน 1 pcs โมดูลสำหรับแสดงผลตัวเลข 4 หลัก หน้าจอขนาด 0.36 นิ้ว โดยมี IC เบอร์ TM1637 เป็นตัวควบคุมการทำงาน เหมาะสำหรับงานที่มีการแสดงผลด้วยตัวเลขหรือนาฬิกา ใช้งานง่าย สามารถควบคุมแต่ละหลักได้อิสระต่อกัน
- JY-MCU IIC Level Converter Module (EFDV311) จำนวน 1 pcs โมดูลสำหรับแปลงระดับเเรงดันไฟ 3.3V โวลต์เป็น 5V หรือแปลงระดับเเรงดันไฟ 5V โวลต์เป็น 3.3V
- 20 cm Male to Male Cable Jumper Wire 40 Pins (ผู้-ผู้) (ELNK050) จำนวน 1 pcs สาย Jumper Wire แบบสายแพ สามารถฉีกออกเป็นเล็กได้ 40 เส้น ความยาวสาย 20 cm ปลายหนึ่งเป็นหัว header ตัวผู้และอีกด้านหนึ่งเป็นหัว headerตัวเมีย
- 20 cm Male to Female Cable Jumper Wire 40 Pins (ผู้-เมีย) (ELNK054) จำนวน 1 pcs สาย Jumper Wire แบบสายแพ สามารถฉีกออกเป็นเล็กได้ 40 เส้น ความยาวสาย 20 cm ปลายสายเป็น header ตัวผู้ทั้งสองด้าน
- 400 point White BreadBoard (ProtoBoard) (EACC025) จำนวน 1 pcs BreadBoard หรือ ProtoBoard สำหรับวงจรทดลอง
- IP66 Waterproof Case (EFDV658) จำนวน 1 pcs กล่องอเนกประสงค์สำหรับใส่วงจร Sonoff หรือ แผ่นวงจรอื่นๆ เพื่อป้องกันแผ่นวงจรจากละอองน้ำ (IP66) พร้อม PF7 Connector ขั้วต่อกันน้ำ เหมาะแก่การนำไปใส่อุปกรณ์หรือแผงวงจรเพื่อติดตั้งภายนอกอาคาร
วงจรที่ใช้งาน
วงจรที่ใช้
สำหรับผู้ที่ยังไม่เคยใช้งานบอร์ด ESPino สามารถศึกษาการติดตั้งบอร์ดเเพ็กเกจและวิธีการใช้งานเบื้องต้นได้ที่
ไลบรารี่ที่จำเป็นต้องติดตั้งเพิ่มเติม
ตัวอย่างที่ 1 บอร์ด ESPino ตรวจจับการเคลื่อนผ่านและแสดงจำนวนผ่านจอแสดงผล
ตัวอย่างนี้จะเป็นการใช้บอร์ด ESPino ตรวจจับการเคลื่อนผ่านและแสดงจำนวนผ่านจอแสดงผลแบบ Stan Alone ก่อน โดยมีขั้นตอนการทำงานคือ เมื่อมีวัตถุเคลื่อนที่ผ่าน Photoelectric Sensor บอร์ด ESPino จะเพิ่มจำนวนนับและแสดงค่าจำนวนนับดังกล่าวผลจอ 7-Segment
โปรเเกรมที่ 1
/* เรียกใช้งานไลบรารี่ที่เกี่ยวข้อง */ #include <EEPROM.h> #include <Arduino.h> #include <TM1637Display.h> #define CLK 4 #define DIO 5 TM1637Display display(CLK, DIO); const int ir_pin = 12; const int button = 0; volatile short counter; /* ฟังก์ชันที่ถูกเรียกใช้งานเมื่อเกิด Interrupt Sensor*/ ICACHE_RAM_ATTR void detects() { Serial.print("SENSOR DETECTED!!! "); counter++; Serial.println(counter); display.clear(); display.showNumberDec(counter); writeEEPROM(counter); } /* ฟังก์ชันที่ถูกเรียกใช้งานเมื่อเกิด Interrupt จากการกดปุ่ม*/ ICACHE_RAM_ATTR void resetEEPROM() { Serial.println("Reset EEPROM!!!"); writeEEPROM(0); counter = readEEPROM(); display.showNumberDec(counter); } /* ฟังก์ชันสำหรับบันทึกค่าลง EEPROM */ void writeEEPROM(unsigned short number) { EEPROM.write(0, number >> 8); EEPROM.write(1, number & 0xFF); EEPROM.commit(); } /* ฟังก์ชันสำหรับอ่านค่าจาก EEPROM */ unsigned short readEEPROM() { byte dataHigh = EEPROM.read(0); byte dataLow = EEPROM.read(1); return (dataHigh << 8) + dataLow; } void setup(void) { Serial.begin(115200); pinMode( ir_pin , INPUT_PULLUP); pinMode( button , INPUT_PULLUP); EEPROM.begin(2); counter = readEEPROM(); Serial.print("Old counter= "); Serial.println(counter); display.setBrightness(0x0f); display.clear(); display.showNumberDec(counter); attachInterrupt(digitalPinToInterrupt(ir_pin), detects, FALLING); attachInterrupt(digitalPinToInterrupt(button), resetEEPROM, FALLING); } void loop(void) { }
หลังจากอัพโหลดโปรเเกรมที่ 1 ลงไปในบอร์ด ESPino แนะนำให้ผู้ใช้งานลองทดสอบการทำงานของโปรเเกรม โดยฟีเจอร์หลักๆของโปรเเกรมคือ
- โปรเเกรมนี้จะอ่านค่าจำนวนนับก่อนหน้านี้จากหน่วยความจำ EEPROM ของบอร์ด ESPino มาเเสดงผล ดังนั้นเมื่อไฟดับ หรือมีการปิด/เปิดตัวบอร์ดใหม่ บอร์ดจะทำงานต่อจากเดิมได้ทันที
- เมื่อมีวัตถุเคลื่อนที่ผ่านบริเวณหน้า Photoelectric Sensor เอาต์พุตของเซ็นเซอร์จะกระตุ้นให้เกิดการทำงานแบบขัดจังหวะ (Interrupt) ที่ตัวบอร์ด ESPino จากนั้นตัวบอร์ดจะบันทึกค่าจำนวนนับลงใน EEPROM เเละแสดงผลออกทางจอ 7-Segment
- เมื่อมีการกดปุ่ม PRG บนตัวบอร์ด ESPino จะเกิดการทำงานแบบขัดจังหวะ (Interrupt) ไปเรียกใช้งานฟังก์ชัน resetEEPROM() เพื่อรีเซ็ทค่าจำนวนนับเป็น 0 และแสดงผลออกทางจอ 7-Segment
ตัวอย่างที่ 2 บอร์ด ESPino ตรวจจับการเคลื่อนผ่าน แสดงจำนวนผ่านจอแสดงผล และส่งค่าไปยัง Blynk Server
การทำงานของตัวอย่างนี้จะเหมือนโปรเเกรมที่ 1 เเต่จะเพิ่มในส่วนของการอัพโหลดจำนวนนับไปยัง Blynk Server เพื่อติดตามจำนวนนับดังกล่าวผ่านสมาร์ทโฟนผ่านทางแอพพลิเคชันฟรีอย่าง Blynk ได้
เนื้อหาเริ่มต้นสำหรับคนไม่รู้จัก Blynk >> เริ่มต้น IoT App ด้วย Blynk <<
ขั้นตอนเริ่มต้นก่อนจะอัพโหลดโปรเเกรมลงบนบอร์ด ESPino จะต้องทำการสร้าง Widget บนเเอพพลิเคชัน Blynk เสียก่อน เพื่อใช้สำหรับการแสดงผลจำนวนนับ สามารถดูตัวอย่างการสร้างได้จากรูป สร้าง Value Display Widget
การตั้งค่าในรูป
- Widget: Value Display Widget
- TiTle: Count
- INPUT: Virtual V0
สร้าง Value Display Widget
ก่อนที่จะอัพโหลดโปรเเกรมลงบนบอร์ด อย่าลืมเเก้ไข 3 ส่วนคือ
- AUTH_TOKEN คือ รหัส Token ที่ได้จาก Blynk (หาได้จาก เริ่มต้น IoT App ด้วย Blynk)
- YOUR_SSID_NAME คือ Username WiFi ที่ต้องการใช้งาน
- YOUR_SSID_PASSWORD คือ PASSWORD WiFi ที่ต้องการใช้งาน
โปรเเกรมที่ 2
#include <EEPROM.h> #include <Arduino.h> #include <TM1637Display.h> #define CLK 4 #define DIO 5 TM1637Display display(CLK, DIO); const int ir_pin = 12; const int button = 0; volatile short counter; #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> char auth[] = "AUTH_TOKEN"; char ssid[] = "YOUR_SSID_NAME"; char pass[] = "YOUR_SSID_PASSWORD"; ICACHE_RAM_ATTR void detects() { Serial.print("SENSOR DETECTED!!! "); counter++; Serial.println(counter); display.clear(); display.showNumberDec(counter); writeEEPROM(counter); Blynk.virtualWrite(V0,counter); } ICACHE_RAM_ATTR void resetEEPROM() { Serial.println("Reset EEPROM!!!"); writeEEPROM(0); counter = readEEPROM(); display.showNumberDec(counter); Blynk.virtualWrite(V0,counter); } void writeEEPROM(unsigned short number) { EEPROM.write(0, number >> 8); EEPROM.write(1, number & 0xFF); EEPROM.commit(); } unsigned short readEEPROM() { byte dataHigh = EEPROM.read(0); byte dataLow = EEPROM.read(1); return (dataHigh << 8) + dataLow; } void setup(void) { Serial.begin(115200); pinMode( ir_pin , INPUT_PULLUP); pinMode( button , INPUT_PULLUP); EEPROM.begin(2); counter = readEEPROM(); Serial.print("Old counter= "); Serial.println(counter); display.setBrightness(0x0f); display.clear(); display.showNumberDec(counter); attachInterrupt(digitalPinToInterrupt(ir_pin), detects, FALLING); attachInterrupt(digitalPinToInterrupt(button), resetEEPROM, FALLING); Blynk.begin(auth, ssid, pass); Blynk.virtualWrite(V0,counter); } void loop(void) { Blynk.run(); }
หลังจากอัพโหลดโปรเเกรมที่ 2 ลงไปในบอร์ด ESPino แนะนำให้ผู้ใช้งานลองทดสอบการทำงานของโปรเเกรม โดยฟีเจอร์หลักๆของโปรเเกรมที่เพิ่มเข้ามาจากโปรเเกรมแรก จะเป็นการอัพเดทจำนวนนับขึ้นไปเเสดงผลบนเเอพพลิเคชัน Blynk ด้วย ดังรูป เครื่องนับจำนวนด้วยบอร์ด ESPino
เครื่องนับจำนวนด้วยบอร์ด ESPino
ในบทความ สร้างเครื่องนับจำนวนด้วยบอร์ด ESPino ขอจบการนำเสนอเนื้อหาเพียงเท่านี้ หากมีข้อสงสัยเพิ่มเติมสามารถสอบถามทีมงานได้ทาง อีเมล Support@thaieasyelec.com เบอร์โทร 089-514-8111 หรือ หากสนใจเลือกซื้ออุปกรณ์สามารถขอใบเสนอราคาได้ที่อีเมล Sales@thaieasyelec.com หรือสั่งซื้อทางหน้าเว็บไซต์ที่ https://www.thaieasyelec.com/