7 Segment + Arduino - สอน Arduino 7 Segment
LOGIN   |   REGISTER    
commandronestore.com         แจ้งชำระเงิน
 
 
 
  STORE  
  PRODUCT  
  LEARNING  
  MEMBER  
  CONTACT  
    0   CART  
 
  0   ORDER
 
Untitled Document
 
เลือกหมวดหมู่สินค้า
 เครื่องกล / หุ่นยนต์
 อิเล็กทรอนิกส์ / ไฟฟ้า
 บอร์ด / คอนโทรลเลอร์
 เครื่องมือช่าง
 Package / ชุด KIT
 
   
     
 
#0
 7 Segment + Arduino
  Last Update  20 July 2016     69779 Reads  
 
 Learning 7 Segment + Arduino 
 
 
* ในบทเรียนจะเน้นไปที่ 7 Segment แบบ Common Anode
 
• การใช้งาน 7 Segment กับ Arduino ตั้งแต่พื้นฐาน ไปจนถึงการนำเอา IC Shift Register มาประยุกต์ใช้งาน เพื่อลดจำนวนขาใช้งานของ Arduino
 
0
 
Getting Started!
รู้จัก 7 Segment และการใช้งานกับ Arduino
 
Shift Register
รู้จัก Shift Register และนำมาประยุกต์ใช้ เพื่อลดจำนวนการใช้ขาควบคุมของ Arduino
 
    SPONSORs
 
 
    Other Learnings
การเลือกตัวต้านทานให้ LED
การคำนวณค่าตัวต้านทานให้เหมาะกับวงจร LED และวงจรไฟฟ้าอื่นๆ
Last Update 15 March 2016
169563 Reads
ตัวต้านทานร้อนและไหม้!!
ตัวต้านทานร้อนและไหม้เสียหายเกิดจากอะไร และจะป้องกันอย่างไร?
Last Update 13 February 2016
Views 200
การจับเวลาด้วย Arduino
การจับเวลาด้วย Arduino โดยการ Input ค่าเวลาผ่าน Keypad และส่งเสียงเตือนเมื่อเวลาครบกำหนด
Last Update 20 April 2016
82904 Reads
 
 
 
 
     
0
CART
 
0
ORDER
 อุปกรณ์ที่ใช้ในบทเรียนนี้ 
 
  รายการสินค้า    
 
Arduino UNO R3 +USB
บอร์ด UNO R3 Design in Italy
• ATmega328P
• 14 Pins
฿  310.00 THB
ต่อ 1 ชิ้น
 
Untitled Document
7 Segment 0.56" Common Anode
1 Digit 7 Segment LED
• สีตัวอักษร : แดง
• Common Anode
• Forward Voltage : 1.8 - 2.4 V
• Forward Current : 20 - 30 mA
• Digit Height : 0.56" (14.20 mm)
• Size : 12.7 x 19 x 8 mm
Untitled Document
฿  18.00 THB
ต่อ 1 ชิ้น
 
Untitled Document
220 Ω 1/4 W Resistor
ตัวต้านทานค่าคงที่
• 220 โอห์ม
• 1/4 วัตต์ ความแม่นยำ +/- 5%
Untitled Document
฿  1.00 THB
ต่อ 1 ชิ้น
 
     
 
   
7 Segment + Arduino!  
   
 7 Segment คืออะไร?   
