홍창민정보·인공지능 교사

물·흙 · 난이도 어려움

EC 센서로 물의 전기전도도를 표준액 두 점으로 보정하고 25℃ 기준값으로 바꾸기

EC 센서는 물에 녹은 이온이 많을수록 전기가 잘 통하는 성질로 전기전도도를 재요. DFR0300 계산식, 표준액 두 점(1413µS/cm·12.88mS/cm) 보정, 1℃에 약 1.85%씩 변하는 값을 25℃ 기준으로 바꾸는 코드, 전극·기판 다루는 법과 탐구를 정리했어요.

글 홍창민 · 갱신 2026-10-31 · 읽는 데 약 8분 · 가상 실행 확인 (실물 미확인)

이 센서로 무엇을 잴 수 있나

전기전도도(EC)는 물이 전기를 얼마나 잘 통하게 하는지를 나타내요. 순수한 물은 전기가 잘 통하지 않지만, 소금 같은 물질이 녹아 이온이 생기면 잘 통해요. 그래서 EC는 물에 녹은 이온이 얼마나 많은지를 알려 주는 숫자예요. 단위는 mS/cm나 µS/cm를 써요. 1mS/cm는 1000µS/cm예요.

이 글은 DFRobot의 Gravity 아날로그 EC 센서(DFR0300, K=1)를 기준으로 해요. 위키에 적힌 사양은 변환 기판 전원 3.0~5.0V, 출력 0~3.4V, 정확도 ±5% F.S.이고, 전극은 실험실용으로 측정 가능 범위 0~20mS/cm, 권장 범위 1~15mS/cm, 사용 온도 0~40℃, 수명 6개월 이상(쓰는 횟수에 따라)이에요. 소금물 농도와 EC의 관계, 스마트팜 양액을 묽힌 정도, 온도를 바꿀 때 EC가 얼마나 변하는지 같은 것을 잴 수 있어요. 어떤 이온이 녹았는지는 알려 주지 않아요. 설탕처럼 녹아도 이온이 생기지 않는 물질은 EC를 거의 바꾸지 않아요.

원리

전극 끝에는 금속판 두 장이 마주 보고 있어요. 변환 기판은 이 판 사이에 빠르게 바뀌는 전기 신호를 걸고, 물을 통해 흐르는 정도를 전압으로 바꿔 A 핀으로 내보내요. DFRobot은 이 신호가 물속으로 퍼지기 때문에 같은 그릇에 pH 센서 같은 다른 수질 센서를 함께 넣으면 서로 방해한다고 설명해요.

전압을 EC로 바꾸는 식은 DFRobot_EC 라이브러리에 있어요. 전압을 mV로 넣으면 EC(mS/cm) = 1000 × 전압 ÷ 820 ÷ 200 × K예요. K=1일 때 1.413mS/cm 표준액은 약 232mV, 12.88mS/cm 표준액은 약 2112mV에 해당해요. K는 전극마다 조금씩 다른 차이를 맞추는 보정값이에요. 라이브러리는 표준액 두 개로 K를 두 개 구해 두고, 낮은 범위와 높은 범위에서 바꿔 써요. 계산한 EC가 2.5보다 크면 높은 범위의 K로, 2.0보다 작으면 낮은 범위의 K로 바꿔요.

EC는 같은 물이라도 온도가 오르면 커져요. 라이브러리는 1℃마다 1.85%씩 달라진다고 보고, 잰 값을 (1 + 0.0185 × (온도 − 25))로 나눠 25℃ 기준값으로 바꿔요. 온도가 다른 두 물을 견주려면 이 보정이 꼭 필요해요.

준비물

  • 라즈베리파이 피코와 USB 케이블
  • DFR0300 EC 센서(전극, 변환 기판, 연결선)
  • 표준액 1413µS/cm와 12.88mS/cm(DFR0300에 들어 있어요)
  • 온도계(방수 온도 센서 DS18B20을 따로 달아도 좋아요), 증류수, 휴지, 작은 비커 여러 개
  • 탐구용: 소금, 0.01g 전자저울, 100mL 눈금실린더, 양액, 찬물·따뜻한 물 중탕 그릇

