คุณสมบัติของพอร์ตดิจิตอลเอาต์พุต ในบอร์ด Arduino มีพอร์ตดิจิตอลเอาต์พุตทั้งหมด 14 พอร์ต แต่ละพอร์ตสามารถจ่ายกระแสให้กับอุปกรณ์อิเล็กทรอนิกส์ได้เพียง 40 มิลลิแอมป์ ซึ่งสามารถนําไปขับหลอด LEDให้ติดสว่างได้ แต่ต้องต่อตัวต้านทานเพื่อจํากัดกระแสไว้ด้วย ถ้าต้องการขับอุปกรณ์ อิเล็กทรอนิกส์ที่กินกระแสมากขึ้นต้องต่อวงจรขับกระแส เช่น ใช้ทรานซิสเตอร์ หรือเฟตเพื่อขับโหลดที่กินกระแสมาก ๆ
รูปที่ 4.1 พอร์ตดิจิตอลเอาต์พุตของบอร์ด Arduino
การต่อ Arduino กับหลอดแอลอีดี
หลอดแอลอีดี (LED) เป็นไดโอดชนิดหนึ่งที่สามารถเปล่งแสงออกมาได้เมื่อได้รับไบอัสตรง แสงที่เปล่งออกมามีหลายสีขึ้นอยู่กับชนิดของสารกึ่งตัวนำที่นำมาทำ เช่น แสงอินฟราเรด (Infrared) แสงสีแดง สีเหลือง สีส้ม สีเขียว เป็นต้น หลอดแอลอีดี มีทั้งขนาด รูปร่างให้เลือกหลายรูปแบบ ส่วนการนำไปใช้งาน ต้องจ่ายไบอัสตรงให้หลอดแอลอีดี มีแรงดันตกคร่อมประมาณ 1.2 1.5 V มีค่ากระแสไหลผ่าน อยู่ในช่วง 10 - 20 มิลลิแอมป์ แต่ถ้าหลอดแอลอีดีได้รับไบอัสกลับทําให้หลอดแอลอีดีไม่ติดสว่าง
รูปที่ 4.2 หลอดแอลอีดี (LED) ชนิดต่าง ๆ
การต่อบอร์ด Arduino เข้ากับหลอดแอลอีดีที่พอร์ตเอาต์พุตของบอร์ด Arduino มีแรงดันขณะส่งลอจิก “1” อยู่ที่ 5 โวลต์ ดังนั้นจึงต้องนำตัวต้านทานมาต่อเพื่อจำกัดกระแสให้น้อยลง ถ้าแรงดันที่พอร์ตเอาต์พุตมีค่า 5 โวลต์ ให้มีแรงดันตกคร่อมหลอดแอลอีดีเท่ากับ 2โวลต์ ดังนั้นแรงดันตกคร่อมตัวต้านทานเท่ากับ 3 โวลต์ กำหนดให้กระแสที่ไหลผ่านหลอดแอลอีดี 10 มิลลิแอมป์ หาค่าตัวต้านทาน
การต่อหลอดแอลอีดีกับบอร์ด Arduino ตัวต้านทานที่นิยมใช้กันมีค่า 330 "Ω" กับ 220 "Ω" ส่วนการต่อหลอดแอลอีดีกับพอร์ตดิจิตอลเอาต์พุต สามารถต่อได้ 2 วิธีคือ วิธีแรกเป็นการต่อแบบกระแส ซอร์ซ (Source Current) ขาแอโนด (A) ของหลอด แอลอีดีถูกต่อเข้ากับไมโครคอนโทรลเลอร์และขาแคโทด (K) ต่อลงกราวนด์ ตามรูปที่ 4.3 เมื่อจ่ายลอจิก “1” ออกมาทางขาเอาต์พุตส่งผลให้มีกระแสไหลผ่าน หลอดแอลอีดี ทําให้หลอดแอลอีดีติดสว่าง แต่เมื่อ จ่ายลอจิก “0” ส่งผลให้หลอดแอลอีดีดับ
รูปที่ 4.3 การต่อหลอดแอลอีดีแบบกระแสซอร์ซ
วิธีที่สองเป็นการต่อแบบกระแสซิงค์ (Sink Curent) ขาแอโนด (A) ของหลอดแอลอีดีถูกต่อเข้ากับ แรงดันไฟ VCC หรือไฟ +5 โวลต์ และขาแคโทด (K) ต่อเข้ากับไมโครคอนโทรลเลอร์ ตามรูปที่ 4.4 เมื่อจ่าย ลอจิก “1” ส่งผลให้หลอดแอลอีดีดับ แต่เมื่อจ่ายลอจิก “0” หรือกราวนด์ (GND.) ออกมาทางขาเอาต์พุต ส่งผลให้มีกระแสไหลจากแรงดันไฟ VCC ผ่าน หลอดแอลอีดี เข้าพอร์ตขาที่จ่ายลอจิก “0” หรือ กราวนด์ (GND.) ทําให้หลอดแอลอีดีติดสว่าง
รูปที่ 4.4 การต่อหลอดแอลอีดีแบบกระแสซิงค์
การต่อ Arduino กับโหลดที่กินกระแสสูง
จากวงจรรูปที่ 4.3 และ 4.4 เหมาะสำหรับการต่อพอร์ตดิจิตอลเอาต์พุตกับหลอดแอลอีดี หรือ อุปกรณ์อิเล็กทรอนิกส์อื่น ๆ ที่กินกระแสไม่เกิน 40 มิลลิแอมป์ แต่ถ้าโหลดกินกระแสมากกว่านี้ บอร์ด Arduino ไม่สามารถขับอุปกรณ์เหล่านั้นได้โดยตรง เช่น หลอดไฟ รีเลย์ มอเตอร์ เป็นต้น วิธีการต่อคือนำทรานซิสเตอร์มาต่อเป็นสวิตช์เพื่อ เปิด - ปิดอุปกรณ์เหล่านั้นแทน ตามรูปที่ 4.5
รูปที่ 4.5 การใช้ทรานซิสเตอร์เพื่อขับมอเตอร์ ผ่านมอเตอร์ได้หรือไม่
การทำงานของวงจรนี้ เมื่อพอร์ต ดิจิตอลเอาต์พุตส่งลอจิก “1” ออกมา กระแสไฟฟ้าไหลเข้าไปยังขาเบส (B) ของ ทรานซิสเตอร์ทำให้ทรานซิสเตอร์ทำงาน และส่งผลให้มอเตอร์หมุนด้วย การเลือก ทรานซิสเตอร์ต้องดูด้วยว่าทรานซิสเตอร์ที่ นำมาขับมอเตอร์สามารถรับค่ากระแสที่ไหลผ่านมอเตอร์ได้หรือไม่
การต่อ Arduino กับอุปกรณ์รีเลย์
รีเลย์ (Relay) เป็นอุปกรณ์พื้นฐานสําหรับใช้ในการควบคุมอุปกรณ์ไฟฟ้าต่าง ๆ ทั้งอุปกรณ์ไฟฟ้ากระแสตรงและกระแสสลับ อุปกรณ์รีเลย์ที่กล่าวถึงนี้เป็นแบบอิเล็กโทรแมคเนติก รีเลย์ (Electromechanical- Relay) ตามรูปที่ 4.6 เป็นตัวอย่างการต่อรีเลย์ซึ่งควบคุมการทํางานโดยพอร์ตดิจิตอล เอาต์พุตของบอร์ด Arduino ผ่านทรานซิสเตอร์ โดยรีเลย์ทําการสั่งงานให้หลอดไฟ 220 โวลต์ทํางาน เมื่อพอร์ตเอาต์พุตส่งสัญญาณลอจิก “1” ออกมา กระแสไฟฟ้าไหลผ่านรีซิสเตอร์ เข้าไปไบอัสขาเบส (B)
ของทรานซิสเตอร์ทําให้ทรานซิสเตอร์ทํางาน เมื่อทรานซิสเตอร์ทํางานส่งผลให้รีเลย์ทํางาน ด้วยเช่นกัน และทําให้หลอดไฟ 220 โวลต์ติดสว่างด้วย
รูปที่ 4.6 การขับรีเลย์โดยใช้ทรานซิสเตอร์เพื่อเปิด - ปิดหลอดไฟกระแสสลับ 220 V.
การเขียนโปรแกรมเพื่อใช้งานเป็นพอร์ตดิจิตอลเอาต์พุต เริ่มต้นด้วยการกําหนดโหมดการทํางาน ให้กับพอร์ตโดยใช้คําสั่ง pinMode( )
คําสั่ง pinMode()
เป็นคําสั่งสําหรับกําหนดการทํางานของพอร์ตที่ต้องการใช้งานให้เป็นพอร์ตเอาต์พุตหรือพอร์ต อินพุต
รูปแบบคําสั่ง pinMode (ตําแหน่งพอร์ต, โหมด OUTPUT หรือ INPUT)
ถ้าต้องการใช้งานเป็นพอร์ตเอาต์พุตต้องใช้คําสั่ง digitalWrite( ) เพื่อส่งข้อมูลออกพอร์ต เอาต์พุตให้มีค่า HIGH (ลอจิก “1”) หรือ LOW (ลอจิก “0”) ตามต้องการ
คําสั่ง digitalWrite()
รูปแบบคําสั่ง
digitalWrite(ตําแหน่งพอร์ต, ค่า HIGH หรือ LOW)
ตัวอย่างการเขียนโปรแกรม
int ledPin = 10; // กําหนดตัวแปร ledPin ต่อที่พอร์ตดิจิตอลขา 10
void setup()
{
pinMode(ledPin, OUTPUT); // เซตพอร์ตดิจิตอลขา 10 ให้เป็นพอร์ตเอาต์พุต
}
void loop()
{
digitalWrite(ledPin, HIGH); // ส่งข้อมูลออกเอาต์พุตเป็นลอจิก “1”
delay(1000); // หน่วงเวลา 1 วินาที
digitalWrite(ledPin, LOW); // ส่งข้อมูลออกเอาต์พุตเป็นลอจิก “0”
delay(1000); // หน่วงเวลา 1 วินาที
}
สรุป
การต่อใช้งานพอร์ตดิจิตอลเอาต์พุตกับบอร์ด Arduino สามารถต่อใช้งานขับหลอดแอลอีดีได้ทั้งแบบกระแสซอร์ซ (Source current) หรือกระแสซิงค์ (Sink Curent) ขึ้นอยู่กับผู้พัฒนาโปรแกรมเลือกใช้งานโดยกระแสที่ไหลออกจากพอร์ตของบอร์ด Arduino ให้กระแสออกมา 40 มิลลิแอมป์ และ ถ้าต้องการจ่ายกระแสมากกว่านี้ต้องต่อวงจรขับกระแสให้สูงขึ้นเพิ่มเติม เช่น ทรานซิสเตอร์เฟต เป็นต้น