릴레이 제어함에서 아두이노 I2C LCD가 멈출 때

profile_image
작성자 임베디드인터뷰어하린
댓글 0건 조회 6회

현장에서 먼저 보이는 증상은 화면이 아니라 버스입니다

Q. 릴레이가 붙었다 떨어질 때마다 LCD가 멈춥니다. LCD 불량부터 의심해야 할까요?

A. 바로 LCD 모듈을 교체하기보다 I2C 통신이 순간적으로 깨지는 장면을 먼저 의심하는 편이 맞습니다. 특히 펌프, 솔레노이드 밸브, 팬, 히터처럼 코일이나 모터가 붙은 부하를 릴레이로 켜고 끄는 제어함에서는 SDA, SCL 라인이 짧게 흔들려도 화면이 얼어붙을 수 있습니다.

아두이노 스케치가 계속 돌고 있는데도 I2C LCD만 갱신되지 않는다면, MCU 전체가 멈춘 것이 아니라 버스 트랜잭션이 중간에서 꼬인 상태일 가능성이 큽니다. 독자는 이런 상황을 겪습니다. 버튼은 반응하는데 LCD 숫자만 멈춰 있고, 전원을 껐다 켜면 다시 정상으로 돌아오는 식입니다.

  • 전원 리셋형 증상: 아두이노까지 재부팅되며 부팅 메시지가 다시 보입니다.
  • I2C 락업형 증상: MCU는 살아 있지만 LCD, 온습도 센서, RTC 같은 I2C 장치 응답만 멈춥니다.
  • 간헐 오표시형 증상: 글자가 깨지거나 커서 위치가 밀리며 다음 갱신부터 복구되기도 합니다.

Q. 왜 유독 제어함 안에서 문제가 잘 생기나요?

A. 제어함은 보기보다 거친 환경입니다. 5V 로직 신호, 12V 릴레이 코일, 24V 산업용 전원, AC 부하 배선이 좁은 공간에 함께 지나갑니다. 아두이노 자체는 교육용·시제품 제작에 매우 편한 플랫폼이지만, 제어함 배선에서는 전원 품질과 접지 경로를 따로 설계해야 합니다. 기본 개념은 아두이노 설명처럼 빠르게 실험하는 장점에서 출발하지만, 현장 설치에서는 노이즈 대응이 성패를 가릅니다.

전문가 팁: LCD가 멈춘 순간에 시리얼 로그가 계속 찍히는지 확인하세요. 로그가 살아 있다면 펌웨어 전체 오류보다 I2C 버스 복구 루틴과 배선 품질을 먼저 보는 것이 빠릅니다.

인터뷰로 짚어보는 I2C LCD 멈춤의 1차 원인

Q. 가장 흔한 원인은 긴 배선인가요, 풀업 저항인가요?

A. 둘 중 하나만 고르면 오히려 놓치는 것이 많습니다. I2C 통신은 원래 보드 안의 짧은 거리에서 칩끼리 대화하는 데 잘 맞습니다. 그런데 LCD를 제어함 문짝에 붙이고 아두이노는 안쪽 DIN 레일 근처에 두면 SDA와 SCL이 30cm, 50cm, 때로는 1m 이상 늘어납니다. 이때 선의 정전용량이 커지고 상승 시간이 느려지면서 풀업 저항값이 민감해집니다.

많은 I2C LCD 백팩에는 이미 4.7kΩ 정도의 풀업이 들어 있습니다. 여기에 센서 모듈 여러 개를 더 붙이면 각 모듈의 풀업이 병렬로 걸려 전체 저항이 너무 낮아질 수 있습니다. 반대로 긴 배선인데 풀업이 약하면 HIGH로 올라가는 시간이 늦어져 클럭 에지가 뭉개집니다. 결국 질문은 “풀업을 달았나요?”가 아니라 “현재 버스 길이와 장치 수에서 상승 시간이 충분히 빠른가요?”가 되어야 합니다.

  1. LCD 백팩, RTC, 센서 모듈에 풀업 저항이 이미 있는지 육안이나 회로도로 확인합니다.
  2. 장치가 여러 개라면 전체 풀업 저항의 병렬값을 계산합니다. 4.7kΩ 두 개면 약 2.35kΩ입니다.
  3. 배선이 길거나 노이즈가 강하면 I2C 속도를 400kHz보다 100kHz 또는 그 이하로 낮춰 재현성을 봅니다.
  4. 오실로스코프가 있다면 SDA/SCL의 LOW, HIGH 레벨과 상승 시간을 함께 확인합니다.

