วันอังคารที่ 28 ตุลาคม พ.ศ. 2557

การทดลองที่ 5.4 การเชื่อมต่อวงจรอิเล็กทรอนิกส์ด้วยแสง

วัตถุประสงค์

     1. ฝึกต่อวงจรโดยใช้อุปกรณ์เชื่อมต่อทางแสง เช่น เบอร์ PC817
     2. ประยุกต์ใช้งานอุปกรณ์ชนิดนี้ร่วมกับบอร์ด Arduino และใช้ควบคุมการจ่ายกระแสให้โหลด

อุปกรณ์ที่ใช้ในการทดลอง
     1. แผงต่อวงจร (เบรดบอร์ด)                            1 อัน
     2. อุปกรณ์เชื่อมต่อทางแสง PC817                 1 ตัว
     3. ไดโอดเปล่งแสงสีแดงหรือสีเขียว               1 ตัว
     4. ตัวต้านทาน 220Ω หรือ 330Ω                      1 ตัว
     6. ทรานซิสเตอร์ NPN เบอร์ PN2222A           1 ตัว
     7. ตัวต้านทาน 1kΩ                                          1 ตัว
     8. ตัวต้านทาน 4.7kΩ                                       1 ตัว
     9. ตัวต้านทาน 10kΩ                                        1 ตัว
     10. ตัวต้านทานปรับค่าได้ 10kΩ หรือ 20kΩ     1 ตัว
     11. ไดโอด 1N400x                                          1 ตัว
     12. มอเตอร์ไฟฟ้ากระแสตรงขนาดเล็ก            1 ตัว
     13. สายไฟสำหรับต่อวงจร                               1 ชุด
     14. มัลติมิเตอร์                                                 1 เครื่อง
     15. แหล่งจ่ายแรงดันควบคุม                            1 เครื่อง
     16. ออสซิลโลสโคปแบบดิจิทัล                       1 เครื่อง

ขั้นตอนการทดลอง

 1. ต่อวงจรบนเบรดบอร์ดตามรูปที่ 5.4.1 ให้สังเกตว่า ในผังวงจรมี GND1 และ GND2 แยกกันซึ่ง
จะต้องไม่นำมาต่อเข้าด้วยกันโดยเด็ดขาด

 2. ให้ใช้แรงดันไฟเลี้ยง +5V และ GND1 ให้ใช้จากบอร์ด Arduino แต่สำหรับ +9V และ GND2
ให้ใช้จากแหล่งจ่ายแรงดันควบคุม
 3. เขียนโค้ด Arduino โดยสร้างสัญญาณแบบ PWM โดยใช้คำสั่ง analogWrite() เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 โดยปรับค่า Duty Cycle ของสัญญาณเอาต์พุตตามค่าที่อ่านได้จากตัวต้านทานปรับค่าได้ ซึ่งต่อเป็นอินพุตที่ขา A1

#define in A1
#define led 5

void setup() {
  //pinMode(in,INPUT);
  pinMode(led,OUTPUT);  
  Serial.begin(9600); 
}


void loop() {
  int sensor = analogRead(in);
  sensor=map(sensor,0,1023,0,255);
  analogWrite(led,sensor);
  sensor=map(sensor,0,255,0,100);
  Serial.print("Sensor : ");
  Serial.println(sensor);
}

 4. ใช้ออสซิลโลสโคปวัดสัญญาณที่ขา E ของ PC817 เทียบกับ GND2 แล้วทดลองหมุนปรับที่
ตัวต้านทานปรับค่าได้ เพื่อปรับค่า Duty Cycle เป็น 0% 25% 50% และ 100% ตามลำดับ
บันทึกรูปคลื่นสัญญาณที่ได้ในแต่ละกรณี
















การทดลองที่ 5.2 การตรวจจับวัตถุในระยะใกล้ด้วยแสงอินฟราเรด

