การวัดแรงดันอินพุต - แอนะล็อก
และการแสดงค่าโดยใช้ 7 - Segment
วัตถุประสงค์ในการทดลอง
1. ฝึกการต่อวงจรบนเบรดบอร์ด อย่างถูกต้อง
2. ฝึกการเขียนโปรแกรมคำสั่ง Ardunio เพื่อวัดแรงดันอินพุตแอนะล็อก
3. สามารถนำค่าอินพุตที่อ่านได้จากบอร์ด Ardunio มาแสดงผลบน 7-segment-Display ได้
อุปกรณ์ที่ใช้ในการทดลอง
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เท่านั้น
ผังวงจรที่ออกแบบ 4.6.1
ภาพการต่อวงจรตามรูปที่ 4.6.1
ภาพการต่อวงจรจริงบนเบรดบอร์ด
2. เขียนโค้ดสําหรับ Arduino เพื่ออ่านค่าจากแรงดันอินพุต-แอนะล็อก แลวน้ ําไปแสดงผลโดยใช้
7-Segment Display ตามที่กล่าวไป (และให้แสดงค่าที่อ่านได้ออกทาง Serial Monitor ด้วย)
และในการเขยนโค ี ้ด ห้ามใช้ตัวแปรหรือตัวเลขแบบ float
const byte SEVEN_SEG1[7] = {8,7,6,5,4,9,10};
const byte VREF_PIN = A1;
const byte npn1 = 2;
const byte npn2 = 3;
byte num[10] = {
B0111111, //0
B0000110, //1
B1011011, //2
B1001111, //3
B1100110, //4
B1101101, //5
B1111101, //6
B0000111, //7
B1111111, //8
B1101111,//9
};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode( SEVEN_SEG1[i], OUTPUT );
digitalWrite( SEVEN_SEG1[i], HIGH );
}
pinMode( npn1, OUTPUT );
digitalWrite( npn1, HIGH );
pinMode( npn2, OUTPUT );
digitalWrite( npn2, HIGH );
analogReference( DEFAULT );
Serial.begin( 9600 );
}
void loop() {
//read analog values
long int value = analogRead( VREF_PIN );
long int v = value*50/1023;
Serial.print( "Read" );
Serial.print( v/10);
Serial.print( ".");
Serial.println( v % 10);
digitalWrite( npn1, HIGH );
digitalWrite(npn2,LOW) ;
long int number1 = v/10;
byte t = num[number1];
for (int i = 0; i<8; i++) {
digitalWrite(SEVEN_SEG1[i], 1 & t);
t>>= 1;
}
delay(10);
digitalWrite( npn1, LOW );
digitalWrite( npn2, HIGH );
long int number2 = v % 10;
byte q = num[number2];
for (int j = 0; j<8; j++) {
digitalWrite(SEVEN_SEG1[j], q & 1);
q>>= 1;
}
delay(10);
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น