วัตถุประสงค์
- เพื่อฝึกใช้งานบอร์ด Arduino ร่วมกับอุปกรณ์สวิตช์ควบคุมด้วยแสง (Opto-Interrupter)
- แผงต่อวงจร (เบรดบอร์ด) 1 อัน
- อุปกรณ์สวิตช์ควบคุมด้วยแสง H21A1 หรือ TCST2202 1 ตัว
- ไดโอดเปล่งแสงสีแดงหรือสีเขียว 1 ตัว
- ตัวต้านทาน 220Ω 1 ตัว
- ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
- ตัวต้านทาน 10kΩ 1 ตัว
- บัซเซอร์แบบเปียโซ (Piezo Buzzer) 1 ตัว *
- สายไฟสําหรับต่อวงจร 1 ชุด
- มัลติมิเตอร์ 1 เครื่อง
ขั้นตอนการทดลอง
- ต่อวงจรบนเบรดบอร์ดตามรูปที่5.3.1 โดยใช้แรงดันไฟเลี้ยง +5V และ GND จากบอร์ด Arduino
- เขียนโค้ด Arduino เพื่อรับค่าอินพุตแบบดิจิทัลที่ขา D3 (จากสัญญาณ Vout ของวงจรบนเบรดบอร์ด) แล้วสร้างสัญญาณเอาต์พุตที่ขา D5 เพื่อแสดงค่าของอินพุตที่รับโดยใช้LED เป็นตัวแสดงสถานะทางลอจิก (ถ้าไม่มีวัตถุมาปิดกั้นช่องรับแสง LED จะต้องไม่ติด)
- ใช้กระดาษสีดําปิดกั้น (หรือวัตถุอื่น เช่น ไม้บรรทัดเหล็ก) บริเวณช่องรับแสงของอุปกรณ์สวิตช์ควบคุมด้วยแสง สังเกตความแตกต่างระหว่างกรณีที่มีวัตถุปิดกั้นและไม่มี(เช่น ใช้มัลติมิเตอร์วัดแรงดัน Vout)
- ทดลองต่อบัซเซอร์แบบเปียโซ (สร้างเสียงเตือน) แทนวงจร LED ในวงจรบนเบรดบอร์ด (โดยนําไปต่ออนุกรมกับตัวต้านทานขนาด 330Ω และใหส้ังเกตว่า บัซเซอร์แบบเปียโซมีขาบวกและขาลบ)
- แก้ไขโค้ด Arduino เพื่อนับเวลาตั้งแต่เริ่มนํากระดาษไปปิดกั้นจนถึงเมื่อนํากระดาษออกในแต่ละครั้งโดยวัดช่วงเวลาเป็นหน่วยมิลลิวินาที (msec) และให้แสดงผลออกทางพอร์ตอนุกรมผ่านทาง Serial Monitor ของ Arduino IDE (ให้ศึกษาการใช้คําสั่ง millis() สําหรับการเขียนโค้ด Arduino)
- เขียนรายงานการทดลอง ซึ่งประกอบด้วยคําอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบนเบรดบอร์ด และตอบคําถามท้ายการทดลอง
รูปที่ 5.3.1: ผังวงจรสําหรับต่อวงจรทดลอง |
ผลการทดลอง
ได้ทำการออกแบบวงจรดังนี้
โดยเขียนโค้ดได้ดังนี้
const byte IN = 3; const byte LED = 5; unsigned long buff=0; byte state=0; byte read_flag=0; unsigned long keep; void setup() { pinMode(IN,INPUT); pinMode(LED,OUTPUT); Serial.begin(9600); digitalWrite(LED,LOW); } void loop() { state=digitalRead(IN); while(digitalRead(IN)){ if(!read_flag)buff = millis(); read_flag=1; keep = millis() - buff; Serial.print("Time = "); Serial.print(keep); Serial.println("ms"); digitalWrite(LED,state); } digitalWrite(LED,state); read_flag=0; } |