การทดลองที่ 4.6
การวัดแรงดันอินพุต-แอนะล็อกและการแสดงค่าโดยใช้ 7-Segment
วัตถุประสงค์
- ฝึกต่อวงจรและเขียนโปรแกรมสําหรับบอร์ด Arduino เพื่อวัดแรงดันอินพุต-แอนะล็อกและแสดงค่าที่ ได้ผ่านทาง 7-Segment Display
รายการอุปกรณ์
- แผงต่อวงจร (เบรดบอร์ด) 1 อัน
- บอร์ด Arduino (ใช้แรงดัน +5V) 1 บอร์ด
- ตัวต้านทานปรับค่าได้แบบสามขา 10kΩ หรือ 20kΩ 1 ตัว
- 7-Segment Display แบบ 2 ตัวเลข (Common-Cathode) 1 ตัว
- ทรานซิสเตอร์ NPN (เช่น PN2222A) 2 ตัว
- ตัวต้านทาน 1kΩ 2 ตัว
- ตัวต้านทาน 330Ω หรือ 470Ω 8 ตัว
- สายไฟสําหรับต่อวงจร 1 ชุด
- มัลติมิเตอร์ 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)
วงจร
ออกแบบวงจรโดยใช้ Freezing
วงจรที่ใช้ทดลอง
Code ที่ใช้ในการทดลอง
byte seven_seg_digits[10][7]={{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,0,0,1,1} // 9
};
void setup() {
pinMode(A0,INPUT); //ให้ขา A0 รับค่า
pinMode(2,OUTPUT); //ให้ขา D2 แสดงผล
pinMode(3,OUTPUT); //ให้ขา D3 แสดงผล
pinMode(4,OUTPUT); //ให้ขา D4 แสดงผล
pinMode(5,OUTPUT); //ให้ขา D5 แสดงผล
pinMode(6,OUTPUT); //ให้ขา D6 แสดงผล
pinMode(7,OUTPUT); //ให้ขา D7 แสดงผล
pinMode(8,OUTPUT); //ให้ขา D8 แสดงผล
pinMode(9,OUTPUT); //ให้ขา D9 แสดงผล
pinMode(10,OUTPUT); //ให้ขา D10 แสดงผล
pinMode(11,OUTPUT); //ให้ขา D11 แสดงผล
digitalWrite(9,HIGH); // แสดงจุดทศนิยม
Serial.begin(9600); //สร้างหน้าต่าง Serial
}
void sevenSegWrite_2(byte digit){ //ฟังก์ชัน สร้างเลข 0,1,2,3,4,5,6,7,8,9 ใน หลักหน่วย
byte pin=8;
for(byte segcount=0;segcount<7;segcount++){
digitalWrite(11,HIGH); //หลักหน่วยติด
digitalWrite(10,LOW); //หลักทศนิยมดับ
digitalWrite(pin,seven_seg_digits[digit][segcount]);
pin--;
}
}
void sevenSegWrite_1(byte digit){////ฟังก์ชัน สร้างเลข 0,1,2,3,4,5,6,7,8,9 ใน ทศนิยม
byte pin=8;
for(byte segcount=0;segcount<7;segcount++){
digitalWrite(10,HIGH);//หลักทศนิยมติด
digitalWrite(11,LOW);//หลักหน่วยดับ
digitalWrite(pin,seven_seg_digits[digit][segcount]);
pin--;
}
}
void loop() {
long int value_Tim=analogRead(A0); // รับค่าจาก Timport
long int value=((value_Tim*50)/1023); // คำนวณค่าแปลง เป็น Volt
long int value_2=value/10; //แปลงค่าเป็นหลักหน่วย
long int value_1=value%10; //แปลงค่าเป็นหลักทศนิยม
Serial.println(value);
sevenSegWrite_1(value_1); // แสดงผลหลักทศนิยม
delay(10);
sevenSegWrite_2(value_2); // แสดงผลหลักหน่วย
delay(10);
}
|
ผลการทดลอง
สรุปผลการทดลอง
จากการทดลอง จะใช้ตัว PN2222A เป็นตัวควบคุมการติดดับของ 7-Segment Display ในที่นี้ 7-Segment Display มีค่า 2 หลัก จะใช้ PN2222A 2 ตัวในการควบคุมแต่ละหลัก
ส่วนการแสดงผลจะใช้ ค่าที่อ่านได้จาก ตัวต้านทานปรับค่าได้แบบสามขา ใน Serial มาคำนวณแปลงเป็น Volt แล้วแสดงผลออกทาง 7-Segment Display ซึ่งใน Serial ที่อ่านค่าได้ มีค่ามากที่สุด คือ 1023 และ ได้ 5 V ดังนั้นเราจะแปลงค่าที่อ่านได้เป็นโวลต์ V= 5/1023