카테고리 없음

LCD에 아두이노 센서 데이터 출력

abc0123 2017. 11. 4. 14:01
반응형

 

지난 글에서 아두이노에 LCD를 연결해서 그 밝기를 조정하는 과정을 살펴봤었는데 오늘은 조도 센서 및 초음파 센서의 값을 동시에 LCD에 출력하는 예제를 만들어보면서 이 녀석을 익혀보려고 한다.

 

 

영상에서도 확인할 수 있듯이 내가 사용하는 LCD는 [16X2] 크기이고 위쪽에는 초음파센서의 값을 cm 단위로 출력하도록 하고 있으며 아래줄에서는 조도센서의 값을 표시하고 있다. 그리고 이 값들은 최대 1023(조도센서 최댓값, 초음파센서의 최댓값은 280[방 벽의 거리])이므로 앞쪽 네 칸은 숫자를 표시하기 위한 공간으로 활용하고 5번째 칸부터 단위를 문자로 표시하도록 했다. 원래 조도의 단위는 'LUX'인데 그냥 나머지 칸에 문자를 가득 채우기 위해서 [illumination]이라는 '빛'의 영어 단어를 입력해봤다.

 

 

여하튼 위와 같은 예제를 하나씩 만들어보자.

 

전체 회로

 

일단 LCD는 지난 글에서 알아봤던 방법으로 연결을 했고 역시 가변저항을 이용해서 그 밝기를 조절할 수 있도록 했다.

 

LCD

 

초음파 센서

 

내가 사용하는 초음파센서는 HC-SOR4이고 VCC(+)와 GND(-), TRIG(8), ECHO(9)에 각각의 점퍼선을 연결했다.

 

조도 센서

 

그리고 조도 센서의 값은 A0에서 받도록 했다.

 

이제 아두이노 코딩을 통해서 LCD에 출력될 데이터와 문자열을 입력해보자.

 

코딩

 

먼저 ① LCD를 연결하기 위해서 라이브러리를 불러왔으며 ② 초음파 센서의 TRIG와 ECHO 핀의 번호를 상수로 선언했고 ③ LiquidCrystal 클래스 객체 lcd를 만들면서 연결된 핀 번호를 전달해서 초기화하고 있다.

 

그리고 ④초기화 구간 setup()에서는 칸 개수를 전달해서 LCD를 시작하도록 하고 있으며 TRIG와 ECHO의 핀을 각각 OUTPUT과 INPUT으로 초기화했다.

 

loop함수

 

반복되는 loop()에서는 ①초음파 센서를 껐다가 켜기를 반복하면서 상태를 초기화 시켜주고 있으며 ② pulseIn() 함수를 이용해서 ECHO에 들어오는 데이터의 값을 cm 단위로 환산해서 long형 dis 변수에 담도록 했다. 여기서 사용된 58이라는 숫자는 각 센서별로 그 단위가 정해져 있는데 내가 사용 중인 녀석은 58.2라고 해서 소수점 떼고 대충 58로 입력했다.

 

 

그리고 ③ lcd.clear() 함수를 한 번 호출해서 화면을 깨끗이 지워주고 있다. 만약 이 녀석을 호출하지 않으면 한 번 표시된 값이 지워지지 않은 상태에서 그 위에 또 다른 값이 쓰여지기 땜문에 아래 그림처럼 이상하게 출력이 된다.

 

clear

 

여기서는 cm만 겹쳐쳐서 출력이 됐지만 숫자들도 네 개까지 표시되는 등 상태가 이상해지니 반드시 clear() 함수를 한 번 호출한 후 다음 것들을 작성하자.

 

단위 표시

 

그리고 setCursor() 함수를 호출하면서 인자 값으로 두 개의 숫자를 던져주고 있는데 이때 전달되는 숫자는 LCD의 칸 자리이다. LCD는 오른쪽으로 총 16개의 칸이 있는데 0번부터 15까지 고유 숫자를 갖고 있다. 그리고 세로는 두 줄이므로 0과 1로 표시된다.

 

즉, 예제에서 setCursor()의 인자로 전달된 숫자들은 가로 칸의 번호와 세로 칸의 번호를 의미하는 것들이고 그 시작은 0부터 하기 때문에 (0, 0)은 위쪽 첫 번째 칸이 될 것이다. 여기에 초음파 센서의 값을 출력하도록 하고 있으며 (4, 0)은 오른쪽으로 5번째 칸이고 첫 번째 줄을 의미한다.(0부터 시작하기 때문에 4는 네 번째가 아니고 다섯 번째라는 걸 잊지 말자.)

 

그렇게 ④오른쪽으로 다섯 번째 첫 줄(4,0)에서는 cm를... ⑤ 첫 칸 두 번째(0,1) 줄에서는 조도센서의 값을 ⑥다섯 번째 칸 두 번째 줄 (4,1)에서는 illumination이라는 단어를 표시하도록 했다.

 

 

이렇게 해서 아두이노 센서의 값을 LCD에 표시하는 걸 익혀봤는데 어떤 예제를 만들건 그 데이터의 값을 이렇게 눈으로 확인할 수 있으면 좋을 테니 대부분의 예제에서 정말 유용하게 쭉 사용될 거 같다.

반응형