ว่าไงทุกคน!
วันนี้ในอินสตรักเทเบิลนี้ เราจะมาดูเรื่องโทรศัพท์ที่ใช้ Arduino เป็นแกนกลางกัน ตัวนี้ยังเป็นต้นแบบอยู่ ยังพัฒนาต่อได้อีก โค้ดเป็นโอเพ่นซอร์ส ใครอยากแกะอยากดัดแปลงก็จัดไปได้เลยวัยรุ่น
ฟีเจอร์ในโทรศัพท์มีอะไรบ้างมาดู: 1. ฟังเพลง 2. ดูวิดีโอ 3. จดโน๊ต 4. นาฬิกา 5. รูปภาพ 6. แผนที่ 7. โทรออก-รับสาย 8. วิทยุ 9. ตั้งค่า 10. เครื่องคิดเลข
โปรแกรมของโปรเจคนี้กินแรมน้อยมาก แถมน้องๆ ยังสามารถเพิ่มฟีเจอร์เข้าไปได้อีก เช่น เซนเซอร์สแกนลายนิ้วมือ, ข้อความ, GPS ฯลฯ
หัวใจหลักของโทรศัพท์เครื่องนี้คือ Arduino Mega 2560 รูปภาพจะถูกเก็บไว้ใน SD Card แล้วค่อยดึงมาแสดงบนหน้าจอ ใช้ SD Card ขนาด 16GB หรือ 32GB ก็ได้
ถ้าอยากจะแก้ไขโค้ด แนะนำให้ดูตัวอย่างโค้ด (sample codes) ก่อน แล้วค่อยลงมือแก้ เพราะโค้ดทั้งหมดยาวเกือบ 2000 บรรทัด ห้ามช็อตนะตัวนี้ ดูตัวอย่างให้เข้าใจแนวทางก่อนสู้งานนะน้อง
มุมมองของโปรเจค
Arduino Based Phone คือการสำรวจเทคโนโลยีโทรคมนาคมและการโต้ตอบกับมือถือในระดับลึก โดยมุ่งเน้นไปที่โครงสร้างพื้นฐานสำคัญ—นั่นคือ การเชื่อมโยงระหว่างการสัมผัสหน้าจอกับระบบโทรศัพท์ และ ลอจิกการส่งข้อมูล GSM ประสิทธิภาพสูงกับ Serial ของ Mega—น้องจะได้เรียนรู้วิธีการสื่อสารและประสานงานงานต่างๆ โดยใช้ซอฟต์แวร์ลอจิกเฉพาะทางและการตั้งค่าที่เสถียร
การลงมือทำจริง: TFT Touch และ AT Commands
โปรเจคนี้จะเผยให้เห็นเลเยอร์ที่ซ่อนอยู่เบื้องหลังการโต้ตอบแบบสัมผัสสู่มือถือ:
- เลเยอร์ระบุตัวตน: หน้าจอสัมผัส TFT ทำหน้าที่เหมือนดวงตาดิจิทัลความละเอียดสูง คอยวัดทุกจุดสัมผัสของผู้ใช้เพื่อประสานงานการส่งข้อมูลของระบบ
- เลเยอร์แปลงสัญญาณ: ระบบใช้โปรโตคอลดิจิทัลความเร็วสูง (Serial UART) เพื่อรับคำสั่ง AT ความเร็วสูง มาประสานงานงานสำคัญต่างๆ
- เลเยอร์อินเทอร์เฟซเสียง: ลำโพงและไมโครโฟนฮาร์ดแวร์ ให้เสียงพูดและฟีดแบ็คแบบชัดเจนสำหรับทุกสถานะการโทร (เช่น กำลังโทรออก..., กำลังสนทนา)
- เลเยอร์เกตเวย์สื่อสาร: โมดูล SIM800 ทำหน้าที่เป็นตัวควบคุมเครือข่ายแบบแมนนวล หรือตรวจสอบสถานะซิงค์ของเครือข่ายเซลลูลาร์อัตโนมัติระหว่างการตั้งค่าเริ่มต้น
- ลอจิกการประมวลผล: โค้ดของเซิร์ฟเวอร์ใช้กลยุทธ์ "สัมผัส-ส่ง-AT" (หรือส่งคำสั่งโทร): มันจะตีความพิกัดจากหน้าจอสัมผัสและจับคู่กับสถานะของโมเด็ม GSM เพื่อให้การโทรออกปลอดภัยและเป็นจังหวะ
- ลูปการสื่อสาร: บิตสถานะต่างๆ จะถูกส่งเป็นจังหวะไปยัง Serial Monitor ในระหว่างการตั้งค่าเริ่มต้นเพื่อประสานสถานะของระบบ
ฮาร์ดแวร์และโครงสร้างพื้นฐานด้านโทรคมนาคม
- Arduino Mega 2560: ตัว "สมอง" ของโปรเจคนี้เลยว่างั้น จัดการการอ่านค่าจาก UI หลายทิศทางและประสานงานระหว่าง GSM กับ TFT ให้ทำงานพร้อมกัน
- GSM Subsystem: เป็นตัวสร้าง "ลิงค์เครือข่าย" ที่ชัดเจนและเสถียรให้ทุกจุดเชื่อมต่อทั่วโลก
- TFT Touch Display: จอสัมผัสความจุสูงและเชื่อถือได้ เป็นอินเทอร์เฟซทางกายภาพสำหรับ "ภารกิจโทรศัพท์" ครั้งแรกให้สำเร็จลุล่วง
- LiPo Battery: สำคัญมากสำหรับการให้พลังงานที่ชัดเจนและประหยัด เพื่อปกป้องทุกจุดของการทำงานแบบเคลื่อนที่
- Jumper Wires: สายไฟจิ้มจำเป็นมากสำหรับการส่งสัญญาณดิจิทัลที่ชัดเจนและมีประสิทธิภาพ ไปยังทุกจุดของเซ็นเซอร์อาร์เรย์
- Micro-USB Cable: ใช้สำหรับอัพโหลดโค้ดลง Arduino และเป็นอินเทอร์เฟซหลักสำหรับตัวควบคุมระบบ
ขั้นตอนที่ 1: ส่วนประกอบต่างๆ