ทุกคนคงรู้จัก 7 Segment กันพอสมควรแล้ว เพราะเราต้องเคยเห็นในชีวิตประจำวันมาบ้าง
7 Segment ก็คืออุปกรณ์แสดงผลตัวเลข 0-9 หรือตัวอักษรบางตัว โดยใช้หลอดไฟทั้ง 7 หลอดของมัน ,การติดหรือดับของหลอดไฟแต่ละ Segment ทำให้เกิดภาพตัวเลขหรือตัวอักษรต่างๆตามที่เราเห็นนั่นเอง
ซึ่งจริงๆแล้ว 7 Segment ก็คือ LED 7 ดวงนี่เอง เพียงแต่มันถูกรวมอยู่ในตัวถังเดียวกัน เพราะฉะนั้น การใช้งานก็จะต้องมีการจ่ายไฟคล้ายกับ LED ทั่วไป คือมีไฟ + และไฟ - หรือ GND แต่ทั้งนี้ เพื่อไม่ให้ใช้จำนวนขาที่มากเกินไป จึงมีการออกแบบขาร่วม (Common) ขึ้นมาด้วย เพื่อประหยัดจำนวนขาใช้งานไปได้ถึงเท่าตัว โดยแบ่งออกเป็น 2 ประเภท
• Common Anode หรือขาบวกร่วม
• Common Cathode หรือขาลบร่วม
 
7 Segment ส่วนมากจะมี LED ดวงที่ 8 เพิ่มขึ้นมาด้วย นั่นก็คือ LED สำหรับจุดทศนิยม หรือ Dot
 
 
 
จากภาพแสดงให้เห็นถึงหลักการทำงาน 7 Segment โดยไฟ LED ดวงที่ 1 - 7 (a-g) ทำหน้าที่แสดงตัวเลขหรือตัวอักษร ส่วนดวงที่ 8 (h) ทำหน้าที่แสดงจุดทศนิยม
โดยแบบ Common Anode และ Common Cathode มีความแตกต่างกันคือ ขาร่วมของ Common Anode จะเป็นไฟบวก และขาร่วมของ Common Cathode จะเป็นไฟลบหรือ GND ,ซึ่งความแตกต่างนี้เอง เป็นผลให้เราควบคุมการติดดับของ LED แต่ละดวงต่างกันทั้ง 2 ชนิดด้วย
 
 การควบคุมการติดดับของ LED แต่ละ Segment   
การควบคุม LED แต่ละ Segment ขึ้นอยู่กับการจ่าไฟไปยัง Segment นั้นๆ แต่ไม่ได้หมายความว่า เมื่อจ่ายไฟบวกไปยัง Segment ใดๆ แล้ว Segment นั้นไฟจะติด เพราะมันขึ้นอยู่กับว่า 7 Segment ของเราเป็นแบบขาบวกร่วม หรือลบร่วม
 
แบบ Common Anode เมื่อต้องการให้ไฟที่ Segment ใดๆติด จะต้องให้ขาของ Segment นั้นเป็น 0 หรือ LOW
แบบ Common Cathode เมื่อต้องการให้ไฟที่ Segment ใดๆติด จะต้องให้ขาของ Segment นั้นเป็น 1 หรือ HIGH
เนื่องจาก ตามหลักการที่ว่า กระแสไฟฟ้าย่อมไหลจาก ศักย์สูง ไปยัง ศักย์ต่ำ นั่นหมายถึง การที่ไฟ LED จะติดได้ จะต้องเกิดจากการที่มีกระแสไฟฟ้าไหลผ่านตัวมัน จากจุดที่มีศักย์ไฟฟ้าสูงกว่า ไปยังจุดที่มีศักย์ไฟฟ้าต่ำกว่า หรือที่เรียกว่าความต่างศักย์นั่นเอง เพราะฉะนั้นขาร่วมแบบ "บวกร่วม" จะมีศักย์ไฟฟ้าที่สูงกว่า จึงต้องทำให้ปลายอีกข้างเป็น LOW เพื่อให้กระแสไหลผ่านได้ ส่วนขาร่วมแบบ "ลบร่วม" ก็จะตรงกันข้ามนั่นเอง
โดยค่าความต่างศักย์ จะต้องไม่เกินค่าที่ LED นั้นๆทนได้ ซึ่งในบทเรียนนี้ เราจะยกตัวอย่างเป็น 7 Segment LED สีแดง ซึ่งจะทนความต่างศักย์ได้ไม่เกิน 2.3 V
 
 อย่าลืมต่อตัวต้านทาน!! 