วัตถุประสงค์

  • ฝึกต่อวงจรโดยใช้ไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์
  • เขียนcode สำหรับควบคุมการทำงานบอร์ด Arduino เพื่อใช้ตรวจจับวัตถุในระยะใกล้

รายการอุปกรณ์

  • แผงต่อวงจร (เบรดบอร์ด)                                                 1 อัน
  • ไดโอดเปล่งแสงอินฟราเรด                                               1 ตัว
  • ไดโอดเปล่งแสงสีแดงหรือสีเขียว                                     1 ตัว
  • โฟโต้ทรานซิสเตอร์                                                           1 ตัว
  • ตัวต้านทาน 220Ω                                                             1 ตัว
  • ตัวต้านทาน 330Ω หรือ 470Ω                                            1 ตัว
  • ตัวต้านทาน 10kΩ                                                              1 ตัว
  • ตัวเก็บประจุแบบ Electrolytic 1uF หรือ 10uF (มีขั้ว)          1 ตัว
  • สายไฟสำหรับต่อวงจร                                                       1 ชุด
  • มัลติมิเตอร์                                                                         1 เครื่อง


ขั้นตอนการทดลอง

1. ออกแบบวงจร (วาดผังวงจร) โดยใช้ไดโอดเปล่งแสงอินฟราเรดและโฟโต้ทรานซิสเตอร์ 1 ชุด พร้อมตัวต้านทานตามที่กำหนดให้ แล้วนำสัญญาณเอาต์พุตของวงจรส่วนนี้ ไปต่อเข้าที่ขาอินพุต A1 ของบอร์ด Arduino และให้มีวงจร ไดโอดเปล่งแสง (LED) พร้อมตัวต้านทานจำกัดกระแส 330Ω หรือ 470Ω ที่ต่อกับขาเอาต์พุต D5 ของบอร์ด Arduino เพื่อใช้เป็นเอาต์พุตในการแสดงผล

2. ต่อวงจรตามผังวงจรที่ได้วาดไว้บนเบรดบอร์ด ให้ใช้แรงดันไฟเลี้ยง VCC=+5V และ Gnd จากบอร์ด Arduino เท่านั้น
3. เขียนโค้ดสำหรับ Arduino ให้แสดงพฤติกรรมดังนี้ เมื่อมีวัตถุเข้าใกล้ (อยู่เหนือ) ตัวส่งและตัวรับแสง อินฟราเรดของวงจร (เช่น ที่ระยะห่างประมาณ 10 cm หรือน้อยกว่า) จะทำให้ LED เริ่มกระพริบด้วยความถี่ต่ำ (อย่างช้าๆ) แต่ถ้าวัตถุเข้าใกล้มากขึ้น LED จะกระพริบด้วยความถี่สูงขึ้น แต่ถ้าไม่มีวัตถุอยู่ในระยะใกล้ LED จะต้องไม่ติด (ไม่กระพริบ) ให้ทดลองกับวัตถุต่างสีกัน เช่น สีขาวและสีดำ

void setup() {
  // put your setup code here, to run once:
  pinMode(A1,INPUT);
  pinMode(5,OUTPUT);
  digitalWrite(5, LOW);
  analogReference(DEFAULT);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  int val = analogRead(A1);
  Serial.println(val);
  if(val>300){
  digitalWrite(5, HIGH);
  delay(1023-(val));
  digitalWrite(5, LOW);
  delay(1023-(val));
  }else{
    digitalWrite(5, LOW);
  }
  
}
4. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคำอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้องครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบนเบรดบอร์ด และตอบคำถามท้ายการทดลอง


คำถามท้ายการทดลอง
1. ในการทดลอง ถ้าใช้วัตถุต่างสีกัน จะมีผลต่อการทำงานของวงจรที่แตกต่างกันหรือไม่ จงอธิบาย
     มีผลเนื่องจาก กระดาษสีขาวมีการสะท้อนของแสงได้ดีกว่า

วันเสาร์ที่ 27 กันยายน พ.ศ. 2557

