การทดลองที่ 4.4 สัญญาณอินพุต-แอนะล็อกและการใช้งานร่วมกับบอร์ด Arduino
วัตถุประสงค์
- ฝึกต่อวงจรเพื่อสร้างสัญญาณแอนะล็อก และป้อนให้บอร์ด Arduino เพื่อใช้เป็นสัญญาณอินพุต
- เขียนโปรแกรมสําหรับ Arduino เพื่อเปิด/ปิด LED ตามสภาวะแสง
รายการอุปกรณ์
- แผงต่อวงจร (เบรดบอร์ด) 1 อัน
- บอร์ด Arduino (ใช้แรงดัน +5V) 1 บอร์ด
- ตัวต้านทานปรับค่าได้ 10kΩ หรือ 20kΩ 1 ตัว
- ตัวต้านทานไวแสง LDR 1 ตัว
- ไดโอดเปล่งแสงขนาด 5 มม. 1 ตัว
- ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
- ตัวต้านทาน 10kΩ 1 ตัว
- สายไฟสําหรับต่อวงจร 1 ชุด
- มัลติมิเตอร์ 1 เครื่อง
ขั้นตอนการทดลอง
1. ต่อวงจรตามผังวงจรในรูปที่ 4.4.1 บนเบรดบอร์ด ร่วมกับบอร์ด Arduino โดยใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd จากบอร์ด Arduino เท่านั้น (ต่อวงจรบนเบรดบอร์ดก่อน จากนั้นจึงเชื่อมต่อสัญญาณอนิพุตและเอาต์พุตของบอร์ด Arduino เมื่อตรวจสอบความถูกต้อง แล้วจึงป้อนแรงดันไฟเลี้ยงและ Gnd ตามลําดับ)
2. เขียนโปรแกรมตามตัวอย่างโค้ดที่กําหนดให้ และทําขั้นตอน Upload จากนั้นให้ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ หรือปิดบริเวณส่วนรบัแสงของ LDR เปิดหน้าต่าง Serial Monitor ของ ArduinoIDE แล้วสังเกตข้อความที่ถูกส่งมาจากบอร์ด Arduino
3. ปรับแก้โค้ดตัวอย่าง เพื่อให้วงจรและบอร์ด Arduino แสดงพฤติกรรมดังนี้ ถ้าปิดส่วนรับแสงของตัว ต้านทานไวแสง LDR หรือมปีริมาณแสงนอ้ยลง จะทําให้ LED1 “สว่าง” แต่ถ้า LDR ได้รับแสงตามสภาวะแสงปรกติ หรือได้รับปริมาณแสงมาก จะทําให้ LED1 “ไม่ติด”
4. เขียนรายงานการทดลอง ซงึ่ประกอบด้วยคําอธบิายการทดลองตามขั้นตอน ผงัวงจรที่ถูกต้อง ครบถ้วนตามหลักไฟฟา้ (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการตอ่วงจรบน เบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจรงิพร้อมคาํอธิบายโค้ด/การทํางานของโปรแกรมโดย ละเอียด และตอบคําถามทา้ยการทดลอง
รูปที่ 4.4.1: ผังวงจรสําหรับต่อวงจรบนเบรดบอร์ดร่วมกับบอร์ด Arduino
const byte LDR_PIN = A1; // from LDR
const byte VREF_PIN = A2; // from Trimpot
const byte LED1_PIN = 5; // to LED1
void setup() {
pinMode( LED1_PIN, OUTPUT );
digitalWrite( LED1_PIN, LOW );
analogReference( DEFAULT );
Serial.begin( 9600 ); // open serial port
}
void loop() {
// read analog values
int value1 = analogRead( LDR_PIN );
int value2 = analogRead( VREF_PIN );
// send message to serial port
Serial.print( "Read " );
Serial.print( value1, DEC );
Serial.print( ", " );
Serial.println( value2, DEC );
delay( 200 );
}
|
โค้ดที่ 4.4.1: โค้ดตัวอย่างสําหรับ Arduino
วงจรทดลอง
วงจรที่ใช้ทดลอง
Code สำหรับการทดลอง ความสว่างปกติติด และเมื่อความสว่างลดลงจะดับ
const byte LDR_PIN = A1; // from LDR
const byte VREF_PIN = A2; // from Trimpot
const byte LED1_PIN = 5; // to LED1
void setup() {
pinMode( LED1_PIN, OUTPUT );
digitalWrite( LED1_PIN, LOW );
analogReference( DEFAULT );
Serial.begin( 9600 ); // open serial port
}
void loop() {
// read analog values
int value1 = analogRead( LDR_PIN );
int value2 = analogRead( VREF_PIN );
if(value1<1023){
digitalWrite(LED1,HIGH);
}else{digitalWrite(LED1,LOW);
// send message to serial port
Serial.print( "Read " );
Serial.print( value1, DEC );
Serial.print( ", " );
Serial.println( value2, DEC );
delay( 200 );
}
|
ผลการทดลอง
ความสว่างปกติ หรือ ความสว่างห้อง หลอด LED จะดับ หรือไม่ติด
ถ้า ความสว่างเริ่มลดลง จะทำให้หลอด LED ติด
วัดค่า Vx ซึ่งเท่ากับ 5.04 V
คําถามท้ายการทดลอง
1. ค่าที่ได้ (เลขจํานวนเต็ม) จากบอร์ด Arduino สําหรับสญัญาณอินพุตที่ขา A1 มีค่าอยู่ในช่วงใด (ต่ํา สุด-สูงสุด)
ค่าสูงสุด 1023 , ค่าต่ำสุด 970 จะอยู่ในช่วง 970-1203
ค่าสูงสุด 1023 , ค่าต่ำสุด 970 จะอยู่ในช่วง 970-1203
2. จะต้องปรับแก้โค้ดอย่างไรสําหรับบอร์ด Arduino ถ้าจะทําให้ LED1 มีความสว่างมากน้อยได้ตามปริมาณแสงที่ได้รับ เช่น ถ้า LDR ได้แสงสวา่งน้อย จะทําให้ LED1 สว่างมาก แต่ถ้า LDR ได้แสงสว่างมาก จะทําให้ LED1สว่างน้อย หรือไม่ติดเลย
Code สว่างตามความมืด คือ ถ้าความสว่างมากหลอด LED จะสว่างน้อย แต่ถ้าความสว่างน้อย LED จะสว่างมาก
ผลลัพธ์
Code สว่างตามความมืด คือ ถ้าความสว่างมากหลอด LED จะสว่างน้อย แต่ถ้าความสว่างน้อย LED จะสว่างมาก
const byte LDR_PIN = A1; // from LDR
const byte VREF_PIN = A2; // from Trimpot
const byte LED1_PIN = 5; // to LED1
void setup() {
pinMode( LED1_PIN, OUTPUT );
digitalWrite( LED1_PIN, LOW );
analogReference( DEFAULT );
Serial.begin( 9600 ); // open serial port
}
void loop() {
// read analog values
int value1 = analogRead( LDR_PIN );
int value2 = analogRead( VREF_PIN );
int valueLight=(value1-970)*5; analogWrite(LED1,valueLight);
// send message to serial port
Serial.print( "Read " );
Serial.print( value1, DEC );
Serial.print( ", " );
Serial.println( value2, DEC );
delay( 200 );
}
|
ผลลัพธ์
ไม่มีความคิดเห็น:
แสดงความคิดเห็น