อย่าลืมว่า 7 Segment ก็เป็น LED ชนิดหนึ่ง ซึ่งตามที่เรารู้กันดีว่า เมื่อมีสถานะ HIGH , ขาของ Arduino จะปล่อยแรงดันออกมา 5 V ในขณะที่ LED ส่วนมาก ทนแรงดันได้ไม่ถึงขนาดนั้น เราจึงต้องมีตัวต้านทานมารับเอาแรงดันส่วนเกินไปด้วย ซึ่งการต่อตัวต้านทานกับ 7 Segment ก็จะนิยมต่อ 2 แบบหลักๆ
• แยกต่อตัวต้านทานที่ ขา Segment แต่ละขา
• ต่อตัวต้านทานที่ขาร่วม
โดยการต่อตัวต้านทานทั้ง 2 แบบ จะใช้ค่าความต้านทานและการกินกำลังที่ต่างกัน และอาจให้ผลลัพธ์ที่ต่างกันตามความเหมาะสม
 
 แบบที่ 1 
การต่อตัวต้านทานที่ขา Segment แต่ละขา หากใช้วิธีนี้ เราจะต้องต่อตัวต้านทานไว้ที่ขา Segment ทุกขา ตั้งแต่ขา a-g รวมถึงขา h ด้วยหากต้องการใช้จุดทศนิยม วิธีการเลือกค่าความต้านทาน ในกรณีนี้ เราเลือกใช้งานกับ Arduino ซึ่งให้คิดในกรณีที่มีแรงดันสถานะ HIGH ไหลผ่าน นั่นก็คือ 5 V แต่ LED สีแดงทั่วไป ไม่ควรได้รับไปสูงกว่า 2.3 V และกินกระแสประมาณ 20 mA ดังนั้น ตัวต้านทานที่เราเลือกใช้คือ
 
 
   R = (Vcc - Vf) / I = (5 - 2.3) / (0.02) = 135 Ω   
 
 
นั่นคือเราจะเลือกใช้ตัวต้านทานที่มีค่า 135 Ω หรือใกล้เคียงกัน ซึ่งเราก็ต้องคิดถึงเรื่อง การทนกำลังของตัวต้านทานด้วย เพราะถ้าหากกำลังที่เกิดขึ้นบนตัวต้านทานมากเกินไป ก็จะทำให้มันร้อนและไหม้ได้ โดยการคำนวณกำลัง จะต้องรู้ถึงกระแสที่ไหลผ่านตัวต้านทาน ซึ่งนั่นก็คือกระแสที่ไหลผ่าน LED นั่นเอง เพราะต่อกันแบบอนุกรม เพราะฉะนั้นจะมีกระแสไหลผ่านตัวต้านทาน 20 mA และเราจะหากำลังได้ดังนี้
 
 
   P = (I * I) * R = (0.02 * 0.02) * (135) = 0.054 W   
 
 
และนี่คือกำลังที่น่าจะเกิดขึ้นบนตัวต้านทาน ซึ่งไม่ได้มากมายเลย เพราะฉะนั้น เราสามารถเลือกตัวต้านทานแบบ 1/4 W ตามท้องตลาดทั่วไปได้เลย หากใช้วิธีต่อตัวต้านทานแบบนี้
 
 ตัวอย่างการต่อวงจรแบบที่ 1 ของ Common Anode 7 Segment 
 
 แบบที่ 2 
ต่อตัวต้านทานที่ขาร่วม วิธี้นี้เราจะต่อตัวต้านทานที่ขาร่วมเพียงแค่จุดเดียว ซึ่งการคำนวณค่าความต้านทาน ก็จะแตกต่างจากแบบแรก และนี่คือตัวอย่างการคำนวณ โดยเราจะยึดสถานการณ์ตอนที่ LED ทุก Segment ติด รวมถึงจุดด้วย เพราะฉะนั้นจะมี LED ทั้งหมด 8 ดวง โดยลักษณะเป็นการต่อแบบขนาน เพราะฉะนั้น จะใช้กรแสทั้งหมด (20 x 8) = 160 mA เราสามารถหาค่าความต้านทานได้จาก
 
 
   R = (Vcc - Vf) / I = (5 - 2.3) / (0.16) = 17 Ω   
 
 
