[Sensloop Lab DHT11 #1]
이 글에는 리튬이온 셀·배터리팩·전자부품을 활용한 실험 과정이 포함되어 있습니다. 이 기록은 Sensloop Lab의 통제된 환경에서 수행된 내용입니다.
안전한 실험을 위해 다음을 권장드립니다:
- 절연 장비와 보호장구(장갑·보안경 등)를 착용하세요.
- 작업 전 전압 확인과 절연 처리를 진행하세요.
- 고전압 배터리팩 실험은 숙련자가 진행하는 것이 안전합니다.
1. 서론
연구원 여러분, 안녕하세요.
오늘은 Arduino Mega 2560 보드에 DHT11 온습도 센서를 연결하고,
그 데이터를 작은 OLED 디스플레이에 표시하는 과정을 함께 해보려고 합니다.
이번 실험은 앞으로 진행할 여러 프로젝트의 기본이 되는 단계예요.
센서 데이터를 읽고 → 처리하고 → 눈으로 확인하는 구조를 익히는 게 핵심이죠.
다음 편에서는 온도에 따라 3색 LED 색상을 바꿔서 표시하고,
블루투스 통신으로 데이터를 받아보는 실험도 이어갈 예정입니다.
2. 보드 및 모듈 준비
이번에 준비한 부품은 모두 아두이노 실험에서 자주 사용하는 기본 구성입니다.

| 구분 | 부품명 | 설명 |
|---|---|---|
| MCU | Arduino Mega 2560 | 여러 센서와 디스플레이를 동시에 다루기 좋은 보드 |
| 센서 | DHT11 온습도 센서 | 주변 온도와 습도를 디지털 신호로 전송 |
| 디스플레이 | 0.91인치 OLED (SSD1306) | 전력 소모 적고, 시야각이 좋아 작은 프로젝트에 적합 |
| 점퍼 케이블 | M-F 케이블 4EA | 연결용 |
| USB 케이블 | Type-B | 보드 전원 및 PC 연결용 |
3. 온도센서 연결 & 라이브러리 설치
먼저 DHT11 온습도 센서부터 연결해봅니다.
이 센서는 공기 중의 온도(℃)와 습도(%)를 동시에 측정할 수 있는 간단한 센서입니다.
아날로그 센서처럼 보이지만, 실제로는 디지털 데이터를 한 핀으로 전송합니다.
📍 배선 구성
- VCC → 5V
- GND → GND
- DATA → D2

그다음은 아두이노 IDE에서 DHT11을 쓸 수 있도록 라이브러리 설치를 해야 합니다.
- 상단 메뉴에서 스케치 → 라이브러리 포함하기 → 라이브러리 관리
- 검색창에
DHT sensor library입력 - Adafruit에서 제공하는 라이브러리 설치
- 함께 뜨는 Adafruit Unified Sensor도 같이 설치

설치가 끝났다면 아래 코드를 업로드합니다.
// ================================================
// [Sensloop Lab] DHT11 온도·습도 측정 기본 예제
// 센서 데이터핀: D2
// 시리얼 속도: 9600bps
// ================================================
#include <DHT.h> // DHT 센서용 라이브러리
#define DHTPIN 2 // DHT 센서의 데이터 핀을 D2로 설정
#define DHTTYPE DHT11 // 센서 종류를 DHT11로 설정
DHT dht(DHTPIN, DHTTYPE); // 센서 객체 생성
void setup() {
Serial.begin(9600); // 시리얼 모니터 통신속도 9600bps로 설정
dht.begin(); // 센서 동작 시작
Serial.println("DHT11 온습도 센서 시작!");
Serial.println("---------------------------");
}
void loop() {
// 센서가 안정적으로 측정할 시간을 확보하기 위해 2초 대기
delay(2000);
// 온도(섭씨)와 습도 데이터를 읽기
float h = dht.readHumidity(); // 습도
float t = dht.readTemperature(); // 온도 (섭씨)
// 측정 실패 시 NaN(Not a Number)을 반환하므로 확인 필요
if (isnan(h) || isnan(t)) {
Serial.println("센서에서 데이터를 읽을 수 없습니다. 배선을 확인하세요!");
return; // loop의 나머지 부분을 건너뜀
}
// 측정값 출력
Serial.print("현재 습도: ");
Serial.print(h);
Serial.print("% | 온도: ");
Serial.print(t);
Serial.println("°C");
}
4. 센서 데이터 확인
이제 업로드가 끝났으면,
시리얼 모니터(9600bps)를 열어봅니다.
잠시 기다리면 아래처럼 출력됩니다.

값이 정상적으로 나온다면 센서가 잘 작동하는 상태입니다.
여기까지가 온도·습도 센싱 기본 단계입니다.
5. 디스플레이 연결 & 라이브러리 설치
이제 값을 눈으로 직접 볼 수 있도록 OLED 디스플레이를 연결해봅니다.
이 디스플레이는 SSD1306 칩셋을 사용하는 0.91인치 OLED 모듈로,
I2C 방식이라 SDA와 SCL 두 핀만으로 데이터 통신이 가능합니다.
작고 전력 소모도 적어서, 센서 테스트용으로 정말 자주 쓰이는 모듈이에요.
📍 배선 구성 (Arduino Mega 기준)
- VCC → 5V
- GND → GND
- SCL → 21
- SDA → 20

다음으로 필요한 라이브러리를 설치합니다.
- Adafruit SSD1306
- Adafruit GFX Library

이제 아래 코드를 업로드합니다.
// ================================================
// [Sensloop Lab] DHT11 + OLED(SSD1306) 기본 예제
// 보드: Arduino Mega 2560
// 센서: DHT11 (DATA: D2)
// 디스플레이: 0.91" OLED I2C
// 시리얼: 9600bps
// ================================================
#include <Wire.h> // I2C 통신용
#include <Adafruit_GFX.h> // 그래픽 기본 라이브러리
#include <Adafruit_SSD1306.h> // SSD1306용 라이브러리
#include <DHT.h> // DHT 센서 라이브러리
// ---- DHT 설정 ----
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// ---- OLED 설정 ----
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_ADDRESS 0x3C // 안 보이면 0x3D로 변경
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ---- 샘플링 주기(권장: 2초) ----
const unsigned long SAMPLE_MS = 2000;
void setup() {
Serial.begin(9600); // 시리얼 모니터 속도
dht.begin(); // DHT 시작
// OLED 시작 (I2C 주소 확인)
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDRESS)) {
Serial.println(F("OLED 초기화 실패! I2C 주소(0x3C/0x3D) 및 배선 확인"));
while (1) { delay(10); } // 치명적 오류 시 멈춤
}
// 부팅 화면(간단한 안내)
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1); // 글자 크기(1: 작게)
display.setCursor(0, 0);
display.println(F("Sensloop Lab"));
display.println(F("DHT11 + OLED demo"));
display.display();
delay(1200);
}
void loop() {
static unsigned long last = 0;
if (millis() - last < SAMPLE_MS) return;
last = millis();
// ---- 센서 읽기 ----
float h = dht.readHumidity(); // 습도(%)
float t = dht.readTemperature(); // 온도(섭씨)
// 읽기 실패 시 안내
if (isnan(h) || isnan(t)) {
Serial.println(F("센서 읽기 실패! 배선/전원 확인"));
showErrorOnOLED("Read Fail");
return;
}
// ---- 시리얼 출력(디버깅) ----
Serial.print(F("H: "));
Serial.print(h, 1);
Serial.print(F("% | T: "));
Serial.print(t, 1);
Serial.println(F("C"));
// ---- OLED 표시 ----
display.clearDisplay();
// 제목 라인
display.setTextSize(1);
display.setCursor(0, 0);
display.print(F("T: "));
display.print(t, 1);
display.print(F("C ")); // 공백 약간
display.print(F("H: "));
display.print(h, 1);
display.println(F("%"));
// 큰 글씨로 온도 강조 (두 번째 줄)
display.setTextSize(2); // 크게 표시
display.setCursor(0, 14); // y=14부터(128x32 기준)
display.print(t, 1);
display.print(F("C"));
// 간단한 습도 막대(우측)
// 막대 높이(0~20px)를 습도(0~100%)에 맞춰 스케일
int barMaxH = 20;
int barH = (int)(barMaxH * constrain(h, 0, 100) / 100.0);
int barX = 100, barY = 12; // 우측 위치
display.drawRect(barX, barY, 24, barMaxH, SSD1306_WHITE); // 테두리
display.fillRect(barX+2, barY + (barMaxH - barH), 20, barH, SSD1306_WHITE); // 내부 채움
display.display();
}
// ---- 오류 화면을 간단히 띄우는 함수 ----
void showErrorOnOLED(const char* msg) {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(0, 8);
display.println(F("ERROR"));
display.setTextSize(1);
display.setCursor(0, 26 - 8);
display.println(msg);
display.display();
}
6. 디스플레이 결과
정상적으로 작동하면 OLED 화면에 다음처럼 표시됩니다.
- 처음엔 “Sensloop Lab / DHT11 + OLED demo”
- 이후엔 실시간으로 온도와 습도 값이 2초마다 갱신

