1. ฝึกการต่อวงจร(เบรดบอร์ด)ปุ่มกดและไดโอดเปล่งเเสงร่วมกับบอร์ด Arduino
2. รู้และเข้าใจการทำงานของบอร์ด Arduino
3. ฝึกการใช้งานบอร์ด Arduino และเขียนโค้ดภาษา C/C++ เพื่อกำหนดคำสั่งในการทำงานของบอร์ด Arduino
รายการอุปกรณ์
1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
2. บอร์ด Arduino (ใช้แรงดันลอจิก +5V) 1 บอร์ด
3. ปุ่มกดแบบสี่ขา 2 ตัว
4. ไดโอดเปล่งแสงขนาด 5 มม. 4 ตัว
5. ตัวต้านทาน 10kΩ 2 ตัว
6. ตัวต้านทาน 10kΩ 2 ตัว
7. สายไฟสําหรับต่อวงจร 1 ชุด
ขั้นตอนการทดลอง
1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง VCC และ GND
2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-up 10kΩ จํานวนสองชุด (PB1 และ PB2) บนเบรดบอร์ดแล้วนําไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลําดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร
3. ต่อวงจรโดยใช้ไดโอดเปล่งแสง (LED) พร้อมตัวต้านทานแบบอนุกรม 330Ω หรือ 470Ω จํานวน
4 ชุด (LED1, LED2, LED3, LED4) บนเบรดบอร์ด แล้วนําไปต่อกับขา D4, D5, D6, D7, D8 ของ
บอร์ด Arduino ตามลําดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร (ดูตามผังวงจรในรูปที่ 3.1.1)
4. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทําขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino
5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) ให้ระวังการต่อสลับขั้วสายไฟ และ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น
6. แก้ไขโค้ดใหแสดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ตรวจสอบและสาธิตความถูกต้องในการทํางาน โดยใช้ฮาร์ดแวร์จริง
6.1 เมื่อเริ่มต้นทํางาน จะมี LED เพียงตัวเดียวที่อยู่ในสถานะ “ติด” (LED1) และที่เหลืออีก 3 ตัว(LED2, LED3, LED4) อยู่ในสถานะ “ดับ”
6.3 ถ้ากดปุ่ม PB2 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของ LED ที่ “ติด” เลื่อนไปทางซ้ายทีละหนึ่งตําแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางขวาสุด (LED1 -> LED4 -> LED3 -> LED2 -> …)
7. แก้ไขโค้ดใหแสดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ตรวจสอบและสาธิตความถูกต้องในการทํางาน
7.1 ใช้ LED ทั้ง 4 ตัว แสดงเลขในฐานสอง จํานวน 4 หลัก (4-bit binary number) ซึ่งรับสัญญาณเอาต์พุตมาจากบอร์ด Arduino และกําหนดให้บิตที่มีค่า 0 หมายถึง LED “ดับ” และ บิตที่มีค่า
เป็น 1 หมายถึง LED “ติด”และเมื่อเริ่มต้นทํางาน ให้แสดงค่าเป็น 0
7.2 เมื่อกดปุ่ม PB1 แล้วปล่อยแต่ละครั้ง จะทําให้ค่าเพิ่มขึ้นทีละหนึ่ง จาก 0000, 0001, 0010, …, 1111 ตามลําดับ แล้ววนกลับไปเริ่มต้นที่ 0000 ใหม่ได้
7.3 แต่ถ้ากดปุ่ม PB2 จะทําให้ได้ค่าเป็น 0000 ทันที( หมายถึงการรีเซตค่าเป็นศูนย์)
ผลการทดลอง
จำลองการต่อวงจรโดยใช้โปรแกรม frizing
แสดงผลการทดลองของข้อ 6 >>>เมื่อกดปุ่ม PB1 แล้วปล่อยในแต่ละครั้ง จะทำให้ LED ที่ “ติด” เลื่อนไปทางขวาทีละหนึ่งตําแหน่งแล้ววนกลับมาเริ่มใหม่ และเมื่อกดปุ่ม PB2 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของ LED ที่ “ติด” เลื่อนไปทางซ้ายทีละหนึ่งตําแหน่งแล้ววนกลับมาเริ่มใหม่
CODE.....
ผลการทดลอง
จำลองการต่อวงจรโดยใช้โปรแกรม frizing
จากโค้ดตัวอย่างที่กำหนดให้มา เมื่อทําขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino แล้ววงจรจะเริ่มต้นทํางาน จะมี LED เพียงตัวเดียวที่อยู่ในสถานะ “ติด” (LED1) และที่เหลืออีก 3 ตัว(LED2, LED3, LED4) อยู่ในสถานะ “ดับ”
EXAMPLE CODE...
................................................................................................................................................. const byte PB_2 = 3; const byte LEDS[4] = {4, 5, 6, 7}; void setup() { pinMode(PB_1, INPUT); pinMode(PB_2, INPUT); for (int i = 0; i < 4; i++) pinMode(LEDS[i], OUTPUT); digitalWrite(LEDS[i], (i == 0) ? HIGH : LOW); } } void loop() { // Write your code below }
|
แสดงผลการทดลองของข้อ 6 >>>เมื่อกดปุ่ม PB1 แล้วปล่อยในแต่ละครั้ง จะทำให้ LED ที่ “ติด” เลื่อนไปทางขวาทีละหนึ่งตําแหน่งแล้ววนกลับมาเริ่มใหม่ และเมื่อกดปุ่ม PB2 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของ LED ที่ “ติด” เลื่อนไปทางซ้ายทีละหนึ่งตําแหน่งแล้ววนกลับมาเริ่มใหม่
CODE..
................................................................................................................................................. const byte PB_2 = 3; const byte LEDS[4] = {4, 5, 6, 7}; void setup() { pinMode(PB_1, INPUT); pinMode(PB_2, INPUT); for (int i = 0; i < 4; i++) pinMode(LEDS[i], OUTPUT); digitalWrite(LEDS[i], (i == 0) ? HIGH : LOW); } }
int i = 0; void loop() { if (digitalRead(PB_1) == LOW ) { while (digitalRead(PB_1) == LOW) { delay(20); } i++; if (i == 4) i = 0; } if (digitalRead(PB_2) == LOW ) { while (digitalRead(PB_2) == LOW) { delay(20); } i--; if (i == -1) i = 3; } digitalWrite(LEDS[i], HIGH); for (int k = 0; k < 4; k++) { if( k != i ) digitalWrite ( LEDS[k], LOW ); } }
|
แสดงผลการทดลองของข้อ 7 >>> LED ทั้ง 4 ตัว แสดงเลขในฐานสอง จํานวน 4 หลัก (4-bit binary number) ซึ่งรับสัญญาณเอาต์พุตมาจากบอร์ด Arduino และกําหนดให้บิตที่มีค่า 0 หมายถึง LED “ดับ” และ บิตที่มีค่าเป็น 1 หมายถึง LED “ติด”และเมื่อเริ่มต้นทํางาน ให้แสดงค่าเป็น 0 กดปุ่ม PB1 แล้วปล่อยแต่ละครั้ง จะทําให้ค่าเพิ่มขึ้นทีละหนึ่ง จาก 0000, 0001, 0010, …, 1111 ตามลําดับ แล้ววนกลับไปเริ่มต้นที่ 0000 ใหม่ได้ แต่ถ้ากดปุ่ม PB2 จะทําให้ได้ค่าเป็น 0000 ทันที( หมายถึงการรีเซตค่าเป็นศูนย์)
................................................................................................................................................. const byte LEDS[4] = {4, 5, 6, 7}; const byte state[16][4] = {{0, 0, 0, 0},{0, 0, 0, 1},{0, 0, 1, 0},{0, 0, 1, 1}, {0, 1, 0, 0},{0, 1, 0, 1},{0, 1, 1, 0},{0, 1, 1, 1},{1, 0, 0, 0}, {1, 0, 0, 1}, {1, 0, 1, 0},{1, 0, 1, 1}, {1, 1, 0, 0},{1, 1, 0, 1}, {1, 1, 1, 0},{1, 1, 1, 1}};
void setup() { for (int i = 0; i < 4; i++) { pinMode(LEDS[i], OUTPUT); digitalWrite(LEDS[i], (i == 0) ? HIGH : LOW); } }
int i = 0; void loop() { if (digitalRead(PB_1) == LOW ) { while (digitalRead(PB_1) == LOW) { delay(20); } i++; if (i == 16) i = 0; } if (digitalRead(PB_2) == LOW ){ while (digitalRead(PB_2) == LOW) { delay(20); } i=0; } for (int k = 0; k < 4; k++){ digitalWrite(LEDS[k], state[i][k]); } }
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น