티스토리 뷰

이전 실험에서 주변이 어두워지면 LED 에 불이 들어오도록 해보았습니다.

https://robotamin.tistory.com/8

 

하지만 주변환경을 충분히 밝게 해도 LED에 불이 살짝 들어와 있었습니다.

그래서 주변이 충분히 밝다면, LED 불이 완전히 꺼지도록 프로그램 수정을 해보았습니다.

 

수정을 하면서 두 가지를 알게 되었습니다.

 

1. digitalWrite 함수로 High 신호를 주면, delay 값을 0으로 해도, 어쨌든 High 신호가 나간다.

2. float 나누기 계산 시 유의점

 

너무 당연한 것일 수도 있는데 제가 잘 몰랐네요.

우선 Serial 통신으로 CdS 조도센서에서 들어오는 아날로그 값이 얼마인지 읽어봤습니다.

 

A0 은 아날로그 입력에 따라 0~1023까지 값이 변하는데,

방에 형광등을 켰을 경우 380~390 정도의 값이 들어오고,

형광등을 껐을 경우 900 정도의 값이 들어오는 것을 확인했습니다.

 

if 문을 써서 이 아날로그 값이 500 이하면 아예 LED 불을 끄고,

500 이상이면 LED 불이 켜지는 시간을 조절해서 밝기 변화를 주는 것으로 프로그램을 고쳤습니다.

 

 

원래는 if 문 없이 방에 불을 켜면 LED 가 켜지는 delay 시간을 0 으로 만들어서

LED 불을 꺼보려고 했습니다.

 

하지만 일단 LED 가 켜지는 신호가 나가고 나면 delay를 0 으로 해도 

High 신호가 짧은 시간 나가기 때문에, 희미하게 LED 불이 켜져 있었습니다.

 

delay 시간 0 은 말 그대로 유지시간을 주지 않는 것이지

애초에 High 신호가 나가는 것에는 변함이 없다고 봐야겠습니다.  

 

얼마동안 High 신호가 나가는지는 저도 모르겠습니다.

어딘가 찾아보면 나올 것 같기는 한데,,, 누군가 아신다면 댓글 달아주세요!

 

그래서 결국 if 문을 만들어서

방에 불을 켰을 때 나오는 아날로그 값이 A0 에 입력된다면

digitalWrite 함수 Low로 LED를 강제 종료 시켰습니다.

 

 

그리고 프로그램에서 float On=(CdsValue-400.00)/450.00; 이라는 줄이 있습니다.

 

On 값이 얼마가 나오는지 확인하고 싶어서 Serial 통신 화면으로 On 값을 출력했는데,

CdsValue 는 300~ 500 대 까지 계속 변화하고 있었습니다만,

On 값은 계속 0.00 이라고만 나왔습니다.

 

저는 원래 프로그램을 아래와 같이 작성했습니다.

 

 float On=(CdsValue-400)/450;

 

추측하건데, 여기서 400 이라든지 450이라는 수치에 정수를 사용하니,

On 변수에는 정수에다가 형식만 float, 소수둘째자리까지 표현한 값이 들어가는 것이 아닌가하는 생각이 들었습니다.

 

On 값이 0.00 이라고만 나왔거든요. 

아마 CdsValue 값이 커졌으면 1.00, 2.00 이렇게 나왔을 것입니다.

 

이렇게 되어 버리면 아무리 CdsValue값이 변화해도

On 값은 0.00 으로만 나가기 때문에

LED 밝기 변화를 할 수 없게 되어 버립니다.

 

결국 400 을 400.00, 450 을 450.00 으로 변경했더니,

On 값이 소수 둘째 자리까지 다양한 값으로 변화되면서 출력되기 시작했습니다.

 

 

[방 불을 켰을 때]

 

 

[방 불을 껐을 때]

 

이렇게 스케치를 아두이노에 업로딩하자

방의 불을 켰다 껐다 했을 때,

LED가 반대로 (완전히) 꺼졌다 켜졌다 하는 것을 확인할 수 있었습니다.

 

[방 불을 켰을 때]

 

[방 불을 껐을 때]

 

https://youtu.be/xeHIthXl3y0?si=spi_iGDgj_OmXIIm

[방 불 끄고 켤 때 LED 변화]

 

그리고 저는 LED 의 켜짐, 꺼짐 뿐아니라 밝기 변화가 되는지 궁금했습니다.

 

방에 불이 꺼진 상태에서

노트북 모니터 (밝음) 쪽으로 조도센서를 점자 향하게 해서

LED 불이 밝아지는지 확인했습니다.

 

https://youtu.be/goAdfvQS7vc?si=OWSaRJoZjikHD-h7

[주변 조명에 따른 LED 밝기 변화]

 

분명히 밝기 차이가 나기는 하는데,

제 눈에는 그저 3단계로만 보입니다.

 

꺼짐 - 중간 밝음 - 밝음

 

밝기 변화가 더 여러단계가 있을 것으로 생각했는데

조금 아쉬운 결과입니다.

 

 다른 방법이 있는지 더 찾아 봐야겠습니다.

 

-------------------------------------------------------------------------

map 함수를 사용하면 입력에 비례한 출력을 만들어 낼 수 있습니다. 

아래 웹페이지 참고하세요!

 

https://robotamin.tistory.com/11

댓글
공지사항
최근에 올라온 글