กลับไปหน้ารวมไฟล์
sending-commands-from-host-to-uno-7432d1.md

ชื่อโปรเจกต์: ส่งคำสั่งจาก Host คอมพิวเตอร์เข้าบอร์ด Uno (จัดไปวัยรุ่น!)

*******

ไปเช็ครายการอุปกรณ์ที่ต้องใช้ในโปรเจกต์นี้ให้ครบก่อนนะน้อง จะได้ไม่เสียเวลาตอนประกอบ

*******

บทนำ

ถ้าใครยังไม่ได้อ่านคู่มือ Getting Started หรือโปรเจกต์ 3 ของ Arduino Uno Rev3 (Uno) พี่แนะนำให้ไปจัดการตัวเองให้เรียบร้อยก่อนนะ เดี๋ยวจะหาว่าพี่ไม่เตือน! แต่ถ้าใครพร้อมแล้วก็ลุยต่อเลย ในบทเรียนที่แล้วเราส่งข้อมูลจาก Uno ไปหาคอมพิวเตอร์ (Host) คราวนี้เราจะสลับฝั่งกันบ้าง โดยจะส่งข้อมูลจากคอมฯ กลับมาที่ Uno แทน เราจะเชื่อมต่อกับ LED bar graph แบบ 10 ช่อง และคุยผ่านการสื่อสารแบบ UART ตามข้อมูลที่ได้รับมาจากคอมฯ บอร์ด Uno จะแสดงผลเป็นเลขฐานสอง (binary) บนไฟ LED ซึ่งเราจะใช้ LED แค่ 4 จาก 10 ดวงพอ โดยแต่ละดวงจะรับสัญญาณ output มาจากขาของบอร์ด Uno นั่นเอง

LED Bar Graph

ลองกลับไปทบทวนโปรเจกต์ 1 ของ Arduino Uno Rev3 ดูนะน้อง จะได้เข้าใจโครงสร้างวงจรภายในของเจ้า LED bar graph ตัวนี้มากขึ้น

Serial Terminal

ถ้ายังงงๆ เรื่อง Serial Terminal ก็กลับไปดูโปรเจกต์ 3 ของ Arduino Uno Rev3 ซะนะ

Resistor Array

ข้อมูลเพิ่มเติมเกี่ยวกับตัวต้านทานแบบแถว (resistor array) ขนาด 470 ohm มีอยู่ในโปรเจกต์ 1 ไปหาอ่านเอาเองนะวัยรุ่น

การต่อวงจร (Wiring)

งานนี้พี่ใช้ breadboard แทน Modulus เพราะพวกแกน่าจะมีติดตัวกันทุกคนอยู่แล้ว ขั้นแรกเสียบ LED bar graph ลงบน breadboard เลย เสียบให้ตัวมันคร่อมร่องกลางบอร์ดนะเว้ย ย้ำว่าห้ามให้ Pins มันช็อต (short) กันจากการต่อลง Node เดียวกันเด็ดขาด ไม่งั้นงานงอก! ต่อมาเอา resistor array ขนาด 470 ohm มาวางฝั่ง cathode (ขาลบ) ของ LED แล้วต่อขา 1 ของ array ลง GND เช็คให้ดีนะว่าขา 1 ของ resistor array ไม่ได้ไปจิ้มมั่วกับขาลบดวงอื่น

จากนั้นใช้สายจัมเปอร์แบบ M/M ต่อฝั่ง anode (ขาบวก) ของ LED bar graph เข้ากับขา Pins 2-5 ของบอร์ด Uno เพื่อรับ output ตัวอย่างเช่น ขา 10 ของ bar graph ต่อเข้า Uno Pin 5, ขา 9 ของ LED ต่อเข้า Uno Pin 4 ไล่ไปเรื่อยๆ ตามรูปข้างล่างนี้เลย หล่อเท่แน่นอน!

Circuit Schematic

ถ้ายังไม่ได้ติดตั้ง Uno ลงบน FuelCan ก็จัดซะ พี่วาง breadboard ไว้ในช่องเก็บของด้านล่างเพื่อประหยัดความยาวสายจัมเปอร์ เราต้องจ่าย GND ไปที่ราง ground บน breadboard ด้วย โดยใช้สาย banana jack ต่อกับคลิปปากคีบ (test-lead clip) แล้วใช้ male header pin เป็นจุดยึดบน breadboard เอา จากนั้นเสียบสาย USB ฝั่ง Type A เข้าช่อง USB1 และฝั่ง Type B เข้าที่ตัว Uno ส่วนสาย USB Type A to Type A ก็เสียบจากคอมพิวเตอร์เข้าที่ช่องต่อภายนอกของ FuelCan สุดท้ายก็เสียบ AC-DC adapter จ่ายไฟให้ FuelCan เป็นอันจบพิธี!

