วัตถุประสงค์
- ฝึกต่อวงจรและเขียนโปรแกรมสําหรับบอร์ด 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 เครื่อง
ขั้นตอนการทดลอง
- ออกแบบวงจร วาดผังวงจร และต่อวงจรบนเบรดบอร์ด ร่วมกับบอร์ด Arduino เพื่อวัดแรงดันที่ได้จากวงจรแบ่งแรงดันที่ใช้ตัวต้านทานปรับค่าได้ (แรงดันอยู่ในช่วง 0V ถึง 5V) เช่น ป้อนเข้าที่ขา A0 ของบอร์ด Arduino แล้วนําค่าไปแสดงผลโดยใช้ 7-Segment Display จํานวน 2 หลัก และให้มีทศนิยมเพียงหนึ่งตําแหน่ง เช่น ถ้าวัดแรงดันได้ 2.365V จะแสดงผลเป็น “2.4” ถ้าวัดได้ 2.539V ให้แสดงผลเป็น “2.5” เป็นต้น และให้ใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd จากบอร์ด Arduinoเท่านั้น [ทุกกลุ่มจะต้องวาดวงจรสําหรับการทดลองมาให้แล้วเสร็จ (ให้เตรียมตัวมาก่อนเข้าเรียนวิชาปฏิบัติ) ]
- เขียนโค้ดสําหรับ Arduino เพื่ออ่านค่าจากแรงดันอินพุต-แอนะล็อก แลวนำไปแสดงผลโดยใช้ 7-Segment Display ตามที่กล่าวไป (และให้แสดงค่าที่อ่านได้ออกทาง Serial Monitor ด้วย) และในการเขียนโค้ด ห้ามใช้ตัวแปรหรือตัวเลขแบบ float
- เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบน เบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจริงพร้อมคาอธิบายโค้ด/การทํางานของโปรแกรมและตัวอย่างผลที่แสดงบน Serial Monitor (Screen Capture)
รูปจากการต่อวงจร
ผลจากการทดลอง
โค้ดในการทดลอง
int analogpin = 0;
const byte TC[2] = {2, 3};
byte NUM[10] = {B1111110, B0110000, B1101101, B1111001, B0110011,
B1011011, B1011111, B1110000, B1111111, B1111011};
void setup() {
analogReference(DEFAULT);
Serial.begin(9600);
for(int i = 0; i < 7; i++){
pinMode(SEG[i], OUTPUT);
}
for(int i = 0; i < 2; i++){
pinMode(SEG[i], OUTPUT);
}
}
void loop() {
int value = analogRead(analogpin);
value = map(value, 0, 1023, 0, 5000);
int G = value / 1000; //I
int W = (value % 10);
int Y = (value % 1000 / 100); //F
if (W > 5) {
Y = Y + 1;
}
delay(10);
digitalWrite(TC[0], 1);
digitalWrite(TC[1], 0);
display_seg(G);
delay(10);
digitalWrite(TC[0], 0);
digitalWrite(TC[1], 1);
display_seg(Y);
}
void display_seg(int num){
byte N = NUM[num];
for(int i = 6; i >= 0; i--){
digitalWrite(SEG[i], N&1);
N >>= 1;
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น