วันพฤหัสบดีที่ 4 กันยายน พ.ศ. 2557

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

วัตถุประสงค์ของการทดลอง

1.ฝึกการต่อวงจรโดยใช้บอร์ด Arduino  ต่ออินพุต์ เอาต์พุตกับ LED และ ปุ่มกด
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 -> …)

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 ทันที(หมายถึง การรีเซตค่าเป็นศูนย์)

ผลการทดลอง

   (ภาพผลที่ได้จาก ขั้นตอนการทดลอง ข้อที่ 4) จากโค้ดตัวอย่าง


code การทดลองข้อที่ 4(code ตัวอย่าง )
const byte PB_1 =2;//ใช้ขาหมายเลข D2 เพื่อสร้างสัญญาณดิจิทัล
const byte PB_2 =3;//ใช้ขาหมายเลข D3 เพื่อสร้างสัญญาณดิจิทัล
const byte LEDS[4] = {4,5,6,7};
void setup()
{
  pinMode(PB_1,INPUT);//กำหนดพฤติกรรมของ Digital pin ที่เราระบุ
  pinMode(PB_2,INPUT);//กำหนดพฤติกรรมของ Digital pin ที่เราระบุ
  for(int i=0;i<4;i++)
  {
    pinMode(LEDS[i],OUTPUT);///กำหนดพฤติกรรมของ Digital pin ที่เราระบุ
    digitalWrite(LEDS[i],(i==0)? HIGH : LOW);//Write ค่า HIGH หรือ Low ไปยัง Digital pin ตามเงื่อนไข
  }
}
void loop()
{
}
   (ภาพผลที่ได้จาก ขั้นตอนการทดลอง ข้อที่ 6)


code การทดลองข้อที่ 6
const byte PB_1 =2;//ใช้ขาหมายเลข D2 เพื่อสร้างสัญญาณดิจิทัล
const byte PB_2 =3;//ใช้ขาหมายเลข D3 เพื่อสร้างสัญญาณดิจิทัล
const byte LEDS[4] = {4,5,6,7};
int count=0;
void setup()
{
  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 loop()
{
    //ปุ่มกดที่ 1
    if(digitalRead(PB_1)==LOW){
      while(digitalRead(PB_1)==LOW)
      {
        delay(10);
      }
      if(count ==4)count=0;
      for(int i=0;i<4;i++)
      {
         digitalWrite(LEDS [i], (i==count)? HIGH: LOW);//Write ค่า HIGH หรือ Low ไปยัง Digital pin                                                                                                ตามเงื่อนไข
      }
      count++;
    }
   //ปุ่มกดที่ 2
    if(digitalRead(PB_2)==LOW){
      while(digitalRead(PB_2)==LOW)
      {
        delay(10);
      }
      if(count <0)count=3;
      for(int i=0;i<4;i++)
      {
         digitalWrite(LEDS [i], (i==count)? HIGH: LOW);
      }
       count--;
    }

}

(ภาพผลที่ได้จาก ขั้นตอนการทดลอง ข้อที่ 7)


code การทดลองข้อที่ 7
const byte PB_1 =2;//ใช้ขาหมายเลข D2 เพื่อสร้างสัญญาณดิจิทัล
const byte PB_2 =3;//ใช้ขาหมายเลข D3 เพื่อสร้างสัญญาณดิจิทัล
const byte   LED[4] = {4,5,6,7};
const byte L_Digit[] = { B0000,B1000,B0100,B1100,
                         B0010,B1010,B0110,B1110,
                         B0001,B1001,B0101,B1101,
                         B0011,B1011,B0111,B1111};
byte count = 0;
void setup()
{
  pinMode(PB_1,INPUT);//กำหนดพฤติกรรมของ Digital pin ที่เราระบุ
  pinMode(PB_2,INPUT);//กำหนดพฤติกรรมของ Digital pin ที่เราระบุ
  for(int i=0;i<4;i++)
  {
    pinMode(LED[i],OUTPUT);//กำหนดพฤติกรรมของDigital pinที่เราระบุ
  }
}
void LED_Binary(byte count_i)
{
  if (  count_i >=0&& count_i < 16 ) {
    byte b= L_Digit[count_i];
     for(int i=0;i<4;i++)
     {
        digitalWrite(LED[i],(b&1));
         b >>= 1;
     }
  }
}
void loop()
{
//กดปุ่มที่ 1
  if(digitalRead(PB_1)==LOW)
  {
  LED_Binary(count);
  count=(count+1);
    if(count>16)count=0;
  delay(900);
  }
//กดปุ่มที่ 2
  if(digitalRead(PB_2)==LOW)//อ่านค่าจาก digital pin
  {
    count=0;
    for(int i=0;i<7;i++)
     {
        digitalWrite(LED[i],LOW);Write สถานะ Low ไปยัง digital pin
     }
  }
}



ผังการต่อวงจรโดยใช้โปรแกรม Fritzing
Schematic view
BreadBoard View



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

แสดงความคิดเห็น