การเขียนโปรแกรมเพื่อควบคุมการ ติด-ดับ ของหลอดไฟ LED ถือเป็นการเขียนโปรแกรมบน Arduino UNO ที่ง่ายที่สุด ทำให้ผู้ที่ไม่เคยเขียนโปรแกรมคอมพิวเตอร์มาก่อนก็สามารถทำความเข้าใจได้ไม่ยาก อีกทั้งยังเป็นการเรียนรู้การต่อวงจรอิเล็คทรอนิกส์เบื้องต้นไปพร้อมกันด้วย
ในหัวข้อนี้เราจะมาต่อวงจรให้กับ LED เพื่อทำให้มันสว่าง โดยอุปกรณ์ที่ต้องใช้ก็คือ
1. บอร์ด Arduino UNO R3
2. หลอด LED ขนาด 5MM สีเขียว จำนวน 2 ตัว
3. หลอด LED ขนาด 5MM สีแดง จำนวน 1 ตัว
4. รีซิสเตอร์ 220 Ohms จำนวน 3 ตัว
5. Jumper cable wire 10cm Male to Male (สายเชื่อมต่อ ผู้-ผู้ )
6. Breadboard Protoboard 400 Tie-points Size 8.5*5.5 cm (โฟโต้บอร์ด)
ต่อวงจรตามรูป
ในหัวข้อนี้เราจะมาต่อวงจรให้กับ LED เพื่อทำให้มันสว่าง โดยอุปกรณ์ที่ต้องใช้ก็คือ
1. บอร์ด Arduino UNO R3
2. หลอด LED ขนาด 5MM สีเขียว จำนวน 2 ตัว
3. หลอด LED ขนาด 5MM สีแดง จำนวน 1 ตัว
4. รีซิสเตอร์ 220 Ohms จำนวน 3 ตัว
5. Jumper cable wire 10cm Male to Male (สายเชื่อมต่อ ผู้-ผู้ )
6. Breadboard Protoboard 400 Tie-points Size 8.5*5.5 cm (โฟโต้บอร์ด)
ต่อวงจรตามรูป
วงจรอิเล็กทรอนิกส์
เริ่มต่อวงจร กับบอร์ด Arduino UNO หลักการในการต่อคือ ต่อให้แรงดันขนาด 5 โวลต์ ให้ไหลผ่านหลอด LED แล้วไหลลงสู่ GND หลอด LED ก็จะสว่างขึ้นมา แต่เราจำเป็นต้องเพิ่มตัวต้านทานขนาด 220 โอห์ม เข้าไปในเส้นทางของวงจรด้วย เพื่อต้านทานกระแสไฟฟ้าไม่ให้ไหลผ่าน LED มากเกินไป
การต่อวงจรภายในแผ่นโพโตบอร์ด (Breadboard) จะเป็นดังรูปกล่าวคือ ด้านบนและด้านล่างจะใช้สำหรับต่อไปเลี้ยงวงจรซึ่งวงจรด้านล่างจะต่อถึงกันทั้งแถว ส่วนการต่อวงจรด้านใน จะต่อถึงกันตามแนวตั้งดังภาพ
และรูปด้านล่างคือรูปของการต่อวงจรด้วยอุปกรณ์ต่างๆบน Breadboard การต่อไม่จำเป็นต้องต่อตามภาพ สามารถจะตอเป็นรูปแบบไหนก็ได้ ขอเพียงให้ถูกต้องตามวงจร ก็จะสามารถทำงานได้เช่นเดียวกัน
ขาดิจิตอลของ Arduino สามารถส่งค่าที่เป็นดิจิตอลออกมาได้ โดยสัญญาณดิจิตอลนั้นถ้าอธิบายให้เข้าใจง่ายๆ มีอยู่ 2 รูปแบบคือ HIGH (มีไฟ) และ LOW (ไม่มีไฟ)
• pinMode(xx, OUTPUT); คือการตั้งค่าให้ให้ขาอะไรเป็นเอาท์พุท เช่น ขา 11 , 12 , 13 เป็นต้น
• digitalWrite() คือคำสั่งที่ใช้ควบคุมการจ่ายไฟ สำหรับแบบ Digital จะมีอยู่ 2 ค่าคือ HIGH (มีไฟ) และ LOW (ไม่มีไฟ)
• delay() คือคำสั่งที่ใช้หน่วงเวลา หรือนับเวลานั่นเองโดยจะมีหน่วยเป็น มิลลิวินาที (1 วินาที = 1000 มิลลิวินาที) 500 จึงเท่ากับ ครึ่งวินาที
เปิดโปรแกรม Arduino (IDE) เขียน โค้ดดังนี้
void setup()
{
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(11, HIGH);
delay(500);
digitalWrite(11, LOW);
delay(500);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(500);
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
เมื่อเขียนเสร็จแล้วให้เรากด Upload เพื่อตรวจสอบโค้ดโปรแกรมที่เราเขียนว่าถูกต้องหรือไม่พร้อมทั้งส่งโค้ดโปรแกรมที่เราเขียนไปยังบอร์ด Arduino UNO ผ่านทางสาย USB
ถ้าวงจรที่เราต่ออยู่ถูกต้อง จะพบว่าหลอด LED ที่เราต่อนั้นสว่าง และ กระพริบ เรียงกันตามลำดับ (ถ้า LED ไฟไม่ติด .ให้ตรวจสอบการต่อวงจร หรือ ลองกลับขั้ว LED ซึ่งอาจจะต่อผิดอยู่)
และในหัวข้อนี้มาเรียนรู้ตัวแปรภาษา C เพิ่มเติมด้วยครับ
ตัวแปร (Variables) จะเป็นชื่อที่ใช้ในการบอกจำนวนหรือปริมาณ ซึ่งสามารถที่จะทำการเปลี่ยนแปลงจำนวนได้ด้วยโปรแกรมคอมพิวเตอร์ การตั้งชื่อตัวแปร จะต้องตั้งชื่อให้แตกต่างไปจากชื่อของตัวแปรอื่นๆ ยกตัวอย่างชื่อของตัวแปร ได้แก่ x, y, peter, num_of_points และ streetnum เป็นต้น โดยปกติการเขียนโปรแกรมที่ดี ควรจะตั้งชื่อตัวแปรให้สอดคล้องกับการทำงานหรือหน้าที่ของตัวแปรนั้นๆ เพราะเมื่อถึงเวลาต้องมาทำการปรับปรุงแก้ไขโปรแกรม จะสามารถทำได้โดยไม่ยากนัก
int เป็นชนิดตัวแปรที่สามารถแทนค่าจำนวนเต็มได้ทั้งบวกและลบ
ดังนั้นเราจะลองใช้ ตัวแปร int แทนขาดิจิตอลต่างๆ ของ บอร์ด Arduino UNO เช่น
int LED1 = 13;
int คือประกาศตัวแปรเป็นชนิดจำนวนเต็ม และให้ชื่อตัวแปรว่า LED1 และกำหนดค่าให้เป็น 13 ด้วย
จากนั้น นำโค้ดเดิมด้านบนมาแก้ไขโค้ดดังนี้
int LED2 = 12; //เพิ่มเข้ามา เพื่อ ประกาศตัวแปร ให้ LED2 แทนด้วยตัวเลข 12
int LED3 = 11; //เพิ่มเข้ามา เพื่อ ประกาศตัวแปร ให้ LED3 แทนด้วยตัวเลข 11
void setup()
{
pinMode(LED3, OUTPUT); //เปลี่ยนเลข 11 เป็น LED3
pinMode(LED2, OUTPUT); //เปลี่ยนเลข 12 เป็น LED2
pinMode(LED1, OUTPUT); //เปลี่ยนเลข 13 เป็น LED1
}
void loop()
{
digitalWrite(LED3, HIGH); //เปลี่ยนเลข 11 เป็น LED3
delay(500);
digitalWrite(LED3, LOW); //เปลี่ยนเลข 11 เป็น LED3
delay(500);
digitalWrite(LED2, HIGH); //เปลี่ยนเลข 12 เป็น LED2
delay(500);
digitalWrite(LED2, LOW); //เปลี่ยนเลข 12 เป็น LED2
delay(500);
digitalWrite(LED1, HIGH); //เปลี่ยนเลข 13 เป็น LED1
delay(500);
digitalWrite(LED1, LOW); //เปลี่ยนเลข 13 เป็น LED1
delay(500);
}
// (เครื่องหมายทับสองอัน) สิ่งที่พิมพ์ตามมาในบรรทัดนั้น จะไม่ถูกนำมาแปลภาษาเพื่ออัพโหลดให้กับบอร์ด จึงใช้เขียนอธิบายการทำงาน หรือ บันทึกช่วยจำ ต่างๆเป็นต้น
ก็จะเห็นการทำงานของวงจร ติด-ดับของหลอดไฟ LED ทำงานเหมือนกับโปรแกรมแรก
แต่.. ข้อดีของการเขียนโปรแกรม แบบมีตัวแปร คือ เมื่อเราต้องการแก้ไขการต่อวงจรของเรา เช่น ต้องการแก้ไข วงจร จาก ขาดิจิตอล จาก ขา 13 เป็น ขา 5 เมื่อเราย้ายสาย การต่อวงจรเรียบร้อยแล้ว เราก็เพียงไป แก้ไข ค่าตัวแปร
int LED1 = 13;
เป็น
int LED1 = 5;
ซึ่งเป็นการแก้ไขเพียงจุดเดียว โปรแกรมก็จะทำงานตามความต้องการของเรา ต่างจากการเขียนแบบแรก ซึงต้องไปแก้ทุกจุดที่ เป็น ขา 13 และ ยังลดความผิดพลาดในการแก้ไขโปรแกรมไม่ครบทุกจุดอีกด้วย