코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2017-04-20 10:05:13
안녕하십니까? 여러분.
코코아팹입니다. 다가온 봄 즐겁게 보내고 계신가요?
나들이가 많아진 요즘 자외선도 신경써야겠죠?
그래서 이번 포스팅에서는 Df Robot사에서 개발된 UV 센서에 대해서 알아보도록 하겠습니다.
자외선[ UV, ultraviolet rays , 紫外線 ] |
태양광의 스펙트럼을 사진으로 찍었을 때, 가시 광선보다 짧은 파장으로 눈에 보이지 않는 빛이다.
사람의 피부를 태우거나 살균작용을 하며, 과도하게 노출될 경우 피부암에 걸릴 수 있다.
자외선의 종류 |
태양은 광범위한 파장을 가진 빛 에너지를 방출한다. 가시광선의 파란색이나 보라색 광선보다 더 짧은 파장을 가진 자외선 복사는 살갗을 태우고 건강에 해로운 영향을 준다. 성층권에 존재하는 오존층은 대부분의 해로운 자외선이 지구상의 생명체에 도달하는 것을 막아준다. 그러나 성층권의 오존층이 얇아지면 지표에 도달하는 자외선 복사량이 증가한다.
과학자들은 UV-C, UV-B, UV-A 세 가지 종류로 UV 복사를 분류한다. 성층권 오존층은 이러한 종류의 UV를 모두 흡수하는 것이 아니라 일부분을 흡수한다.
<출처 : 네이버 지식 백과>
- UV_A :
오존층에 흡수되지 않는다. 파장영역이 0.32~0.40㎛에 해당하는 자외선 UV-A 는 UV-B에 비하여 에너지량이 적지만 피부를 그을릴 수 있다. 피부를 태우는 주역은 UV-B이지만 UV-A는 피부를 벌겋게 만들 뿐 아니라 피부 면역 체계에 작용하여 피부 노화에 따른 장기적 피부 손상을 일으킬 수 있다.
- UV_B :
대부분은 오존층에 흡수되지만, 일부는 지표면에 도달한다. 지구에 극소량이 도달하는 UV-B는 파장영역이 0.28~0.32㎛에 해당하는 자외선이다. UV-B는 동물체의 피부를 태우고 피부 조직을 뚫고 들어가며 때로는 피부암을 일으키는데, 피부암 발생의 원인은 대부분 태양 광선의 노출 및 UV-B와 관련이 있다.
- UV_C :
오존층에 완전히 흡수된다. 파장영역이 0.20~0.29㎛인 자외선 중 UV-C는 염색체 변이를 일으키고 단세포 유기물을 죽이며, 눈의 각막을 해치는 등 생명체에 해로운 영향을 미친다.
내용 출처 : 네이버 지식 백과
<출처 : DF Robot>
ML8511는 자외선을 측정할 수 있는 UV 센서입니다.
UV 센서를 통해 실 내외의 UV 강도를 측정할 수 있습니다.
센서 내부에 증폭기(amplifier)가 내장되어 있으며, UV의 강도를 전압(voltage)으로 변환시켜 출력합니다.
Power Down 모드에서 일반적인 대기 전류는 0.1A이며, 효율적으로 배터리를 사용할 수 있습니다.
ML8511 센서를 통해 280-390nm 빛(UV_A, UV_A)을 효과적으로 감지할 수 있습니다.
- 공급 전압 : DC 5V
- 동작 온도 : -20도 ~ 70도
- 감지 UV : UV_A 및 UV_B
- 감지 파장 : 280 ~ 390 nm
- 센서 모듈 크기 : 30 x 22 mm
UV 센서 실습에 필요한 부품 목록입니다.
NO | 부품명 | 수량 | 상세 설명 |
1 | 오렌지보드 | 1 | 아두이노 UNO 호환 |
2 | UV 센서 | 1 |
케이블 & 모듈 |
3 | 점퍼케이블 | 3 | M to M |
부품명 | 오렌지보드 | UV 센서 | 점퍼 케이블 |
부품 사진 |
UV 센서와 오렌지보드의 연결 방법입니다.
IC 보드의 점퍼 케이블의 색상을 기중으로,
검은색 케이블 (GND) | 오렌지보드 GND |
빨간색 케이블 (VCC) |
오렌지보드 5V |
파란색 케이블 (Data) | 오렌지보드 A0(혹은 다른 Analog Input Pin) |
UV 센서를 통해 측정한 UV의 강도에 따라 출력 전압을 매핑해야 합니다.
UV 광은 1V에서 시작해 15mW / ㎠에서 평균 2.8V의 전압을 갖습니다.
아두이노에 내장되어 있는 map 함수는 부동 소수점(float)을 출력하지 않기 때문에 아래 함수를 사용해 mapping 합니다.
1
2
3
4
|
float mapfloat (float x, float in_min, float in_max, float out_min, float out_max)
{
return (x_in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
|
cs |
map flaot 함수를 통해 센서의 출력 전압을 mW / ㎠로 맵핑합니다.
1
|
float uvIntensity = mapfloat (출력 전압, 0.99, 2.8, 0.0, 15.0); // 전압을 UV 강도 수준으로 변환합니다.
|
cs |
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
|
int ReadUVintensityPin = A0;
void setup()
{
pinMode(ReadUVintensityPin, INPUT);
Serial.begin(9600);
Serial.println("Starting up...");
}
void loop()
{
int uvLevel = averageAnalogRead(ReadUVintensityPin);
float outputVoltage = 5.0 * uvLevel/1024; //전압을 아날로그 신호 범위로 변환
float uvIntensity = mapfloat(outputVoltage, 0.99, 2.9, 0.0, 15.0); //UV 강도로 변환
Serial.print("UVAnalogOutput: ");
Serial.print(uvLevel);
Serial.print(" OutputVoltage: ");
Serial.print(outputVoltage);
Serial.print(" UV Intensity: ");
Serial.print(uvIntensity);
Serial.print(" mW/cm^2");
Serial.println();
delay(100);
}
int averageAnalogRead(int pinToRead)
{
byte numberOfReadings = 8;
unsigned int runningValue = 0;
for(int x = 0 ; x < numberOfReadings ; x++)
runningValue += analogRead(pinToRead);
runningValue /= numberOfReadings;
return(runningValue);
}
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
|
cs |
테스트를 위해 UV LED를 사용하였습니다.
평소 평균 205의 수치가 측정되었고, UV LED를 센서 가까이에 위치시켰을 때 231까지 수치가 상승하는 것을 확인할 수 있습니다.
- Weather Station
- 자외선 측정기
등등
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!