รายการอุปกรณ์ครบจบในลิงก์นี้เลยน้อง ไปดูเองละกัน (แต่ลิงก์หายไปกับสายลมแล้ววว)
เริ่มกันเลยดีกว่า
ถ้ายังไม่ได้อ่านคู่มือเริ่มต้น หรือโปรเจคแรกของ Arduino Uno Rev3 (Uno) ไปอ่านมาก่อนนะครับน้อง! อ่านจบแล้วค่อยกลับมาอ่านตรงนี้ต่อ งานนี้เราจะเอาแผงสวิตช์จากโปรเจคแรกออก แล้วมาใช้คีย์แพดเมทริกซ์ 16 ปุ่มแทน ส่วน LED บาร์กราฟ เราจะใช้แค่ 4 ดวงจากทั้งหมด 10 ดวงเหมือนเดิม จำให้ขึ้นใจ: ขาแต่ละขาของ LED จะเป็น output จาก Uno ส่วนขาแต่ละขาของคีย์แพดจะเป็น input เข้าไปหา Uno และเราต้องใช้ขาอีก 4 ขาเป็น output เพื่อขับคอลัมน์ของคีย์แพดด้วย รวมแล้ว Uno ของเราต้องใช้ดิจิตอล output 8 ขา และดิจิตอล input 4 ขา งานเข้าแล้วจ้า!
LED Bar Graph
เรื่องของ LED Bar Graph กับวิธีต่อตัวต้านทาน 470 โอห์มแบบอนุกรมกับ LED แต่ละดวง ไปอ่านรายละเอียดกันได้ในโปรเจคแรกเลยครับ (ลิงก์หายอีกแล้ว ฮ่วย!)
คีย์แพดเมทริกซ์ 16 ปุ่ม
คีย์แพดนี้มีทั้งหมด 16 ปุ่ม เป็นตัวเลข 0-9, ตัวอักษร A-D, เครื่องหมายดอกจัน (*) และชาร์ป (#) ภายในมันแบ่งเป็น 4 คอลัมน์กับ 4 แถว หลักการคือเราจะส่งสัญญาณไปที่คอลัมน์ แล้วค่อยอ่านค่าจากแถว เพื่อตรวจสอบว่าปุ่มไหนถูกกด ลายวงจรและโครงสร้างภายในเป็นแบบนี้ครับ (พินอาจจะเรียงต่างกันไปตามยี่ห้อ นี่เป็นของที่ผมใช้อยู่)

วิธีตรวจสอบว่าปุ่มไหนถูกกด คือเราต้องส่งสัญญาณ High ไปที่คอลัมน์แต่ละอันตามลำดับ แล้วค่อยดูว่าแถวไหนได้สัญญาณ High ตอบกลับมาบ้าง ตัวอย่าง: ตั้งคอลัมน์ 1 เป็น High แล้วตรวจดูว่าปุ่ม 1, 4, 7, หรือ * ถูกกดรึเปล่า พอตรวจเสร็จก็ตั้งคอลัมน์ 1 กลับเป็น Low แล้วไปตั้งคอลัมน์ 2 เป็น High แทน เพื่อตรวจปุ่ม 2, 5, 8, 0 ต่อไป ทำแบบนี้วนไปเรื่อยๆ

แต่ละแถวจะต้องต่อกับตัวต้านทานแบบ pull-down ด้วยนะ นั่นหมายความว่าเมื่อไม่มีปุ่มถูกกด ขา input ของ Uno จะอ่านค่าได้ 0V พอมีปุ่มถูกกด +5V จะวิ่งไปที่ขา input ของ Uno ตัวอย่าง: เมื่อคอลัมน์ 1 เป็น High แล้วกดปุ่ม 1, +5V จะวิ่งไปที่แถว 5 ดูภาพเคลื่อนไหวข้างล่างนี้แล้วจะเข้าใจ

การเดินสาย
พี่ใช้ breadboard แทน Modulus นะ เพราะว่าส่วนใหญ่ทุกคนน่าจะมี breadboard กันอยู่แล้ว เริ่มแรกเลย วาง LED bar graph กับคีย์แพดลงบน breadboard ซะ ใส่ LED bar graph ให้ตัวมันอยู่ตรงร่องแบ่งกลางของ breadboard นะ ระวังอย่าให้ขาของมันชอร์ตกันเองเพราะไปต่ออยู่ที่โหนดเดียวกันล่ะ ต่อไป วางตัวต้านทานแบบอาร์เรย์ 470 โอห์มที่ด้าน แคโทด (Cathode)ของ LED แล้วต่อขาที่ 1 ของอาร์เรย์เข้ากับ GND ตรวจสอบให้ดีว่าขาที่ 1 ของตัวต้านทานอาร์เรย์ไม่ได้ต่อเข้ากับแคโทดของ LED bar graph ตัวไหนเลย พอเสียบตัวต้านทานอาร์เรย์เข้าไป ตอนนี้เราก็จะมีตัวต้านทานต่ออนุกรมกับ LED แต่ละดวงในสี่ดวงแล้วล่ะ
ต่อไป ใช้สายจัมเปอร์ผู้-ผู้ (M/M) ต่อด้าน แอโนด (Anode) ของ LED bar graph เป็นเอาต์พุตไปยังขา 8-11 ของ Uno ตัวอย่างเช่น ขาที่ 7 ของ bar graph จะต่อไปที่ขา 8 ของ Uno, ขาที่ 8 ของ LED จะต่อไปที่ขา 9 ของ Uno ไปเรื่อยๆ แบบนี้นะ
วางตัวต้านทานแบบอาร์เรย์ 1.2k โอห์มตามที่เห็นในภาพด้านล่าง ต่อขาที่ 1 ของอาร์เรย์เข้ากับ GND และตรวจสอบให้แน่ใจว่ามันไม่ได้ต่อเข้ากับขาใดๆ บนคีย์แพด รู breadboard ที่ขีดเส้นสีเทาอมน้ำเงินไว้จะถูกต่อเข้ากับขา 0-3 ของ Uno ตัวอย่างเช่น ขาที่ 1 (คอลัมน์ 1) บนคีย์แพดจะถูกต่อเข้ากับขา 0, ขาที่ 2 (คอลัมน์ 2) บนคีย์แพดจะถูกต่อเข้ากับขา 1 ไปเรื่อยๆ ส่วนรู breadboard ที่ขีดเส้นสีเหลืองไว้จะถูกต่อเข้ากับขา 4-7 ของ Uno ตัวอย่างเช่น ขาที่ 5 (แถว 1) บนคีย์แพดจะถูกต่อเข้ากับขา 4, ขาที่ 6 (แถว 2) บนคีย์แพดจะถูกต่อเข้ากับขา 5 ไปเรื่อยๆ

ถ้ายังไม่ได้ติดตั้ง Uno ลงบนพื้นที่โปรโตไทป์ของ FuelCan ก็จัดการติดตั้งซะ พี่วาง breadboard ไว้ในช่องเก็บของด้านล่างเพื่อจำกัดความยาวของสายจัมเปอร์นะ เราต้องจ่ายไฟ +5V และ GND ไปยังรางไฟและกราวด์บน breadboard ใช้สายแปลงจากแจ็คกล้วยไปเป็นคลิปทดสอบที่ให้มาทำเรื่องนี้ได้ จะต้องใช้พินเฮดเดอร์ผู้ (male header pins) สองอันเพื่อติดตั้งคลิปทดสอบที่ด้าน breadboard เสียบด้าน Type A ของสาย USB เข้ากับช่อง USB1 และด้าน Type B เข้ากับช่องของ Uno จากนั้นก็เปิดไฟ FuelCan ด้วยอะแดปเตอร์ AC-DC ได้เลย
ซอฟต์แวร์
เมื่อเดินสายเสร็จและจ่ายไฟให้ FuelCan แล้ว ตอนนี้เราก็อัพโหลดสเก็ตช์ลง Uno ได้แล้ว สเก็ตช์อยู่ด้านล่าง ส่วนตารางด้านล่างแสดงวิธีการแมปปุ่มแต่ละปุ่มให้เป็นเลขฐานสอง


รายละเอียดทางเทคนิคเพิ่มเติม
Interactive Level Visualizer
โปรเจคนี้ผสมผสานการแสดงผลแบบหนาแน่นกับเมทริกซ์ป้อนตัวเลขเข้าไป จัดเต็ม UI สไตล์มือโปรเลย
- Data Input Hub: ใช้ 4x4 Matrix Keypad เป็นตัวป้อนข้อมูล เวลาน้องกดเลข (เช่น '1' ถึง '10') Arduino ก็จะเก็บค่าลำดับนั้นไว้แล้วแปลงเป็นระดับ
- Bar Graph Drive: ควบคุม 10-segment LED Bar Graph ตรงๆ เลย แต่น้องต้องรู้ไว้ว่า ถ้าจะทำจอใหญ่กว่านี้ Arduino สามารถใช้ 74HC595 Shift Register มาขับ LED ทั้งแถวได้ โดยใช้แค่ 3 พินเท่านั้น งานนี้แหละที่แสดงให้เห็นการจัดการพินแบบขั้นสูง
Dynamic Feedback
- Scaling Logic: เฟิร์มแวร์จะแปลงค่าจากคีย์แพด (0-9) เป็นจำนวน LED ที่ต้องติด นี่คือพื้นฐานสำคัญสำหรับการทำแผงควบคุมระดับเสียง, ความเข้มแสง หรืออินดิเคเตอร์แสดงระดับแบตเตอรี่ เอาไปประยุกต์ต่อได้อีกเพียบ