1. Arduino Mega 2560 x1
2. โมดูล SD card x1
3. เซ็นเซอร์วัดแรงดันหรือกระแส 25v x1
4. จอ TFT ขนาด 3.5 นิ้ว รุ่น mcu friend x1
5. Df Player Mini x1
6. GSM 800L x1
7. แอมป์เสียง (Audio amplifier) x1
8. ลำโพง (speakers) x2
9. ทรานซิสเตอร์ 2N3904 NPN x1
10. ตัวต้านทาน (Resistor) 1k ohm x2
11. โปรแกรมเมอร์สำหรับ Arduino x1
12. ไมโครโฟนแอมป์ (Mic amplifier) x1
13. สายจัมเปอร์ หัวผู้-หัวเมีย (Male to Female) x40 (ประมาณ)
14. การ์ด SD ความจุ 16GB หรือ 32GB x2
15. LED x1
16. Power Bank x1
17. MOSFET รุ่น P55NFO6 x1
18. MOSFET รุ่น IRF9540N x1
19. สวิตช์สไลด์เปิด-ปิด (Slide on/off switch) x1
20. ตัวต้านทาน (Resistor) 300k ohm x1
21. ตัวต้านทาน (Resistor) 10k ohm x1
22. เฮดเดอร์หัวผู้ (Male headers) x10 (ประมาณ)
23. บอร์ดทดลองวงจร (Prototyping board) ขนาด 18x30cm x1
24. ปุ่มกดแบบสัมผัส (Tactile push button) x1
25. เฮดเดอร์หัวเมีย (Female headers) x10 (ประมาณ)
26. ปากกาสไตลัส (Stylus)
27. DS3231 (โมดูลนาฬิกาจริง)
ขั้นตอนที่ 2: การเดินสายฮาร์ดแวร์


