풍속계
전형적인 풍속계는 3개의 날개를 가지며, 끝에서 바람을 받아 날개가 회전한다.
날개가 회전하는 속도로 풍속을 계산하게 된다.
여기서 확인해볼 풍속계는 SKU:SENO186 모델이다.
제품은 풍속, 풍향, 우량계 세트 품이지만 여기서는 풍속계만 확인 하도록 하겠다.
풍속계를 분해하면 날개 가운데 자석이 부착되어 있는 것으 보일것이다.'
이 자석과 하단 몸통에 장착되어 있는 리드 스위치 두가지 부품으로 풍속을 계산하게 된다.
위에 그림이 리드 스위치를 보여준다.
리드 스위치는 자석의 영향을 받아 서로 접촉하는 두 개의 금속 점점으로 회로를 구성하게 된다.
풍속계가 회전하면 자석이 리드 스위치를 통과하여 일시적으로 폐회로를 형성한다.
이에 리드 스위치의 신호 개수를 사용하여 풍속계가 얼마나 회전하는지 계산할 수 있다.
(리드 스위치 : https://makerjeju.tistory.com/19?category=802329 참조)
풍속계가 한바퀴를 회전할 때 리드 스위치는 2번의 폐회로를 형성하게 된다.
일정 시간의 회전 수를 감지 하면 풍속계의 회전 속도를 계산 할수 있게 되는 것이다.
풍속 계산
풍속계는 한 스핀마다 두 개의 신호를 생성하므로 감지 된 입력 수를 반으로 줄여서 센서의 전체 회전 수를 계산 할 수 있다.
속도 = 거리 / 시간 |
속도를 계산하려면 특정 시간 내에 이동 한 거리를 알아야 한다.
측정 시간은 고정된 시간 동안 신호의 수를 계산하면 알 수 있다.
날개 중 하나에 의해 이동 된 거리는 회전 수에 원의 가장자리 주의위 거리(원주)를 곱한 것과 같다.
속도 = (회전수 x 둘레의 길이) / 시간 |
원의 반지름이나 지름을 알면 원의길이를 계산할 수 있다.
원주는 L = π x 2r = 2πr |
중앙에서 날개 끝가지의 길이를 측정하여 풍력계로 만든 원의 반지름을 알수 있다.
반지름을 알면 원주를 계산할 수 있다.
전체 회전이 2번의 신호를 생성하므로 탐지 된 신호의 수를 반으로 줄여야 한다.
속도 = ((신호 / 2) * ( 2 * PI * Radius)) / 시간 |
여기에 사용된 풍속계의 반경은 9.0cm이다.
풍속계의 크기가 다른경우에는 다른 반지름의 값을 입력하여야 한다.
파이썬 풍속 계산 예제
|
속도를 km/h 로 변환하려면
- 속도 = 속도 / 100,000( km/s )
- 속도 = 속도 * 3600 ( km/h )
보통 풍력계에는 센서의 정확성을 테스트하는 데 도움이 되는 보정 자료가 포함되어 있다.
여기에 사용된 풍속계의 데이터시트에 의하면 초당 1회전은 2.4km/h와 같아야 한다.
예를 들어 5초 간격으로 5개의 스핀(10개의 신호)이 동일한 2.4km/h 풍속과 동일해야 한다.
데이터 시트 : 80422_datasheet.pdf |
그러나 실행을 하면 DataSheet의 값과 일치 하지 않을 수 있다.
이 정확성의 손실은 풍속게 인자(anemometer factor)라고 한다.
이것은 날개가 돌아가면서 바람에너지 일부가 손실 된 결과이다.
이를 보안하기 위해 프로그램에서 생성한 판독 값에 조정 인자를 곱한다.
권장되는 풍력계의 경우 조정인자의 값은 "1.18" 이다.
이 조정인자의 값을 속도에 곱하여 주면 된다.
Raspberry Pi Sample code
풍력계는 2개의 연결선을 가지고 있다.
하나는 GND로 연결하고 다른 하나는 라즈베리파이의 GPIO 5에 연결한다.
RJ11 커넥터를 사용하는 경우 풍속계는 케이블의 가운데 두 선을 사용한다.
from gpiozero import DigitalInputDevice from time import sleep import math count = 0 radius_cm = 9.0 # Radius of the anemometer interval = 5 # How often to report speed ADJUSTMENT = 1.18 # Adjustment for weight of cups CM_IN_A_KM = 100000.0 SECS_IN_AN_HOUR = 3600 def calculate_speed(time_sec): global count circumference_cm = (2 * math.pi) * radius_cm rotations = count / 2.0 dist_km = (circumference_cm * rotations) / CM_IN_A_KM km_per_sec = dist_km / time_sec km_per_hour = km_per_sec * SECS_IN_AN_HOUR return km_per_hour * ADJUSTMENT def spin(): global count count = count + 1 print (count) wind_speed_sensor = DigitalInputDevice(5) wind_speed_sensor.when_activated = spin while True: count = 0 sleep(interval) print ( calculate_speed(interval), "kph") |
참고
- https://github.com/raspberrypilearning/sensing-the-weather/blob/master/lesson-2/lesson.md
- https://projects.raspberrypi.org/en/projects/build-your-own-weather-station/6
- https://projects.raspberrypi.org/en/projects/build-your-own-weather-station/7
'센서 강좌' 카테고리의 다른 글
BME280 온도/습도/기압/고도 (0) | 2019.03.20 |
---|---|
Wind Direction(weather station) (0) | 2019.03.19 |
Rainfall(Weather Station) (0) | 2019.03.19 |
Reed Switch (0) | 2019.03.19 |