ไม้เท้าอัจฉริยะ (The smart cane)

ผู้เขียนบทความ

นางสาววรรณศิริ ด้วงฉุย วต. 167404140030

1. ความเป็นมา

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

2. วัตถุประสงค์

2.1 เพื่อช่วยความปลอดภัยในการเดินให้กับผู้สูงอายุและผู้พิการทางสายตา

2.2 เพื่อลดความเสี่ยงจากการชนสิ่งกีดขวาง

2.3 ส่งเสริมคุณภาพชีวิต และความอิสระของผู้ใช้งาน

3. ขอบเขต

3.1 ใช้ Esp 32 Cam สำหรับการถ่ายภาพแสดงผลภาพในแอปพิเคชัน blynk โดยไม่ทำหน้าที่ประมวลผลเซ็นเซอร์

3.2 การตรวจจับเหตุการณ์ล้ม (จาก MPU6050) จะเป็นตัวกระตุ้นให้บอร์ด ESP32 ส่งสัญญาณไปยัง ESP32-CAM เพื่อถ่ายภาพและอัปโหลดขึ้น Blynk เพื่อยืนยันเหตุการณ์จริง

3.3 ใช้งานได้ทั้งในสภาวะกลางวันและกลางคืน โดยมี LDR ควบคุมความสว่างของ LED อัตโนมัติ

3.4 ใช้ บอร์ด ESP32 เป็นหน่วยประมวลผลหลัก ทำหน้าที่อ่านค่าเซนเซอร์ต่าง ๆ เช่น MPU6050, VL53L0X, HC-SR04, LDR module และควบคุมการทำงานของอุปกรณ์เอาต์พุต เช่น มอเตอร์สั่น (AH 024) และ หลอด LED 3W

4. ประโยชน์ที่คาดว่าจะได้รับ

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

4.2 ผู้ดูแลสามารถ ตรวจสอบสถานการณ์ผ่านแอปพลิเคชัน Blynk ได้แบบเรียลไทม์ เมื่อเกิดเหตุการณ์ฉุกเฉิน

4.3 ลดความเสี่ยงจากการเดินชนสิ่งของ หรืออุบัติเหตุจากพื้นต่างระดับ ด้วยการใช้เซนเซอร์วัดระยะและการสั่นเตือน

4.4 ช่วยให้ผู้ใช้งานสามารถ ใช้งานไม้เท้าได้อย่างสะดวกในที่มืด ด้วยระบบเปิด–ปิดไฟ LED อัตโนมัติ

5. ความรู้ที่เกี่ยวข้อง

ความรู้ที่เกี่ยวข้องด้านฮาร์ดแวร์ Hardware

5.1 ESP 32

ESP32 คือ ไมโครคอนโทรลเลอร์ (Microcontroller) รุ่นหนึ่งที่ผลิตโดยบริษัท Espressif Systems
เป็นบอร์ดควบคุมขนาดเล็ก แต่มีความสามารถสูง สามารถเชื่อมต่อ Wi-Fi และ Bluetooth ได้ในตัว
จึงนิยมใช้ในงาน Internet of Things (IoT) เช่น บ้านอัจฉริยะ ระบบแจ้งเตือน อุปกรณ์ตรวจวัดต่าง ๆ และโครงงานอิเล็กทรอนิกส์นักศึกษา

คุณสมบัติเด่น

  1. มี CPU แบบ Dual Core (2 แกน) ความเร็วสูงถึง 240 MHz
  2. มี หน่วยความจำ RAM และ Flash เพียงพอ สำหรับงาน IoT
  3. รองรับ การเชื่อมต่อไร้สาย Wi-Fi 2.4 GHz และ Bluetooth BLE
รูปภาพ ESP 32อ้างอิงจากเว็บไซต์ https://www.imiconsystem.com/wp-content/uploads/2023/01/esp32-devkit-v1-1-3.jpg

5.2 ESP 32 CAM

ESP32-CAM คือบอร์ดไมโครคอนโทรลเลอร์ที่มีชิป ESP32 เป็นหัวใจหลัก และมี กล้อง (Camera) ติดตั้งมาด้วยในตัวบอร์ดนี้ถูกออกแบบมาสำหรับ งานถ่ายภาพ วิดีโอ และ IoT แบบไร้สาย เช่น กล้องวงจรปิดอัจฉริยะ (Smart CCTV) ระบบตรวจจับการเคลื่อนไหว กล้องในโครงงานหุ่นยนต์ หรือ Smart Cane (ไม้เท้าอัจฉริยะ)

คุณสมบัติเด่น

  1. ใช้ชิป ESP32-S (Dual-Core 240 MHz)
  2. มี Wi-Fi และ Bluetooth (BLE) ในตัว
  3. มีกล้อง OV2640 ความละเอียดสูงสุด 2 ล้านพิกเซล
  4. มี ช่อง MicroSD Card สำหรับบันทึกรูปหรือวิดีโอ
  5. ใช้ไฟ 5 V (หรือ 3.3 V)
รูปภาพ ESP 32 CAM อ้างอิงจากเว็บไซต์ https://m.media-amazon.com/images/I/71tPi8Dn1hL.jpg

5.3 เซ็นเซอร์ MPU6050

MPU6050 เป็นเซ็นเซอร์ตรวจจับการเคลื่อนไหวแบบ 6 แกน (6-Axis Motion Sensor) ที่ภายในประกอบด้วย
Accelerometer (ตัวตรวจวัดความเร่งเชิงเส้น) และ Gyroscope (ตัวตรวจวัดการหมุน) รวมอยู่ในชิปเดียวกัน
ทำให้สามารถตรวจจับการเอียง การสั่น การเคลื่อนที่ และการหมุนของวัตถุได้อย่างแม่นยำ

เซ็นเซอร์ชนิดนี้เป็นที่นิยมอย่างมากในงานด้าน หุ่นยนต์ (Robotics), โดรน (Drone), อุปกรณ์สวมใส่อัจฉริยะ (Wearable Devices)
รวมถึง โครงงาน IoT ด้านความปลอดภัย เช่น “ไม้เท้าอัจฉริยะ (Smart Cane)” ซึ่งใช้ตรวจจับการล้มหรือการเอียงของผู้ใช้งาน

