초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

가변저항-다수의 LED 밝기 조절하기

2014-08-11 15:21:45

개요

본 예제를 실습하기 전에 가변저항을 이용한 LED 켜고 끄기를 학습 해 보시길 권장 합니다.



각종 음향 기기나 MIDI 컨트롤러를 보면 각종 기능을 수행하는 버튼과 볼륨스위치 그리고 화려한 LED를 볼수 있습니다.
 


그 속을 들여다보면 대부분 작은 LED 바 그래프와 볼륨스위치 (가변저항) 로 구성이 되어 있는걸 볼수 있습니다.


본 예제를 통하여 아두이노로 볼륨 스위치와 그값에 따라 변화하는 LED의 기본 원리를 구현 해보고 
나아가 자신만의 컨트롤러나 악기를 만들어 장식해 보세요.




 

미리보기 동영상


 

 

 

부품목록

본 예제에서는 총 6가지의 부품이 필요합니다.

 

 

NO 부품명 수량 상세설명
1 아두이노  1 아두이노
2 LED 5 LED
3 브레드보드 1 브레드보드
4 점퍼 케이블 15 점퍼 케이블
5 가변저항 1 가변저항
6 220Ω 저항 5 저항

 

부품명 아두이노  브레드보드 점퍼케이블 가변저항 220Ω 저항 LED
파트 x1 x1 x15  x1 x5 x5

 

 

 

하드웨어 Making

 

회로도 

브레드보드 레이아웃
 

 

소프트웨어 Coding

아래의 코드를 아두이노에 업로드 합니다.
 

/* 출처 : 아두이노 상상을 스케치하다*/
int LED_pins[] = {8,9,10,11,12};//array를 통해 8,9,10,11,12 번의 핀번호를 순차적으로 배열합니다.
int currentVoltage = 0;//현재 전압의 상태를 확인합니다.
int previousVoltage = 0;//이전 전압의 상태를 확입합니다.
void setup()
{
  for(int i = 0; i < sizeof(LED_pins) / sizeof(int); i++){
    pinMode(LED_pins[i],OUTPUT);
  }
  Serial.begin(9600);
}
void loop()
{
  int analogIn = analogRead(A0);
  currentVoltage = map(analogIn , 0, 1023, 0, 5);
  if(currentVoltage != previousVoltage){
    previousVoltage = currentVoltage;
    for(int i =0; i < currentVoltage; i++){
      digitalWrite(LED_pins[i],HIGH);
    }
    for(int i = currentVoltage; i < 5; i++){
      digitalWrite(LED_pins[i],LOW);
    }
  }
}

 

소프트웨어 & 하드웨어 설명

int LED_pins[] = {8,9,10,11,12};//array를 통해 8,9,10,11,12 번의 핀번호를 순차적으로 배열합니다.

 


array는 동일한 타입의 자료구조를 여러번 선언할때 사용되며 여러개 선언해야할 변수들을 한줄로 끝낼 수도 있으며 숙달되면 2차원 3차원배열까지도 생성이 가능합니다.

만약 array를 사용하지 않는다면 아래와 같이 코드가 길어집니다.

 

 

int LED_pins0 = 8;//LED 0 번을 8번핀에 연결
int LED_pins1 = 9;//LED 1 번을 9번핀에 연결
int LED_pins2 = 10;//LED 2 번을 10번핀에 연결
int LED_pins3 = 11;//LED 3 번을 11번핀에 연결
int LED_pins4 = 12;//LED 4 번을 12번핀에 연결

 

 

 

 


보시는것 처럼 5줄의 코드와 기능은 같지만 훨씬 간결하게 코드를 작성할수 있습니다.

 

 

 

 

 

 

 

 

void setup()
{
  for(int i = 0; i < sizeof(LED_pins) / sizeof(int); i++){
    pinMode(LED_pins[i],OUTPUT);

 

 

 


for 문을 활용하여 i = 0 이라는 초기화식을 선언하고, sizeof를 통해 앞서 언급한 LED_pins의 배열을 불러와 OUTPUT(출력)으로 설정하였습니다.

 

 

 

 

 

 

 

int analogIn = analogRead(A0);
  currentVoltage = map(analogIn , 0, 1023, 0, 5);

 

 


아날로그 0번핀에 연결된 가변 저항의 값을 읽고, 다시 현재 전압으로 map()함수를 이용하여 변환 하였습니다. (전압은 0V - 5V을 지닙니다.)

 

 

 

 

 

 

if(currentVoltage != previousVoltage){
    previousVoltage = currentVoltage;

 


만약에 현재 전압 currentVoltage 가 != 즉 , 이전 전압 previousVoltage 와 같지 않을때,
이전 전압을 갱신 합니다.
(!=연산자는 '같지 않다'라는 뜻으로 사용됩니다.)

 

 

 

 

 

  for(int i =0; i < currentVoltage; i++){
      digitalWrite(LED_pins[i],HIGH);
    }
    for(int i = currentVoltage; i < 5; i++){
      digitalWrite(LED_pins[i],LOW);
    }
  }
}


다시 for 구문을 사용하여 현재 전압에 비례하여 배열된 LED pin을 켜고  나머지의 경우 LED pin을 끕니다.

 

 

 

 

 

 

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

가변저항, LED, 아두이노