Arduino Uno 로 10Segment 를 사용해서 심플 라이트 메터 만들어 보기
Arduino Uno 로 10Segment 를 사용하는 방법을 알아보고 CDS 조도센서를 사용해서
심플 라이트 메터 Simple Light Meter 를 만들어 보는 프로젝트 입니다
<10Segment 모듈 이미지>
10세그먼트 모듈은 10개의 LED를 하나의 하우징으로 구성해서 사용할수 있게끔 만든 모듈입니다
(적색, 파란색, 녹색, 노란색, 여러색상이 섞인 제품 등 다양한 모듈이 판매되고 있습니다)
10개의 LED를 바 그래프 처럼 활용해서 프로토타이핑 프로젝트등 여러가지로 활용이 가능합니다
사용된 부품
Arduino Uno R3 (Italy)
10세그먼트 LED 바 그래프 - 적색
CDS 조도센서
막대저항 220 Ohm - 10개
막대저항 10K Ohm - 1개
포텐셔미터(전위차계) 10K Ohm - 1개
미니브래드보드
점퍼케이블(숫놈-숫놈)
사용된 키트
아두이노 라이트 메터 키트
구성 배선도 - 10세그먼트 차례로 점등시켜 보기 & 점등속도 조정해 보기
구성 배선도 - 포텐셔미터를 이용해서 10세그먼트 차례로 점등시켜 보기
구성 배선도 - CDS 조도센서를 사용해서 간단한 Light Meter 만들어 보기
사용된 예제소스
테스트 방법
별도의 라이브러리를 사용하지 않으므로 테스트 방법은 간단합니다
위 첨부된 예제 소스를 다운로드 해서 업로드 해주고 테스트 하면 됩니다
먼저 10세그먼트 10segment 테스트 예제를 살펴보면
void setup() { // 초기화
for(int i = 2; i<12; i++) // 디지털2번핀부터 11번핀까지 출력설정
{
pinMode(i, OUTPUT);
}
2~11번 핀을 사용하는것을 확인할 수 있습니다
셋업에서 2~11번핀 출력세팅후 LOW에서 0.3초 간격으로 HIGH 로
2~11번 핀의 LED를 차례대로 점등시키는것을 루프에서 반복합니다
void loop() { // 무한루프
for(i = 2; i<12; i++) // 디지털2번~디지털11번핀까지 0.3초간격으로 ON
{
digitalWrite(i, HIGH);
delay(300);
}
아주 간단하며 위 첨부된 10세그먼트 10segment 테스트_활용 예제 는 ON/OFF 되는 시간과
딜레이 타임을 수정해서 조금더 빠르게 LED가 점등될수 있도록 수정하였습니다 (하단 동영상 참조)
10세그먼트 10segment 포텐셔미터 예제를 살펴보면
//declares all the pin connections to the arduino board
const int LED1= 11;
const int LED2= 10;
const int LED3= 9;
const int LED4= 8;
const int LED5= 7;
const int LED6= 6;
const int LED7= 5;
const int LED8= 4;
const int LED9= 3;
const int LED10= 2;
const int potentiometer= A0;
int value=0;
역시 2~11번 핀의 LED를 A0번 핀에 연결된 포텐셔미터의 아날로그 출력값의 변화에 따라서
제어할수 있도록 되어있습니다
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode (LED5, OUTPUT);
pinMode (LED6, OUTPUT);
pinMode (LED7, OUTPUT);
pinMode (LED8, OUTPUT);
pinMode (LED9, OUTPUT);
pinMode (LED10, OUTPUT);
pinMode (potentiometer, INPUT);
Serial.begin(9600);
}
셋업에서 포텐셔미터의 아날로그 입력에 따라서 10개의 LED가 출력 되도록 설정합니다
void loop()
{
value= analogRead(potentiometer);
Serial.println(value);
//all LEDs are off
if (value == 0)
{
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
digitalWrite (LED3, LOW);
digitalWrite (LED4, LOW);
digitalWrite (LED5, LOW);
digitalWrite (LED6, LOW);
digitalWrite (LED7, LOW);
digitalWrite (LED8, LOW);
digitalWrite (LED9, LOW);
digitalWrite (LED10, LOW);
}
루프에서는 if문을 사용해서 아날로그 value 값에 따라서 10개의 LED가 처음엔 LOW 였다가
일정수치 이상이 되면 HIGH가 될수 있도록 세팅하고 이를 반복합니다
//lights up 1 LED
if ((value >0) && (value < 103))
/lights up 2 LEDs
if ((value >= 103) && (value < 205))
//lights up 3 LEDs
if ((value >= 206) && (value < 308))
.
.
.
//lights up 10 LEDs
if ((value >= 922) && (value < 1023))
포텐셔미터 아날로그 출력값에 맞춰야 하므로 Value는 0~1023범위 이어야 합니다
*구성배선도의 포텐셔미터의 VCC쪽과 GND쪽을 반대로 배선하면 LED를 역순으로 제어할 수 있습니다*
마지막으로 10세그먼트 10segment 조도센서 예제를 살펴보면
void setup ()
{
for (int i = 2; i <=11; i ++)
{
pinMode (i, OUTPUT);
}
}
셋업에서 역시 2~11번까지의 LED핀 출력할 수 있도록 세팅합니다
void loop ()
{
int ldrvalue = analogRead (A0);
int k = map (ldrvalue, 0, 1000, 2, 11);
for (int j = 3; j <14; j ++)
{
if (j <= k)
digitalWrite (j, HIGH);
else
digitalWrite (j, LOW);
}
}
루프에서 역시 아날로그 value K 값의 범위를 설정해서 if문을 사용해서 HIGH/LOW로 LED를 제어합니다
CDS 조도센서의 사양에 따라서 출력값이 약간씩 틀릴수 있으므로
배선과 예제코드 업로드 후 실내가 밝음에도 불구하고 점등되지 않은 LED가 있는경우
(ldrvalue, 0, 1000, 2, 11); 를 (ldrvalue, 0, 800, 2, 11); 으로 수정해 주고 재업로드 후 테스트해 봅니다
프로젝트 동영상 - 10세그먼트 차례로 점등시켜 보기
프로젝트 동영상 - 10세그먼트 차례로 점등시켜 보기 - 점등속도 조정해 보기
프로젝트 동영상 - 전위차계를 이용해서 10세그먼트 차례로 점등시켜 보기
프로젝트 동영상 - CDS 조도센서를 사용해서 간단한 Light Meter 만들어 보기
이렇게 다양한 방법으로 10세그먼트 모듈을 제어할수 있으며 CDS 조도센서 뿐만아니라
다른 아날로그 센서를 연결해서 프로젝트에 적용할 수도 있습니다