คุณสมบัติของ MPU6050

  1. ช้เทคโนโลยี MEMS (Micro-Electro-Mechanical Systems)
  2. สามารถวัดค่าได้ทั้งในแกน X, Y, Z
  3. ใช้การสื่อสารแบบ I²C (Inter-Integrated Circuit)
  4. รองรับแรงดันไฟฟ้า 3.3V ถึง 5V

หลักการทำงาน

  1. Accelerometer จะตรวจจับการเร่งและแรงโน้มถ่วง เพื่อใช้วัด “มุมเอียง” ของวัตถุ
  2. Gyroscope จะตรวจจับการหมุนรอบแกนทั้งสาม
  3. เมื่อนำค่าทั้งสองส่วนมาประมวลผลร่วมกัน จะสามารถระบุการเคลื่อนไหวของวัตถุในอวกาศ 3 มิติได้อย่างแม่นยำ
  4. Accelerometer จะตรวจจับการเร่งและแรงโน้มถ่วง เพื่อใช้วัด “มุมเอียง” ของวัตถุ
รูปภาพ mpu6050 อ้างอิงจากเว็บไซต์ https://m.media-amazon.com/images/I/61GYgJyVv5L._UF1000,1000_QL80_.jpg

5.4 เซนเซอร์ Ultrasonic Sensor

Ultrasonic Sensor (อัลตราโซนิกเซนเซอร์) คือ เซ็นเซอร์ที่ใช้คลื่นเสียงความถี่สูง (มากกว่า 20 kHz ซึ่งหูมนุษย์ไม่ได้ยิน) ในการวัด ระยะทาง ระหว่างตัวเซ็นเซอร์กับวัตถุ โดยอาศัยหลักการ “ส่งคลื่นเสียงออกไป แล้ววัดเวลาที่คลื่นสะท้อนกลับมา”

หลักการทำงานของ Ultrasonic Sensor

  1. เซ็นเซอร์จะ ส่งคลื่นเสียงความถี่สูง ออกไปทางหัว Trig (Trigger)
  2. คลื่นเสียงจะ สะท้อนกลับ เมื่อกระทบวัตถุ
  3. ตัวรับสัญญาณ Echo จะตรวจจับเวลาที่คลื่นเสียงสะท้อนกลับมา
  4. บอร์ดไมโครคอนโทรลเลอร์จะนำ “เวลาที่ใช้ในการเดินทางของคลื่นเสียง” มาคำนวณเป็นระยะทาง
รูปภาพ Ultrasonic Sensor อ้างอิงจากเว็บไซต์ https://inwfile.com/s-q/1b6lfj.jpg

5.5 เซนเซอร์ Buzzer

Buzzer (บัซเซอร์) คือ อุปกรณ์แปลงสัญญาณไฟฟ้าให้เป็นเสียง ทำหน้าที่แจ้งเตือนหรือส่งสัญญาณเสียงเมื่อได้รับแรงดันไฟฟ้าเสียงที่ออกมาจะขึ้นอยู่กับชนิดของ buzzer และสัญญาณที่ส่งเข้ามา เช่น เสียง “ติ๊ด” หรือ “บี๊บ”Buzzer จัดเป็นส่วนประกอบสำคัญในระบบอิเล็กทรอนิกส์ที่ต้องการสัญญาณเตือน เช่น เครื่องตรวจจับควัน / ระบบเตือนภัย ระบบเตือนระยะ (Parking Sensor) ไม้เท้าอัจฉริยะ (Smart Cane) — ใช้เตือนเมื่อพบสิ่งกีดขวางหรือล้ม

🔹 โครงสร้างและหลักการทำงาน Buzzer ประกอบด้วย

  1. แผ่นเซรามิก (Piezoelectric Disk) ซึ่งจะสั่นเมื่อได้รับแรงดันไฟฟ้า
  2. แผ่นโลหะบาง ที่ช่วยขยายเสียง
  3. เมื่อจ่ายแรงดันไฟฟ้าเข้าไป → แผ่นเซรามิกจะเกิดการสั่น → เกิดเสียงความถี่สูงออกมา
รูปภาพ Buzzer อ้างอิงจากเว็บไซต์ https://j.lnwfile.com/_/j/_raw/wy/kh/fi.jpg

5.6 เซนเซอร์ gps module

GPS Module (จีพีเอส โมดูล) คือ อุปกรณ์อิเล็กทรอนิกส์ที่ใช้สำหรับรับสัญญาณจากดาวเทียม GPS (Global Positioning System)เพื่อตรวจหาตำแหน่งทางภูมิศาสตร์ของผู้ใช้งาน ได้แก่ ค่าละติจูด (Latitude)
ค่าลองจิจูด (Longitude) ความสูงจากระดับน้ำทะเล (Altitude) ความเร็วในการเคลื่อนที่ (Speed) เวลาแบบ UTC

GPS Module นิยมใช้ในงาน ติดตามตำแหน่ง (Tracking) และ ระบบ IoT (Internet of Things)
เช่น ระบบนำทาง (Navigation), รถติดตาม (Vehicle Tracking), หุ่นยนต์เคลื่อนที่ และ ไม้เท้าอัจฉริยะเพื่อช่วยเหลือผู้สูงอายุหรือผู้พิการทางสายตา

🔹 หลักการทำงานของ GPS Module

  1. โมดูลจะรับสัญญาณจากดาวเทียม GPS ที่โคจรรอบโลก (อย่างน้อย 3–4 ดวงขึ้นไป)
  2. ใช้หลักการ “คำนวณระยะทางจากเวลาที่สัญญาณเดินทาง” เพื่อหาตำแหน่ง
  3. โมดูลจะแปลงข้อมูลที่ได้ออกมาในรูปแบบ ข้อความ NMEA (National Marine Electronics Association)
  4. เช่น $GPGGA, $GPRMC, $GPGLL
  5. ไมโครคอนโทรลเลอร์ (เช่น ESP32) จะอ่านข้อความเหล่านี้ผ่านพอร์ต UART (TX/RX) แล้วนำไปประมวลผลต่อ
รูปภาพ GPS Module อ้างอิงจากเว็บไซต์ https://gh.lnwfile.com/_/gh/_raw/ld/ow/u6.jpg