และเราอาจจะเลือกตัวต้านทานที่มีค่าใกล้เคียงนี้ และที่สำคัญก็คือการคำนวณการทนกำลัง โดยใช้สูตรเดิม
 
 
   P = (I * I) * R = (0.16 * 0.16) * (17) = 0.44 W   
 
 
สังเกตได้ว่ากำลังที่เกิดขึ้น มีค่ามากกว่า 0.25 W เราจึงไม่ควรใช้ตัวต้านทานแบบ 1/4 W ควรจะเลือกใช้ตัวต้านทานตั้งแต่ 1/2 W ขึ้นไป
 
 ตัวอย่างการต่อวงจรแบบที่ 2 ของ Common Anode 7 Segment 
* คุณสามารถเปลี่ยนค่าความต้านทานได้ตามความเหมาะสม และสามารถเพิ่มการทนกำลังของตัวต้านทานได้ โดยการนำมาต่อขนานกัน
 
 Arduino Code   
สำหรับการเขียน Code นี้ จะยกตัวอย่างแบบ Common Anode เนื่องจากมีความยุ่งยากกว่าแบบ Common Cathode เล็กน้อย โดยการควบคุมการแสดงผลตัวเลขหรือตัวอักษรต่างๆ ขึ้นอยู่กับการเปิดหรือปิดไฟ LED ณ Segment นั้นๆ โดยแบบ Common Anode เราจะให้ Segment ใดสว่าง ต้องทำให้มีสถานะเป็น LOW ส่วนจะให้ Segment ไหนไฟดับ ต้องทำให้มีสถานะเป็น HIGH ตามที่กล่าวไปแล้ว และหากใครใช้แบบ Common Cathode อยู่ ก็เพียงแค่สลับสถานะ และ เปลี่ยนขาร่วมมาต่อกับ GND แทน
 
ตัวอย่างการแสดงผล เลข 0 - 9
สำหรับการแสดงผลตัวเลข เราจะใช้ LED ทั้งหมด 7 ดวงคือตำแหน่งขา a - g และเราไม่จำเป็นต้องเขียน Code สำหรับตัวเลขทุกตัว เพราะเลขบางเลข ก็มีตำแหน่งไฟที่ซ้ำกัน เช่น เลข 0 กับ เลข 8 มีความต่างกันเพียง เลข 0 ขา g ไฟดับ แต่เลข 8 ขา g ไฟติด ดังนั้นเราจึงใช้เงื่อนไข if ในการเลือกให้ Segment ใดๆ เลือกติด เมื่อตัวเลขที่กำลังแสดงผลนั้นต้องใช้ไฟจาก Segment นั้นๆ ทำให้เราไม่จำเป็นต้องเขียน Code ให้ยืดยาว
 
// Arduino 7 Segment example Develope by Commandrone
// www.commandronestore.com

int a = 2; //ขา a ต่อเข้ากับ Pin 2
int b = 3; //ขา b ต่อเข้ากับ Pin 3
int c = 4; //ขา c ต่อเข้ากับ Pin 4
int d = 5; //ขา d ต่อเข้ากับ Pin 5
int e = 6; //ขา e ต่อเข้ากับ Pin 6
int f = 7; //ขา f ต่อเข้ากับ Pin 7
int g = 8; //ขา g ต่อเข้ากับ Pin 8
int point = 9; //ขา h หรือจุด ต่อเข้ากับ Pin 9

void setup() {
pinMode(a, OUTPUT); //a
pinMode(b, OUTPUT); //b
pinMode(c, OUTPUT); //c
pinMode(d, OUTPUT); //d
pinMode(e, OUTPUT); //e
pinMode(f, OUTPUT); //f
pinMode(g, OUTPUT); //g
pinMode(point, OUTPUT); //point
}

