조도센서 = 빛센서=포토센서 연결 시험

by 김봉조 | 2017-02-12 16:19
라즈베리파이 라즈베리파이 gpio 빛센서 웨더스테이션 조도센서 포토센서

보통 빛의 밝기가 어느 정도인지 값을 알아볼 때 사용하는 센서가 조도센서다. 센서의 외형이미지와 Pin 의 기능을 아래 그림에 나타내었다. 

pin 1 번이 아날로그 출력, 2번이 디지털 0 이나 1 출력, 3번이 GND, 4번이 전원인 VCC 핀이다. 라즈베리 파이는 기본적으로 아날로그 신호를 받아 디지털 값으로 변환시켜 주는 ADC(Analog to Digital Converter)를 가지고 있지 않다. 그래서 여기서는 디지털 출력값을 읽어 밝거나 어두운 값 - 0,1 만을 표시하게 된다. 

빛 센서의 외형과 핀 구성을 아래 그림에 나타낸다.


여기서 우리는 조도센서의 디지털 출력을 사용하므로 디지털 출력을 아래 소스코에 나와 있듯이 wiringPi 핀번호 12번- 즉 물리적인 핀번호 19번에 연결한다.

조도센서와 라즈베리파이 GPIO 연결을 아래와 같이 한다.

조도센서 전원 VCC ----- 라즈베리 파이 물리적인 핀번호 2번 

조도센서 GND ----- 라즈베리 파이 물리적인 핀번호 6번

조도센서 디지털 출력 ---- 라즈베리파이 물리적 핀번호 19번, wiringPi GPIO 12번

연결도를 Fritzing 을 이용해서 그린 그림은 아래와 같다. 조도센서의 형태는 틀리지만 필요한 신호는 디지털 - 시스널 아웃, GND, VCC 이므로 알맞게 연결한다.



nano 편집기를 사용하여 아래 소스코드를 입력한다.

$nano lightdetect.c

소스코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>
 
 
// Use GPIO Pin 17, which is Pin 0 for wiringPi library
 
#define LIGHTSEN_OUT 12  //gpio27 - J13 connect
 
 
// -------------------------------------------------------------------------
// main
int main(void
{
    // sets up the wiringPi library
    if (wiringPiSetup () < 0
    {
        fprintf (stderr, "Unable to setup wiringPi: %s\n", strerror (errno));
        return 1;
    }
    
    pinMode(LIGHTSEN_OUT, INPUT);
 
    // set Pin 17/0 generate an interrupt on high-to-low transitions
    // and attach myInterrupt() to the interrupt
    /*if ( wiringPiISR (LIGHTSEN_OUT, INT_EDGE_RISING, &myInterrupt) < 0 ) 
    {
        fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno));
        return 1;
    }*/
 
    // display counter value every second.
    while ( 1 ) 
    {
        //printf( "%d\n", eventCounter );
        //eventCounter = 0;
        
        if(digitalRead(LIGHTSEN_OUT) == 0)
            printf("light full ! \n");
        if(digitalRead(LIGHTSEN_OUT) == 1)
            printf("dark \n");        
    
        delay( 200 ); // wait 1 second
    }
 
    return 0;
}
 
cs


컴파일을 한다.

$gcc -o lightdetect lightdetect.c -lwiringPi

실행한다.

$sudo ./lightdetect

센서를 가리면서 테스트 하면 아래와 같은 결과를 얻을 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 $ sudo ./lightdetect
light full !
light full !
light full !
light full !
light full !
light full !
light full !
light full !
dark
light full !
light full !
light full !
dark
dark
dark
dark
dark
dark
dark
 
cs


조도센서의 디지털 출력 테스트를 마무리 하였다. 갈 길이 멀어 보입니다. ㅠㅠ




댓글 0

MADE BY

김봉조

C, c sharp, C++, 납땜, 드론비행, 라즈베리파이 활용, 미디어활용, 아두이노