การทดลองที่ 4.6 การวัดแรงดันอินพุต-แอนะล็อกและการแสดงค่าโดยใช้ 7-Segment

วัตถุประสงค์ 

     1. ฝึกต่อวงจรและเขียนโปรแกรมสําหรับบอร์ด Arduino เพื่อวัดแรงดันอินพุต-แอนะล็อกและแสดงค่าที่ ได้ผ่านทาง 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 เท่านั้น [ทุกกลุ่มจะต้องวาดวงจรสําหรับการทดลองมาให้แลว้เสร็จ (ให้เตรียมตัวมาก่อนเข้าเรียน วิชาปฏิบัติ]

     2. เขียนโค้ดสําหรับ Arduino เพื่ออ่านค่าจากแรงดันอินพุต-แอนะล็อก แลว้นําไปแสดงผลโดยใช้  7-Segment Display ตามที่กล่าวไป (และให้แสดงค่าทอี่่านได้ออกทาง Serial Monitor ด้วย)  และในการเขยีนโค้ด ห้ามใช้ตัวแปรหรือตัวเลขแบบ float

#define in A6
const byte seven_seg[7]={4,5,6,7,8,9,10};
const byte seven[2]={2,3};
byte digi[10]={B1111110,B0110000,B1101101,B1111001,B0110011,B1011011,B1011111,B1110000,B1111111,B1111011};

void setup() {
  // put your setup code here, to run once:
  for(int i=0;i<7;i++){
    pinMode(seven_seg[i],OUTPUT);
  }
  for(int i=0;i<2;i++){
    pinMode(seven[i],OUTPUT);
  }
  analogReference(DEFAULT);
  Serial.begin(9600);
}

void loop() {
  int tod;
  // put your main code here, to run repeatedly:
  int input=analogRead(in);
  input=map(input,0,1023,0,5000);
  Serial.print(input);
  Serial.print(" ");
  int num_seg1 = input/1000;
  if((input%100>40)){
    tod=1;
  }else{
    tod=0;
  }
  Serial.print(num_seg1);
  Serial.print(" ");
  int num_seg2 = ((input%1000)/100)+tod;
  Serial.println(num_seg2);
  delay(10);
  digitalWrite(seven[0],1);
  digitalWrite(seven[1],0);
  display_seg(num_seg1);
  delay(10);
  digitalWrite(seven[0],0);
  digitalWrite(seven[1],1);
  display_seg(num_seg2);

}

void display_seg(int num_seg){
  byte t=digi[num_seg];
  for(int i=6;i>=0;i--){
   digitalWrite(seven_seg[i],t&1);
   t>>=1;

  }




     3. เขียนรายงานการทดลอง ซงึ่ประกอบด้วยคําอธบิายการทดลองตามขั้นตอน ผงัวงจรที่ถูกต้อง ครบถ้วนตามหลักไฟฟา้ (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการตอ่วงจรบน เบรดบอร์ด โค้ด Arduino ที่ได้ทดลองจริงพร้อมคาํอธิบายโค้ด/การทํางานของโปรแกรม และตัวอย่างผลที่แสดงบน Serial Monitor (Screen Capture)



วันศุกร์ที่ 19 กันยายน พ.ศ. 2557

การทดลองที่ 4.4 สัญญาณอินพุต-แอนะล็อกและการใช้งานร่วมกับบอร์ด Arduino

วัตถุประสงค์

  1. ฝึกต่อวงจรเพื่อสร้างสัญญาณแอนะล็อก และป้อนให้บอร์ด Arduino เพื่อใช้เป็นสัญญาณอินพุต
  2. เขียนโปรแกรมสําหรับ Arduino เพื่อเปิด/ปิด LED ตามสภาวะแสง

รายการอุปกรณ์

  1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
  2. บอร์ด Arduino (ใช้แรงดัน +5V) 1 บอร์ด
  3. ตัวต้านทานปรับค่าได้ 10kΩ หรือ 20kΩ 1 ตัว
  4. ตัวต้านทานไวแสง LDR 1 ตัว
  5. ไดโอดเปล่งแสงขนาด 5 มม. 1 ตัว
  6. ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
  7. ตัวต้านทาน 10kΩ 1 ตัว
  8. สายไฟสําหรับต่อวงจร 1 ชุด
  9. มัลติมิเตอร์ 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 );
    }

วันศุกร์ที่ 12 กันยายน พ.ศ. 2557

การทดลองที่ 4.2 การต่อวงจรสำหรับเปรียบเทียบช่วงแรงดัน

วัตถุประสงค์

1. ฝึกต่อวงจรโดยใช้ตัวต้านทานปรับค่าได้และไอซี LM393N
2. เพื่อให้เกิดความเข้าใจในวิธีการต่อวงจร LM393N
3. เพื่อต่อวงจรโดยใช้ไอซี LM393N ที่มีตัวเปรียบเทียบแรงดันสองตัว เพื่อเปรียบเทียบแรงดันอินพุตกับแรงดันอ้างอิงโดยแบ่งเป็นสองระดับ

วัสดุอุปกรณ์

  1. แผงต่อวงจร (เบรดบอร์ด)                                                             1  อัน
  2. ไอซีเปรียบเทียบแรงดัน เบอร์ LM393N                                         1  ตัว
  3. ตัวต้านทานปรับค่าได้แบบ 3 ขา ขนาด 10kOhm หรือ 20kOhm      1  ตัว
  4. ตัวต้านทาน 10kOhm                                                                  4  ตัว
  5. ตัวต้านทาน 330Ohm หรือ 470Ohm                                            1  ตัว
  6. ไดโอดเปล่งแสงขนาด 5 มม.                                                        1  ตัว
  7. สายไฟสำหรับต่อวงจร                                                                  1  ชุด
  8. มัลติมิเตอร์                                                                                  1  เครื่อง
  9. แหล่งจ่ายควบคุมแรงดัน                                                               1  ชุด
  10. เครื่องกำเนิดสัญญาณ                                                                   1  เครื่อง
  11. ออสซิลโลสโคปแบบดิจิทัล                                                           1  เครื่อง
ขั้นตอนการทดลอง 
  1. ต่อวงจรบนเบรดบอร์ด โดยใช้ไอซี LM393N ตามผังวงจรในรูปที่ 4.2.1 และป้อนแรงดันไฟเลี้ยง VCC = +5V และ Gnd จากแหล่งจ่ายควบคุมแรงดัน
  2. ใช้มัลติมิเตอร์วัดแรงดัน V1 และ V2 เทียบกับ Gnd ของวงจร ตามลำดับ แล้วจดบันทึกค่าที่ได้
  3. สร้างสัญญาณแบบสามเหลี่ยม (Triangular Wave) ให้อยู่ในช่วงแรงดัน 0V ถึง 5V โดยใช้เครื่องกำเนิดสัญญาณ (Function Generator) โดยกำหนดให้ Vpp = 5V (Peak-to-Peak Voltage) และแรงดัน Offset = 2.5V และความถี่ f = 1kHz เพื่อใช้เป็นสัญญาณอินพุต Vin สำหรับวงจร
  4. ใช้ออสซิลโลสโคปวัดสัญญาณ โดยใช้ช่อง A สำหรับวัดสัญญาณที่มาจากเครื่องกำเนิดสัญญาณ (Vin) และช่อง B สำหรับวัดสัญญาณเอาต์พุตที่ขาหมายเลข 1 (V3) ของตัวเปรียบเทียบแรงดัน (บันทึกภาพที่ได้จากออสซิลโลสโคป เพื่อใช้ประกอบการเขียนรายงานการทดลอง)
  5. ใช้ออสซิลโลสโคปวัดสัญญาณ โดยใช้ช่อง A สำหรับวัดสัญญาณที่มาจากเครื่องกำเนิดสัญญาณ (Vin) และช่อง B สำหรับวัดสัญญาณเอาต์พุตที่ขาหมายเลข 7 (V4) ของตัวเปรียบเทียบแรงดัน (บันทึกภาพที่ได้จากออสซิลโลสโคป เพื่อใช้ประกอบการเขียนรายงานการทดลอง)
  6. ต่อวงจรบนเบรดบอร์ด ตามผังวงจรในรูปที่ 4.2.2 โดยตัวต้านทานปรับค่าได้ขนาด 10kOhm หรือ 20kOhm
  7. ใช้มัลติมิเตอร์วัดแรงดัน Vin ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ แล้วสังเกตสถานะของการติด/ดับของ LED1 ให้จดบันทึกค่าแรงดัน Vin ที่ทำให้ LED1 เกิดการเปลี่ยนสถานะติด/ดับ
  8. เขียนรายงานการทดลอง ซึ่งประกอบด้วยคำอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้อง ครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบนเบรดบอร์ด รูปคลื่นสัญญาณที่วัดได้จากออสซิลโลสโคปตามโจทย์การทดลอง และตอบคำถามท้ายการทดลอง 
คำถามท้ายการทดลอง
1. แรงดัน V1 และ V2 มีค่าประมาณ 1.666 โวลต์ ถึง 3.364 โวลต์ ตามลำดับ
2. แรงดัน Vin จะต้องมีค่าอยู่ในช่วง 3.4 ถึง 4.96 โวลต์และ 0 ถึง 3.4 โวลต์ จึงจะทำให้แรงดัน V3 ที่ขาหมายเลข 1 ของ LM393N (วงจรในรูปที่ 4.2.1) ได้ลอจิก LOW และ HIGH ตามลำดับ
3. แรงดัน Vin จะต้องมีค่าอยู่ในช่วง 1.66 ถึง 0โวลต์และ 4.96 ถึง 1.66 โวลต์ จึงจะทำให้แรงดัน V4 ที่ขาหมายเลข 1 ของ LM393N (วงจรในรูปที่ 4.2.1) ได้ลอจิก LOW และ HIGH ตามลำดับ
4. แรงดัน Vin ที่ได้จากการหมุนปรับค่าของตัวต้านทานปรับค่าได้ จะต้องมีค่าอยู่ในช่วงใด จึงจะทำให้ LED1 สว่าง
ตอบ อยู่ในช่วง 0v - 1.66v และ 3.36v - 5v 

วันศุกร์ที่ 5 กันยายน พ.ศ. 2557

การทดลองที่ 3.2 การใช้อุปกรณ์ 7-Segment Display เพื่อแสดงตัวเลข BCD

วัตถุประสงค์
1. ฝึกต่อวงจรโดยใช้อุปกรณ์ 7-Segment Display บนเบรดบอร์ด และใช้งานร่วมกับบอร์ด Arduino
2. เขียนโปรแกรม Arduino เพื่อแสดงตัวเลข โดยใช้อุปกรณ์ 7-Segment Display

รายการอุปกรณ์
1. แผงต่อวงจร (เบรดบอร์ด)                   1 อัน
2. บอร์ด Arduino (ใช้แรงดัน +5V)         1 บอร์ด
3. อุปกรณ์ 7-Segment Display             1 ตัว  
4. ปุ่มกดแบบสี่ขา                                    1 ตัว
5. ตัวต้านทาน 330Ω หรือ 470Ω             7 ตัว
6. ตัวต้านทาน 1kΩ                                1 ตัว
7. ตัวต้านทาน 10kΩ                              1 ตัว
8. ทรานซิสเตอร์ NPN เบอร์ PN2222A  1 ตัว 
9. สายไฟสําหรับต่อวงจร                         1 ชุด

ขั้นตอนการทดลอง

1. ศึกษาการใช้งาน และตําแหนง่ของขาต่างๆ ของอุปกรณ์ 7-Segment Display (ใช้แบบ Common- Cathode) จากเอกสาร (ดาต้าชีทของผู้ผลิต) วาดรูปอุปกรณ์ ระบุขาต่างๆ และการกําหนดสถานะ LOW หรือ HIGH ที่ขาเหล่านั้น เพื่อให้สามารถแสดงตัวเลขในแต่ละกรณีได้ระหว่าง 0 ถึง 9 
2. ต่อตัวต้านทาน 330Ω หรือ 470Ω จํานวน 7 ตัว แบบอนุกรมกับขา a, b, c, d, e, f, g แต่ละขาของ อุปกรณ์ 7-Segment Display ตามผังวงจรในรูปที่ 3.2.1
3. ต่อขา CC (Common Cathode) ไปยัง Gnd ของวงจร

4. เชื่อมต่อขา D3, D4, D5, D6, D7, D8, D9 ของบอร์ด Arduino ไปยังขา a, b, c, d, e, f, g ของ อุปกรณ์ 7-Segment Display (ผ่านตัวต้านทาน 330Ω หรือ 470Ω ที่ต่ออนุกรมอยู่สําหรับแต่ละขา)

5. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทําขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino

6. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดก่อน เมื่อถูกต้องแล้ว จึงเชื่อมต่อ +5V และ Gnd  จากบอร์ด Arduino ไปยังเบรดบอร์ด เพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) และไม่ต้องใช้ แหล่งจ่ายควบคุมแรงดันจากภายนอก ให้ระวังการต่อสลับขั้วสายไฟ และระวังการต่อถึงกันทางไฟฟ้า ของสายไฟทั้งสองเส้น