Q. 릴레이 코일이 그렇게 큰 문제를 만들 수 있나요?

A. 릴레이 코일은 전원을 끊는 순간 역기전력을 만듭니다. 보드형 릴레이 모듈에는 다이오드가 들어간 경우가 많지만, 모든 제품이 충분히 깔끔한 것은 아닙니다. 또 코일 쪽이 괜찮아도 릴레이 접점이 모터나 밸브를 끊을 때 접점 아크와 전원선 노이즈가 생길 수 있습니다. 이 노이즈가 I2C 배선과 나란히 달리면 LCD가 멈추는 조건이 만들어집니다.

  • 코일 노이즈: 릴레이 입력·코일 전원·MCU 전원이 한 지점에서 섞일 때 커집니다.
  • 부하 노이즈: 모터, 솔레노이드, 히터 제어선이 신호선과 붙어 지나갈 때 강해집니다.
  • 접지 바운스: 릴레이가 동작하는 순간 GND 기준점이 흔들려 I2C 레벨 판정이 틀어집니다.

제어함 배선을 바꾸면 펌웨어보다 먼저 좋아집니다

Q. 배선은 어떻게 나누는 것이 좋습니까?

A. 제어함 내부에서는 ‘짧게’보다 먼저 ‘분리해서’가 중요할 때가 많습니다. SDA와 SCL은 서로 꼬거나 GND와 함께 묶어 기준점을 안정시키고, 릴레이 접점으로 가는 AC 또는 고전류 DC 배선과는 물리적으로 떨어뜨립니다. 문짝 LCD로 가는 케이블은 가능하면 쉴드 케이블이나 꼬임선 계열을 쓰고, 쉴드는 한쪽 접지로 시작하는 것이 무난합니다.

특히 전자회로 초보자가 많이 하는 실수는 5V, GND, SDA, SCL 네 가닥을 아무 점퍼선으로 길게 빼는 것입니다. 책상 위에서는 잘 동작하지만 제어함 문을 여닫을 때 접촉 저항이 달라지고, 케이블이 릴레이 전원선 옆으로 붙으면서 문제가 재현됩니다. 커넥터도 중요합니다. 듀폰 점퍼는 실험용으로 충분하지만 진동이 있는 장비 내부에서는 나사식 단자대, JST, 몰렉스류 커넥터가 훨씬 안정적입니다.

  • SDA/SCL과 GND를 함께 이동: 신호 기준점을 같이 보내야 레벨 판정이 덜 흔들립니다.
  • 릴레이 접점 배선과 교차는 직각: 나란히 오래 달리는 구간을 줄이는 것이 핵심입니다.
  • 문짝 이동부 여유: 케이블 타이를 너무 세게 조이면 문을 열 때 단선이 시작될 수 있습니다.
  • LCD 전원 별도 필터링: LCD 백라이트 전류 변동이 로직 전원에 얹히지 않게 10uF~100uF 캐패시터를 가까이에 둡니다.

Q. 배선만으로 안 되면 어떤 부품을 추가해야 하나요?

A. 우선 릴레이 코일에는 플라이백 다이오드나 스너버 구성이 제대로 있는지 확인합니다. AC 부하나 모터 접점에는 RC 스너버, 바리스터, 서지 흡수 소자가 도움이 됩니다. I2C 쪽에는 장거리 전송용 버퍼나 아이솔레이터를 고려할 수 있지만, 바로 부품을 추가하기보다 배선·전원·속도 조정으로 증상이 줄어드는지 먼저 보는 것이 비용 면에서 좋습니다.

전문가 팁: I2C 문제를 부품으로만 해결하려 하면 원인을 가릴 수 있습니다. 릴레이를 수동으로 빠르게 온오프했을 때, 부하를 빼고 코일만 동작했을 때, LCD 케이블을 짧게 했을 때를 나눠 시험하면 범인이 또렷해집니다.

펌웨어에서는 멈춤을 전제로 복구 루틴을 둡니다

Q. 코드에서 할 수 있는 방어책은 무엇인가요?

A. 현장형 임베디드 개발에서는 통신이 한 번도 깨지지 않는다고 가정하면 위험합니다. LCD 갱신 함수가 내부에서 기다리다가 빠져나오지 못하면 전체 표시 흐름이 멈춘 것처럼 보입니다. 따라서 I2C 호출을 주기 작업 안에 넣되, 일정 시간 이상 응답이 없으면 버스를 재초기화하고 화면을 다시 그리는 구조가 필요합니다.

