본문 바로가기
Arduino(아두이노) 키트 강좌

Step.14-Arduino Uno 로 여러개의 LED 켜기

by 오마이엔지니어 2015. 5. 29.
반응형

Arduino Uno 로 여러개의 LED를 순서대로 점등시키는 프로젝트 입니다
한쪽 방향으로 전류가 흐르도록 제어하는 반도체 소자를 다이오드라 하며

다이오드 중 전기 에너지를 빛 에너지로 변환하는 발광 다이오드 (Light Emitting Diode)를 LED 라고 합니다

LED는 특정 원소의 반도체에 순방향 전압을 가하면 Positive-Negative 접합(Junction)부분을 통해 전자와 정공이 이동하면서 서로 재결합하는데 전자와 정공이 떨어져 있을때보다 작은 에너지가 되므로 이때 발생하는 에너지의 차이로 인해 빛을 방출합니다
이렇게 빛을 방출하는 칩은 보편적으로 0.25㎟로 매우 작으며 LED 크기는 플라스틱 렌즈와 리드프레임으로 결정됩니다

가장 보편적으로 사용하는 LED는 5mm(T 1 3/4) 플라스틱 Package이나 특정 응용분야에 따라 새로운 형태의 Package 를 개발하고 있습니다


<LED 구조도면>

 

사용된 부품

Arduino Uno R3 (Italy)

브래드 보드

Blue,Green,Red,Yellow LED

470 (Ohm) 저항 8개

점퍼케이블

 

사용된 키트

Arduino Starter kit (클릭)
지니어스 키트 Starter Pack (클릭)



구성 배선도 

 

 

사용된 예제소스 

LEDS.txt


/*
 LED 여러개 밝히기
*/
// 배열을 사용하여 사용하는 핀을 한번에 선언
// 특정 핀 번호를 대신해서 배열명[특정 방 번호] 사용
// ledPins[0] 은 2번 핀을 의미함
int ledPins[] = {2,3,4,5,6,7,8,9};

void setup()
{
  int index;  // 배열의 방 번호를 저장할 변수 선언

  //for 반복문과 배열을 사용하여 모든 핀을 출력모드로 설정
 for(index = 0; index <= 7; index++)
  {
    pinMode(ledPins[index],OUTPUT);
  }
}

void loop()
{

  oneAfterAnotherNoLoop();  //반복문을 사용하지 않고 하나씩 켜기

  oneAfterAnotherLoop();    //반복문을 사용하면서 하나씩 켜기
}

/*
 oneAfterAnotherNoLoop() : 반복문을 사용하지 않고 하나씩 켜기

 1. 하나씩 커짐
 2. 0.1초 씩 일시정지
 3. 거꾸로 하나씩 꺼짐
*/

void oneAfterAnotherNoLoop()
{

  // LED 하나씩 모두 on (순서 2번 핀 -> 9번 핀)

  digitalWrite(ledPins[0], HIGH);  //2번 핀과 연결된 LED on
  delay(100);                      //0.1초 유지
  digitalWrite(ledPins[1], HIGH);  //3번 핀과 연결된 LED on
  delay(100);               
  digitalWrite(ledPins[2], HIGH);  //4번 핀과 연결된 LED on
  delay(100);               
  digitalWrite(ledPins[3], HIGH);  //5번 핀과 연결된 LED on
  delay(100);               
  digitalWrite(ledPins[4], HIGH);  //6번 핀과 연결된 LED on
  delay(100);               
  digitalWrite(ledPins[5], HIGH);  //7번 핀과 연결된 LED on
  delay(100);               
  digitalWrite(ledPins[6], HIGH);  //8번 핀과 연결된 LED on
  delay(100);
  digitalWrite(ledPins[7], HIGH);  //9번 핀과 연결된 LED on
  delay(100);
 
  // LED 하나씩 모두 OFF (순서 9번 핀 -> 2번 핀)
 
  digitalWrite(ledPins[7], LOW);   //9번 핀과 연결된 LED OFF
  delay(100);               
  digitalWrite(ledPins[6], LOW); 
  delay(100);               
  digitalWrite(ledPins[5], LOW);  
  delay(100);          
  digitalWrite(ledPins[4], LOW);  
  delay(100);               
  digitalWrite(ledPins[3], LOW);  
  delay(100);               
  digitalWrite(ledPins[2], LOW);  
  delay(100);               
  digitalWrite(ledPins[1], LOW);  
  delay(100);               
  digitalWrite(ledPins[0], LOW);  
  delay(100);                
}
 

/*
 oneAfterAnotherLoop() : 반복문을 사용하여 하나씩 켜기

 위의 함수와 동일한 동작을 하되 반복문을 이용하여 코드를 작성해 봅시다.
 배열은 반복문과 함께 사용시 효율적인 스케치를 만들 수 있습니다.
*/

void oneAfterAnotherLoop()
{
  int index;            // 배열의 방 번호를 저장할 변수 선언

  //모든 LED 켜기

  //배열의 방 번호를 0부터 하나씩 증가하면서 for문 안의 내용을 반복
  for(index = 0; index <= 7; index++)
  {
    digitalWrite(ledPins[index], HIGH); //index = 0이면 2번 핀과 연결된 LED on
    delay(100);               
  }                                 

  //모든 LED 꺼짐

  //배열의 방 번호를 7부터 하나씩 감소하면서 for문 안의 내용을 반복
  for(index = 7; index >= 0; index--)
  {
    digitalWrite(ledPins[index], LOW);  //index = 7이면 9번 핀과 연결된 LED OFF
    delay(1000);
  }              
}
 
주의사항
배선시 LED의 방향을 잘 확인해야 합니다

긴핀이 (+) 짧은핀이 (-) 입니다

LED를 점등시키는 배선을 할때는 적당한 용량의 막대저항을 같이 사용해 줍니다
이유는 전압이 높아지면 전류가 많이 흐르게 되고 이로인해 LED가 손상이 될수 있기 때문입니다
자세한 것은 '저항의 기능과 용도' 포스팅을 참고 합시다

 

프로젝트 동영상


LEDS.txt
0.0MB
반응형

댓글