หน้าแรก ดูโปรเจกต์ทั้งหมด
Hard

โปรเจกต์ Phone Call Indicator และ Panic Switch

เครื่องแสดงสถานะสายเรียกเข้าผ่าน Bluetooth และ Android พร้อม Panic Switch สำหรับโทรหาหมายเลขที่ตั้งค่าไว้

โปรเจกต์ Phone Call Indicator และ Panic Switch

วิดีโอสาธิต

Video

▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์

รายการอุปกรณ์และเครื่องมือ

1x Arduino Pro Mini 328 - 5V/16MHz
🛒 สั่งซื้อ
1x Tactile Switch, Top Actuated
🛒 สั่งซื้อ
1x HC-05 Bluetooth Module
🛒 สั่งซื้อ

รายละเอียดและวิธีทำ

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

ในตอนแรกผมเริ่มด้วย Arduino Pro Mini, HC05 Bluetooth Module ฯลฯ โดยใช้ breadboard พร้อมกับ LED และสวิตช์ ต่อมาผมตัดสินใจย้ายทุกอย่างไปยัง PCB ที่ผมออกแบบและสร้างขึ้นเองตั้งแต่ต้นจนจบ และยังได้สร้างกล่องอะคริลิก (acrylic enclosure) ขึ้นมาด้วย

เนื่องจากผมทำทุกอย่างด้วยตัวเอง ทั้ง PCB, enclosure ฯลฯ ผมคิดว่ามันน่าจะเป็นคู่มือที่ดีสำหรับผู้ที่ต้องการลองทำโปรเจกต์ตั้งแต่ต้นจนจบ ซึ่งจะช่วยประหยัดแรงในการหาอุปกรณ์ที่เหมาะสม และบางทีพวกเขาอาจจะพบวิธีที่ดีกว่าในการทำสิ่งต่างๆ ซึ่งเป็นเรื่องที่น่ายินดีเสมอ

ผมจะแบ่งโปรเจกต์นี้ออกเป็นขั้นตอนย่อยๆ ซึ่งจะทำให้อ่านเข้าใจง่ายและทำตามได้ดังนี้:

  • ภาพรวมของระบบ (High level view)
  • การสื่อสาร Bluetooth บน Android
  • การสื่อสาร Serial บน Arduino
  • การประกอบบน Breadboard
  • การย้ายส่วนประกอบไปยัง PCB
  • ตัวกล่อง (Enclosure อะคริลิก)

High Level View:

จริงๆ แล้วหลักการพื้นฐานนั้นค่อนข้างง่าย โดยจะมีการสร้างช่องทางการสื่อสาร (serial communication) ระหว่างอุปกรณ์ Android (โทรศัพท์) และ Bluetooth Module (ซึ่งเชื่อมต่อกับ Arduino) ผ่านทางแอป Android เมื่อโทรศัพท์ Android ได้รับสายเรียกเข้า ข้อความเฉพาะจะถูกส่งไปยังอุปกรณ์ BT ซึ่งจะถูกอ่านโดย Arduino จากนั้น Arduino จะถูกโปรแกรมให้ทำตามขั้นตอนที่กำหนดตามข้อความที่ได้รับ ในกรณีนี้คือการส่งเสียง Buzzer นอกจากนี้ยังมีสวิตช์รีเซ็ตแบบแมนนวลเพื่อกลับสู่สถานะปกติ

Red LED พร้อม Buzzer ทำงานเมื่อมีสายเรียกเข้า

ในการทำงานย้อนกลับ (โหมด panic switch) - เมื่อกดสวิตช์ Arduino จะส่งชุดตัวอักษรที่กำหนดไปยังแอป Android เมื่อแอปได้รับชุดข้อมูลนั้นก็จะทำการโทรไปยังหมายเลขที่กำหนดไว้ซึ่งบันทึกอยู่ในแอป

โทรศัพท์ Android โทรไปยังหมายเลขที่ตั้งไว้ล่วงหน้าเมื่อกดสวิตช์

Android Bluetooth Communication

มีบทความที่ยอดเยี่ยมเกี่ยวกับการสื่อสารระหว่าง Android - Arduino โดย Brian Wirsing ซึ่งสามารถดูได้ที่นี่ ผมได้นำโค้ดที่แนะนำมาใช้ประโยชน์อย่างมาก นอกจากนี้ยังมีชุดบทเรียนวิดีโออื่นๆ ที่เน้นเรื่องการสื่อสาร Bluetooth ระหว่าง Android กับ Android ซึ่งเป็นบทเรียน 4 ตอนบน YouTube ลิงก์สำหรับตอนแรกอยู่ที่นี่

สิ่งสำคัญคือต้องเข้าใจแนวคิดของ Threads และ Handlers ใน Android โดยพื้นฐานแล้ว กิจกรรมที่เกี่ยวข้องกับโค้ดทั้งหมดที่อาจทำให้หน้าจอผู้ใช้งาน (User Interface) ค้าง จะต้องถูกนำไปไว้ใน Thread แยกต่างหากเพื่อให้ทำงานในพื้นหลัง (Background) ส่วน Handler จะถูกใช้เพื่อส่งข้อความระหว่าง Thread ต่างๆ และโต้ตอบกับส่วน User Interface หลัก