5.6 เซนเซอร์ LDR module

LDR (Light Dependent Resistor) หรือ ตัวต้านทานแสงคือเซ็นเซอร์ที่มีคุณสมบัติในการเปลี่ยนค่าความต้านทานตามความเข้มของแสงที่ตกกระทบ

เมื่อแสงสว่างมาก → ค่าความต้านทานลดลง
เมื่อแสงน้อยหรือมืด → ค่าความต้านทานเพิ่มขึ้น

โมดูล LDR มักมาพร้อมวงจรเปรียบเทียบ (Comparator) เช่น LM393 เพื่อแปลงสัญญาณแสงเป็น ค่าดิจิทัลหรืออนาล็อก ส่งต่อให้ไมโครคอนโทรลเลอร์ เช่น ESP32

🔹 หลักการทำงานของ LDR

  1. เมื่อแสงตกกระทบที่ตัว LDR จะทำให้ค่าความต้านทานเปลี่ยน
  2. วงจรแบ่งแรงดัน (Voltage Divider) จะส่งแรงดันไฟฟ้าที่สัมพันธ์กับระดับแสงไปยังบอร์ดควบคุม
  3. บอร์ดไมโครคอนโทรลเลอร์อ่านค่านี้ผ่าน ขา Analog (ADC) เพื่อประเมินความสว่างรอบข้าง
  4. สามารถนำข้อมูลไปควบคุมอุปกรณ์ เช่น เปิดไฟ LED อัตโนมัติเมื่อมืด
รูปภาพ LDR Module อ้างอิงจากเว็บไซต์ https://how2electronics.com/wp-content/uploads/2023/11/LDR-Light-Dependent-Resistor.jpg

5.7 เซนเซอร์ LED 3W Module

LED 3W Module (แอลอีดี 3 วัตต์) คือ หลอดไฟแอลอีดีความสว่างสูง (High Power LED) ที่สามารถให้แสงแรงกว่าหลอด LED ทั่วไปหลายเท่า ใช้สำหรับให้แสงในบริเวณกว้าง เช่น ไฟฉาย, ไฟหน้ารถ, หรือ ไฟส่องทางในไม้เท้าอัจฉริยะ (Smart Cane) หลอด LED 3W ต้องใช้แรงดันและกระแสที่เหมาะสม (โดยทั่วไป 3.0–3.4V ที่กระแส 700–900mA) และควรใช้ ไดรเวอร์จำกัดกระแส เพื่อป้องกันการไหม้ เช่น AMC7135 LED Driver หรือ MOSFET + ตัวต้านทานจำกัดกระแส

🔹 หลักการทำงาน

LED (Light Emitting Diode) เป็น ไดโอดชนิดหนึ่งที่เปล่งแสงเมื่อมีกระแสไฟไหลผ่านจากขั้วบวก (Anode) ไปขั้วลบ (Cathode) ในกรณีของ High Power LED 3W จะปล่อยแสงสว่างมาก ต้องมีการควบคุมกระแสให้คงที่
โดยมักใช้งานร่วมกับ

  1. ตัวขับกระแส (LED Driver) เช่น AMC7135
  2. ทรานซิสเตอร์ควบคุม (เช่น AO3400 MOSFET)
  3. ฮีตซิงค์ (Heat Sink) สำหรับระบายความร้อน
รูปภาพ LED 3W Module อ้างอิงจากเว็บไซต์ https://www.flyrobo.in/image/cache/wp/gj/3w-high-power-led-module-for-arduino/3w-high-power-led-module-for-arduino-1000×1000.webp

5.8 เซนเซอร์ AH024

AH024 เป็นเซ็นเซอร์แบบ Hall Effect Sensorทำหน้าที่ตรวจจับการเปลี่ยนแปลงของสนามแม่เหล็ก (Magnetic Field)เมื่อมี แม่เหล็ก (Magnet) เข้าใกล้ — เซ็นเซอร์จะสร้างสัญญาณไฟฟ้าออกมา (เปลี่ยนสถานะจาก HIGH → LOW หรือกลับกัน)

หลักการทำงานอาศัย “Hall Effect” คือ ปรากฏการณ์ที่แรงดันไฟฟ้าจะเกิดขึ้นในแผ่นนำไฟฟ้าเมื่อมีสนามแม่เหล็กผ่าน ดังนั้น AH024 จึงเหมาะสำหรับใช้งานตรวจจับวัตถุที่เคลื่อนผ่านแม่เหล็ก เช่น

  1. ประตูเปิด–ปิด
  2. รอบการหมุนของพัดลมหรือมอเตอร์
  3. ไม้เท้าอัจฉริยะ (Smart Cane) ที่ต้องการตรวจจับตำแหน่ง หรือตอบสนองต่อแม่เหล็ก

🔹 หลักการทำงาน

  1. ภายใน AH024 มีแผ่นสารกึ่งตัวนำ (Semiconductor) ที่ไวต่อสนามแม่เหล็ก
  2. เมื่อไม่มีแม่เหล็ก → เซ็นเซอร์จะส่งสัญญาณ HIGH (1) ออกมา
  3. เมื่อมีแม่เหล็กเข้าใกล้ → สนามแม่เหล็กจะกระตุ้นให้แรงดันในแผ่น Hall เปลี่ยนไป → ส่งสัญญาณ LOW (0)
  4. สามารถใช้สัญญาณนี้เป็นตัว “ทริกเกอร์ (Trigger)” เพื่อเปิดเสียง, เปิดไฟ, หรือแจ้งเตือนอื่น ๆ ได้
รูปภาพ AH024 อ้างอิงจากเว็บไซต์ https://gh.lnwfile.com/_/gh/_raw/pt/j3/m1.jpg

5.9  แอปพลิเคชั่น Blynk

Blynk คือแพลตฟอร์มสำหรับพัฒนา IoT (Internet of Things) ที่ช่วยให้ผู้ใช้สามารถควบคุมอุปกรณ์ไมโครคอนโทรลเลอร์ เช่น ESP32, ESP8266, Arduino, หรือ Raspberry Pi ผ่านทาง สมาร์ตโฟนหรือเว็บแอป ได้ง่าย โดยไม่ต้องเขียนโค้ดฝั่งเซิร์ฟเวอร์ Blynk ทำงานผ่าน Blynk Cloud ซึ่งทำหน้าที่เป็น “สะพานเชื่อม” ระหว่าง อุปกรณ์ (Device) และ แอปพลิเคชันบนมือถือ (App)

