조도레벨유지 조명자동화 (1) regre
스마트홈

조도레벨유지 조명자동화 (1)

조명자동화중 동적제어의 일정한 조도 레벨 유지를 위한 자동화를 실험해 보려고 했는데 역시 간단하지는 않은 것 같습니다. 단순하게 주 조명의 1% 당 조도 변화율을 찾고 현재 조도 레벨과 목표 조도 레벨의 차이만큼 주 조명의 레벨을 계속 조절해서 목표 조도 레벨에 도달하는 시행착오 법을 적용하기로 했습니다.

​그러나 곰곰히 생각해 보니 조도 변화율이 일정하지 않은 문제가 있었습니다. 외부적인 요인이나 색온도에 따라서도 단위당 조도 변화율은 조금씩 달라질 텐데 또 기본적으로 현재 사용하는 LED 드라이버의 디밍 곡선이 선형적이지 않습니다.

Logarithmic 디밍 곡선을 사용하는 드라이버여서 기울기 값이 다르니 조도 변화율이 레벨 구간마다 다릅니다. 개발에 능숙한 분이시라면 구간마다의 기울기 값을 적용해서 뭔가 방법이 있을 텐데 말이죠…

어쨌든 시행착오 법이니 어떻게든 되겠지 하고 어느 정도 평균적인 변화율을 찾다 보니 1% 당 3lx 정도 변하는 것을 가정하고 허용오차를 6lx 정도로 설정해서 조명자동화 퀵앱을 하나 만들어 진행했습니다.

로직은 단순하게..

1. 현재 조명의 디밍 레벨, 현재 조도 레벨, 목표 조도 레벨 등을 변수로 지정
2. 현재 조도 레벨과 목표 조도 레벨의 차이가 6 이상이면
3. 차이를 조도 변화 값만큼 나누어 조명의 디밍 레벨에 더하거나 뺀다
4. 위 프로세스를 5초마다 한 번씩 조건 검사 후 실행

조도레벨유지 조명자동화 (1)

퀵앱을 만들어 if 문을 이용해서 위와 같은 로직을 만들고 퀵앱변수로 목표 조도 레벨을 170으로 설정 후에 아래와같이 조명자동화를 실행해 봤습니다.

인위적인 조도 레벨 변화를 위해서 같은 공간에 있는 다른 조명 2개를 키고 끄는 방식으로 공간에 조도 변화를 주니 주방라이트가 1~3번 사이클 동안 설정한 목표 레벨 값에 허용오차까지 적용한 164~176까지 사이에서 유지될 수 있도록 조절이 가능했습니다.

뭔가 몇 가지 문제점을 해결하면 충분히 적용할 수 있을만한 자동화가 될 수 있을 것 같은데 말이죠… 요즘 이것저것 해보느라 시간이 참 빨리 가는 것 같습니다.


추가 업데이트..

실제 조도 변화 값을 찾는 것은 아마 구하기도 힘들 거라 생각합니다. 단순히 조명 레벨 만이라면 1~100%까지 레벨을 변화시켜가며 조도 변화를 측정하면 되는데 일단 이것 또한 막노동이며, 실제로는 다른 변수도 있을 거고 특히나 색온도까지 변화되는 조명이라면 일반적인 2700K~6500k 구간의 모든 1~100%까지 조도 변화 데이터를 뽑는 건 당연히 무리(?)라고 생각합니다.

그래서 색 온도차에 의한 차이는 그리 크지 않다고 가정으로(실제로 엄청 크진 않았습니다) 중간색 온도에서 1~100% 실제 조도 변화 값을 뽑아보면 좋은데 당연히 저는 계측기도 없고 피바로 모션센서가 소수점까지 조도 표현을 해주는 것도 아니기에 5% 단위로 변한 조도 값을 5로 나누어 평균값을 해당 레벨의 조도 변화 값으로 데이터를 모으고 엑셀로 선형회귀분석 차트를 만들어서 조명자동화에 사용할 수식을 뽑아냈습니다.

조도레벨유지 조명자동화 (1) regre

이렇게 데이터를 분산형 차트로 만들어서 추세선 넣고 그래프 수식을 표현하면 신뢰도가 96이라니.. 보기 힘든 데이터인데요.. 아무튼 y=0.0476x+0.1497이라는 식을 뽑아줍니다 x가 조명 레벨이 될 거고 y는 그 조명 레벨에서 1% 변할 때의 조도 변화 값이라고 보면 될 것 같습니다.

다시 로직은 같습니다. 다만 1~100%까지 대응되는 조도 변화 값을 for 문으로 위 식을 대입하여 루아테이블로 만들어 놓고 현재 조명 레벨에서 얼마만큼 변화시켜야 목표 조도 레벨까지 가는지 조도 차이가 없어질 때까지 조도 변화 값을 빼면서 계산을 하는 방식으로 바꿨습니다. 예를 들면..

for문으로 변화값 테이블을 만들어주고….

​현재 조명 레벨에서 조도 차가 1보다 작아질 때까지 변화 값 테이블의 데이터를 불러와서 kvalue를 찾고 최종적으로 조명을 호출합니다. 이렇게 몇 가지 선 작업을 해주고 로직을 바꿔주니 한 번에 바로 목표 조도 값까지 가는 횟수가 많아졌습니다.

8초의 인터벌로 조도 값을 검사하게끔 코드를 짜고 14번 정도 인위적으로 목표 조도 값 변수를 변화시켜가며 호출한 조명 레벨을 디버깅해봤는데요 3번 정도가 2사이클만에 목표 조도 값에 맞춰졌고 나머지는 한 번에 정확한 조명 레벨을 찾아간 것 같습니다.

조도레벨유지 조명자동화 (1) log

조도레벨을 항상 일정하게 유지하는 조명자동화는 제 수준으로는 여기까지가 최선인 것 같네요… 분명 더 좋은 방법이 있을테지만 개발쪽으론 한참 부족한 실력으로 좀 더 완벽한 조명자동화를 구현하기에는 역부족입니다. 허용오차를 10lx 정도로 늘리면 좀 더 나아질 거 같으나 지금 6lx도 나름 나쁘지 않은 것 같습니다. 더 좋은 방법이 생각이 안 나는데.. 개선이 된다면 또 업데이트하겠습니다 ㅎㅎ 이제 목표 조도 값만 변경해 주며 디밍 레벨을 컨트롤해 보겠습니다

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다