เพื่อให้ HC-05 สื่อสารกับโทรศัพท์ Android ได้ จำเป็นต้องจับคู่ (Pair) ทั้งสองเครื่องเข้าด้วยกัน และควรให้ HC-05 เป็นอุปกรณ์เดียวที่ถูกจับคู่ไว้ หากโทรศัพท์ของคุณมีการจับคู่กับอุปกรณ์อื่นหลายตัว ให้ยกเลิกการจับคู่อุปกรณ์อื่นทั้งหมดก่อน

การสื่อสารระหว่างอุปกรณ์สองเครื่องประกอบด้วย:

  • การตั้งค่าเส้นทางการสื่อสาร (เรียกว่า Interface)
  • การส่งข้อมูลจากอุปกรณ์หนึ่งและรับข้อมูลในอีกอุปกรณ์หนึ่ง และในทางกลับกัน

ในโปรเจกต์นี้ เส้นทางการสื่อสารจะถูกตั้งค่าระหว่าง Android และอุปกรณ์ Bluetooth (Module HC-05) นอกจากนี้ยังมี Serial Interface ระหว่าง HC-05 และ Arduino ดังนั้นโดยสรุปแล้ว การส่งข้อมูลจาก Android จะถูกรับโดย Arduino ผ่านทาง HC-05

สำหรับขั้นตอนที่ Android จะสื่อสารกับ HC-05 มีดังนี้:

  • Get the BT Adapter - ขั้นตอนนี้จะตรวจสอบว่าเครื่องรองรับ Bluetooth หรือไม่ เมธอด getDefaultAdapter() จะคืนค่า Object ประเภท BTAdapter หากพร้อมใช้งานและรองรับ

บรรทัดที่ 83 ของ MainActivity.java ตรวจสอบว่ามี Adapter หรือไม่:

btAdapter = BluetoothAdapter.getDefaultAdapter();
  • Get the BT Device - Object BTAdapter มีคุณสมบัติ getBondedDevices() ซึ่งจะแสดงรายชื่ออุปกรณ์ทั้งหมดที่ Pair กับโทรศัพท์ Android หาก Pair สำเร็จ Module HC-05 ของเราจะเป็นอุปกรณ์แรก (อย่าลืมว่าห้าม Pair อุปกรณ์อื่นทิ้งไว้)

บรรทัดที่ 191 และ 192 ของ MainActivity.java จะคืนค่า BTDevice:

btDevice = (BluetoothDevice) (btAdapter.getBondedDevices().toArray())[0];
btAdapter.getRemoteDevice(String.valueOf(btDevice));
  • Open a BT Socket - เมื่อสร้าง Object BTDevice และตั้งค่า BTAdapter ไปยังที่อยู่ของอุปกรณ์ Remote (ในกรณีของเราคือ Module HC-05) แล้ว BT Socket จะถูกเปิดขึ้นระหว่างทั้งสองฝั่ง (Android และอุปกรณ์ BT) ในการสร้าง Socket เราจำเป็นต้องใช้ UUID () ของอุปกรณ์ปลายทาง
  • HC-05 เป็นอุปกรณ์ BT ประเภท SPP (Serial Port Profile) และมี UUID ที่กำหนดไว้ล่วงหน้าคือ "00001101-0000-1000-8000-00805F9B34FB" บรรทัดที่ 54 ของ MainActivity.java จะแปลง String นี้ให้เป็นประเภท UUID :
private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");

public void run() {
try {
mmSocket = btDevice.createInsecureRfcommSocketToServiceRecord(MY_UUID);
mmSocket.connect();
} catch (IOException e) {
cont = false;
Message message = Message.obtain();
message.what = SOCKET_NOT_CONNECTED;
handler.sendMessage(message);
e.printStackTrace();
}
if ((mmSocket != null) && (cont)) {
Message message = Message.obtain();
message.what = SOCKET_OPENED;
handler.sendMessage(message);
socket = mmSocket;
}
}
}
  • Read and Write using the BT Socket

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: phone-call-indicator-cum-panic-switch-93a611
699 บาท
PromptPay QR Code

ประเมินราคาอัตโนมัติ + Reference Code

อยากได้งานคล้ายโปรเจคนี้ ให้ AI ประเมินราคาก่อน

กรอกข้อมูลให้ครบ ระบบจะสร้างรหัสอ้างอิงและประเมินราคา/ระยะเวลาคร่าว ๆ จากรายละเอียดงาน แล้วให้กด Add LINE พร้อมพิมพ์รหัสนี้เพื่อคุยต่อ

คำถามให้ AI ประเมินแม่นขึ้น

หลังส่งฟอร์ม ระบบจะโชว์ Reference Code ให้ copy แล้วกด Add LINE เพื่อคุยต่อ ข้อมูลส่วนตัวจะไม่ถูกส่งเข้า GA4

รีวิวจากคนใช้งานจริง

รีวิวจากลูกค้าและคนที่เคยใช้งาน

ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย

กำลังโหลดรีวิว...