เริ่มแรกเลย ต่อ Arduino Mega 2560 เข้ากับชิลด์จอ TFT ขนาด 3.5 นิ้วรุ่น mcu จากนั้นต่อโมดูล SD card เข้ากับขา SPI ของ Arduino Mega อย่าลืมเสียบการ์ด SD ลงในโมดูล SD breakout ด้วยล่ะ และอย่าลืมสร้างไลน์ไฟ 5V กับ GND ร่วมกัน (common) ด้วยนะ ต่อจากนั้นก็ต่อ DS3231 เข้ากับขา I2C ของ Arduino Mega ต่อเซ็นเซอร์วัดแรงดันเข้ากับขา A5 ของ Arduino Mega และต่อ LED เข้ากับขา 47 ของ Arduino Mega
หมายเหตุ: โทรศัพท์เครื่องนี้มีปัญหาหลักอย่างนึงคือเรื่องกระแสไฟ มันกินไฟค่อนข้างมาก ต้องการกระแสเกือบ 2.1 แอมป์เลยทีเดียว สาเหตุหลักมาจากจอแสดงผลที่กินไฟไปเกือบ 400mA ถ้าน้องสามารถควบคุมความสว่างของแบ็คไลท์จอได้ ปัญหาเรื่องไฟก็อาจจะแก้ได้
การต่อ SD Card --> Arduino Mega 2560 :
CS -- ขา 53
SCK -- ขา 52
MOSI -- ขา 51
MISO -- ขา 50
VCC -- 5V
GND -- GND
-------------------------------------------------------------------------------------------------------
การต่อ Arduino Mega 2560 --> โมดูลวัดแรงดัน 25V :
A5 -- ขา output ของโมดูล
GND -- GND ของโมดูล
JACK +ve -- ขา + ของโมดูล
JACK-ve -- ขา - ของโมดูล
-----------------------------------------------------------------------------------------------------
การต่อ Arduino Mega 2560 --> DS3231 :
SDA -- SDA ของ Arduino mega
SCL -- SCL ของ Arduino mega
VCC -- 5V
GND -- GND
-------------------------------------------------------------------------------------------------------
Arduino Mega 2560 --> Df Player Mini :
TX1 ของพอร์ต Serial1 -- RX (หมายเหตุ: ต้องต่อตัวต้านทาน (Resistor) 1k โอห์ม ระหว่าง TX1 กับ RX ด้วยนะน้อง)
RX1 ของพอร์ต Serial1 -- TX
GND ของ Arduino mega -- GND
5V -- VCC
ขั้วบวกลำโพง (Speaker +) -- spk1
ขั้วลบลำโพง (Speaker-) -- spk2
---------------------------------------------------------------------------------------------------
Arduino Mega 2560 --> LED :
ขา 47 -- ขั้วบวกของ LED
GND -- ขั้วลบของ LED (วางตัวต้านทาน (Resistor) 1k โอห์ม ระหว่าง GND ของ Arduino mega กับ ขั้วลบของ LED ด้วย)
-----------------------------------------------------------------------------------------------------
Arduino Mega 2560 --> ทรานซิสเตอร์ 2N3904 NPN : (การต่อนี้เกี่ยวกับการรีเซ็ต Arduino ผ่านโค้ด)
GND --> ขา Emitter
ขา 48 --> ขา Base ของ NPN (หมายเหตุ: ต่อตัวต้านทาน (Resistor) 1k โอห์ม ระหว่างขาที่ 49 ของ Arduino กับ ขา Base ของทรานซิสเตอร์)
RESET --> ขา Collector
----------------------------------------------------------------------------------------------------
Arduino Mega 2560 --> GSM 800l
TX3 ของพอร์ต Serial3 บน Arduino mega 2560 --> RX ของ GSM
RX3 ของพอร์ต Serial3 บน Arduino mega 2560 --> TX ของ GSM
GND --> GND
5V --> VCC
---------------------------------------------------------------------------------------------------
Mic Amplifier --> GSM :
MIC+ --> MIC+ ของ GSM
MIC- --> MIC- ของ GSM
GND ของไมค์ --> GND ของ Arduino mega
VCC ของไมค์ --> 5V ของ Arduino mega
--------------------------------------------------------------------------------------------------
Audio Amplifier --> GSM :
Left --> Spk- ของ GSM
Right --> Spk+ ของ GSM
VCC --> 5V ของ Arduino mega
GND --> GND ของ Arduino mega
Spk+ --> ขั้วบวกลำโพง (Speaker+)
Spk- --> ขั้วลบลำโพง (Speaker-)
-------------------------------------------------------------------------------------------------
วงจร ShutDown :
ดูในรูปด้านบนเลยจ้า
ต่อขา ctrl (control pin) เข้ากับขา 49 ของ Arduino mega
ขั้นตอนการทำงานอัตโนมัติและโต้ตอบของ Mobile Hub
กระบวนการสื่อสารที่ขับเคลื่อนด้วยระยะใกล้ถูกออกแบบมาให้มีประสิทธิภาพสูงสุด:
- เตรียมพื้นที่ทำงาน: จัดวาง GSM และ TFT shield ให้เข้าที่ในเคสที่ทำเอง และต่อสายเข้ากับขาของ Arduino Mega ให้ถูกต้องครบถ้วน
- ตั้งค่าการซิงค์ความเร็วสูง: ในสเก็ตช์ Arduino ให้เริ่มต้น
Serial1.begin(9600)และกำหนดปุ่ม UI ในฟังก์ชันsetup() - ลูปการทำงานภายใน: สถานีจะทำการสแกนการสัมผัสเป็นระยะๆ ด้วยประสิทธิภาพสูง และอัพเดทสถานะการโทรแบบเรียลไทม์ตามตำแหน่งและการตั้งค่าของคุณ
- การผสานข้อมูลและผลตอบรับภาพ: ดูสมาร์ทโฟนของคุณเปลี่ยนเป็นสัญญาณสถานะที่มีจังหวะโดยอัตโนมัติ พร้อมกับเต้นเป็นจังหวะและติดตามการตั้งค่าตำแหน่งจากทุกจุดในระบบ
ขั้นตอนที่ 3: วิธีหาพิกัดของไอคอน (ดูเฉพาะถ้าอยากเพิ่มแอปอื่นๆ นะ)