🔹 บทบาทของ Blynk ในระบบไม้เท้าอัจฉริยะ ในโครงงาน Smart Cane แอปพลิเคชัน Blynk เป็นส่วนสำคัญในการ

  1. แสดงค่าจาก เซ็นเซอร์ต่าง ๆ เช่น MPU6050, Ultrasonic, LDR, GPS
  2. รับข้อมูลแบบเรียลไทม์เมื่อเกิดเหตุ เช่น การล้ม (Fall Detection)
  3. แสดงภาพจาก ESP32-CAM เมื่อมีเหตุการณ์ผิดปกติ
  4. ส่ง พิกัด GPS ของผู้ใช้งานไปยังผู้ดูแล

6. ความรู้ที่เกี่ยวข้องด้านซอฟต์แวร์ Software

6.1 ส่วนประกาศค่าการเชื่อมต่อกับ Blynk Cloud” ซึ่งจำเป็นสำหรับทุกโปรแกรมที่ใช้ Blynk (โดยเฉพาะ ESP32 หรือ ESP32 cam)

#define BLYNK_TEMPLATE_ID “รหัส Template ID”

#define BLYNK_TEMPLATE_NAME “ชื่อของ Template”

#define BLYNK_AUTH_TOKEN “รหัสลับเฉพาะ (Authentication Token)”

ชุดคำสั่ง #include เหล่านี้ทำให้ ESP32 ของคุณสามารถ “สื่อสารกับเซ็นเซอร์ทุกตัวและส่งข้อมูลขึ้น Blynk Cloud”กล่าวคือ มันเชื่อมทั้ง ฮาร์ดแวร์ (MPU6050, VL53L0X, GPS) และ ซอฟต์แวร์ (Wi-Fi + Blynk) เข้าด้วยกัน
เพื่อสร้างระบบไม้เท้าอัจฉริยะที่ตรวจจับการล้ม, สิ่งกีดขวาง, และส่งตำแหน่งได้แบบเรียลไทม์

#include <Wire.h>

#include <MPU6050.h>

#include <TinyGPS++.h>

#include <HardwareSerial.h>

#include <Adafruit_VL53L0X.h>

#include <WiFi.h>

#include <BlynkSimpleEsp32.h>

// ———- Wi-Fi ———-

const char* ssid = “*********”;

const char* password = “*********”;

BlynkTimer timer;

การประกาศตัวแปรออบเจ็กต์ (Object) ของไลบรารีต่าง ๆ ที่คุณ #include มาก่อนหน้านี้ พูดง่าย ๆ คือ “การสร้างตัวแทนของอุปกรณ์แต่ละตัวในโค้ด” เพื่อให้ ESP32 สามารถเรียกใช้งานเซ็นเซอร์และตัวจับเวลาได้

BlynkTimer timer;

MPU6050 mpu;

TinyGPSPlus gps;

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

โค้ดส่วนนี้เป็น “การกำหนดขา (Pins) และ ตัวแปร (Variables)” สำหรับควบคุมและเก็บค่าจากอุปกรณ์ต่าง ๆ ของระบบ ไม้เท้าอัจฉริยะ (Smart Cane) โดยรวมคือการตั้งชื่อขาของ ESP32 ให้ตรงกับเซ็นเซอร์จริงที่ต่ออยู่ และประกาศตัวแปรไว้ใช้เก็บข้อมูลจากเซ็นเซอร์

// ———- Pins ———-

#define TRIG_PIN 25

#define ECHO_PIN 26

#define BUZZER_IO 32

#define MOTOR_PIN 33

#define LDR_PIN 35

#define LED_PIN 27

// ———- Variables ———-

long duration;

int distance;

int16_t ax, ay, az, gx, gy, gz;

bool fallNotified = false;

โค้ดชุดนี้คือ “ฟังก์ชันส่งข้อมูลจากเซ็นเซอร์ทั้งหมดขึ้นไปยังแอป Blynk Cloud” ชื่อฟังก์ชันคือ sendSensorData() — โดยปกติจะถูกเรียกทุก ๆ 1 วินาที (ผ่าน BlynkTimer) เพื่ออัปเดตข้อมูลแบบ เรียลไทม์

// ———- Send data to Blynk ———-

void sendSensorData() {

  // Ultrasonic

  Blynk.virtualWrite(V0, distance);

  // ToF

  VL53L0X_RangingMeasurementData_t measure;

  lox.rangingTest(&measure, false);

  if (measure.RangeStatus != 4) {

    int tofDist = measure.RangeMilliMeter;

    Blynk.virtualWrite(V11, tofDist);

  } else Blynk.virtualWrite(V11, 0);

  // LDR

  int ldrValue = analogRead(LDR_PIN);

  Blynk.virtualWrite(V1, ldrValue);

  // MPU6050

  float Ax = ax / 16384.0;

  float Ay = ay / 16384.0;

  float Az = az / 16384.0;

  float roll  = atan2(Ay, Az) * 180.0 / PI;

  float pitch = atan2(-Ax, sqrt(Ay * Ay + Az * Az)) * 180.0 / PI;

  if (abs(roll) < 3) roll = 0;

  if (abs(pitch) < 3) pitch = 0;

  Blynk.virtualWrite(V7, roll);

  Blynk.virtualWrite(V8, pitch);

  // GPS

  if (gps.location.isValid()) {

    double lat = gps.location.lat();

    double lng = gps.location.lng();

    double speed = gps.speed.kmph();

    double altitude = gps.altitude.meters();

    int sats = gps.satellites.value();

    Blynk.virtualWrite(V2, lat);

    Blynk.virtualWrite(V3, lng);

    Blynk.virtualWrite(V9, lat, lng);

    Blynk.virtualWrite(V12, speed);

    Blynk.virtualWrite(V13, altitude);

    Blynk.virtualWrite(V14, sats);

    Serial.printf(“🌍 GPS: %.6f, %.6f | %.1f km/h | %.1f m | Sats=%d\n”,

                  lat, lng, speed, altitude, sats);

  } else {

    Blynk.virtualWrite(V12, 0);

    Blynk.virtualWrite(V13, 0);

    Blynk.virtualWrite(V14, 0);

  }

  Serial.println(“📤 Data sent to Blynk Cloud”);

}

