กลับไปหน้ารวมไฟล์
turn-a-rotary-phone-into-a-radio-and-travel-through-time-24bbf8.md

สาธิตการใช้งานโทรศัพท์

มันทำงานยังไงนะ?

เจ้าโทรศัพท์หมุนโบราณตัวนี้มันมีสมองกลฝังอยู่ข้างใน (ก็ [Raspberry Pi](https://s.shopee.co.th/6pvZFdZdRf) ไง) ที่มันคุยกับ radiooooo.com ซึ่งเป็นเว็บวิทยุออนไลน์ แล้วก็ยังมีไมโครคอนโทรลเลอร์ ([Arduino](https://s.shopee.co.th/7fUgFAWSki)) ซ่อนอยู่หลังแผนที่โลกอีกตัว คอยควบคุมการเลือกประเทศให้เรา

รวมๆ แล้วก็ได้โปรเจกต์ IoT ที่เท่ไม่เบาเลยล่ะน้อง!

พี่ได้รับการสนับสนุนจาก Digitspace สำหรับโปรเจกต์นี้ เค้าส่งอุปกรณ์อิเล็กทรอนิกส์มาให้ทำต้นแบบด้วยใจดีมาก

เจาะลึกเทคนิค

แผนภาพแบบง่ายๆ ของการทำงานโปรเจกต์

โปรเจกต์นี้ประกอบด้วยหลายส่วน:

โทรศัพท์หมุนโบราณ

Raspberry Pi มีหน้าที่:

  • เล่นเพลงผ่าน radiooooo.com
  • ตรวจจับเมื่อยกหูโทรศัพท์ขึ้น/วางลง
  • ตรวจจับหมายเลขที่หมุนเข้า

Arduino มีหน้าที่:

  • ตรวจจับว่าประเทศไหนถูกเลือกบนแผนที่ (ผ่านแจ็คคอนเนคเตอร์)
  • ส่งข้อมูลนี้ไปให้ RPi ผ่าน Serial

ขั้นตอนทำตามกันไปเลย

วิดีโอนี้แสดงส่วนต่างๆ ของโทรศัพท์ที่เราจะใช้แบบละเอียดขึ้น (ข้ามไปนาทีที่ 0:45 ได้เลยถ้าอยากตรงประเด็น)

ขั้นตอนที่ 1: หาโทรศัพท์หมุนสักเครื่องมา

ไปหามาจากร้านของมือสอง จากคนรู้จัก หรือแม้แต่ถังขยะก็ได้! ของพี่ได้มาจากคุณย่านี่แหละ

ขั้นตอนที่ 2: ศึกษาว่าโทรศัพท์หมุนของเราทำงานยังไง

โทรศัพท์หมุนแต่ละเครื่องไม่เหมือนกัน ของน้องอาจทำงานไม่เหมือนของพี่เป๊ะ แต่ส่วนประกอบก็คล้ายๆ กัน สำหรับโปรเจกต์นี้ ส่วนที่เราต้องใช้คือ:

  • 📞 กลไกตรวจจับการยกหูโทรศัพท์ขึ้น/วางลง
นี่คือกลไกยกหู/วางหูของพี่ หลังจากแยกชิ้นส่วนโทรศัพท์แล้ว

ในกรณีของพี่ สวิตช์พวกนี้อยู่บนบอร์ดของโทรศัพท์เลย: พี่ใช้มัลติมิเตอร์หาขาแล้วบัดกรีสายไฟ 2 เส้นจากตรงนั้น เส้นหนึ่งต่อไปที่ 3.3V ของ Rpi (ผ่านตัวต้านทาน 220 โอห์ม) และอีกเส้นต่อไปที่ขา PIN 18 ของ RPI (GPIO 24)

  • 🔈 สปีกเกอร์ในหูโทรศัพท์

โดยการคลายสกรูหูโทรศัพท์ เราก็เข้าถึงสปีกเกอร์ได้ มีสายไฟ 2 เส้น (บวกและลบ) ที่เราสามารถต่อเข้ากับสายเสียงได้ ปลายสายเสียงของเราควรมีหัวแจ็คเพื่อจะได้เสียบเข้ากับช่องเสียงออกของ Raspberry Pi

สปีกเกอร์เดิมของโทรศัพท์ยังใช้ได้อยู่ พี่แค่ต้องเอาสายไฟ 2 เส้นที่ปลายสายโทรศัพท์มาต่อเข้ากับหัวแจ็คเสียง แล้วก็เอาไปเสียบกับช่องเสียงออกของ RPi
  • ⚙️ โมดูลหมุน (Rotary module)

ในโมดูลหมุนมีส่วนที่แตกต่างกัน 2 ส่วน:

- DIAL SWITCH: สวิตช์ที่ตรวจจับว่าเริ่มหมุนหมายเลขแล้ว

- NUMBER SWITCH: สวิตช์ที่เปิด-ปิด ตามจำนวนครั้งของหมายเลขที่หมุน ตัวอย่างเช่น หมายเลข 6 สวิตช์จะเปิด-ปิด 6 ครั้ง ข้อยกเว้นเดียวคือเลข 0 ซึ่งจะทำให้เกิดพัลส์ 10 ครั้ง

พี่ต่อสายไฟ 2 เส้นไปที่ DIAL SWITCH ของพี่ เส้นหนึ่งไปที่ 3.3V ของ Rpi (ผ่านตัวต้านทาน 220 โอห์ม) และอีกเส้นไปที่ขา PIN 10 ของ RPI (GPIO 15)

พี่ก็ต่อสายไฟ 2 เส้นสำหรับ NUMBER SWITCH ด้วย เส้นหนึ่งไปที่ 3.3V ของ Rpi (ผ่านตัวต้านทาน 220 โอห์ม) และอีกเส้นไปที่ขา PIN 16 ของ RPI (GPIO 23)

ขั้นตอนที่ 3: สร้างแผนที่!

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

เมื่อหัวเสียบเสียงอยู่บนแผนที่เรียบร้อยแล้ว ก็ไปต่อที่การเดินสายได้เลย

Arduino เชื่อมต่อกับ Raspberry Pi ผ่านสาย USB (สำหรับทั้งไฟเลี้ยงและการสื่อสาร Serial)

น้องสามารถหาโค้ด Arduino ได้ใน Git repository ด้านล่าง

  • ขั้นตอนที่ 4: ตั้งค่า Raspberry Pi ของน้อง

ดูแผนภาพในส่วน SCHEMATICS ด้านล่างสำหรับคำแนะนำโดยละเอียดเกี่ยวกับการเดินสายไปยัง Raspberry Pi ของน้อง

ตัวเลือกเสริม: พี่ใส่ LED ด้วย ซึ่งต่อกับ pin 15 (GPIO 22) LED นี้จะกระพริบเมื่อสคริปต์ main.py กำลังทำงาน

ตัวเลือกเสริม: เพิ่มปุ่มกดที่อนุญาตให้รีบูต/ปิด Pi ของน้องได้ ของพี่มีสายไฟ 2 เส้นที่ต่อกับ PIN 13 (GPIO 27) และ GROUND ตามลำดับ

พี่เตรียมสคริปต์หลัก main.py ไว้ใน GitHub repository ด้านล่างแล้ว สคริปต์พร้อมใช้และมีคอมเมนต์ไว้ในกรณีที่น้องสนใจว่ามันทำงานยังไง

โปรดทราบ: การรันสคริปต์ Python โดยไม่มี Arduino เชื่อมต่ออยู่จะทำให้เกิดข้อผิดพลาด

Raspberry Pi ของพี่ถูกตั้งค่าให้ทำงานแบบ Headless (ไม่มีหน้าจอ) มีบางอย่างที่น้องต้องตั้งค่าถ้าอยากให้มันทำงาน:

- ต้องแน่ใจว่า GUI (Graphical User Interface) เริ่มทำงานแม้จะไม่ได้ต่อจอภาพ เราต้องการมันเพื่อรันเว็บไซต์ของเรา

ใน Terminal พิมพ์:

sudo nano /boot/config.txt

จากนั้น เอาเครื่องหมายคอมเมนต์ออกจากบรรทัดนี้:

hdmi_force_hotplug=1

บันทึกโดยกด CTRL+X และยอมรับการเปลี่ยนแปลงโดยกด y เมื่อถูกถาม

- เปิดเว็บไซต์ radiooooo.com ตอนเริ่มระบบ

ใน Terminal พิมพ์:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

เพิ่มบรรทัดต่อไปนี้ลงในไฟล์:

/usr/bin/chromium-browser --ignore-certificate-errors --disable-restore-session-state https://www.radiooooo.com

- รันสคริปต์ Python ตอนเริ่มระบบ

ในไฟล์เดียวกันนี้ เพิ่มบรรทัดต่อไปนี้:

@/usr/bin/python /home/pi/your/path/main.py
@/usr/bin/python /home/pi/your/path/shutdown_button.py

- อัปเดตสคริปต์ให้ตรงกับพอร์ต USB ที่น้องต่อ Arduino เข้าไป

รันคำสั่งต่อไปนี้ใน Terminal (โดยที่ Arduino ยังไม่ได้เสียบ):

ls /dev/tty*

รายการพอร์ตทั้งหมดที่มีจะแสดงขึ้นมา จากนั้นเสียบ Arduino ของน้องเข้าไปแล้วรันคำสั่งเดิมอีกครั้ง พอร์ตที่ปรากฏขึ้นมาคือพอร์ตของ Arduino (ในกรณีของพี่คือ /dev/ttyACM0) เปิดสคริปต์ main.py แล้วอัปเดตบรรทัดต่อไปนี้ให้ตรงกับพอร์ตของน้อง:

<

ข้อมูล Frontmatter ดั้งเดิม

title: "Turn a rotary phone into a radio and travel through time"
description: "I hacked a rotary phone into a radio! Pick up the phone, choose a country and a decade, and listen to some great music!"
author: "carolinebuttet"
category: "Audio & Sound"
tags:
  - "audio"
  - "art"
  - "internet of things"
views: 6568
likes: 5
price: 1499
difficulty: "Intermediate"
components:
  - "1x Drill / Driver, Cordless"
  - "1x Button"
  - "1x Power supply for Raspberry Pi"
  - "1x Metal panel (or other material) to mount the map"
  - "1x Raspberry Pi 4 Model B"
  - "1x LED (generic)"
  - "1x Arduino UNO"
  - "1x Multimeter"
  - "1x Breadboard (generic)"
  - "1x Multitool, Screwdriver"
  - "1x Audio / Video Cable Assembly, 3.5mm 4 Pole Jack Plug"
  - "10x Jack socket 3 pin"
  - "20x Jumper wires (generic)"
  - "1x USB-A to B Cable"
  - "5x Resistor 220 ohm"
  - "1x Wire, Wrapping Wire"
  - "1x Rotary Phone"
  - "1x SD Card for the Raspberry Pi"
  - "1x World Map"
  - "5x Resistor 10k ohm"
tools: []
apps:
  - "1x Radiooooo"
downloadableFiles:
  - "https://github.com/carolinebuttet/rotary-radio/blob/master/README.md"
  - "https://github.com/carolinebuttet/rotary-radio/blob/master/README.md"
documentationLinks: []
passwordHash: "77339cd8bb096116fb9dd37eb1c7e756462686e80ecc4bf66b1434e578e7e22f"
encryptedPayload: "U2FsdGVkX198bzdF8Q6873uN+A8lZASGki/Kg7HztcbKe7V3RS+yitia3LPtKuiUcfeLj3hmdh6E+ZRwkMWNdanyzCCDKSrtvRJ7ALWI8nA="
seoDescription: "Hack a rotary phone into a time-traveling radio! Choose a country and decade to stream music with this creative Arduino project."
videoLinks:
  - "https://www.youtube.com/embed/Wz1SBkfLXiY"
  - "https://www.youtube.com/embed/5mjZgalAXfs"
  - "https://www.youtube.com/embed/YquZV8O4Sc0"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/turn-a-rotary-phone-into-a-radio-and-travel-through-time-24bbf8_cover.jpg"
lang: "th"