코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-08-04 10:25:01
일반적으로 노트북은 덮개를 덮어두면 대기모드 혹은 잠자기 모드에 들어가는데요
Apple의 Macbook은 내장되어 있는 전원 LED마저도 이러한 잠자기 모드를 감성적으로 디자인하였습니다.
부드럽게 켜고 꺼지는 LED를 보고 있으면, 기계에 불과한 노트북이 마치 사람처럼 조용히 잠을 자고 있는듯 합니다.
그 원리는 무엇인지 살펴보고, 이러한 LED의 움직임을 아두이노로 구현 해 보겠습니다.
먼저 LED의 밝기를 줄이려면, 두 가지 방법이 있습니다.
하나는 전류를 줄이는 방법과, 또 다른 하나는 펄스폭 변조를 통해
사람이 인지하지 못하는 속도로, 켜고 꺼짐을 반복하면 됩니다.
출처 : PWM - szauroled
일정한 시간에
켜고 꺼짐을 50:50의 비율로 반복하는것이 50%의 밝기라고 본다면,
켜고 꺼짐을 25:75의 비율로 반복하면 25%의 밝기 상태가 되는것입니다.
그럼 본격적으로 아두이노를 통해 숨쉬는 LED를 만들어 보겠습니다.
본 학습에는 총 5종류의 부품이 필요합니다.
NO |
부품명 |
수량 |
상세설명 |
1 |
아두이노 우노 |
1 |
아두이노 |
2 |
LED |
1 |
LED |
3 |
220Ω 저항 |
1 |
저항 |
4 |
브레드보드 |
1 |
브레드보드 |
5 |
점퍼 케이블 |
2 |
점퍼 케이블 |
220Ω 저항 | 브레드보드 | 아두이노 | 점퍼케이블 | LED | |
P A R T S |
X 1 |
X 1 | X 1 | X 2 | X 1 |
/*
제목 : 숨 쉬는 LED
내용 : PWM 펄스 폭 변조에 대해 알아보고, LED 밝기 제어를 통해 숨쉬는 LED를 구현 해 봅시다.
*/
// Led를 연결한 핀의 번호
int ledPin = 11;
// sinVal 선언
float sinVal;
// ledVal 선언
int ledVal;
void setup() {
// ledPin을 출력으로 설정
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int x=0; x<180; x++) {
// 각도값을 라디안 값으로 변경합니다.
// 다음의 사인값을 얻습니다.
sinVal = (sin(x*(3.1412/180)));
//사인값을 통해 ledVal을 얻습니다.
ledVal = int(sinVal*255);
// 생성된ledVal을 ledPin으로 출력합니다.
analogWrite(ledPin, ledVal);
//25ms 동안 대기합니다.
delay(25);
}
}
1.이 예제의 개념은 직접 사인파를 만드는 것입니다.
사인파의 경로를 따라 LED의 밝기를 가지는
파도를 만들고 이를 통해 빛의 맥동을 만드는 것입니다.
최대 밝기까지 페이드 한뒤 다시 아래값으로 백업합니다.
for (int x=0; x<180; x++) { // 각도값을 라디안 값으로 변경합니다. sinVal = (sin(x*(3.1412/180)));// 다음의 사인값을 얻습니다.
여기서 사용한 sin()은 수학적연산 기능으로 각도값을 라디안 값으로 변경하여
그 결과를 ledVal(LED밝기)값으로 전송함으로써 0부터 255의 밝기 값을 제어하게 됩니다.
analogWrite(ledPin, ledVal);// 생성된ledVal을 ledPin으로 출력합니다.
펄스 폭 변조(PWM) -'~'표시가 있는 핀은 PWM 비율을 변경할수 있으며 , 우노 보드의 경우 11,10,9,6,5,3 핀이 이를 지원합니다.
analogWrite에서 인자 Value에는 0부터 255값을 쓸수 있으며, 이는 0V 에서 5V 전압을 의미 합니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!