6.2 ควบคุมUltrasonic

digitalWrite(TRIG_PIN, LOW);

  delayMicroseconds(5);

  digitalWrite(TRIG_PIN, HIGH);

  delayMicroseconds(10);

  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH);

  distance = duration * 0.034 / 2;

  if (distance > 0 && distance < 30) alertLevel1 = true;

การทำงานของคำสั่งวัดระยะทางด้วย Ultrasonic Sensor

ชุดคำสั่งนี้ใช้ควบคุมการทำงานของเซ็นเซอร์ Ultrasonic ในระบบไม้เท้าอัจฉริยะ โดยทำหน้าที่ส่งคลื่นเสียงความถี่สูงออกไปและวัดเวลาที่คลื่นสะท้อนกลับมา จากนั้นนำมาคำนวณเป็นระยะทางระหว่างผู้ใช้กับสิ่งกีดขวาง หากพบว่าวัตถุอยู่ในระยะไม่เกิน 30 เซนติเมตร ระบบจะตั้งสถานะเตือน (alertLevel1 = true) เพื่อให้ไม้เท้าแจ้งเตือนผู้ใช้งานทันที เช่น ผ่านเสียง Buzzer หรือมอเตอร์สั่น ช่วยเพิ่มความปลอดภัยและป้องกันการชนในสภาพแวดล้อมที่มองเห็นได้จำกัด

6.3 ควบคุม MPU6050 motion

mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  float Ax = ax / 16384.0;

  float Ay = ay / 16384.0;

  float Az = az / 16384.0;

  float roll  = atan2(Ay, Az) * 180.0 / PI;

  float pitch = atan2(-Ax, sqrt(Ay * Ay + Az * Az)) * 180.0 / PI;

  int safeMin = 45;

  int safeMax = 75;

  if ((pitch < safeMin – 10 || pitch > safeMax + 10) || abs(roll) > 45)

    alertLevel1 = true;

  if (pitch < safeMin – 25 || pitch > safeMax + 25 || abs(roll) > 70) {

    alertLevel2 = true;

    if (!fallNotified) {

      fallNotified = true;

      String message = “⚠️ ล้มแล้ว! “;

      if (gps.location.isValid()) {

        message += “https://maps.google.com/?q=” +

                   String(gps.location.lat(), 6) + “,” +

                   String(gps.location.lng(), 6);

      } else message += “(ไม่พบสัญญาณ GPS)”;

      Blynk.logEvent(“fall_alert”, message);

      Blynk.virtualWrite(V20, 1);

    }

  } else if (fallNotified && pitch >= safeMin && pitch <= safeMax && abs(roll) < 30) {

    fallNotified = false;

    alertLevel2 = false;

    Blynk.virtualWrite(V20, 0);

  }

โค้ดชุดนี้ใช้ เซ็นเซอร์ MPU6050 ซึ่งประกอบด้วย Accelerometer (ตรวจจับการเร่ง) และ Gyroscope (ตรวจจับการหมุน) เพื่อวิเคราะห์มุมเอียงของไม้เท้าและตรวจจับเหตุการณ์ “การล้ม” ของผู้ใช้งาน

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

6.4 ตัวอย่างการทำงานโค้ดทั้งหมดของโปรแกรม

ESP 32

#define BLYNK_TEMPLATE_ID “*********”

#define BLYNK_TEMPLATE_NAME “The Smart Cane”

#define BLYNK_AUTH_TOKEN “******************”

#include <Wire.h>

#include <MPU6050.h>

#include <TinyGPS++.h>

#include <HardwareSerial.h>

#include <Adafruit_VL53L0X.h>

#include <WiFi.h>

#include <BlynkSimpleEsp32.h>

const char* ssid = “*********”;

const char* password = “*********”;

BlynkTimer timer;

MPU6050 mpu;

TinyGPSPlus gps;

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

// ———- Pins ———-

#define TRIG_PIN 25

#define ECHO_PIN 26

#define BUZZER_IO 32

#define MOTOR_PIN 33

#define LDR_PIN 35

#define LED_PIN 27

// ———- Variables ———-

long duration;

int distance;

int16_t ax, ay, az, gx, gy, gz;

bool fallNotified = false;

// ———- Send data to Blynk ———-

void sendSensorData() {

  // Ultrasonic

  Blynk.virtualWrite(V0, distance);

  // ToF

  VL53L0X_RangingMeasurementData_t measure;

  lox.rangingTest(&measure, false);

  if (measure.RangeStatus != 4) {

    int tofDist = measure.RangeMilliMeter;

    Blynk.virtualWrite(V11, tofDist);

  } else Blynk.virtualWrite(V11, 0);

  // LDR

  int ldrValue = analogRead(LDR_PIN);

  Blynk.virtualWrite(V1, ldrValue);

  // MPU6050

  float Ax = ax / 16384.0;

  float Ay = ay / 16384.0;

  float Az = az / 16384.0;

  float roll  = atan2(Ay, Az) * 180.0 / PI;

  float pitch = atan2(-Ax, sqrt(Ay * Ay + Az * Az)) * 180.0 / PI;

  if (abs(roll) < 3) roll = 0;

  if (abs(pitch) < 3) pitch = 0;

  Blynk.virtualWrite(V7, roll);

  Blynk.virtualWrite(V8, pitch);

  // GPS

  if (gps.location.isValid()) {

    double lat = gps.location.lat();

    double lng = gps.location.lng();

    double speed = gps.speed.kmph();

    double altitude = gps.altitude.meters();

    int sats = gps.satellites.value();

    Blynk.virtualWrite(V2, lat);

    Blynk.virtualWrite(V3, lng);

    Blynk.virtualWrite(V9, lat, lng);

    Blynk.virtualWrite(V12, speed);

    Blynk.virtualWrite(V13, altitude);

    Blynk.virtualWrite(V14, sats);

    Serial.printf(“🌍 GPS: %.6f, %.6f | %.1f km/h | %.1f m | Sats=%d\n”,

                  lat, lng, speed, altitude, sats);

  } else {

    Blynk.virtualWrite(V12, 0);

    Blynk.virtualWrite(V13, 0);

    Blynk.virtualWrite(V14, 0);

  }

  Serial.println(“📤 Data sent to Blynk Cloud”);

}

