중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

바그래프LED x 가변저항

2014-08-14 10:52:57

개요 & 부품목록

출처 : 바그래프 LED - adafruit

 


바그래프 (Bar Graph)LED 의 구조는 간단합니다
여러 실습에서 사용했던 LED 1개를 10개 혹은 20개 씩 연결하고 하나의 바 형태나 링 형태로 생산한 것입니다.

 

 

 


출처 : 볼륨 스위치 - hongkiat

링 형태의 바그래프를 볼륨스위치와 함께 사용하여 현재 볼륨의 크기를 표시하거나,


출처 :  arduino LED specturm - nextgamer.es

소리센서를 연동하여 음향 기기의 음역대별 음량을 표시 하는데에 사용할수도 있습니다.

 

 


그럼 실제 바그래프와 가변저항을 이용하여, 현재 센서값에 비례하여 LED 여러개를 켜고 끄는 실습을 해보겠습니다.


 

미리보기 동영상

 

부품목록

NO 부품명 수량 상세설명
1 오렌지 보드 1 아두이노 호환보드
2 브레드보드 1 브레드보드
3 220Ω 저항 10 저항
4 점퍼 케이블 16 점퍼 케이블
5 바그래프LED 1 LED
6 가변저항 1 10㏀
 
부품명 오렌지 보드  브레드보드 점퍼케이블 가변저항 220Ω 저항
파트 x1 x1 x16  x1 x10
부품명 바그래프
파트 x1

 

하드웨어 Making

회로도

브레드보드 레이아웃


*보다 정확한 표기를 위하여 LED 이미지를 사용하였습니다.

바그래프의 정확한 양극, 음극 구분 방법은 해당 제조사의 데이터시트(Datasheet)를 참고해주세요.



바그래프 바닥면에 쓰여있는 제품명 뒤집었을때 기준으로 위쪽 핀을 + , 아래쪽 핀을 - 에 연결해주시면 됩니다. 


측면 코드가 쓰여있는 쪽이 +, 반대쪽이 - 입니다.

소프트웨어 Coding

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

/*
 출처: www.arduino.cc
 한글주석: www.kocoafab.cc

  LED bar graph
 
 
  created 4 Sep 2010
 by Tom Igoe 

 This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/BarGraph
 */



const int analogPin = A0;   // 가변저항을 아나로그 0번핀에 연결합니다.
const int ledCount = 10;    // 바 그래프에 내장된 LED의 갯수를 값을 지정해줍니다.

int ledPins[] = { 
  2, 3, 4, 5, 6, 7,8,9,10,11 };   // LED 여러개를 ledPins[]이라는 그룹으로 묶어줍니다.


void setup() {
  
  for (int thisLed = 0; thisLed < ledCount; thisLed++) { //배열된 LED핀을 출력으로 설정합니다.
    pinMode(ledPins[thisLed], OUTPUT); 
  }
    Serial.begin(9600);
}

void loop() {
  // 가변저항의 센서값을 읽습니다.
  int sensorReading = analogRead(analogPin);
  // 센서값을 LED갯수로 맵핑합니다.
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);

  // 배열된 LED에 아래의 조건을 반복합니다.
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // 배열된 LED가 ledLevel보다 작다면,
    // 할당된 값의 LED를 켭니다.
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    } 
    // 그렇지 않으면 LED를 끕니다.
else {
      digitalWrite(ledPins[thisLed], LOW); 
     
    }
  }
    int sensorValue = analogRead(A0);
  // 센서값을 읽고 시리얼 모니터상에 출력합니다.
  Serial.println(sensorValue);
  delay(1); 
}


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


1.스케치 설명

 

 

const int analogPin = A0;   // 가변저항을 아나로그 0번핀에 연결합니다.
const int ledCount = 10;    // 바 그래프에 내장된 LED의 갯수를 값을 지정해줍니다.

int ledPins[] = { 
  2, 3, 4, 5, 6, 7,8,9,10,11 };   // LED 여러개를 ledPins[]이라는 그룹으로 묶어줍니다.
 


ledCount 를 선언하여 LED의 갯수를 지정해주고,
배열을 통해 10개의 LED의 핀번호를 설정하였습니다.

 

 

 

 

void setup() {
  
  for (int thisLed = 0; thisLed < ledCount; thisLed++) { //배열된 LED핀을 출력으로 설정합니다.
    pinMode(ledPins[thisLed], OUTPUT); 
  }
    Serial.begin(9600);
}


for구문을 이용하여 thisLed이 ledcount보다 작으면 증가 시키고
이를 출력으로 설정합니다.
가변저항의 센서값을 모니터 하기 위해 시리얼 통신을 준비합니다.

 

 

 

 

void loop() {
  // 가변저항의 센서값을 읽습니다.
  int sensorReading = analogRead(analogPin);
  // 센서값을 LED갯수로 맵핑합니다.
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
 


가변저항의 센서값을 읽고 그 값을
LED의 갯수로 다시 설정하여
센서값에 따라 LEDcount가 영향을 받습니다.

 

 

 

 

 // 배열된 LED에 아래의 조건을 반복합니다.
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // 배열된 LED가 ledLevel보다 작다면,
    // 할당된 값의 LED를 켭니다.
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    } 
    // 그렇지 않으면 LED를 끕니다.
else {
      digitalWrite(ledPins[thisLed], LOW); 
     
    }
  }
    int sensorValue = analogRead(A0);
  // 센서값을 읽고 시리얼 모니터상에 출력합니다.
  Serial.println(sensorValue);
  delay(1); 
}


for구문을 이용하여 thisLed가 ledcount보다 작으면 thisLed증가 시키고, 
만약 thisLed가 ledLevel(센서값)보다 작으면 해당 값만큼 LED를 켜고 
그렇지 않으면 끕니다.

읽어 온 센서값을 시리얼 모니터 상에 출력하고
출력 대기 시간은 1밀리초 동안 대기합니다.

 

 

 

 

kocoafabeditor

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

바그래프LED, 아두이노, 오렌지보드

밍죠 2014-08-21 11:44:16

생각보다 쉽네요 감사합니다!