7. แก้ไขโค้ดสําหรับ Arduino ให้สามารถแสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ํา โดยเว้นระยะเวลาในการ เปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที


โค้ด Arduino Sketch

const byte SEVEN_SEG[7] = {3,4, 5, 6, 7 ,8, 9};
void setup() {
  // put your setup code here, to run once:
for (int i = 0; i < 7; i++) {
    pinMode(SEVEN_SEG[i], OUTPUT);
    digitalWrite(SEVEN_SEG[i], HIGH);
  }
  Serial.begin(9600);
}
int a=0;
byte N[10] = { B1111110, B0110000, B1101101, B1111001, B0110011, B1011011, B1011111, B1110000, B1111111, B1111011};
void loop() {
  // put your main code here, to run repeatedly:
  displayLED(a);
  a++;
  if(a>9){a=0;}
  delay(1000);
 Serial.println(a); 
}
  void displayLED(int j){
  byte t=N[j];
  for(int i=6;i>=0;i--){
    
    digitalWrite(SEVEN_SEG[i], t & 1);
    Serial.print(i); 
    Serial.print(" "); 
    Serial.println(t & 1,BIN); 
    t >>= 1;
  }
}

8. แก้ไขวงจร โดยต่อวงจรตามผังวงจรในรูปที่ 3.2.3 ให้สังเกตว่า มีการต่อวงจรปุ่มกดแบบ Pull-up เพื่อใช้เป็นอินพุต-ดิจิทัลให้บอร์ด Arduino และมีการต่อวงจรทรานซิสเตอร์แบบ NPN เพื่อใช้ควบคุม การไหลของกระแสจากขา CC ของ 7-Segment Display ผ่านตัวทรานซิสเตอร์ NPN จากขา Collector (C) ไปยังขา Emitter (E) และ GND ของวงจรตามลําดับ
9. แก้ไขโค้ดสําหรับ Arduino เพื่อให้แสดงตัวเลขตั้งแต่ 0 ถึง 9 แล้ววนซ้ํา โดยเว้นระยะเวลาในการ เปลี่ยนเป็นตัวเลขถัดไปประมาณ 1 วินาที แต่จะแสดงผลกต็่อเมื่อกดปุ่ม PB1 ค้างไว้ แต่ถ้าไม่กด จะต้องไม่แสดงผลตัวเลขใดๆ (ไม่ติด)

