1.สามารถออกแบบ และ ต่อวงจรโดยใช้ 7-Segment ร่วมกับบอร์ด Arduino ได้
2.สามารถเขียนโค้ดเพื่อแสดงผลของแรงดันอินพุต-แอนะล็อกที่วัดได้ ทาง 7-Segment
อุปกรณ์ที่ใช้ในการทดลอง
1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
2. บอร์ด Arduino (ใช้แรงดัน +5V) 1 บอร์ด
3. ตัวต้านทานปรับค่าได้แบบสามขา 10kΩ หรือ 20kΩ 1 ตัว
4. 7-Segment Display แบบ 2 ตัวเลข (Common-Cathode) 1 ตัว
5. ทรานซิสเตอร์ NPN (เช่น PN2222A) 2 ตัว
6. ตัวต้านทาน 1kΩ 2 ตัว
7. ตัวต้านทาน 330Ω หรือ 470Ω 8 ตัว
8. สายไฟสําหรับต่อวงจร 1 ชุด
9. มัลติมิเตอร์ 1 เครื่อง
ขั้นตอนการทดลอง
1. ออกแบบวงจร วาดผังวงจร และต่อวงจรบนเบรดบอร์ด ร่วมกับบอร์ด Arduino เพื่อวัดแรงดันที่ได้
จากวงจรแบ่งแรงดันที่ใช้ตัวต้านทานปรับค่าได้ (แรงดันอยู่ในช่วง 0V ถึง 5V) เช่น ป้อนเข้าที่ขา A0
ของบอร์ด Arduino แล้วนําค่าไปแสดงผลโดยใช้ 7-Segment Display จํานวน 2 หลัก และ ให้มีทศนิยมเพยงหนึ่งตําแหน่ง เช่น ถ้าวัดแรงดันได้ 2.365V จะแสดงผลเป็น “2.4” ถ้าวัดได้ 2.539V ให้แสดงผลเป็น “2.5” เป็นต้น และให้ใช้ ้แรงดันไฟเลี้ยง VCC=+5V และ Gnd จากบอร์ด Arduino เท่านั้น [ทุกกลุ่มจะต้องวาดวงจรสําหรับการทดลองมาให้แล้วเสร็จ (ให้เตรียมตัวมาก่อนเข้าเรียน
2. เขียนโค้ดสําหรับ Arduino เพื่ออ่านค่าจากแรงดันอินพุต-แอนะล็อก แลวนำไปแสดงผลโดยใช้ 7-Segment Display ตามที่กล่าวไป (และให้แสดงค่าที่อ่านได้ออกทาง Serial Monitor ด้วย) และในการเขียนโค้ด ห้ามใช้ตัวแปรหรือตัวเลขแบบ float
3. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้อง
ครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการตอวงจรบน เบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจริงพร้อมคำอธิบายโค้ด/การทํางานของโปรแกรม และตัวอย่างผลที่แสดงบน Serial Monitor (Screen Capture)
ผลการทดลอง
Code
byte NPN_13
= 10;//from NPN
byte NPN_14
= 11;//from NPN
byte dot =
9;//form seventSegment
byte Trimpot
= A0; //from Tempot
byte
sevenSegmentPins[] = {2,3,4,5,6,7,8};
byte
sevenSegment[10][7] =
{
//a b
c d e f g
{
1,1,1,1,1,1,0 }, // = 0
{
0,1,1,0,0,0,0 }, // = 1
{
1,1,0,1,1,0,1 }, // = 2
{
1,1,1,1,0,0,1 }, // = 3
{
0,1,1,0,0,1,1 }, // = 4
{
1,0,1,1,0,1,1 }, // = 5
{
1,0,1,1,1,1,1 }, // = 6
{
1,1,1,0,0,0,0 }, // = 7
{
1,1,1,1,1,1,1 }, // = 8
{
1,1,1,1,0,1,1 } // = 9
};
void setup()
{
pinMode(Trimpot,INPUT); //pin A0
pinMode(dot, OUTPUT); //pin 9
pinMode(NPN_13, OUTPUT); //pin 10
pinMode(NPN_14, OUTPUT); //pin 11
digitalWrite(NPN_13, HIGH);//กำหนดสถานะ HIGH ให้กับ digital
pin NPN
digitalWrite(NPN_14, HIGH); );//กำหนดสถานะ HIGH ให้กับ digital
pin NPN
analogReference(DEFAULT);//เลือกแรงดันอ้างอิงสำหรับป้อนขาอินพุต
Serial.begin(9600); // open serial port
for(int i=0; i<7; i++)
{
pinMode(sevenSegmentPins[i], OUTPUT);//กำหนดพฤติกรรมของขาที่ระบุ
ในที่นี่กำหนดให้ pin ที่ต่อกับ sevenSegment เป็น OUTPUT
}
}
//function
to write number to 7 segment
void
segmentWrite(byte digit){
for
(byte i=0; i<7; i++) {
digitalWrite(sevenSegmentPins[i], sevenSegment[digit][i]);
}
void loop(){
long
int value = analogRead(Trimpot); //ใช้อ่านค่าจากพินแอนาล็อคที่ระบุ (อ่านจากTrimpot)
digitalWrite(dot, HIGH);//กำหนดให้พินที่ต่อกับจุด dot บน sevenSegment มีสถานะเป็น HIGH(ติด)
long
int value2 = (value*50)/1024; //แปลงระดับแรงดันที่ขาแอนะล็อก-อินพุต(จากTrimpot)
ให้เป็นข้อมูลแบบดิจิทัล
digitalWrite(NPN_13, HIGH); );//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น HIGH
เหมือนกับการเปิดสวิตซ์ เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร
ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักแรก
digitalWrite(NPN_14, LOW);//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น LOW
เหมือนกับการปิดสวิตซ์ เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร
ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักที่สอง
long
int count0 = value2/10;//นำเลขที่แปลงได้ที่เป็นจำนวนเต็มมาทำการหาร 10 เพื่อให้แสดงเป็นเลขหลักแรก
segmentWrite(count0);//ส่งค่า count0 ที่ได้ไปยัง function segmentWrite
delay(10);
digitalWrite(NPN_13, LOW);//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น LOW
เหมือนกับการปิดสวิตซ์ เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร
ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักแรก
digitalWrite(NPN_14, HIGH);//กำหนดให้ pin ที่ต่อกับ NPN มีสถานะเป็น LOW
เหมือนกับการเปิดสวิตซ์ เนื่องจาก NPN จะทำหน้าที่คล้ายกับสวิตซ์ของวงจร
ในที่นี่จะปิดสวิตซ์ ซึ่งเป็นตัวควบคุม sevenSegment หลักที่สอง
long
int count1 = value2%10;//นำเลขที่แปลงได้ที่เป็นจำนวนเต็มมาทำการหารเอาเศษด้วย 10 เพื่อให้แสดงเป็นเลขหลักที่สอง
segmentWrite(count1);
delay(10);
//
send message to serial port
Serial.print(count0);//ค่า
Serial.print(".");//พิมพ์ข้อมูลไปยังพอร์ต (จุดทศนิยม)
Serial.print(count1);
Serial.println();//เว้นบรรทัด
}
|
ภาพและวิดีโอประกอบการทดลอง