본문으로 바로가기



LED(발광 다이오드)


LED는 전기 에너지를 빛 에너지로 변환한 발광 다이오드이다. LED는 일반적으로 2개의 전극단자로 구성되어 있는데, 긴 단자쪽이 +(애노드 ANODE), 짧은 단자쪽이 -(캐소드 CATHODE)라고 한다. 따라서 각 단자마다 극성을 가지고 있고, 긴 단자(애노드)에 +를 짧은 단자(캐소드)에 -전극을 연결하면 된다.

전류가 지나치게 흐를경우 LED가 파손되거나 고장이 발생할 수 있으므로 저항을 달아주는것이 좋다.

저항을 고를 때에는 옴의법칙을 이용하여 저항을 선정한다.


옴의법칙


V(전압)=I(전류)*R(저항)

R(저항)=V(전압)/I(전류)

I(전류)=V(전압)/R(저항)

우리는 LED를 보호하기 위한 저항을 달아야 하므로, R = V / I를 사용하면, LED의 필요전압은 2V이며, 소모전류는 10mA이다.
대부분의 아두이노 우노 보드는 공급전압이 5V이기 때문에 R=(5V(공급전압) - 2V(LED 필요전압)) / 10mA(LED 소모 전류 세기) = 300Ω이 나오게 된다.
ex) 공급전압이 12V일 경우 (12V - 2V) / 10mA = 1KΩ
300Ω 저항을 사용하면 되고, 300Ω 저항이 없을 경우 근사치 저항을 사용하시면 된다. 필자는 330Ω 저항을 사용하였다.

준비물

아두이노, 브레드보드, 점퍼케이블 7개, LED 3개, 저항300Ω(330Ω) 3개


회로도




소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int green = 12;        //초록색 LED를 12번으로
int yellow = 10;    //노란색 LED를 10번으로
int red = 8;        //빨간색 LED를 8번으로
 
void setup() {
  pinMode(green, OUTPUT);
  pinMode(yellow, OUTPUT);
  pinMode(red, OUTPUT);        //12, 10, 8번포트를 출력으로 설정
}
 
void loop() {
  digitalWrite(green, HIGH);    //초록불 켜기
  digitalWrite(yellow, LOW);    //노란불 끄기
  digitalWrite(red, LOW);        //빨간불 끄기
  delay(1000);                    //1초 대기
  digitalWrite(green, LOW);
  digitalWrite(yellow, HIGH);    //노란불만 켜기
  digitalWrite(red, LOW);
  delay(1000);
  digitalWrite(green, LOW);
  digitalWrite(yellow, LOW);
  digitalWrite(red, HIGH);        //빨간불만 
  delay(1000);
}
cs


ex1__led.ino


결과 영상




댓글을 달아 주세요

  1. 궁그미 2016.08.05 19:35 신고

    재밌게 잘봤어요.
    회로도도 차근히 설명해주시고 꽂는 것도 보여줘서 좋네요.

    궁금한게 코드에서 Delay(1000)에서
    1000이 1초인건가요?
    괄호안의 값이 4자리여야 하는건지 궁금하네요.

    • BlogIcon 코딩런 2016.08.05 19:48 신고

      delay 함수의 기본단위가 ms에요. ms가 1000분의 1초 단위구요. 따라서 1초는 1000ms이고 2초는 2000ms 0.5초는 500ms가 되는것이에요.

      ms단위일 뿐이지 4자리로 꼭 입력할 필요는 없습니다.

    • 궁그미 2016.08.05 19:50 신고

      Ms라는 단위군요!!! 코딩런님 감사해요

  2. 씨아이오 2017.02.11 19:38 신고

    똑같이 했는데 저는 왜 에러가 날까요?

  3. 씨아이오 2017.02.11 19:46 신고

    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x97
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x97

    이런 에러가 나요. 도와주세요.

  4. 씨아이오 2017.02.11 20:14 신고

    드라이브 설치하니 해결 됐어요. 처음 과제가 해결되어서 좋네요. 감사해요.

  5. echosori 2017.07.26 22:43 신고

    상세한 설명 감사합니다.
    질문이 하나 있는데요.
    저항을 꼭 다이오드 앞에 (다이오드와 전원 사이에) 놓아야 하는가요? LED를 보호하기 위함인가요?

  6. 2018.02.26 13:51

    비밀댓글입니다

  7. 꽁치 2018.03.20 03:30 신고

    좋은 강의 감사합니다

  8. BlogIcon 발큰새 2018.04.01 18:37 신고

    안녕하세요! 옛날에 수박 겉 핥기 식으로 아두이노를 배운 후, 지금 다시 본격적으로 아두이노에 대해 배울려고 하는 사람입니다. 궁금한 것이 있는데요, 옛날에 배울 때는 이것과 비슷한 예제를 할 때 디지털GND에 넣는 것이 아니라 아날로그 GND에 연결했던 것으로 기억합니다. 이 둘의 차이점은 무엇인가요? 그리고 GND는 아두이노에서 (-)를 연결할 때 사용하는 것일 뿐인가요, 아니면 다른 용도도 있나요?

티스토리 툴바