아두이노 환경에서는 Wire 라이브러리의 타임아웃 지원 여부를 보드 코어별로 확인해야 합니다. AVR 기반 Uno 계열, ESP32, RP2040, SAMD 계열은 I2C 드라이버 구현과 옵션이 다를 수 있습니다. 개발환경과 드라이버의 관계를 넓게 이해하려면 디바이스 드라이버 통합개발환경의 개요 같은 자료를 함께 보면, 단순 스케치 아래에 하드웨어 추상화 계층이 있다는 감각을 잡는 데 도움이 됩니다.

  1. LCD 갱신 주기를 너무 빠르게 잡지 않습니다. 온도 표시라면 200ms보다 1초 갱신이 안정적입니다.
  2. I2C 전송 실패 카운터를 두고, 연속 실패 시 Wire 재시작과 LCD init을 수행합니다.
  3. 중요 제어 로직과 표시 로직을 분리합니다. LCD가 멈춰도 펌프 제어가 함께 멈추면 안 됩니다.
  4. 부팅 직후 전체 화면을 매번 지우기보다 바뀐 영역만 갱신해 통신량을 줄입니다.

Q. LCD를 매번 clear() 하는 습관도 문제인가요?

A. 의외로 그렇습니다. I2C LCD에서 clear()는 화면 전체 명령을 보내고 내부 처리 시간을 기다립니다. 루프마다 clear()를 호출한 뒤 모든 문자열을 다시 쓰면 버스 사용량이 늘고 깜빡임도 심해집니다. 릴레이가 자주 동작하는 장비라면 통신량이 많은 순간과 노이즈가 생기는 순간이 겹칠 확률도 올라갑니다.

실무에서는 표시 문자열을 이전 값과 비교해 달라진 줄만 갱신합니다. 예를 들어 “TEMP: 24.8C”에서 숫자만 바뀐다면 커서를 해당 위치로 옮겨 숫자 영역만 덮어씁니다. 이런 작은 습관이 센서 연결 안정성에도 영향을 줍니다. LCD가 버스를 길게 점유하지 않으면 같은 버스에 달린 온습도 센서나 RTC도 응답 기회를 안정적으로 얻습니다.

  • 권장: 값 변경 감지 후 필요한 문자만 갱신
  • 주의: loop()마다 lcd.clear()와 전체 문자열 재출력
  • 현장 팁: 오류 발생 시 화면에 ERR만 띄우지 말고 시리얼 로그에 실패 주소와 횟수를 남깁니다.

측정 없이 바꾸지 말아야 할 설정과 부품값

Q. 풀업 저항은 무조건 2.2kΩ으로 낮추면 되나요?

A. 아닙니다. 긴 배선에서 4.7kΩ이 약해 보인다고 2.2kΩ이나 1kΩ으로 낮추면 상승 시간은 빨라질 수 있지만, LOW를 끌어내리는 장치의 전류 부담이 커집니다. 특히 여러 I2C 모듈이 이미 풀업을 갖고 있다면 실제 합성 저항은 생각보다 낮아져 장치 스펙을 벗어날 수 있습니다. “낮을수록 강하다”가 아니라 “버스와 장치가 감당하는 범위 안에서 충분하다”가 기준입니다.

간단한 판단법은 단계적으로 바꾸는 것입니다. 먼저 장치 수를 줄여 LCD만 연결해 보고, 다음에는 케이블 길이를 줄여 봅니다. 그다음 풀업 저항을 조정합니다. 이렇게 순서를 나누면 부품값 하나를 바꿨을 때 어떤 현상이 달라졌는지 알 수 있습니다. 사물인터넷 장비처럼 데이터를 오래 쌓아야 하는 시스템이라면 재현성 있는 테스트가 더 중요합니다. 라이프로그처럼 장기간 상태를 기록하는 개념은 라이프로그 서비스 설명에서도 확인할 수 있는데, 장비 로그 역시 순간 정상보다 긴 시간의 안정성을 보는 방식이 유리합니다.

점검 항목현장에서 보는 기준잘못 바꾸면 생기는 문제
풀업 저항모듈 내장값과 병렬값 계산전류 과다 또는 상승 시간 지연
I2C 속도100kHz 이하부터 안정성 확인빠른 속도에서 간헐 NACK 발생
케이블 길이문짝 LCD는 가능한 짧고 고정정전용량 증가와 접촉 불량
전원 필터LCD 근처 캐패시터 추가백라이트 변동이 로직에 유입