배선

EC 센서로 물의 전기전도도를 표준액 두 점으로 보정하고 25℃ 기준값으로 바꾸기: 브레드보드에 피코와 센서를 꽂은 배선 그림
시나브로 PICO 브레드보드 작업대와 같은 계산으로 그린 배선이에요. 위 + 줄은 3.3V, 아래 + 줄은 5V예요.
브레드보드 따라 꽂기 순서 (8단계)
  1. 피코를 브레드보드 가운데 홈에 걸쳐 꽂아요. USB 단자가 왼쪽을 보게 하고, 1번 핀이 f2, 40번 핀이 e2에 들어가요. 다리가 홈 양쪽에 모두 들어갔는지 옆에서 봐요.
  2. 주황 선: 피코 36번 핀(3V3(OUT)) 옆 칸 a6 → 위쪽 + 줄(3.3V). 이제 이 줄 전체가 3.3V예요.
  3. 검은 선: 피코 38번 핀(GND) 옆 칸 a4 → 위쪽 − 줄(GND). 이제 이 줄 전체가 GND예요.
  4. EC 센서 전기전도도 꽂기: 다리 + · − · A를 위쪽 a24 · a25 · a26에 차례로 꽂아요. 다리가 브레드보드에 바로 안 들어가면 암-수 점퍼선으로 같은 칸에 이어요.
  5. 주황 선(3.3V 전원): EC 센서 + 줄 b24 → 위쪽 + 줄(3.3V)
  6. 검은 선(GND): EC 센서 − 줄 b25 → 위쪽 − 줄(GND)
  7. 초록 선(신호): EC 센서 A 줄 b26 → 피코 31번 핀(GP26) 옆 칸 a11
  8. 마지막 확인: ① 위쪽 + 줄(3.3V)과 아래쪽 + 줄(5V)이 서로 이어지지 않았나요? ② 모든 부품의 GND가 − 줄에 이어졌나요? ③ 5V 신호 다리는 저항을 거쳐 피코에 이어졌나요? ④ 긴 브레드보드는 + − 줄이 가운데에서 끊긴 것도 있어요(빨간·파란 선이 끊겨 있으면 짧은 선으로 이어요). ⑤ 그림과 한 칸씩 비교한 뒤 USB를 꽂아요.
모듈 핀 피코 핀 비고
+ 3V3 (36번) 기판 전원 범위 3.0~5.0V 가운데 3.3V
− GND (38번) 피코와 접지를 함께 써요
A GP26 (31번) 아날로그 출력, 사양 0~3.4V
BNC 단자 전극 돌려 끼워 고정

사양의 출력 범위는 0~3.4V이고, 피코 ADC는 3.3V까지만 읽어요. 그래서 사이트 배선처럼 기판을 3.3V로 켜고 분압 없이 GP26에 이어요. 라이브러리 식으로 계산하면 K=1에서 측정 범위 끝인 20mS/cm가 약 3.28V라서, 그보다 진한 물은 ADC 끝에 걸려 값이 멈춰요. 코드는 전압이 3.2V를 넘으면 알려 줘요.

변환 기판은 물에 넣는 부품이 아니에요. 기판과 피코는 비커에서 떨어진 마른 곳에 두고, 물에는 전극 끝만 넣어요.

코드

from machine import ADC, Pin
import time

ec = ADC(Pin(26))          # A → GP26, 기판은 3V3으로 켜요
TEMP = 25.0                # 물 온도(℃). 온도계로 재서 바꿔요
K_LOW = 1.0                # 1413µS/cm 표준액으로 구한 값으로 바꿔요
K_HIGH = 1.0               # 12.88mS/cm 표준액으로 구한 값으로 바꿔요
k = K_LOW