void showNumber(int number) //สร้าง Function ชื่อ showNumber ที่ใช้ในการแสดงผลตัวเลข โดยรับค่า number จาก void loop มาอีกที การสร้าง fuction จะช่วยให้ประหยัดพื้นที่และทำให้ไม่สับสนในการเรียกใช้งานโปรแกรม
{
//เงื่อนไขที่ Segment a ไฟติด เมื่อไม่ใช่เลข 1 และเลข 4
if(number != 1 && number != 4)
digitalWrite(a,LOW);
//เมื่อมีสถานะเป็น LOW ไฟจะติด เพราะเป็นแบบ Common Anode

//เงื่อนไขที่ Segment b ไฟติด
if(number != 5 && number != 6)
digitalWrite(b,LOW);

//เงื่อนไขที่ Segment c ไฟติด
if(number != 2)
digitalWrite(c,LOW);

//เงื่อนไขที่ Segment d ไฟติด
if(number != 1 && number != 4 && number != 7)
digitalWrite(d,LOW);

//เงื่อนไขที่ Segment e ไฟติด เมื่อเป็นเลข 2 หรือ 6 หรือ 8 หรือ 0
if(number == 2 || number == 6 || number == 8 || number == 0)
digitalWrite(e,LOW);

//เงื่อนไขที่ Segment f ไฟติด
if(number != 1 && number != 2 && number != 3 && number != 7)
digitalWrite(f,LOW);

//เงื่อนไขที่ Segment g ไฟติด
if (number != 0 && number != 1 && number != 7)
digitalWrite(g,LOW);
}

void turnOff() //สร้าง Function ชื่อ turnOff ที่ใช้ในการดับไฟทั้งหมด เพื่อ Reset เมื่อกำลังจะเปลี่ยนเป็นอีกตัวเลขหนึ่ง
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(point,HIGH);
}

void loop() { //ทำการแสดงผลเลข 0 - 9 วนไปเรื่อยๆจนกว่าจะหยุดจ่ายไฟ
for(int i=0;i<10;i++)
{
showNumber(i); //เรียกใช้ Function showNumber โดยส่งค่า i ไปให้ตัวแปร Number ใช้ในการประมวลผล
delay(1000);
turnOff(); //ทำการดับไฟทั้งหมดเมื่อกำลังจะเปลี่ยนตัวเลข เพื่อไม่ให้ไฟดวงเดิมค้างสถานะติดไว้
}

}

 

 
 
และนี่เป็นเพียงตัวอย่างการใช้ 7 Segment กับ Arduino และสามารถนำไปประยุกต์ได้อีกมากมาย ซึ่งถ้าหากต้องการเปลี่ยนจาก Common Anode เป็น Common Cathode ก็เพียงแก้ Code ตรงสถานะการติดดับ ตามหลักการ กระแสไฟฟ้าไหลจากศักย์สูงไปต่ำ เท่านั้นเอง
นอกจากนี้ยังมีบทเรียนการใช้ 7 Segment กับ Arduino อีกมาก เช่น
• การประหยัดจำนวนขา โดยใช้ IC Shift Register เข้ามาช่วย
• การใช้ 7 Segment 2 หลักขึ้นไป
 
 
  NEXT LEARNING  
   
     
 
 
MAIN MENU
Yor are going to visit...
 
STORE
Homepage & News
PRODUCT
Shopping at our store
LEARNING
Tutorials & How to
MEMBER
Become our client
CONTACT
Getting more information
 
 
 
 
CONTACT
Contact Commandrone
 
083-0121146
Bangsue, Bangkok
Commandrone Page
Commandrone Channel
thai.commandrone@gmail.com
commandronestore.com
 
 
 
 
  1457 Pageviews today (Approximately)
 
 
     
 
www.commandronestore.com
© 2016 Commandrone All Rights Reserved