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 |
결과 영상
'아두이노 > 기초 예제' 카테고리의 다른 글
아두이노 예제 3. RGB LED 제어하기 (6) | 2017.01.05 |
---|---|
아두이노 예제 2. 스위치로 led 켜기, 끄기 (7) | 2017.01.03 |
아두이노 예제 1. LED 깜빡이기 (15) | 2017.01.03 |
아두이노 라이브러리 추가하는 방법 (0) | 2016.12.27 |
아두이노 포트인식이 안될경우 해결방법 (2) | 2016.08.04 |
아두이노 IDE(프로그램)설치 및 환경설정 (5) | 2016.08.03 |
재밌게 잘봤어요.
회로도도 차근히 설명해주시고 꽂는 것도 보여줘서 좋네요.
궁금한게 코드에서 Delay(1000)에서
1000이 1초인건가요?
괄호안의 값이 4자리여야 하는건지 궁금하네요.
똑같이 했는데 저는 왜 에러가 날까요?
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
이런 에러가 나요. 도와주세요.
드라이브 설치하니 해결 됐어요. 처음 과제가 해결되어서 좋네요. 감사해요.
상세한 설명 감사합니다.
질문이 하나 있는데요.
저항을 꼭 다이오드 앞에 (다이오드와 전원 사이에) 놓아야 하는가요? LED를 보호하기 위함인가요?
비밀댓글입니다
좋은 강의 감사합니다
안녕하세요! 옛날에 수박 겉 핥기 식으로 아두이노를 배운 후, 지금 다시 본격적으로 아두이노에 대해 배울려고 하는 사람입니다. 궁금한 것이 있는데요, 옛날에 배울 때는 이것과 비슷한 예제를 할 때 디지털GND에 넣는 것이 아니라 아날로그 GND에 연결했던 것으로 기억합니다. 이 둘의 차이점은 무엇인가요? 그리고 GND는 아두이노에서 (-)를 연결할 때 사용하는 것일 뿐인가요, 아니면 다른 용도도 있나요?
계속해서 오류가 떠요... 업로딩이 안돼요아두이노:1.8.9 (Windows 10), 보드:"Arduino/Genuino Uno"
스케치는 프로그램 저장 공간 1028 바이트(3%)를 사용. 최대 32256 바이트.
전역 변수는 동적 메모리 9바이트(0%)를 사용, 2039바이트의 지역변수가 남음. 최대는 2048 바이트.
avrdude: ser_open(): can't open device "\\.\COM4": ������ ������ ã�� �� �����ϴ�.
보드에 업로딩중에 문제 발생. 다음을 참고하세요. http://www.arduino.cc/en/Guide/Troubleshooting#upload
이 리포트는 파일 -> 환경설정에 "컴파일중 자세한 출력보이기"를
활성화하여 더 많은 정보를
보이게 할 수 있습니다.
집에 200이 가장 가까운 건데.... 오차가 너무 많이 나는 거 아니에요?
안녕하세요 올려주신 코드를 사용하여 실행을 해보았는데 잘 작동이 됩니다. 근데 저는 동기적 작동을 원해서 pc에서 아두이노로 데이터를 전송후 아두이노가 해당작업을 마치고 나면 pc로 데이터를 전송하여 pc가 받게 되면 그 후부터 c코드가 진행이 되게 하려고합니다. 올려주신대로 하면 WriteByte는 잘 작동하는데요 ReadByte가 디버깅을 해보면 ReadFile에서 스레드가 멈춰버립니다. 아마 아두이노로부터 날아올 데이터를 버퍼에서 꺼내오길 기다리느라 그런것같은데요. 아두이노 스케치의 시리얼모니터를 켰다끄고 실행해보면 pc로도 전송이 잘 되고 아두이노 스케치를 끄기만 해도 다시 작동이 안됩니다 오래 붙들고 고민해봤는데 답이 안보여서 혹시 pc에서 읽어들이는 쪽 코드도 확인 좀 해주실수 있으신가요??