콘텐츠로 이동

Chapter 12: 데이터 수집과 저장의 기초

🎯 이 장에서 배우는 것

  • [ ] 여러 번 측정한 데이터를 리스트에 저장할 수 있다
  • [ ] 반복문으로 일정 간격 자동 측정을 구현할 수 있다
  • [ ] 수집한 데이터를 CSV 파일로 저장할 수 있다

⏱️ 예상 학습 시간: 약 45분


📚 미리 알아야 할 것

지난 장에서 센서로 온습도를 한 번 측정하는 법을 배웠어요.

sensor.temperature  # 온도 한 번 읽기
sensor.humidity     # 습도 한 번 읽기

이번에는 자동으로 여러 번 측정해서 저장하는 방법을 배워볼게요!


📚 핵심 개념

개념: 리스트 (List)

비유: 리스트는 "칸이 나뉜 서랍장" 이에요! 📦

flowchart LR subgraph 리스트["temperatures 리스트"] A["0번 칸<br/>25.1"] B["1번 칸<br/>25.3"] C["2번 칸<br/>25.2"] end style 리스트 fill:#e3f2fd,stroke:#1976d2
  • 서랍장 각 칸에 데이터를 순서대로 넣어요
  • 칸 번호(인덱스)는 0번부터 시작해요
  • 나중에 꺼내서 분석할 수 있어요!

코드로 보면:

temperatures = []           # 빈 서랍장 준비
temperatures.append(25.1)   # 첫 번째 칸에 넣기
temperatures.append(25.3)   # 두 번째 칸에 넣기


🔨 따라하기

Step 1: 자동 측정 프로그램 만들기

목표: 10초 간격으로 6번 측정 (총 1분)

코드:

import time
import board
import adafruit_dht

# 센서 준비
sensor = adafruit_dht.DHT11(board.D4)

# 빈 리스트(서랍장) 준비
temperatures = []
humidities = []

# 6번 반복 측정
for i in range(6):
    temp = sensor.temperature
    hum = sensor.humidity

    # 리스트에 추가
    temperatures.append(temp)
    humidities.append(hum)

    print(f"{i+1}번째: {temp}°C, {hum}%")
    time.sleep(10)  # 10초 대기

print("측정 완료!")
print(f"온도 데이터: {temperatures}")

실행 결과:

1번째: 25°C, 60%
2번째: 25°C, 61%
3번째: 26°C, 59%
...
측정 완료!
온도 데이터: [25, 25, 26, 25, 26, 25]

체크포인트: 10초마다 측정값이 출력되나요?


Step 2: CSV 파일로 저장하기

CSV란? 엑셀에서 열 수 있는 데이터 파일이에요!

flowchart LR A["🌡️ 센서 측정"] --> B["📋 리스트 저장"] B --> C["💾 CSV 파일"] C --> D["📊 엑셀로 분석"] style A fill:#fff3e0,stroke:#f57c00 style C fill:#e8f5e9,stroke:#388e3c

코드:

# 파일로 저장
with open('sensor_data.csv', 'w') as file:
    file.write('번호,온도,습도\n')  # 헤더

    for i in range(len(temperatures)):
        line = f'{i+1},{temperatures[i]},{humidities[i]}\n'
        file.write(line)

print("sensor_data.csv 저장 완료!")

생성된 CSV 파일 내용:

번호,온도,습도
1,25,60
2,25,61
3,26,59
...


📝 전체 코드

import time
import board
import adafruit_dht

# 센서 설정
sensor = adafruit_dht.DHT11(board.D4)

# 데이터 저장용 리스트
temperatures = []
humidities = []

# 6번 측정 (10초 간격, 총 1분)
print("데이터 수집 시작!")
for i in range(6):
    temp = sensor.temperature
    hum = sensor.humidity

    temperatures.append(temp)
    humidities.append(hum)

    print(f"{i+1}번째: {temp}°C, {hum}%")

    if i < 5:  # 마지막엔 대기 안 함
        time.sleep(10)

# CSV 파일로 저장
with open('sensor_data.csv', 'w') as file:
    file.write('번호,온도,습도\n')
    for i in range(len(temperatures)):
        file.write(f'{i+1},{temperatures[i]},{humidities[i]}\n')

print("sensor_data.csv 저장 완료!")

⚠️ 주의할 점

실수 해결법
temperatures = [] 빠뜨림 반복문 전에 빈 리스트 선언 필수!
파일 내용이 안 보임 파일 탐색기에서 sensor_data.csv 찾기

✅ 점검하기

  1. 리스트에 데이터를 추가하는 명령어는?
정답 확인 `리스트이름.append(값)`
  1. CSV 파일을 열어볼 수 있는 프로그램은?
정답 확인 엑셀, 구글 스프레드시트, 메모장
  1. for i in range(6)은 몇 번 반복하나요?
정답 확인 6번 (i = 0, 1, 2, 3, 4, 5)

🚀 다음 장 미리보기

데이터를 모았으니, 다음 장에서는 평균, 최댓값, 최솟값을 계산해서 의미 있는 정보로 바꿔볼 거예요! 📊