본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 10Segment 를 사용해서 심플 라이트 메터 만들어 보기

by 오마이엔지니어 2021. 12. 17.
반응형

Arduino Uno 로 10Segment 를 사용하는 방법을 알아보고 CDS 조도센서를 사용해서
심플 라이트 메터 Simple Light Meter 를 만들어 보는 프로젝트 입니다

<10Segment 모듈 이미지>

10세그먼트 모듈은 10개의 LED를 하나의 하우징으로 구성해서 사용할수 있게끔 만든 모듈입니다
(적색, 파란색, 녹색, 노란색, 여러색상이 섞인 제품 등 다양한 모듈이 판매되고 있습니다)

10개의 LED를 바 그래프 처럼 활용해서 프로토타이핑 프로젝트등 여러가지로 활용이 가능합니다

BL-AR10Z2510

사용된 부품

Arduino Uno R3 (Italy)
10세그먼트 LED 바 그래프 - 적색
CDS 조도센서
막대저항 220 Ohm - 10개

막대저항 10K Ohm - 1개
포텐셔미터(전위차계) 10K Ohm - 1개
미니브래드보드

점퍼케이블(숫놈-숫놈)

 

사용된 키트
아두이노 라이트 메터 키트

구성 배선도 - 10세그먼트 차례로 점등시켜 보기 & 점등속도 조정해 보기

구성 배선도 - 포텐셔미터를 이용해서 10세그먼트 차례로 점등시켜 보기

구성 배선도 - CDS 조도센서를 사용해서 간단한 Light Meter 만들어 보기

사용된 예제소스

10세그먼트 10segment 테스트.txt
0.00MB
10세그먼트 10segment 테스트_활용.txt
0.00MB
10세그먼트 10segment 포텐셔미터.txt
0.00MB
10세그먼트 10segment 조도센서.txt
0.00MB

 

테스트 방법
별도의 라이브러리를 사용하지 않으므로 테스트 방법은 간단합니다

위 첨부된 예제 소스를 다운로드 해서 업로드 해주고 테스트 하면 됩니다

먼저 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 조도센서 뿐만아니라
다른 아날로그 센서를 연결해서 프로젝트에 적용할 수도 있습니다

반응형

댓글