โค้ด Arduino Sketch


const byte SEVEN_SEG[7] = {3,4, 5, 6, 7 ,8, 9};
void setup() {
  // put your setup code here, to run once:
pinMode(10, INPUT);
for (int i = 0; i < 7; i++) {
    pinMode(SEVEN_SEG[i], OUTPUT);
    digitalWrite(SEVEN_SEG[i], HIGH);
  }

}
int a=0;
byte N[10] = { B1111110, B0110000, B1101101, B1111001, B0110011, B1011011, B1011111, B1110000, B1111111, B1111011};
void loop() {
  // put your main code here, to run repeatedly:
  int SW = digitalRead(2);
  if(SW == LOW){
    digitalWrite(10, 1);
  } else {   
    digitalWrite(10, 0);
  }
  
  displayLED(a);
  a++;
  if(a>9){a=0;}
  delay(1000);
 Serial.println(a); 
}
  void displayLED(int j){
  byte t=N[j];
  for(int i=6;i>=0;i--){
    
    digitalWrite(SEVEN_SEG[i], t & 1);
    Serial.print(i); 
    Serial.print(" "); 
    Serial.println(t & 1,BIN); 
    t >>= 1;
  }
}

การทดลองที่ 3.1 การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสําหรับ Arduino

วัตถุประสงค์