// ———- Setup ———-

void setup() {

  Serial.begin(115200);

  Wire.begin(21, 22);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(“.”);

  }

  Serial.println(“\n✅ Wi-Fi Connected!”);

  Blynk.config(BLYNK_AUTH_TOKEN);

  Blynk.connect();

  mpu.initialize();

  if (mpu.testConnection()) Serial.println(“✅ MPU6050 connected!”);

  else Serial.println(“❌ MPU6050 failed!”);

  Serial2.begin(9600, SERIAL_8N1, 16, 17);

  Serial.println(“✅ GPS Ready”);

  if (!lox.begin()) {

    Serial.println(“❌ VL53L0X not found!”);

    while (1);

  }

  Serial.println(“✅ VL53L0X Ready”);

  pinMode(TRIG_PIN, OUTPUT);

  pinMode(ECHO_PIN, INPUT);

  pinMode(BUZZER_IO, OUTPUT);

  pinMode(MOTOR_PIN, OUTPUT);

  pinMode(LED_PIN, OUTPUT);

  timer.setInterval(2000L, sendSensorData);

}

// ———- Loop ———-

void loop() {

  if (WiFi.status() != WL_CONNECTED) WiFi.reconnect();

  Blynk.run();

  timer.run();

  bool alertLevel1 = false;

  bool alertLevel2 = false;

  // Ultrasonic

  digitalWrite(TRIG_PIN, LOW);

  delayMicroseconds(5);

  digitalWrite(TRIG_PIN, HIGH);

  delayMicroseconds(10);

  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH);

  distance = duration * 0.034 / 2;

  if (distance > 0 && distance < 30) alertLevel1 = true;

  // MPU6050 motion

  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  float Ax = ax / 16384.0;

  float Ay = ay / 16384.0;

  float Az = az / 16384.0;

  float roll  = atan2(Ay, Az) * 180.0 / PI;

  float pitch = atan2(-Ax, sqrt(Ay * Ay + Az * Az)) * 180.0 / PI;

  int safeMin = 45;

  int safeMax = 75;

  if ((pitch < safeMin – 10 || pitch > safeMax + 10) || abs(roll) > 45)

    alertLevel1 = true;

  if (pitch < safeMin – 25 || pitch > safeMax + 25 || abs(roll) > 70) {

    alertLevel2 = true;

    if (!fallNotified) {

      fallNotified = true;

      String message = “⚠️ ล้มแล้ว! “;

      if (gps.location.isValid()) {

        message += “https://maps.google.com/?q=” +

                   String(gps.location.lat(), 6) + “,” +

                   String(gps.location.lng(), 6);

      } else message += “(ไม่พบสัญญาณ GPS)”;

      Blynk.logEvent(“fall_alert”, message);

      Blynk.virtualWrite(V20, 1);

    }

  } else if (fallNotified && pitch >= safeMin && pitch <= safeMax && abs(roll) < 30) {

    fallNotified = false;

    alertLevel2 = false;

    Blynk.virtualWrite(V20, 0);

  }

  while (Serial2.available() > 0) gps.encode(Serial2.read());

  int ldrValue = analogRead(LDR_PIN);

  digitalWrite(LED_PIN, (ldrValue < 2000) ? LOW : HIGH);

  if (alertLevel2) {

    digitalWrite(MOTOR_PIN, HIGH);

    tone(BUZZER_IO, 1500);

  } else if (alertLevel1) {

    digitalWrite(MOTOR_PIN, HIGH);

    tone(BUZZER_IO, 1000, 200);

  } else {

    digitalWrite(MOTOR_PIN, LOW);

    noTone(BUZZER_IO);

  }

  delay(50);

}

// ———- Blynk Controls ———-

BLYNK_WRITE(V4) { digitalWrite(LED_PIN, param.asInt()); }

BLYNK_WRITE(V5) { digitalWrite(MOTOR_PIN, param.asInt()); }

BLYNK_WRITE(V6) { if (param.asInt()) tone(BUZZER_IO, 1200);}

ESP 32 cam

#define BLYNK_TEMPLATE_ID   “********************”

#define BLYNK_TEMPLATE_NAME “Smart Cane CAM”

#define BLYNK_AUTH_TOKEN    “********************”

#include <WiFi.h>

#include <BlynkSimpleEsp32.h>

#include “esp_camera.h”

#include <WebServer.h>

#define CAMERA_MODEL_AI_THINKER

#include “camera_pins.h”

// ==== Wi-Fi ====

const char* ssid = “**********”;

const char* password = “**********”;

// ==== Virtual Pin ====

#define VPIN_CAM_TRIGGER V20

#define VPIN_CAM_URL     V10

BlynkTimer timer;

WebServer server(80);

// ———- ตั้งค่ากล้อง ———-

bool initCamera() {

  camera_config_t config;

  config.ledc_channel = LEDC_CHANNEL_0;

  config.ledc_timer   = LEDC_TIMER_0;

  config.pin_d0       = Y2_GPIO_NUM;

  config.pin_d1       = Y3_GPIO_NUM;

  config.pin_d2       = Y4_GPIO_NUM;

  config.pin_d3       = Y5_GPIO_NUM;

  config.pin_d4       = Y6_GPIO_NUM;

  config.pin_d5       = Y7_GPIO_NUM;

  config.pin_d6       = Y8_GPIO_NUM;

  config.pin_d7       = Y9_GPIO_NUM;

  config.pin_xclk     = XCLK_GPIO_NUM;

  config.pin_pclk     = PCLK_GPIO_NUM;

  config.pin_vsync    = VSYNC_GPIO_NUM;

  config.pin_href     = HREF_GPIO_NUM;

  config.pin_sscb_sda = SIOD_GPIO_NUM;

  config.pin_sscb_scl = SIOC_GPIO_NUM;

  config.pin_pwdn     = PWDN_GPIO_NUM;

  config.pin_reset    = RESET_GPIO_NUM;

  config.xclk_freq_hz = 20000000;

  config.pixel_format = PIXFORMAT_JPEG;

  if (psramFound()) {

    config.frame_size = FRAMESIZE_VGA;

    config.jpeg_quality = 10;

    config.fb_count = 2;

  } else {

    config.frame_size = FRAMESIZE_QVGA;

    config.jpeg_quality = 12;

    config.fb_count = 1;

  }

  if (esp_camera_init(&config) != ESP_OK) {

    Serial.println(“❌ Camera init failed!”);

    return false;

  }

  Serial.println(“📷 Camera initialized successfully!”);

  return true;

}

