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 파일 생성 | 공식 홈페이지 |
| STM32CubeMX | 6.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 |
| 검정 | GND | HX711 GND |
| 녹색 | S+ | HX711 A+ |
| 흰색 | S- | HX711 A- |
4. 하드웨어 연결 절차
기본 원칙
- 모든 장치의 GND 공유 필요
- HX711 5V, OLED 3.3V 공급
- 신호선은 간섭 요소와 분리 설치
- 전원-지ROUND 먼저 연결 후 신호선 연결
상세 연결표
| 모듈 | 핀 | 연결 대상 | 비고 |
|---|---|---|---|
| STM32 | VIN | 5V 전원 | 시스템 전원 |
| STM32 | GND | 모든 장치 GND | 공통 접지 |
| STM32 | 3.3V | OLED VCC | 3.3V 출력 |
| HX711 | VCC | STM32 5V | 5V 공급 |
| HX711 | DOUT | PA1 | 입력 신호 |
| HX711 | SCK | PA0 | 시계 신호 |
| HX711 | A+ | 센서 녹색 선 | 신호 양극 |
| HX711 | A- | 센서 흰색 선 | 신호 음극 |
| OLED | VCC | STM32 3.3V | 3.3V 공급 |
| OLED | SDA | PB7 | I2C 데이터 |
| OLED | SCL | PB6 | I2C 시계 |
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에 나타나도록 설계되었습니다.