1. ฝึกต่อวงจรปุ่มกดและไดโอดเปล่งแสง (LED) และเชื่อมต่อกับขาอินพุต/เอาต์พุต-ดิจิทัลของ
บอร์ด Arduino
2. ฝึกเขียนโปรแกรมภาษา C/C++ เพื่อกําหนดพฤติกรรมการทํางานของบอร์ด Arduino 

ตามโจทย์ที่กำหนดให้

รายการอุปกรณ์
1.แผงต่อวงจร (เบรดบอร์ด)    1 อัน
2. บอร์ด Arduino (ใช้แรงดันลอจิก +5V)  1 บอร์ด
3. ปุ่มกดแบบสี่ขา     2 ตัว
4. ไดโอดเปล่งแสงขนาด 5 มม.   4 ตัว
5. ตัวต้านทาน 10kΩ    2 ตัว
6. ตัวต้านทาน 330Ω หรือ 470Ω   4 ตัว
7. สายไฟสําหรับต่อวงจร    1 ชุด 


ขั้นตอนการทดลอง
1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง
 VCC และ GND  

2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-up 10kΩ จํานวนสองชุด (PB1 และ PB2) บนเบรดบอร์ด 
แล้วนําไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลําดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร  
(ดูตามผังวงจรในรูปที่ 3.1.1) 