ก่อนอื่นต้องทำสามสิ่งนี้ให้เรียบร้อยก่อนนะน้อง หนึ่ง รูปภาพต้องเป็นไฟล์ `.bmp` เท่านั้น สอง ชื่อไฟล์รูปต้องมีความยาวไม่เกิน 8 ตัวอักษร สาม ความละเอียดของรูปต้องเป็น 320x480 เท่านั้น
ทีนี้ ถ้าจะหาพิกัดของไอคอนบนหน้าจอ ต้องใช้โปรแกรม Paint ของ Windows ซึ่งปกติมากับวินโดวส์อยู่แล้ว เปิดโปรแกรม Paint ขึ้นมา แล้วเปิดไฟล์รูปที่อยากรู้พิกัด
ตรวจสอบให้แน่ใจว่าขนาดรูปเป็น 320x480 ถ้าไม่ใช่ ให้ใช้ตัวเลือกปรับขนาด (resize) เพื่อเปลี่ยนขนาดรูป (ถ้าต้องปรับขนาดรูป ให้เลือกหน่วยเป็นพิกเซล แล้วพิมพ์ 320 ในช่องแรก กับ 480 ในช่องที่สอง จากนั้นกด OK) จัดไปวัยรุ่น!
ทีนี้จะหาพิกัดและพื้นที่ของไอคอน วางเมาส์ไว้ที่มุมซ้ายบนของไอคอน แล้วคลิกปุ่มซ้ายของเมาส์ค้างไว้ ลากเมาส์ให้ครอบคลุมไอคอน ตอนที่เห็นด้านล่างของโปรแกรม Paint ให้ดูพื้นที่ของไอคอนที่ได้ อยากเห็นพิกัดของไอคอนเหรอ? วางเมาส์ไว้ที่มุมซ้ายบนของไอคอน แล้วมองไปที่มุมซ้ายล่างของโปรแกรม Paint จะเห็นพิกัดโผล่มาเลย ห้ามขยับเมาส์นะ! แค่จดพิกัดที่เห็นไว้ แค่นี้ก็ได้พิกัดแล้วจ้า
ถ้าอยากหาพิกัด x1, y1 ด้วย ก็ง่ายนิดเดียว ก่อนอื่นให้วัดความยาวของไอคอนในแนวนอนก่อน แล้วเอาไปบวกกับพิกัด x ของไอคอน ผลลัพธ์ที่ได้นั่นแหละคือพิกัด x1 ของเรา ทำแบบเดียวกันเพื่อหาพิกัด y1 แต่คราวนี้ให้วัดความยาวของไอคอนในแนวตั้ง แล้วเอาไปบวกกับพิกัด y ของไอคอน ผลลัพธ์ที่ได้คือพิกัด y1 เรียบร้อย!
Step 4: Libraries

