[아두이노] 조도센서 제어
[아두이노] 조도센서 제어
- 온라인 가상시뮬레이터 : https://www.tinkercad.com
오늘은 간단히 조도센서를 제어하는 실험을 해보겠습니다. 조도 센서는 빛의 밝기에 따라서 전류값이 달라지는데 이 전류값을 아날로그핀에서 입력으로 받아서 빛에 의해서 어떤 행동을 하기 위한 곳에서 사용할 수 있는 재밌는 센서입니다. 쉽게 생각하시면 가로등을 예로 들 수 있겠죠. 밤이되면 조도센서를 이용해서 가로등을 자동으로 켜지게 할 수 있겠죠.
1. 회로도 구성
- 준비물 : green led 1개, 조도센서 1개, 저항(220옴) 1개, 저항(10k옴) 1개, 아두이노우노, 뻥판
- 내용 : 특정 조도센서값을 기준으로 green led에 불이 들어오게 한다.
A모델(-)방향 입력값 | B모델(+) 방향 입력값 |
---|---|
2. 코딩
- 사용함수 : Serial.begin( ), Serial.print( ), Serial.println( ), map( ), analogRead( ), pinMode( ), digitalWrite( )
- 내용 : A모델을 기반으로 조도값이 100이하면 불이 들어오게 코딩을 해보자
- 시리얼모니터 출력 :
Serial.begin(9600)으로 시리얼통신을 사용하겠다고 선언
Serial.print(출력값)은 출력값을 아두이노 IDE 시리얼모니터에 값을 출력하고 새로운 라인으로 안넘어감
Serial.println(출력값)은 출력값을 출력하고 새로운 라인으로 넘어감
자세히 알고싶다면 => 출처 : https://www.arduino.cc/en/Serial/Println
green led 제어 :
pinMode(핀, 모드)으로 전류를 출력할 핀 13번을 출력모드(OUTPUT) 사용하겠다고 선언
digitalWrite(핀, 상태)은 13번핀을 HIGH(5V) or LOW(0V)로 전류를 출력할지 말지를 결정조도센서 입력 :
map(입력값,입력최소값,입력최대값,변환최소값,변환최대값)으로 입력(0~1023)값을 자동으로 매핑시켜 (0~255)으로 변환시킨다. 즉, 알아서 크기에 맞게 값을 잡아준다고 생각하시면 됨.
analogRead(아날로그입력핀) 전류의 값을 읽어옴
설계
- 조도센서를 읽어옴
int m_cds = map(analogRead(cdspin),0,1023,0,255); - 조도센서의 값이 100이하면 led가 켜지게 한다.
if(m_cds){
digitalWrite(greenpin, HIGH);
}
else {
digitalWrite(greenpin, LOW);
}
A모델 코딩을 실제 하면은
int greenpin = 13; int cdspin = A0; void setup() { Serial.begin(9600); pinMode(greenpin, OUTPUT); } void loop() { int m_cds = map(analogRead(cdspin),0,1023,0,255); Serial.print("CDS = "); Serial.println(m_cds); if(m_cds<100) { digitalWrite(greenpin, HIGH); } else { digitalWrite(greenpin, LOW); } }
0~1023으로 잡고 시작하고 싶다면 map()함수는 필요 없겠죠. 입력값을 자신이 원하는 값(0~255)의 범위로 추가로 만들어 보았어요.
그냥 아날로핀값을 읽어서 그 값을 if문으로 해서 led에 불이 들어오게 할지 말지만 정하면 되니깐 위 코딩에서 절반이상 코딩량을 줄어 듭니다. 정확히 실험을 하기 위해서 그 값을 시리얼모니터에 줄력하기 위해 코딩이 늘어나고 또 입력된 값을 특정값의 범위로 맞추고 싶을때 map()함수가 추가되었을뿐 제어는 간단합니다.
if(analogRead(cdspin) < 300) digitalWrite(greenpin, HIGH); else digitalWrite(greenpin, LOW);
딱 두문장으로 끝낼 수 있죠. 원리는 이 두문장이고 약간 조미료를 추가한것이 A모델 코딩입니다. 원리만 이해하셔도 돼요.
결과
마무리
오늘은 간단한 실험을 해 보았습니다. 조도센서는 빛에 따라서 값의 변화가 일어납니다. 실제로 전류의 변화가 일어납니다. 이 전류값은 아날로핀으로 0~1023사이의 값으로 읽어오게 됩니다. 이 값을 기반으로 아두이노에서 제어를 하게 됩니다. 쉽게 떠오르는 것은 가로등이 있겠죠.
여러분들은 조도센서로 뭘 하고 싶으신가요. 예술가를 예를 들어볼께요. 어떤 작품을 만들었는데 그 작품에 빛에 반응한다고 생각해보세요. 그리고 RGB led를 작품에 부착한다면 조도센서값들에 따라서 작품은 다체로운 색상들을 만들어 낼 수 있다면 관람객과 소통하는 작품을 구현할 수 있겠죠.
또는 조도센서를 언제쯤 어두워지고 언제쯤 밝아지는지 데이터를 매일 수집하면 빅데이터로 활용도 가능해지겠죠.
한번 조도센서를 사용한다면 어디에다 사용할지 상상의 나래를 펼처보세요.
'IOT > 아두이노' 카테고리의 다른 글
[아두이노] 쉬프트레지스터(74HC595) 제어 (0) | 2019.02.13 |
---|---|
[아두이노] 7 Segment LED 제어 (0) | 2019.02.12 |
[아두이노] 거리측정센서로 3D 랜더링을 할 수 있을까? (0) | 2019.02.10 |
[아두이노] 초음파줄자 응용 (0) | 2019.02.09 |
[아두이노] 거리경보장치 응용 (1) | 2019.02.07 |