3. ต่อวงจรโดยใช้ไดโอดเปล่งแสง (LED) พร้อมตัวต้านทานแบบอนุกรม 330Ω หรือ 470Ω จํานวน4ชุด
 (LED1, LED2, LED3, LED4) บนเบรดบอร์ด แล้วนําไปต่อกับขา D4, D5, D6, D7, D8 ของ 
บอร์ด Arduino ตามลําดับ โดยใช้ลวดสายไฟสําหรับต่อวงจร (ดูตามผังวงจรในรูปที่ 3.1.1) 

4. เขียนโค้ดตามตัวอย่างโดยใช้ Arduino IDE แล้วทําขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยัง
บอร์ด Arduino 

5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ +5V และ Gnd จาก
บอร์ด Arduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) ให้ระวังการต่อสลับ
ขั้วสายไฟและ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น 

6. แก้ไขโค้ดใหแ้สดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องใน 
การทํางาน โดยใช้ฮาร์ดแวรจ์ริง 
  • 6.1 เมื่อเริ่มต้นทํางาน จะมี LED เพียงตัวเดียวที่อยู่ในสถานะ “ติด” (LED1) และที่เหลืออีก 3 ตัว
 (LED2, LED3, LED4) อยู่ในสถานะ “ดับ”   
  • 6.2 ถ้ากดปุ่ม PB1 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของ LED ที่ “ติดเลื่อนไปทาง