Q. 오실로스코프가 없으면 어디까지 확인할 수 있습니까?

A. 오실로스코프가 있으면 가장 좋지만, 없어도 꽤 많은 것을 분리할 수 있습니다. 릴레이 부하를 빼고 코일만 동작시켜 보고, 부하를 더미 램프로 바꿔 보고, LCD 케이블을 짧게 붙여 보는 방식입니다. 이 세 조건에서 증상이 어떻게 달라지는지 기록하면 노이즈의 입구가 코일인지, 접점 부하인지, 신호선 길이인지 좁혀집니다.

  • 조건 A: 릴레이 모듈 입력만 토글하고 실제 부하는 연결하지 않습니다.
  • 조건 B: 실제 부하 대신 작은 램프나 저항성 부하로 바꿉니다.
  • 조건 C: LCD를 아두이노 바로 옆에 두고 10cm 내 배선으로 시험합니다.
  • 조건 D: 릴레이 전원과 아두이노 전원을 분리하되 GND 기준 연결을 의도적으로 관리합니다.

산업용 제어와 취미 프로젝트 사이의 회색지대

Q. 그럼 I2C LCD를 제어함에 쓰면 안 되는 건가요?

A. 꼭 그렇지는 않습니다. 짧은 거리, 낮은 노이즈, 명확한 전원 분리, 복구 가능한 펌웨어가 갖춰져 있다면 I2C LCD는 여전히 저렴하고 편한 선택입니다. 소형 배양기, 테스트 지그, 교육용 자동화 장치, 실내 환경 모니터처럼 사람이 가까이서 보는 장비에는 비용 대비 만족도가 높습니다. 다만 장비가 멈추면 재산 피해나 안전 문제가 생기는 환경이라면 표시 장치 선택부터 달라져야 합니다.

산업 현장에 더 가까운 장비라면 RS-485 기반 표시기, 절연된 통신 모듈, 별도 HMI 패널, 광절연 입력 설계를 검토해야 합니다. I2C는 편리하지만 장거리·고노이즈·다중 접지 환경을 위해 태어난 버스는 아닙니다. 독자가 만들고 있는 장치가 “책상 위 프로젝트”인지 “사람이 없는 밤에도 돌아가는 설비”인지 먼저 정하면, 어디까지 보강해야 하는지 판단이 쉬워집니다.

  • 써도 좋은 경우: 케이블이 짧고, 릴레이 부하가 작고, 멈춰도 수동 복구가 쉬운 장치
  • 재검토할 경우: 모터와 AC 부하가 많고, 제어함 문짝까지 긴 케이블이 필요한 장치
  • 다른 통신 권장: 수 미터 이상 떨어진 표시부, 외부 노이즈가 강한 공장 설비, 접지 전위차가 큰 현장

Q. 이 글에서 다루지 못한 예외는 무엇인가요?

A. 모든 LCD 멈춤이 I2C 노이즈 때문은 아닙니다. 메모리 누수, 문자열 버퍼 오버런, 전원 어댑터 용량 부족, 잘못된 라이브러리 초기화 순서, MCU 보드의 레귤레이터 발열도 같은 증상을 만들 수 있습니다. 특히 ESP32처럼 Wi-Fi를 함께 쓰는 보드에서는 무선 송신 순간 전류가 튀면서 5V 또는 3.3V 레일이 흔들릴 수 있습니다.

또한 실제 장비 인증, 전기안전, 화재 위험, 접지 설계는 블로그 글 하나로 단정할 수 없습니다. 릴레이 제어함이 상시 운전 장비라면 부하 전류, 차단기, 퓨즈, 접지, 절연거리, 케이블 규격을 별도 기준으로 확인해야 합니다. 이 글은 아두이노 I2C LCD가 릴레이 동작 때 멈추는 상황을 좁혀 보는 실무 관점이며, 고전압·고전류 제어반의 최종 설계 판단은 현장 조건과 안전 규격을 우선해야 합니다.

현장에서는 “잘 켜진다”보다 “나쁜 조건에서도 복구된다”가 더 중요합니다. I2C 버스가 한 번 흔들렸을 때 자동으로 돌아오는지까지 시험해야 실제 사용 시간이 길어집니다.

릴레이 제어함에서 아두이노 I2C LCD가 멈출 때

댓글목록

등록된 댓글이 없습니다.