![<< Go Back](image/iconclose.gif)
![](image/h1.png)
![](image/pic01.png)
![](image/h2.png)
การต่อและการเขียนโปรแกรม RGB color module
RGB color module คือ วงจรแสดงสี RGB R คือ Red (สีแดง) G คือ Green (สีเขียว) และ B คือ Blue (สีน้ำเงินหรือฟ้า) ซึ่งไฟทั้ง 3 สี จะอยู่ในหลอด LED เดียวกัน โดยการเขียนโปรแกรม Sketch จะกำหนดเงื่อนไขให้ฟังทั้ง 3 สีติดสลับกันวนไป
รูปด้านล่างคือ ชุดวงจร RGB color module โดยขาอุปกรณ์จะมีอยู่ด้วยกัน 4 ขา คือ (ไล่จากซ้ายไปขาว)
![](image/01.png) - ขาที่ 1 คือ B
![](image/01.png) - ขาที่ 2 คือ G
![](image/01.png) - ขาที่ 3 คือ R
![](image/01.png) - ขาที่ 4 คือ – หรือ GNO (กราวด์)
![](image/pic02.png)
ทดลองใช้ Arduino ควบคุมหลอด LED RGB
![](image/pic03.png)
![](image/01.png) 1. ขา R เชื่อมต่อกับหมุด -9
![](image/01.png) 2. ขา G เชื่อมต่อกับหมุด -10
![](image/01.png) 3. ขา B เชื่อมต่อกับหมุด -11
![](image/01.png) 4. ขา Cathode เชื่อมต่อกับหมุด GND
โค้ดโปรแกรมควบคุม Arduino
![](image/pic04.png)
การเขียนโปรแกรมใช้งานพอร์ตทำหน้าที่เอาท์พุทพอร์ตเบื้องต้น
ทฤษฎีพื้นฐาน
บอร์ดArduino รุ่นที่ใช้ไอซีไมโครคอนโทรลเลอร์ ATMEGA328, ATMEGA168, ATMEGA8 จะมีพอร์ตดิจิทัลให้สามารถเชื่อมต่อใช้งานได้ 14 ขาด้วยกันโดยเริ่มจากขา D0, D1,…D13 แต่ในขณะใช้งานที่มีการติดต่อสื่อสารกับคอมพิวเตอร์ผ่านทางพอร์ตอนุกรม (สาย USB ที่กำลังเชื่อมต่อกับคอมพิวเตอร์) ขา D0 และ D1 จะถูกใช้งานรับส่งข้อมูลอยู่ ดังนั้นจึงห้ามใช้ในขณะที่ใช้งานพอร์ตอนุกรม
![](image/pic05.png)
รูป ขาพอร์ตใช้งานของไอซี Arduino เบอร์ ATMEGA328
ฟังก์ชันที่ใช้
ในตัวอย่างนี้ประกอบด้วยฟังก์ชันกำหนดโหมดการทำงานให้กับขาพอร์ต สามารถกำหนดได้ทั้งขาดิจิทัลโดยใส่เพียงตัวเลขของขา (0, 1, 2,…13) และขาแอนาลอกที่ต้องการให้ทำงานในโหมดดิจิทัลแต่การใส่ขาต้องใส่ A นำหน้าซึ่งใช้ได้เฉพาะ A0, A1,…A5 ส่วนขา A6 และ A7 ไม่สามารถใช้งานในโหมดดิจิทัลได้ รูปแบบของฟังก์ชันเป็นดังนี้
![](image/pic06.png)
pin: หมายเลขขาที่ต้องการเซตโหมด
mode: INPUT, OUTPUT, INPUT_PULLUP
และฟังก์ชันส่งค่าลอจิกดิจิทัลไปยังขาพอร์ต ค่า HIGH เป็นการส่งลอจิก 1 และค่า LOW เป็นการส่งลอจิก 0 ออกไปยังขาพอร์ต ซึ่งฟังก์ชันนี้จะทำงานได้จะต้องมีการใช้ฟังก์ชัน pinMode ก่อน
![](image/pic07.png)
pin: หมายเลขขาที่ต้องการเขียนลอจิกออกพอร์ต |
value: HIGH or LOW |
ฟังก์ชันที่สามคือ ฟังก์ชั่นหน่วงเวลาหรือฟังก์ชันหยุดค้าง การใช้งานสามารถกำหนดตัวเลขของเวลาที่ต้องการหยุดค้างโดยตัวเลขที่ใส่เป็นตัวเลขของเวลาหน่วยเป็นมิลลิวินาที ตัวเลขของเวลาที่ใส่ได้สูงสุดคือ 4,294,967,295 ซึ่งเป็นขนาดของตัวแปร unsigned long
![](image/pic08.png)
ms: ตัวเลขที่หยุดค้างของเวลาหน่วยมิลลิวินาที (unsigned long)
การทดลองที่ 1 เขียนโปรแกรมไฟวิ่ง LED 4 ตัว ติด-ดับ เรียงกันไปโดยให้ติดครั้งละ 1 ตัวและที่เหลือดับผังงาน
อุปกรณ์ที่ใช้ในการทดลอง
![](image/001.png) |
หลอดไฟ LED จำนวน 4 ดวง |
![](image/002.png) |
สายจัมเปอร์ ผู้-ผู้ จำนวน 6 เส้น |
![](image/003.png) |
Bread Board จำนวน 1 อัน |
การต่อวงจร
![](image/pic09.png)
การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใช้บอร์ดโมดูล Arduino สำเร็จรูปลงบอร์ดทดลอง
โค้ดโปรแกรมควบคุม Arduino
![](image/pic10.png)
รายละเอียดโค้ดโปรแกรม
![](image/01.png) - บรรทัดที่ 1-4 กำหนดชื่อ LED1, 2, 3, 4 ให้แทน 2, 3, 4, 5 (เป็นขาที่ LED ต่ออยู่กับ Arduino)
![](image/01.png) - บรรทัดที่ 7 กำหนดอัตราเร็วของการสื่อสารของพอร์ตอนุกรม (กำหนด Baud rate)
![](image/01.png) - บรรทัดที่ 8-11 กำหนดโหมดให้กับขาพอร์ตทา งานเป็นเอาต์พุทพอร์ต
![](image/01.png) - บรรทัดที่ 15 ส่งลอจิก 1 ออกพอร์ตที่ใช้ชื่อว่า LED1
![](image/01.png) - บรรทัดที่ 16 ส่งลอจิก 0 ออกพอร์ตที่ใช้ชื่อว่า LED2
![](image/01.png) - บรรทัดที่ 17 ส่งลอจิก 0 ออกพอร์ตที่ใช้ชื่อว่า LED3
![](image/01.png) - บรรทัดที่ 18 ส่งลอจิก 0 ออกพอร์ตที่ใช้ชื่อว่า LED4
![](image/01.png) - บรรทัดที่ 19 หน่วงเวลา 200 mS (1/5 วินาที)
การทดลองที่ 2 เขียนโปรแกรมไฟวิ่ง LED 4 ตัวติดดับเรียงกันไปโดยให้ติดครั้งละ 1 ตัวและที่เหลือดับเช่นเดียวกับการทดลองที่หนึ่ง แต่ใช้วิธีการเขียนฟังก์ชันรองชนิดรับค่าแต่ไม่ส่งคืนค่าขึ้นใช้งานเองผังงาน
คำสั่งควบคุม Arduino
![](image/pic11.png)
รายละเอียดโค้ดโปรแกรม
![](image/01.png) - บรรทัดที่ 1 ประกาศตัวแปรแบบอาร์เรย์ชื่อ LED_pin และกำหนดค่าเป็น 2, 3, 4, 5 (เป็นขาที่ LED ต่ออยู่กับ Arduino)
![](image/01.png) - บรรทัดที่ 2 ประกาศรูปแบบ (Prototype) ของฟังก์ชันรอง ซึ่งเป็นฟังก์ชำนให้ทำหน้าที่รับค่าที่ส่งมาจากฟังก์ชันหลักแล้วคำนวณเพื่อส่งลอจิกออกพอร์ต
![](image/01.png) - บรรทัดที่ 5 กำหนดอัตราเร็วของการสื่อสารของพอร์ตอนุกรม (กำหนด Baud rate)
![](image/01.png) - บรรทัดที่ 6-9 กำหนดโหมดให้กับขาพอร์ตทำงานเป็นเอาต์พุทพอร์ต โดยใช้คำสั่ง for ในการวนทำซ้ำ
![](image/01.png) - บรรทัดที่ 14 หน่วงเวลา 200 mS (1/5 วินาที)
![](image/01.png) - บรรทัดที่ 22-28 ฟังก์ชันรองที่รับค่าเข้ามาจากฟังก์ชันหลักผ่านตัวแปร data แล้วนำค่าเข้ามาตรวจสอบว่าควรจะต้องส่งลอจิก 1 หรือลอจิก 0 ออกทางพอร์ตใด
การทดลองที่ 3 การทดลองต่อ Motor Drive Module L298N (ขับมอเตอร์) กับมอเตอร์ล้อ
สิ่งที่เป็นพลังขับเคลื่อนหลักให้กับหุ่นยนต์นั้นคือ มอเตอร์ ซึ่งต้องการการควบคุมจาก ชุดไดรว์มอเตอร์ (Motor Driver) ที่จะมาควบคุม ทั้ง ทิศทาง และ ความเร็วซึ่งตัวขับมอเตอร์ในมี่นี้คือ Module L298N ตัวขับมอเตอร์มี 2 ตัวแบบแยกอิสระ สามารถควบคุมความเร็วมอเตอร์ได้ ใช้ไฟ 5 โวลต์ สามารถรับไฟเข้า 7-35 โวลต์ได้ มีวงจรเรกูเลตในตัว ขับกระแสสูงสุด ข้างละ 2A Module L298N เป็นชุดขับมอเตอร์ชนิด H-Bridge ซึ่งส่วนใหญ่จะถูกนำไปใช้ในการควบคุมทิศทางและความเร็วของมอเตอร์
Out 1: ช่องต่อขั้วไฟของมอเตอร์ A
Out 2: ช่องต่อขั้วไฟของมอเตอร์ A
Out 3: ช่องต่อขั้วไฟของมอเตอร์ B
Out 4: ช่องต่อขั้วไฟของมอเตอร์ B
12V: ช่องจ่ายไฟเลี้ยงมอเตอร์ 12V (ต่อได้ตั้งแต่ 5V ถึง 35V)
GND: ช่องต่อไฟลบ (Ground)
5V: ช่องจ่ายไฟเลี้ยงมอเตอร์ 5V (หากมีการต่อไฟเลี้ยงที่ช่อง 12V แล้ว
ช่องนี้จะทำหน้าที่จ่ายไฟออก เป็น 5V Output สามารถต่อไฟจากช่องนี้ไปเลี้ยงบอร์ด Arduino ได้
ENA: ช่องต่อสัญญาณ PWM สำหรับมอเตอร์ A
IN1: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ A
IN2: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ A
IN3: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ B
IN4: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ B
ENB: ช่องต่อสัญญาณ PWM สำหรับมอเตอร์ B
อุปกรณ์ที่ใช้ในการทดลอง
![](image/004.png) |
Motor Drive Module L298N 1 ตัว |
![](image/005.png) |
มอเตอร์จำนวน 1 อัน |
![](image/006.png) |
ล้อ จำนวน 1 ล้อ |
![](image/002.png) |
สายจัมเปอร์ ผุ้ – ผู้ จำนวน 5 เส้น |
การต่อวงจร 1. สายจัมเปอร์สีน้ำเงินต่อที่ช่องต่อ GND (กราวน์)
2. สายจัมเปอร์สีแดงต่อที่ช่องไฟ 5 โวลต์
3. สายจัมเปอร์สีส้มต่อที่ขา IN3
4. สายจัมเปอร์สีน้ำตาลต่อที่ขา IN4
5. สายจัมเปอร์สีขาวต่อที่ขา ENB
![](image/007.png)
คำสั่งควบคุม Arduino
![](image/008.png)
![](image/title5-1.png)
![](image/lesson5-1.png)
|