// ———- เว็บเซิร์ฟเวอร์ ———-

void handle_root() {

  server.send(200, “text/html”,

    “<h2>Smart Cane CAM</h2>”

    “<p><a href=’/capture’><button>📸 Capture Photo</button></a></p>”);

}

void handle_capture() {

  camera_fb_t *fb = esp_camera_fb_get();

  if (!fb) {

    server.send(500, “text/plain”, “Camera capture failed”);

    return;

  }

  server.sendHeader(“Content-Type”, “image/jpeg”);

  server.sendHeader(“Content-Disposition”, “inline; filename=capture.jpg”);

  server.send_P(200, “image/jpeg”, (const char*)fb->buf, fb->len);

  esp_camera_fb_return(fb);

  Serial.println(“📸 Capture request handled!”);

}

// ———- ส่ง URL ไป Blynk ———-

void sendUrlToBlynk() {

  String url = “http://” + WiFi.localIP().toString() + “/capture”;

  Blynk.virtualWrite(VPIN_CAM_URL, url);

  Serial.println(“🌍 Sent image URL to Blynk: ” + url);

  delay(500);

}

// ———- Trigger จาก ESP32 หลัก ———-

BLYNK_WRITE(V20) {

  int trigger = param.asInt();

  if (trigger == 1) {

    Serial.println(“🚨 Trigger received from Main ESP32!”);

    sendUrlToBlynk();

  }

}

// ———- Setup ———-

