Lab 3

การติดต่อ Digital Output


VDO Link: https://www.youtube.com/watch?v=el0XViNq4NQ


ระดับความยากง่าย

● ปานกลาง


ประมาณเวลาที่ใช้เรียนรู้ + ลงมือทำตาม

● 30 นาที - 1 ชั่วโมง


Prerequisite ต้องผ่านหัวข้อหรือใบงานกิจกรรมใดมาก่อน

● Module Arduino on NETPIE Lab 1 การติดตั้ง Arduino IDE และทดสอบการทำงานเบื้องต้นของ Arduino Mega 2560 (https://netpie.gitbooks.io/netpie-lab-4-arduino-on-netpie/content/introduction.html)


วัตถุประสงค์

เพื่อให้เข้าใจการใช้งานและสามารถประยุกต์ใช้งาน Digital Output ได้


อุปกรณ์ที่ใช้ในการทดลอง

  1. บอร์ด Arduino Mega 2560

  2. หลอดไฟ LED

  3. ตัวต้านทาน (Resistor) 330 Ω ขนาด ¼ w

  4. Breadboard

5.สายไฟเชื่อมต่อ (Male to Female)

เนื้อหาเชิงทฤษฎี

ในการทดลองนี้ ผู้ศึกษาจะได้ต่อบอร์ดกับอุปกรณ์เอาต์พุตเพื่อขับให้อุปกรณ์ทำงานการต่อวงจรเพื่อใช้งานขาต่างๆ ในโหมดการทำงานแบบเอาท์พุตมีอยู่ด้วยกันสองแบบ แบบแรกจะทำงานเมื่อส่งแรงดันไฟฟ้าขาออก 5 V หรือที่เรียกว่า ลอจิก HIGH (‘1’) และแบบที่สองจะทำงานเมื่อส่งแรงดันไฟฟ้าขาออก 0 V หรือลอจิก LOW (‘0’) โดยในการทดลองจะได้กล่าวถึงวิธีการเขียนโปรแกรมว่าจะสามารถสั่งงานให้ทำงานในโหมด Digital Output ได้อย่างไร
เบื้องต้นขออธิบายวิธีการต่อวงจรเพื่อใช้งาน Digital Output ในการเปิดปิดหลอดไฟ LED ซึ่งมีอยู่ด้วยกันสองวิธีดังแสดงในภาพวิธีแรกเรียกว่า Active High กล่าวคือเมื่อเราส่งลอจิก HIGH จากบอร์ดหลอด LED จะติด และหากบอร์ดส่งลอจิก LOW หลอด LED จะดับส่วนวิธีที่สองเรียกว่า Active Low จะได้ผลลัพธ์ที่กลับกันทั้งนี้บอร์ด Arduino Mega 2560 จะมี LED ติดมาด้วยอยู่แล้ว 1 ดวงที่ขาหมายเลข 13 โดยต่อแบบ Active High

ฟังก์ชั่นของโปรแกรมที่ควรทราบ

pinMode

pinMode เป็นฟังก์ชั่นที่ใช้ในการตั้งค่าโหมดการทำงานให้กับขาของบอร์ด Arduino

Syntax:

pinMode\(pin, mode\)

Parameter:

pin: หมายเลขขาที่ต้องการตั้งค่าใช้งาน

mode:INPUT :ตั้งขาเป็นอินพุต โดยต่อแบบ Pull Down

INPUT_PULLUP :ตั้งขาเป็นอินพุตที่ต่อแบบ Pull Up และใช้ตัวต้านทาน Pull Up ภายในของบอร์ด

OUTPUT :ตั้งขาให้เป็นเอาท์พุต

digitalWrite

digitalWrite เป็นฟังก์ชั่นที่ใช้ในการเขียนค่าลอจิกไปที่ขาของบอร์ด Arduino

Syntax:

digitalWrite\(pin, logic\)

Parameter:

pin: หมายเลขขาที่ต้องการเขียนค่า

logic: ลอจิกที่ต้องการส่งออกเป็น HIGH หรือ LOW

ขั้นตอนการทดลอง

1.ต่อตัวต้านทานและหลอด LED ภายนอกเพิ่มเติมเข้ากับบอร์ดให้ทำงานแบบ Active High ดังภาพ

2.เปิดโปรแกรม Arduino IDE แล้วไปที่ File -> New File

3.เขียนโค้ดลงในสเก็ตช์ดังต่อไปนี้

#define LED 13 
voidsetup() 
{
  pinMode(LED,OUTPUT); // Setup output pin
}

voidloop() 
{
  digitalWrite(LED,HIGH); // Pin 13 is HIGH
  delay(250);
  digitalWrite(LED,LOW); // Pin 13 is LOW
  delay(250);
}

คำอธิบายโปรแกรม

การกำหนด #define เพื่อให้เรียกขาหมายเลข 13 ที่ต่อกับหลอด LED ของบอร์ดอยู่แล้วว่า LED

ส่วนภายในฟังก์ชั่น setup() เป็นการตั้งค่าให้ขา LED เป็น Digital Output

ส่วนภายในฟังก์ชั่น loop() เริ่มจากสั่งให้เขียนลอจิก HIGH ไปยังขา LED และหน่วงเวลา 250 ms จากนั้นสั่งให้เขียนลอจิก LOW ไปที่ขา LED และหน่วงเวลาอีก 250 ms จากนั้นวนซ้ำคำสั่งในลูปไปเรื่อยๆ

4.คอมไพล์โค้ดและบันทึกไฟล์ไว้บน Desktop ในตัวอย่างนี้เราตั้งชื่อไฟล์ว่า “test” จากนั้นอัพโหลดไฟล์ลงในบอร์ด

5.สังเกตผลลัพธ์ที่หลอดไฟ LED บนบอร์ดและที่ต่อจากภายนอก หลอดทั้งสองดวงจะกระพริบติดดับพร้อมๆ กัน

สรุปผล

ในการทดลองนี้ ผู้ศึกษาได้ทดลองใช้งาน Digital Output ของบอร์ด Arduino Mega 2560 ด้วยการสั่งเปิดปิดไฟหลอด LED ที่มีการต่อวงจรแบบ Active High

แบบฝึกหัดทดสอบความเข้าใจ

  1. คำสั่งอะไรที่ใช้ในการสั่งเขียนค่าลอจิก ‘1’ ไปที่ขา 13 องบอร์ด Arduino
  2. คำสั่งอะไรที่ใช้ในการสั่งเขียนค่าลอจิก ‘0’ ไปที่ขา 13 ของบอร์ด Arduino
  3. หากต่อวงจรหลอด LED แบบ Active High จะต้องส่งลอจิกอะไรเพื่อให้หลอด LED นั้นติด
  4. หากต่อวงจรหลอด LED แบบ Active Low จะต้องส่งลอจิกอะไรเพื่อให้หลอด LED นั้นติด
  5. เขียนโค้ดโดยประยุกต์จากโค้ดในการทดลอง เพื่อให้หลอดไฟ LED สีแดงที่ต่อเพิ่มภายนอกที่ขาหมายเลข 7 กระพริบสามครั้งและให้หลอดไฟ LED สีเขียวที่ต่อเพิ่มจากภายนอกที่ขาหมายเลข 8 กระพริบห้าครั้งและวนซ้ำเช่นนี้ไปเรื่อยๆ โดยหลอดไฟทั้งสองดวงต่อแบบ Active High

เฉลย-แบบฝึกหัดทดสอบความเข้าใจ

1.digitalWrite(13, HIGH);

2.digitalWrite(13, LOW);

3.ลอจิก ‘1’ หรือ HIGH

4.ลอจิก ‘0’ หรือ LOW

5.เขียนโค้ดได้ดังนี้

#defineLED_Red 7
#defineLED_Green 8  

voidsetup() 
{
pinMode(LED_Red,OUTPUT);   // setup Red LED as output
pinMode(LED_Green,OUTPUT); // setup Green LED as output
}

voidloop() 
{
for(int count = 1 ; count <= 3 ; count++)
{
digitalWrite(LED_Red,HIGH); // Turn On Red LED
delay(250);
digitalWrite(LED_Red,LOW); // Turn Off Red LED
delay(250);
}

for(int count = 1 ; count <= 5 ; count++)
{
digitalWrite(LED_Green,HIGH); // Turn On Green LED
delay(250);
digitalWrite(LED_Green,LOW); // Turn Off Green LED
delay(250);
}
}

VDO Link : https://www.youtube.com/watch?v=el0XViNq4NQ


results matching ""

    No results matching ""