- ฝึกต่อวงจรเพื่อสร้างสัญญาณแอนะล็อก และป้อนให้บอร์ด 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 ของ
Arduino IDE แล้วสังเกตข้อความที่ถูกส่งมาจากบอร์ด 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 );
}
3. ปรับแก้โค้ดตัวอย่าง เพื่อให้วงจรและบอร์ด Arduino แสดงพฤติกรรมดังนี้ถ้าปิดส่วนรับแสงของตัว
ต้านทานไวแสง LDR หรือมีปริมาณแสงน้อยลงจะทําให LED1 “สว่าง” แต่ถ้า LDR ได้รับแสงตาม
สภาวะแสงปรกติหรือได้รับปริมาณแสงมาก จะทําให LED1 “ไม่ติด”
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>500){
digitalWrite(LED1_PIN,1);
}else{
digitalWrite(LED1_PIN,0
);
}
// send message to serial port
Serial.print( "Read " );
Serial.print( value1, DEC );
Serial.print( ", " );
Serial.println( value2, DEC );
delay( 200 );
}
4. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธบายการทดลองตามขั้นตอนแผงวงจรที่ถูกต้อง
ครบถ้วนตามหลักไฟ้ฟ้า(ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการตอวงจรบน ่
เบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจรงพร้อมคำอธิบายโค้ด/การทํางานของโปรแกรมโดย
ละเอียด และตอบคําถามทายการทดลอง
คําถามท้ายการทดลอง
1. ค่าที่ได้ (เลขจํานวนเต็ม) จากบอร์ด Arduino สําหรับสัญญาณอินพุตที่ขา A1 มีค่าอยู่ในช่วงใด
(ต่ําสุด-สูงสุด) 334 - 844
2. จะต้องปรับแก้โค้ดอย่างไรสําหรับบอร์ด Arduino ถ้าจะทําให้ LED1 มีความสว่างมากน้อยได้ตาม
ปริมาณแสงที่ได้รับ เช่น ถ้า LDR ได้แสงสว่างน้อย จะทําให้ LED1 สว่างมาก แต่ถ้า LDR ได้แสง
สว่างมาก จะทําให้ LED1สว่างน้อย หรือไม่ติดเลย
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 );
value1=map(value1,300,880,0,255);
analogWrite(LED1_PIN,255-value1);
// send message to serial port
// Serial.print( "Read " );
// Serial.print( value1, DEC );
// Serial.print( ", " );
// Serial.println( value2, DEC );
delay( 200 );
}



ไม่มีความคิดเห็น:
แสดงความคิดเห็น