ซอฟต์แวร์ (Software)

พอต่อสายเสร็จ จ่ายไฟเรียบร้อย ก็ถึงเวลาโหลด Sketch ลงเครื่อง Uno แล้ว โค้ดอยู่ข้างล่างนี้เลยนะน้อง พออัปโหลดเสร็จก็เปิด Serial Monitor ใน IDE ขึ้นมา สังเกตในโค้ดนะ พี่ใช้คำสั่ง switch statement เพื่อเลือกเปิดไฟ LED ตาม input ที่ส่งมาจากคอมฯ เช่น ถ้าเราส่งเลข 1 ไปหา Uno โค้ดใน case 1 ก็จะทำงานทันที

พี่ทำเผื่อไว้ให้ตั้งแต่ case 0-9 เลย ลองส่งตัวเลขแต่ละตัวไปที่ Uno แล้วดูผลลัพธ์ที่ LED bar graph นะ มันต้องแสดงผลเป็นเลขฐานสอง (binary) ตามตัวเลขที่เราส่งไปนั่นแหละ แล้วพี่แอบใส่บรรทัด Serial.print(RXdata) ไว้ด้วย เพื่อให้ Uno ส่งข้อมูลที่มันได้รับกลับมาหาเรา เทคนิคนี้เรียกว่าการ debugging เอาไว้เช็คว่าข้อมูลที่รับส่งกันมันถูกต้องไหม เวลาเราส่งเลข '1' ไปที่ Uno สังเกตที่ Serial Monitor นะ มันจะตอบกลับมาเป็น 49 และ 10... อ้าว ทำไมเป็นงั้น? ก็เพราะข้อมูลมันถูกแปลงเป็น ASCII ไงล่ะน้องรัก รหัส ASCII ของเลข 1 คือ 49 ส่วน 'New Line' (ปุ่ม Enter) คือ 10 จำไว้ให้ขึ้นใจล่ะ!

รายละเอียดเทคนิคเพิ่มเติม (EXPANDED TECHNICAL DETAILS)

PC-to-MCU Command Protocol

โปรเจกต์นี้เน้นเรื่องการสื่อสารที่เสถียรระหว่าง Host (คอมพิวเตอร์) กับ Arduino ผ่าน USB-Serial link

  • Serial Parsing Logic: บอร์ด Arduino จะคอย "ฟัง" ชุดอักขระพิเศษหรือ "Delimited Packets" (เช่น L1:255 หมายถึง LED ดวงที่ 1 สว่างสุด)
  • State Machine Architecture: ตัว Firmware ใช้ตรรกะ switch-case แบบ "Non-blocking" เพื่อประมวลผลคำสั่งโดยไม่ต้องหยุดทำงานเบื้องหลังอื่นๆ นี่แหละพื้นฐานระดับมืออาชีพในการสร้างเครื่องจักรที่ควบคุมผ่านคอมพิวเตอร์เลยนะน้อง

การควบคุมฝั่ง PC (PC-Side Control)

  • รองรับหลายภาษา: เราจะคุมผ่าน Serial Monitor ธรรมดาก็ได้ หรือจะเขียนสคริปต์ Python โดยใช้ pySerial หรือจะสร้างโปรแกรม Desktop ด้วย C# ก็ทำได้หมด นี่แหละคือความยืดหยุ่นของมาตรฐาน UART interface จัดไปอย่าให้เสีย!

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

title: "Sending Commands from Host to Uno"
description: "Display an output on the LED bar graph based on the serial command received from the host."
author: "ejshea"
category: "Lab Stuff"
tags:
  - "communication"
  - "uart"
views: 19200
likes: 1
price: 1499
difficulty: "Easy"
components: []
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "143a471039123f5aa678ee8de9f688b50b6fd1d56c2611b3dde1d2c8fc24acaf"
encryptedPayload: "U2FsdGVkX1+QL2vGmvHTnBIk9TqVFih11O3TTVWjYiMz5r1vLXNL9kdL35wYT2pCLYg4CLlylk1nP6Ljaqh6y4IBtxtKuxBCaMr1cCxcqFU="
seoDescription: "Learn how to send Commands from a Host to Uno to control an LED bar graph via Serial communication in this Arduino project."
videoLinks:
  - "https://www.youtube.com/embed/QGT5OiPbJJM"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/sending-commands-from-host-to-uno-7432d1_cover.jpg"
lang: "th"