โหลดไลบรารี่จากด้านล่างนี้ แล้วเพิ่มเข้าไปใน Arduino IDE ของน้องให้เรียบร้อย
1. DS3231 :
2. Adafruit_GFX Library :
3. MCU Friend Library:
4. Adafruit_TouchScreen Libary:
โหลดแค่ไลบรารี่พวกนี้นะ ไม่ต้องโหลดไลบรารี่ DF player mini, SD card และ SPI
เพราะไลบรารี่ SPI กับ SD card มันติดตั้งมาใน Arduino IDE อยู่แล้ว ส่วนโค้ด DF player mini ก็เขียนไว้ในโปรแกรมแล้ว
Step 5: How to Set Date and Time


ก่อนอื่น ตรวจสอบให้แน่ใจว่าได้ติดตั้งไลบรารี่ DS3231 ใน Arduino IDE แล้วนะ
เริ่มเลย! เปิด Arduino IDE ขึ้นมา คลิกที่ File > Examples > หา DS3231 > เปิด DS3231 แล้วเลือก Arduino และเปิดตัวอย่าง DS3231_Serial_Easy ขึ้นมา เลื่อนลงไปที่บรรทัดที่ 57 ของโค้ด แล้วเอาเครื่องหมายคอมเมนต์ออกจากบรรทัดที่ 57 ถึง 59 ตั้งค่าวันที่, เวลา, วันในปัจจุบันให้เรียบร้อย จากนั้นอัปโหลดโค้ดลง Arduino Mega เปิด Serial Monitor ตั้งค่า Baud Rate เป็น 115200 จะเห็นวันที่, เวลา, วัน และอื่นๆ โผล่มาแล้ว ปิด Serial Monitor ซะ แล้วใส่เครื่องหมายคอมเมนต์กลับไปที่บรรทัดที่เราเพิ่งเอาออกไป จากนั้นอัปโหลดโค้ดอีกครั้ง แค่นี้ก็เสร็จ! เวลา, วันที่, วัน... ฯลฯ ถูกตั้งค่าเรียบร้อยแล้ว น้องจะเห็นเวลาที่ถูกต้องแล้วล่ะ
Step 6: Touch Calibration for Screen

ข้อมูล Frontmatter ดั้งเดิม
apps: - "1x Arduino IDE" - "1x Adafruit GFX Library" author: "ROCKSTAR13" category: "Communications, Displays" components: - "1x Arduino Mega 2560" - "1x GSM/GPRS Module (SIM800/SIM900)" - "1x 3.5-inch TFT Touch LCD (UI Display)" - "1x LiPo Battery & Boost Converter" - "1x Custom 3D Printed Case" - "1x Soldering iron (generic)" - "1x Solder Wire, Lead Free" - "1x Hot glue gun (generic)" - "1x Programming Cable, USB" description: "A professional and advanced smart-device project that uses an Arduino Mega 2560 and specialized cellular logic to build a high-performance custom smartphone prototype capable of basic telecom features and open-source development." difficulty: "Intermediate" documentationLinks: [] downloadableFiles: - "https://github.com/shiva1485/Arduino-Based-Phone.git" encryptedPayload: "U2FsdGVkX1/JE0m/Ow+QmW+EouXi7mn4rMjbCFHMYWf6RBKOjOsfuVGTQdxl1Sb1/j1i9LZm5fFXwTUIzyCubSd2Aew/WXJBSnCZDc3c98VTZoeJPjmoo/BjBwZNaMIS" heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-based-phone-56d407_cover.jpg" lang: "en" likes: 2 passwordHash: "e403404307e6b2594b279f6d534acc2c23f6bf9d6f8c245087e4ebd169232148" price: 2560 seoDescription: "An advanced and playsomely interactive Arduino-Phone-Sync for beginners interested in Arduino cellular-telecom and display-ui projects." tags: - "arduino-smartphone-prototype" - "gsm-module-sync" - "tft-display-dispatch" - "open-source-telecom" - "arduino-mega-2560" - "intermediate" title: "โทรศัพท์ Arduino งานง่ายแต่หล่อ มาลุยกัน!" tools: [] videoLinks: - "https://www.youtube.com/embed/wpyd6bKWxIQ" views: 856