-
아두이노 레시피 : 온습도를 LCD로 출력하기 - 초중급편아두이노 레시피 2025. 2. 24. 18:25
# Recipe 12. LCD 응용하기
오늘은 이걸 해보죠! by arduinochef
안녕하세요~ 아두이노 셰프입니다. 봄비가 내릴 줄 알았는데 태풍급 비가 쏟아진다고 하네요... 따뜻한 봄의 정취 속에서 일하고 싶었는데 아쉽네요ㅠㅠ 여러분의 주말계획은 어떠신가요? 전 이번 주말 동안 프로젝트 레시피를 써보려고 해요. 센서, 모듈 하나하나를 알아가는 것도 중요하지만 그 재료들이 서로 어떻게 어울리는지 아는 것도 중요하니까요~ 첫출발은 온습도센서의 데이터를 LCD에 출력해 볼 거예요. (이거 은근 유용하니까) 저의 템플릿, 잘 활용해 보세요!
라이브러리가 이미 있다고 가정하고 진행합니다.
만약 라이브러리 설치법이나 각 재료의 사용법이 궁금하신 분들은
이전 'LCD기초 편'과 '온습도센서 기초 편' 포스팅을 참고해 주세요!
오늘의 재료 Ingredient
<메인 재료>
온습도센서(모델명 : DHT11)
I2C_LCD 모듈(16x2)
<그 외 재료>
아두이노 우노
브레드보드
암-수 케이블(4개)
수-수 케이블(5개)
메이킹 방법 Steps
Step 1. 선 연결하기 Wiring
a. 온습도 센서의 S는 아두이노의 D2번 핀에,
b. LCD 모듈의 SCL은 아두이노의 A5번 핀에,
c. LCD 모듈의 SDA는 아두이노의 A4번 핀에,
d. 나머지 각각의 전원(+,-)들은 브레드보드로 연결해 주세요.
(음.. 브레드보드 사용법을 한 번 다룰 필요가 있겠군요)
(그림을 참고해 주세요!)
- - - - - - - - - -
Step 2. 아두이노 코드 Code review
여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ
// LCD를 제어하기 위해서 라이브러리를 추가해줄게요. #include <LiquidCrystal_I2C.h> #include <Wire.h> #include <SimpleDHT.h> //DHT11을 사용하게 해주는 코드모음(라이브러리)을 가져올게요. LiquidCrystal_I2C lcd(0x3F, 16, 2);//만약 코드가 동작하지 않는다면 LCD주소를 바꿔보세요(LCD주소는 0x27, 0x20, 0x3F 중 하나에요.) int pinDHT11 = 2; // pinDHT11이라는 변수를 만들고 2라는 값을 설정할게요. '2'대신 pinDHT11 이라고 선언할게요. SimpleDHT11 dht11(pinDHT11); //SimpleDHT11 라이브러리에서 제공하는 클래스로 dht11이라는 객체를 생성하는거에요. //아직 이해하지 못해도 좋아요~ void setup() {//여기있는 코드는 한번만 실행되요. lcd.init(); //LCD를 초기화 할게요. lcd.backlight(); //LCD는 그자체로 빛을 못내니까, 백라이트를 켜줍니다. } void loop() { //setup()이 한번 실행되고 나면, 여기있는 코드가 반복실행됩니다. //이 코드들은 센서의 값을 읽도록 처리하는 코드들이에요. 아직은 각각의 뜻을 다 몰라도 돼요. 그냥 그렇구나 하고 넘어갈게요. //------------------------------ byte temperature = 0; //1바이트 크기의 temperature변수를 생성하고 0으로 초기화한다. byte humidity = 0; //1바이트 크기의 humidity변수를 생성하고 0으로 초기화한다. int err = SimpleDHTErrSuccess; //err라는 이름의 정수형변수를 선언하고 라이브러리의 SimpleDHTErrSuccess 라는 상태값을 할당한다. if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { //전달한 매개변수가 NULL로 반환되었다면 에러코드를 출력하여 처리한다. Serial.print("Read DHT11 failed, err="); Serial.print(SimpleDHTErrCode(err)); //에러코드 출력 Serial.print(","); Serial.println(SimpleDHTErrDuration(err)); delay(1000); //에러코드 출력 return; //센서가 에러상태라면 코드를 더 이상 실행하지 않고 계속 성공할때까지 계속 에러처리를 반복한다. } //------------------------------ //너무 어렵죠~? 괜찮아요 몰라도 돼요.ㅎㅎㅎ (그냥 혹시 궁금한 친구들을 위해 적어봤어요 >.<) // 자, 이제 값을 출력해보죠. lcd.setCursor(0,0); // 0번째 줄 0번째 셀부터 입력하게 합니다. lcd.print("H : "); // 습도값은 H로 표시할게요. lcd.setCursor(4,0); // 0번째 줄 4번째 셀부터 입력하게 합니다. lcd.print((int)humidity); // 'H'옆에 습도값을 출력할게요. lcd.setCursor(6,0); //0번째 줄 6번째 셀부터 입력하게 합니다. lcd.print("%"); //%로 포화도를 표현할게요. lcd.setCursor(8,0); // 0번째 줄 8번째 셀부터 입력하게 합니다. lcd.print("T : "); //온도값은 T로 표시할게요. lcd.setCursor(12,0); //0번째 줄 12번째 셀부터 입력하게 합니다. lcd.println((int)temperature); //'T'옆에 온도값을 표시할게요. lcd.setCursor(14,0); //0번째 줄 14번째 셀부터 입력하게 합니다. lcd.print("C "); //C로 섭씨를 표현할게요. delay(3000); //3초간 기다릴게요. }
Step 3. 동작시키기 Working
● 코드를 아두이노 우노에 업로드해 주세요.
● 입김을 불거나, 불을 가까이 가져가 보세요. LCD의 표시된 값들이 바뀌나요?
오늘의 레시피는 여기까지입니다~ 프로젝트는 과학시즈닝이 없습니다.
센서, 모듈의 사용법과 원리가 궁금하신 분들은 기초 편 포스팅을 참고해 주세요~
코드의 동작 알고리즘
(주석을 참고해 주세요.)
알고리즘은 쉬운 말로 ‘진행절차’라고 할 수 있습니다.
코드가 어떻게 동작되는지 알아볼까요?
알고리즘은 온습도센서를 다뤘을 때와 같습니다.
"읽고 출력한다."
그때는 시리얼모니터로 출력했다면
이번엔 LCD로 출력했다는 차이 밖에 없습니다.
Serial.print대신 lcd.print를 쓴 거죠.
대신 LCD는 표처럼
글자별로 출력위치를 정해줘야 하니까
(16칸 두줄 밖에 없잖아요ㅎ)
setCursor함수로
각각의 글자수가 표시될 위치를 정해주었어요.
온습도레시피와 LCD레시피를 이미 했다면,
“에이 이게 다야?”라고 생각할 수 있어요.
예, 이게 답니다...
(OLED면 모를까...)LCD를 응용하는 건 진짜 이거면 되거든요...ㅋ
이제 원하는 프로젝트에 응용할 수 있나요?
'아두이노 레시피' 카테고리의 다른 글
아두이노 레시피 : LED 깜빡이기 - 기초편 (0) 2025.02.25 아두이노 레시피 : 가변저항으로 서보모터 제어하기 - 초중급편 (1) 2025.02.25 아두이노 레시피 : LCD 모니터 - 기본편 (0) 2025.02.24 아두이노 레시피 : 초음파센서 - 기본편 (0) 2025.02.24 아두이노 레시피 : 온도센서 - 기본편 (0) 2025.02.23