ขวาทีละ หนึ่งตําแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางซ้ายสุด 
( LED1 -> LED2 -> LED3 -> LED4 -> … ) 
  • 6.3 ถ้ากดปุ่ม PB2 แล้วปล่อยในแต่ละครั้ง จะทําให้ตําแหน่งของ LED ที่ “ติด” เลื่อนไป
ทางซ้ายทีละ หนึ่งตําแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางขวาสุด
 ( LED1 -> LED4 -> LED3 -> LED2 -> … ) 
โค้ด Arduino Sketch
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};
byte n = 0;
void setup() {
  // put your setup code here, to run once:
  pinMode(PB_1, INPUT);
  pinMode(PB_2, INPUT);
  for (int i = 0; i < 4; i++) {
    pinMode(LEDS[i], OUTPUT);
    digitalWrite(LEDS[i], (i == 0) ? HIGH : LOW);
  }
}

void CheckButton(){
  if( isButtonclicked( PB_1 ))
  n=n+1;
  if( isButtonclicked( PB_2 ))
  n=n-1;
}

void displayLED(){
    digitalWrite(LEDS[n+1], 1);
    digitalWrite(LEDS[n-1], 1);
    digitalWrite(LEDS[n], 1);

}

bool isButtonclicked( byte pinnumber ){
  byte t=5;
  while((digitalRead(pinnumber)==LOW)&& --t)
    delay(1);
  if(t==0){
    while(digitalRead(pinnumber)==LOW);
    return true;
  }
  return false;
}
  
void loop() {
  // put your main code here, to run repeatedly:
  CheckButton();
  displayLED();
}

7. แก้ไขโค้ดใหแ้สดงพฤติกรรมการทํางานตามข้อกําหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องใน
 การทํางาน 
  • 7.1 ใช้ LED ทั้ง 4 ตัว แสดงเลขในฐานสอง จํานวน 4 หลัก (4-bit binary number) ซึ่งรับ
สัญญาณ เอาต์พุตมาจากบอร์ด Arduino และกําหนดให้บิตที่มีค่า 0 หมายถึง LED “ดับ” และ
 บิตที่มีค่า เป็น 1 หมายถึง LED “ติด”และเมื่อเริ่มต้นทํางาน ให้แสดงค่าเป็น 0  
  • 7.2 เมื่อกดปุ่ม PB1 แล้วปล่อยแต่ละครั้ง จะทําให้ค่าเพิ่มขึ้นทีละหนึ่ง จาก 0000, 0001,
 0010, …, 1111 ตามลําดับ แล้ววนกลับไปเริ่มต้นที่ 0000 ใหม่ได้ 
  • 7.3 แต่ถ้ากดปุ่ม PB2 จะทําให้ได้ค่าเป็น 0000 ทันที (หมายถงึ การรีเซตค่าเป็นศูนย์) 

โค้ด Arduino Sketch

const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS[4] = {4, 5, 6, 7};
byte n = 0;
void setup() {
  // put your setup code here, to run once:
  pinMode(PB_1, INPUT);
  pinMode(PB_2, INPUT);
  for (int i = 0; i < 4; i++) {
    pinMode(LEDS[i], OUTPUT);
    digitalWrite(LEDS[i], (i == 0) ? HIGH : LOW);
  }
}

void CheckButton(){
  if( isButtonclicked( PB_1 ))
  n=n+1;
  if( isButtonclicked( PB_2 ))
  n=0;
}

void displayLED(){
  byte t=n;
  for(int i=0;i<4;i++){
    digitalWrite(LEDS[i], t &1);
    t >>= 1;
  }
}

bool isButtonclicked( byte pinnumber ){
  byte t=5;
  while((digitalRead(pinnumber)==LOW)&& --t)
    delay(1);
  if(t==0){
    while(digitalRead(pinnumber)==LOW);
    return true;
  }
  return false;
}
  
void loop() {
  // put your main code here, to run repeatedly:
  CheckButton();
  displayLED();
}