작지만 디스플레이에 숫자가 갱신되는 걸 보면 꽤 뿌듯합니다.
센서가 실제로 측정한 데이터를 눈으로 확인할 수 있다는 게 바로 임베디드의 매력이죠.
7. 결론
오늘은 아두이노를 이용해
온습도 센서(DHT11)의 데이터를 읽고,
OLED 디스플레이에 출력하는 과정까지 진행했습니다.
이 단계를 마치면 앞으로의 실험에서
LED, 블루투스, 혹은 Wi-Fi 모듈을 연결하더라도
데이터 흐름을 훨씬 쉽게 이해할 수 있을 거예요.

8️⃣ 연구원 코멘트
이번 실험은 Sensloop Lab 임베디드 시리즈의 첫 시작이었습니다.
센서 하나, 디스플레이 하나지만,
“센서 입력 → 데이터 처리 → 시각 출력”이라는 구조를 직접 체험하는 게 중요했어요.
다음 포스팅에서는
온도에 따라 LED 색이 달라지게 제어해보고,
추가로 블루투스를 통해 데이터를 스마트폰으로 받아볼 예정입니다.
연구원 여러분도 이번 코드를 기반으로 자유롭게 응용해보세요.
작은 변화들이 쌓이면, 어느새 하나의 완성된 시스템이 만들어집니다.
🔗 다음에 같이 보면 좋은 글
🧠 초음파 센서와 WS2812B LED 실험 센서 입력값을 실시간으로 LED 색상으로 표현하는 시각화 실험.
Arduino Mega 보드 비교 – I/O 핀 구성과 확장성 분석 실험에 사용한 Mega와 UNO를 비교해봤습니다.
🔋 SKI E600 리튬폴리머 셀 충·방전 데이터 로그 전기자동차에 들어가는 배터리셀을 분석해봤습니다.