def read_mv(n=20):
    s = 0
    for i in range(n):
        s += ec.read_u16()
        time.sleep_ms(10)
    return s / n * 3300 / 65535          # 전압(mV)

def k_from(mv, std, t):
    comp = std * (1 + 0.0185 * (t - 25))      # 그 온도에서 표준액의 EC
    return 820 * 200 * comp / 1000 / mv if mv > 0 else 0

mv = read_mv()
print(f"보정 도우미: 1413µS/cm 표준액이라면 K_LOW = {k_from(mv, 1.413, TEMP):.3f}, 12.88mS/cm라면 K_HIGH = {k_from(mv, 12.88, TEMP):.3f}")

while True:
    mv = read_mv()
    raw = 1000 * mv / 820 / 200          # K=1일 때의 EC(mS/cm)
    if raw * k > 2.5:
        k = K_HIGH                       # 높은 범위
    elif raw * k < 2.0:
        k = K_LOW                        # 낮은 범위
    ec25 = raw * k / (1 + 0.0185 * (TEMP - 25))
    print(f"DATA: ec_mv={mv:.0f}, ec25={ec25:.3f}, k={k:.3f}")
    if mv > 3200:
        print("전압이 ADC 끝(3.3V)에 가까워요. 이 값은 믿지 않아요")
    time.sleep(2)
  • read_mv()는 20번 읽어 평균을 내고 mV로 바꿔요.
  • k_from()은 라이브러리의 보정식과 같아요. 표준액의 값을 지금 온도의 값으로 바꾼 뒤, 그 값이 나오게 하는 K를 구해요.
  • 시작할 때 보정 도우미가 "지금 전극이 담긴 물이 표준액이라면 K가 얼마인지"를 두 줄로 알려 줘요. 표준액에 담갔을 때 나온 숫자를 K_LOW, K_HIGH에 적어 넣어요.
  • 본 반복은 2초마다 25℃ 기준 EC(ec25, mS/cm)를 내보내요. 범위에 따라 K를 바꾸는 규칙은 라이브러리와 같아요.

값 해석과 보정

보정은 이렇게 해요. 전극을 증류수로 헹구고 휴지로 물기를 살짝 찍어 내요. 1413µS/cm 표준액에 넣어 천천히 저은 뒤 값이 멈추면 보정 도우미의 K_LOW를 적어요. 다시 헹군 뒤 12.88mS/cm 표준액으로 K_HIGH를 구해요. 라이브러리는 0.5~1.5 밖의 K를 받아들이지 않아요. 그 밖의 숫자가 나오면 표준액이 오염됐거나, 전극이 상했거나, 온도를 잘못 넣은 경우가 많아요. DFRobot은 처음 쓸 때와 오래 쉬었다 쓸 때 보정하고, 보통 한 달에 한 번, 자주 쓰면 일주일에 한 번 다시 보정하라고 권해요.

온도는 생각보다 크게 작용해요. 라이브러리 식으로 보면 같은 물이 15℃일 때 잰 값은 25℃일 때보다 약 18.5% 작게 나와요. 그래서 TEMP를 그때그때 바꿔 넣고, 기록에도 물 온도를 함께 적어요. 위키는 정확도를 높이려면 온도 센서를 달아 자동으로 보정하라고 권해요.

정확도 ±5% F.S.는 전체 눈금에 대한 비율이에요. 전체 눈금을 측정 범위 20mS/cm로 보면 ±1mS/cm에 해당하니, 권장 범위(1~15mS/cm)보다 묽은 물은 서로 구별하기 어려워요. 수돗물과 정수기 물처럼 아주 묽은 물을 견주는 탐구라면 결과를 조심스럽게 해석해요.

