STM32 기반 고정밀 무게 측정 시스템 개발 가이드

1. 프로젝트 개요

이 가이드는 임베디드 개발 초보자 및 실물 개발에 관심이 있는 개발자를 대상으로 합니다. STM32F103C8T6 마이크로컨트롤러를 활용해 HX711 무게 센서 모듈과 I2C 인터페이스 OLED 디스플레이를 연동하여 무게 데이터의 정밀 측정 및 실시간 표시 기능을 구현하는 방법을 상세히 설명합니다. 실제 회로 구성부터 코드 작성까지 단계별로 진행하며, 연결 방식 및 오류 해결 전략을 명확히 제시합니다. 모듈화된 코드 구조를 통해 직접 사용 가능한 상태로 제공하며, 이론적 지식과 실습을 병행한 접근 방식으로 초보자도 쉽게 이해할 수 있도록 구성했습니다.

핵심 기능 목록

  • HX711 24비트 ADC를 통한 고정밀 데이터 수집, CH-A 채널에서 128배 증폭 지원
  • 전원 온도 자동 교정 기능 포함
  • 환경 간섭 신호 필터링 알고리즘 적용
  • OLED 디스플레이를 통한 중문 텍스트 표시(단위: g)
  • 5V/3.3V 전원 공급 지원, 간단한 외부 장치 요구사항 충족

2. 필수 하드웨어 및 소프트웨어 도구

(1) 하드웨어 구성 요소

장치명규격수량기능 설명
STM32 컨트롤러STM32F103C8T6 최소 시스템 보드1개센서 데이터 처리 및 OLED 제어 핵심
HX711 무게 모듈CH-A/CH-B 채널 지원1개차분 신호 증폭 및 24비트 AD 변환
무게 센서4선 저항 변형 센서 (500g/1kg 등)1개mV급 차분 전압 출력
OLED 디스플레이I2C 인터페이스 (0.96인치)1개저전력 무게 값 표시
데이터 케이블모듈형 / 직결형여러 개기기 간 연결 용도
전원 어댑터5V/1A (USB 또는 직류)1개시스템 전체 전원 공급
표준 무게 블록정확한 무게 (500g/1kg 등)1세트시스템 정밀도 검증

(2) 소프트웨어 도구

도구명버전주요 기능다운로드 경로
Keil uVision5최신 버전C언어 프로그래밍 및 .hex 파일 생성공식 홈페이지
STM32CubeMX6.0 이상CLK, GPIO, I2C 설정ST 공식 사이트
STM32 프로그래머FlyMcu/ST-LINK.hex 파일 불러오기오픈소스 플랫폼
멀티미터기본형전압 및 연결 상태 확인온라인 쇼핑몰

3. 핵심 컴포넌트 세부 설명

(1) HX711 무게 센서 모듈

HX711은 고정밀 무게 측정을 위한 AD 변환 모듈로, 내부 저잡음 증폭기와 필터 기능을 갖추고 있습니다. STM32 및 센서와의 직접 연결이 가능하며 주요 특징은 다음과 같습니다:

  • 24비트 차분 입력 ADC, 22비트 정밀도 지원
  • CH-A 채널에서 128/64배 증폭, CH-B 채널 32배 증폭 지원
  • 2핀 GPIO로 DOUT/CLK 신호 전송 가능
  • 2.6~5.5V 전원 범위, 추천 전원 5V
  • 10Hz 샘플링 레이트, 정적 무게 측정 최적화

(2) 4선 저항 변형 센서

색상 기준으로 다음처럼 연결해야 합니다:

색상기능연결 대상
빨강VCC+HX711 VCC
검정GNDHX711 GND
녹색S+HX711 A+
흰색S-HX711 A-

4. 하드웨어 연결 절차

기본 원칙

  1. 모든 장치의 GND 공유 필요
  2. HX711 5V, OLED 3.3V 공급
  3. 신호선은 간섭 요소와 분리 설치
  4. 전원-지ROUND 먼저 연결 후 신호선 연결

상세 연결표

모듈연결 대상비고
STM32VIN5V 전원시스템 전원
STM32GND모든 장치 GND공통 접지
STM323.3VOLED VCC3.3V 출력
HX711VCCSTM32 5V5V 공급
HX711DOUTPA1입력 신호
HX711SCKPA0시계 신호
HX711A+센서 녹색 선신호 양극
HX711A-센서 흰색 선신호 음극
OLEDVCCSTM32 3.3V3.3V 공급
OLEDSDAPB7I2C 데이터
OLEDSCLPB6I2C 시계

5. STM32 소프트웨어 개발

1. STM32CubeMX 설정

STM32F103C8T6 프로젝트 생성 시 다음 설정 수행:

  • HSE 외부 크리스탈 사용
  • HCLK 72MHz 설정 (PLL ×9)
  • GPIO 설정: PB6/PB7 출력, PA1 입력
  • 코드 생성 후 Keil 프로젝트 생성

2. Keil5 코드 개선

OLED 드라이버 예제:


void OLED_ShowString(uint8_t Line, uint8_t Column, uint16_t Fontsize, const char* String) {
    uint8_t i, len = strlen(String);
    for(i=0; i

HX711 드라이버 예제:


unsigned long HX711_GetData() {
    unsigned long data = 0;
    uint32_t cont = 1;
    HX711_SCK_LOW();
    delay_us(1);
    while(HX711_DT && cont++);
    for (uint8_t bit=0; bit<24; bit++) {
        HX711_SCK_HIGH();
        delay_us(1);
        data = (data << 1) | (HX711_DT ? 1 : 0);
        HX711_SCK_LOW();
        delay_us(1);
    }
    return data ^ 0x800000;
}

6. 실험 결과

초기 전원 공급 시 무게 판이 비어 있어야 하며, 자동 교정 과정을 거친 후 무게 값을 실시간으로 표시합니다. 물체를 올렸을 때 해당 무게(g)가 OLED에 나타나도록 설계되었습니다.

태그: STM32F103C8T6 HX711 OLED I2C ADC

6월 9일 20:05에 게시됨