void setup() {

  Serial.begin(115200);

  Serial.println(“\n🚀 Booting Smart Cane CAM (Cloud Trigger)”);

  WiFi.begin(ssid, password);

  Serial.print(“Connecting Wi-Fi”);

  while (WiFi.status() != WL_CONNECTED) {

    delay(400);

    Serial.print(“.”);

  }

  Serial.println();

  Serial.print(“✅ Wi-Fi Connected! IP: “);

  Serial.println(WiFi.localIP());

  if (!initCamera()) {

    Serial.println(“Restarting…”);

    delay(3000);

    ESP.restart();

  }

  Blynk.config(BLYNK_AUTH_TOKEN);

  Blynk.connect();

  Serial.println(“Connecting to Blynk…”);

  while (!Blynk.connected()) {

    delay(500);

    Serial.print(“.”);

  }

  Serial.println(“\n✅ Connected to Blynk Cloud!”);

  server.on(“/”, handle_root);

  server.on(“/capture”, handle_capture);

  server.begin();

  Serial.println(“✅ Web server started.”);

  Serial.print(“🌐 Open: http://”);

  Serial.println(WiFi.localIP());

}

// ———- Loop ———-

void loop() {

  if (WiFi.status() != WL_CONNECTED) WiFi.reconnect();

  Blynk.run();

  timer.run();

  server.handleClient();

}

7.วิธีการดำเนินงาน

  1. ศึกษาข้อมูลพื้นฐานเกี่ยวกับปัญหาของผู้พิการทางสายตา รวมถึงเทคโนโลยีที่สามารถนำมาประยุกต์ใช้ เช่น เซนเซอร์ Ultrasonic, VL53L0X, MPU6050, LDR, GPS NEO-6M และไมโครคอนโทรลเลอร์ ESP32 เพื่อใช้ในการพัฒนาไม้เท้าอัจฉริยะ
  2. วิเคราะห์ความต้องการของผู้ใช้งานและกำหนดคุณลักษณะของระบบ เช่น สามารถตรวจจับสิ่งกีดขวาง แจ้งเตือนเมื่อแสงน้อย ตรวจจับการล้ม และส่งพิกัดตำแหน่งเมื่อเกิดเหตุ
  3. ออกแบบระบบฮาร์ดแวร์ โดยเชื่อมต่อ ESP32 กับเซนเซอร์ต่าง ๆ ได้แก่ HC-SR04 หรือ VL53L0X สำหรับตรวจจับระยะ MPU6050 สำหรับตรวจจับการล้ม LDR สำหรับตรวจวัดแสง GPS สำหรับระบุตำแหน่ง และอุปกรณ์แสดงผลแจ้งเตือน เช่น buzzer มอเตอร์สั่น และไฟ LED
  4. ออกแบบซอฟต์แวร์ โดยเขียนโปรแกรมใน Arduino IDE เพื่ออ่านค่าจากเซนเซอร์ ประมวลผล และส่งข้อมูลขึ้น Blynk Cloud เพื่อแสดงผลบนสมาร์ตโฟนของผู้ดูแลหรือญาติ
  5. ออกแบบโครงสร้างทางกายภาพของไม้เท้า โดยจัดวางตำแหน่งเซนเซอร์ให้เหมาะสมกับการใช้งานจริง มีความแข็งแรง น้ำหนักเบา และป้องกันน้ำได้ระดับหนึ่ง
  6. ประกอบวงจรต้นแบบบนบอร์ดทดลองและออกแบบ PCB ด้วยโปรแกรม EasyEDA แล้วทำการบัดกรีอุปกรณ์จริงตามแบบที่ออกแบบไว้
  7. ทดสอบการทำงานของระบบแต่ละส่วน เช่น การตรวจจับสิ่งกีดขวางในระยะต่าง ๆ การทำงานของระบบแจ้งเตือน การส่งพิกัด GPS และการสื่อสารผ่าน Wi-Fi กับแอป Blynk
  8. ปรับจูนค่าการทำงานของเซนเซอร์ เช่น ระยะตรวจจับของ Ultrasonic, มุมเอียงจาก MPU6050 และค่าความเข้มแสงจาก LDR เพื่อให้ได้ค่าที่เหมาะสมกับการใช้งานจริง
  9. ทดสอบการใช้งานจริงในสภาพแวดล้อมภายนอก เช่น ทางเดิน พื้นต่างระดับ หรือในที่มีแสงน้อย เพื่อประเมินประสิทธิภาพของระบบและความสะดวกในการใช้งาน
  10. เก็บข้อมูลผลการทดสอบ วิเคราะห์ปัญหาที่พบ และปรับปรุงทั้งด้านฮาร์ดแวร์และซอฟต์แวร์ให้ระบบมีความเสถียรและปลอดภัยมากขึ้น
  11. ประเมินผลการใช้งานโดยผู้ทดลองใช้จริง พร้อมเก็บความคิดเห็นเพื่อนำมาพัฒนาในรุ่นถัดไป เช่น การเพิ่มกล้อง ESP32-CAM หรือการเชื่อมต่อผ่านเครือข่าย 4G/LoRaWAN
  12. สรุปผลการดำเนินงานทั้งหมด เปรียบเทียบกับวัตถุประสงค์ที่ตั้งไว้ และจัดทำรายงานพร้อมข้อเสนอแนะเพื่อการพัฒนาต่อยอดในอนาคต

8.การทดลอง

การทดลอง ไม้เท้าอัจฉริยะ

ลำดับรายการทดลองอุปกรณ์ / เซ็นเซอร์ที่เกี่ยวข้องผลการทำงานผลการทดลองหมายเหตุ / ปัญหาที่พบ
1ตรวจจับสิ่งกีดขวางUltrasonic Sensorวัดระยะวัตถุด้านหน้าตรวจพบสิ่งกีดขวางได้ในระยะ 30 ซม. มีการสั่นและเสียงเตือนทันทีทำงานได้ถูกต้อง
2ตรวจจับการล้มMPU6050 ตรวจวัดมุมเอียงไม้เท้าเมื่อล้มจริง ระบบส่งแจ้งเตือนขึ้น Blynk พร้อมข้อความ “⚠️ ล้มแล้ว!”ทำงานถูกต้องและตอบสนองเร็ว
3ตรวจวัดแสงLDR Moduleตรวจระดับความสว่างรอบข้างเมื่อแสงน้อย ระบบเปิดไฟ LED 3W อัตโนมัติทำงานถูกต้อง
4การแจ้งเตือนBuzzer, Vibration Motorเตือนผู้ใช้เมื่อเกิดเหตุมีเสียงเตือนและสั่นเมื่อพบสิ่งกีดขวางหรือการล้มทำงานปกติ
5การส่งข้อมูลขึ้น CloudESP32 + Blynk Appส่งค่าจากเซ็นเซอร์ไปยังแอปแสดงผลค่าระยะ แสง มุมเอียง และสถานะได้แบบเรียลไทม์ทำงานได้ดี
6ตรวจจับตำแหน่งพิกัดGPS Module (NEO-6M)รับสัญญาณดาวเทียมและส่งพิกัดไม่สามารถเชื่อมต่อสัญญาณดาวเทียมได้ ภายในอาคารควรทดลองในพื้นที่โล่งแจ้ง
7ระบบรวมทั้งวงจรESP32, เซ็นเซอร์ทั้งหมด, Blynkทำงานแบบครบวงจรระบบตอบสนองครบทุกส่วน ยกเว้น GPS ในบางพื้นที่ระบบโดยรวมทำงานได้ตามวัตถุประสงค์

9. สรุปผลการทดลอง

สรุปผลการทดลองการเชื่อมต่อโมดูล GPS พบว่าอุปกรณ์ ไม่สามารถเชื่อมต่อสัญญาณดาวเทียมได้ สาเหตุอาจเกิดจากการอยู่ในพื้นที่อับสัญญาณ เช่น ภายในอาคารหรือบริเวณที่มีสิ่งกีดขวางสัญญาณฟ้าเปิดไม่เพียงพอ ทำให้โมดูลไม่สามารถรับข้อมูลพิกัดจากดาวเทียมได้ นอกจากนี้ยังอาจเกิดจากเสาอากาศ GPS ติดตั้งไม่ถูกทิศทาง หรือจ่ายไฟไม่เพียงพอ ส่งผลให้ค่าพิกัด (Latitude, Longitude) ไม่ปรากฏบนจอแสดงผลและไม่สามารถส่งข้อมูลไปยังแอป Blynk ได้

10. อ้างอิง

  1. พิสิฐชัย ชัยวุฒิ, และ ธนกร มงคลวัฒน์. (2564). การพัฒนาไม้เท้าอัจฉริยะสำหรับผู้พิการทางสายตาโดยใช้ไมโครคอนโทรลเลอร์ ESP32. วารสารวิศวกรรมและเทคโนโลยี, 9(2), 45–54.
  2. จิราพร ศรีประเสริฐ. (2565). การออกแบบระบบช่วยนำทางด้วยเสียงสำหรับผู้พิการทางสายตา. มหาวิทยาลัยเทคโนโลยีราชมงคลธัญบุรี.
  3. มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าพระนครเหนือ. (2563). โครงการพัฒนาไม้เท้าอัจฉริยะเพื่อช่วยเหลือผู้พิการทางสายตา. สืบค้นจาก https://www.kmutnb.ac.th
  4. S. S. Ali, M. A. Arshad, and M. F. Khan. (2021). Smart Cane for Visually Impaired People Using Ultrasonic Sensor and GPS Module. International Journal of Advanced Computer Science and Applications (IJACSA), 12(5), 115–122.
  5. R. Mehta and P. Bansal. (2020). IoT-Based Smart Walking Stick for the Blind. IEEE International Conference on Smart Technologies (ICST).
  6. M. A. Hameed et al. (2022). An Intelligent Walking Stick for the Visually Impaired with Obstacle Detection and Location Tracking. Sensors, 22(8), 3125.
  7. R. Bhatlawande, L. Mahalakshmi, and M. Mahalakshmi. (2018). Smart Cane with GPS and Obstacle Detection for Visually Challenged. Procedia Computer Science, 143, 991–998.

วิดีโอแสดงผลการทำงานของระบบไม้เท้าอัจฉริยะ

You may also like...