자주 하는 실수

  1. 변환 기판을 물가에 두기. 기판이 젖으면 값이 틀어지고 고장 날 수 있어요. 기판과 피코는 마른 곳에 둬요.
  2. 전극 판을 손가락이나 휴지로 문지르기. 판 표면에 백금흑 층이 있어서, 위키는 무엇에도 닿지 않게 하고 증류수로만 씻으라고 적어요.
  3. 전극을 물에 담가 둔 채 두기. 오래 담가 두면 수명이 줄어요. 재고 나면 꺼내 헹궈요.
  4. pH 센서와 한 비커에 함께 넣기. EC 센서의 신호가 다른 센서를 방해해요. 따로 재거나 신호 절연 모듈을 써요.
  5. 헹구지 않고 다음 물을 재기. 앞 물이 섞여 값이 끌려가요. 시료를 바꿀 때마다 증류수로 헹궈요.

이 센서로 잴 수 있는 탐구

1. 소금 농도와 EC는 비례할까 - 질문: 증류수에 녹인 소금의 양을 두 배로 늘리면 EC도 두 배가 될까? - 바꾸는 것: 증류수 100mL에 넣은 소금 0.05g, 0.10g, 0.20g, 0.40g - 재는 것: ec25(mS/cm) - 방법: 0.01g 저울로 잰 소금을 다 녹을 때까지 저어요. 농도마다 새 용액을 3번 만들어 재고, 권장 범위를 넘는 용액이 나오면 거기서 멈춰요.

2. 온도 보정은 제대로 맞을까 - 질문: 같은 소금물을 15℃, 25℃, 35℃에서 재면 보정 전 값은 달라지고 보정 후 값은 같아질까? - 바꾸는 것: 물 온도(찬물 중탕, 실온, 따뜻한 물 중탕) - 재는 것: 보정 전 EC(TEMP를 25로 둔 값)와 보정 후 ec25(mS/cm) - 방법: 비커를 중탕 그릇에 넣고 온도계 값이 멈추면 재요. 온도마다 3번 기록하고, 보정 후 값의 차이가 몇 %인지 계산해요. 전극 사용 온도(0~40℃)를 넘지 않아요.

3. 양액을 묽힌 정도를 EC로 확인할 수 있을까 - 질문: 스마트팜 양액을 1배, 1/2, 1/4, 1/8로 묽히면 EC도 같은 비율로 줄어들까? - 바꾸는 것: 묽힌 비율 - 재는 것: ec25(mS/cm) - 방법: 눈금실린더로 양액과 증류수를 섞어 각 100mL를 만들어요. 묽은 쪽부터 진한 쪽 순서로 재고, 묽힌 비율마다 3번 반복해요.

안전

  • 물과 전기를 떨어뜨려요. 피코와 기판은 쟁반 밖에 두고, 물을 쏟으면 먼저 USB를 뽑아요. 젖은 손으로 배선을 만지지 않아요.
  • 표준액과 양액은 마시거나 눈에 넣지 않고, 실험이 끝나면 손을 씻어요.
  • 따뜻한 물 중탕은 선생님이 준비하고, 40℃를 넘기지 않아요.
  • 이 장치는 먹는 물이나 양식장의 안전을 판단하는 기기가 아니에요.

더 알아보기

  • 제품 자료: DFRobot "Gravity: Analog Electrical Conductivity Sensor (K=1), DFR0300" 위키(사양, 두 점 보정 순서, 전극 취급 주의, 보정 주기), DFRobot "Gravity: Analog Signal Isolator (DFR0504)" 위키(수질 센서끼리의 방해)
  • 라이브러리: DFRobot_EC(GitHub, 계산식 상수 820·200, 온도 계수 0.0185, K 허용 범위 0.5~1.5, 범위 자동 전환). 이 글의 코드는 같은 식을 MicroPython으로 옮겼어요
  • 기초 글: 센서 값의 신뢰도, 피코 핀 지도, 잴 수 있는 탐구 주제 만들기, 브레드보드 처음 쓰기
글쓴이

홍창민 · 울산 학성고등학교 정보·인공지능 교사. 수업에 쓰는 도구(시나브로 PICO 웹 IDE, 학교 AI 서버 등)를 직접 만들어 운영해요. 소개 보기 · 고칠 곳 알려 주기