강이나 호수는 훌륭한 휴식처지만, 오염되면 모든 즐거움이 사라집니다. 많은 사람들이 강물을 가축 음용수로 쓰는데, 오염된 물을 줄 수는 없죠. 집 옆이 강이라면 한밤중 홍수로 집이 잠기는 일도, 이웃이 기름을 버려 가축이 병드는 일도 막고 싶을 것입니다.
MyRiver가 이 모든 문제를 해결합니다. Sigfox 덕분에 외딴 지역에서도 작동하며, 누구나 기기에 접근할 수 있습니다. 장치는 물의 pH, 혁신적인 방식으로 오염도(불용성 물질), 수위를 측정합니다. Wia 덕분에 휴대폰이나 컴퓨터로 어디서든 실시간 모니터링이 가능하며, 강에 문제가 생기면 즉시 알림을 받습니다.
기능 설명
장치는 아두이노 MKR FOX 기반으로 원격 설치용으로 설계되었습니다. SAM D 프로세서의 저전력 모드 덕분에 2개 AA 배터리로 장기간 작동합니다.
30분마다 센서 값을 읽고 다시 슬립 모드로 진입합니다(최소 슬립 20분, 조정 가능).
MKR FOX는 다음을 측정합니다:
pH 센서로 강물의 pH
수위 센서로 수위
LED 빛을 포토레지스터로 비추어 불용성 물질(기름, 휘발유, 수은 등) 감지: 포토레지스터 값이 낮으면 물속에 고체 물질이 있어 빛을 차단한다는 의미
모든 데이터는 Sigfox로 전송→Wia로 릴레이→처리 및 시각화→사용자 알림 순으로 전달됩니다.
데이터는 12바이트 HEX 버퍼로 Sigfox에 전송되며, Wia에서 문자열로 변환 후 센서 값으로 파싱됩니다. 값이 정상 범위를 벗어나면 사용자에게 알림.
코드 3대 핵심 파트
Read Sensors: pH, 수위, 포토레지스터 값 읽어 변수 저장
Format Buffer: 3개 센서 값을 12바이트 버퍼로 병합
Parse Data: 버퍼를 Sigfox로 전송
MKR FOX는 Sigfox로 12바이트만 보낼 수 있어, 모든 센서 값을 12바이트에 담아야 합니다. 각 센서 최대 raw 값은 1024(10비트 ADC)로, 센서당 4바이트(1/3) 할당. 아두이노가 정수값을 문자열로 변환 후 앞에 0을 채워 4바이트로 만듭니다(예: 620→"0620", 24→"0024"). 이를 합쳐 12바이트 버퍼 생성 후 Sigfox 전송.
장치 작동 모습
아래 사진들은 프로젝트 기능을 보여줍니다. 더 자세한 건 위 영상 참조.
장점
강의 수위, pH, 오염도를 어디서든 실시간 모니터링
수용성/불용성 오염 물질 감지 또는 홍수 위험 시 즉시 알림
간편한 설치 및 사용
Sigfox 서비스 국가 어디서나 작동
프로젝트 제작 과정
1단계: 필요 장비
모든 부품을 납땜으로 연결하며, 센서 외 별도 부품은 적습니다.
Arduino MKR FOX 1200 1개
pH 센서 1개
수위 센서 1개
포토레지스터 1개
백색 LED 1개
220Ω 저항 2개
점퍼 와이어
2단계: 회로 연결
브레드보드 없이 부품이 직접 연결돼 회로도가 복잡해 보일 수 있습니다. 어려우면 프리칭 파일을 다운로드해 와이어를 옮겨보며 확인하세요.
MKR FOX 준비: 배터리 박스와 안테나 연결(센서 연결 후 배터리 박스 연결). 나머지 배선은 '최종 단계' 참조.
3단계: 코드 이해
코드는 위 3개 핵심 파트(Read Sensors, Format Buffer, Parse Data)로 구성됩니다.
센서 읽기
struct GetValue {
int riverLevel() { // 강 수위
const int val = analogRead(A2);
if(proDebug) { Serial.print(" River Level "); Serial.println(val); }
return val;
}
int riverPh() { // 강 pH
const int val = (analogRead(A1) / 5 * 3.3);
if(proDebug) { Serial.print(" River Ph "); Serial.println(val); }
return val;
}
int riverPol() { // 강 오염도
const int val = analogRead(A3);
if(proDebug) { Serial.print(" River Pollution "); Serial.println(val); }
return val;
}
};