산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

정밀 기압계 모니터: 아두이노 우노/나노 듀얼 다이얼 바로미터

부품 및 소모품

부품 수량 비고
아두이노 나노 R3 1 3시간 기압 변화/예보 전용
아두이노 우노 (ATmega328 베어본, 베로보드 구현) 1 메인 기압계 + 6시간 변화 표시용

프로젝트 개요

정밀 기압계 모니터: 아두이노 우노/나노 듀얼 다이얼 바로미터
12인치(300mm) 아날로그 다이얼에 3개 스테퍼 모터로 기압 표시

아두이노 우노와 나노 두 대를 사용해 12인치(300mm) 아날로그 다이얼에 기압을 표시하는 정밀 바로미터입니다. 3개의 NEMA 17 스테퍼 모터(A4988 드라이버 구동)가 각각 메인 기압, 6시간 변화, 3시간 변화를 가리킵니다.

주요 기능

기존 아날로그 바로미터와의 차별점

일반 아날로그 바로미터는 현재 기압만 가리키고, 사용자가 별도 바늘로 기준점을 맞춰 변화를 직접 읽어야 합니다. 본 프로젝트는 자동으로 3시간/6시간 변화량을 별도 다이얼에 연속 표시하고, 기상 예보 알고리즘을 내장해 LED로 직관적으로 알려줍니다.

정밀 기압계 모니터: 아두이노 우노/나노 듀얼 다이얼 바로미터
접근하는 폭풍에 반응하는 바늘과 예보 LED 타임랩스

확장 범위 다이얼 설계

일반 기압 범위(990~1050 hPa)에서는 고해상도 표시를, 극한 상황에서는 확장 스케일로 전환합니다.

범위 초과 시 양쪽 LED 동시 점등으로 경고합니다. 2020년 1월 영국 남부 1050 hPa 기록 고기압 때 메인 다이얼 확장 범위가 실제 작동함을 검증했습니다.

LCD 정보 표시

기상 예보 알고리즘 (8개 LED)

해수면 기압과 3시간 변화율을 조합해 8가지 예보 상태를 LED 조합으로 표시:

기압 범위 3시간 변화 예보 점등 LED
< 1009 hPa 상승/보합 (≥ 0) 맑아지고 선선함 Clearing + Cool
< 1009 hPa 천천히 하강 (-1.5 ~ 0) 비 Rain + Threat
< 1009 hPa 급격 하강 (< -1.5) 폭풍 접근 Stormy + Threat
1009~1022 hPa 변화 미미 (±1.5) 현재 상태 유지 Fair + No Change
1009~1022 hPa 급격 상승 (> 1.5) 맑아짐 Clear
1009~1022 hPa 급격 하강 (< -1.5) 비/눈 가능성 Rain + Change
> 1022 hPa 상승/보합 (≥ 0) 건조/맑음 지속 Dry + Fair
> 1022 hPa 천천히 하강 (-1.5 ~ 0) 맑음 Fair
> 1022 hPa 급격 하강 (< -1.5) 변화 임박 Change + Threat

하드웨어 모듈 상세

마이크로컨트롤러

전원

센서: BMP180 × 2개

I2C 인터페이스 기압/온도 센서. 3.3V 전원 필수 (5V 연결 시 영구 손상). SCL/SDA는 5V MCU에 직결 가능 (오픈 드레인).

RTC: DS3231 AT24C32

고정밀 I2C RTC. UTC 기준 동작 (서머타임 미적용). 충전용 리튬이온 배터리 회로(R5 저항) 제거 후 비충전 코인셀(CR2032) 사용 권장.

스테퍼 모터: NEMA 17 1.8° × 3개

1.8°/스텝 (200스텝/회전) 필수. 28BYJ-48(5V, 5.625°) 사용 불가. A4988 드라이버로 1/16 마이크로스텝 구동 (3200마이크로스텝/회전).

드라이버: A4988 × 3개

기계적 제작

다이얼 제작

  1. 1.5mm 알루미늄 시트 준비 (보호 필름 부착 상태)
  2. CAD에서 다이얼 도면 출력 (A3, 모든 홀 센터 마크 포함) → 종이 템플릿으로 센터펀치 마킹
  3. 3mm LED 홀, 스테퍼 축 홀(확대) 드릴링
  4. 보호 필름 제거 → 디버링 → 프라이머 → 탑코트(엔틱 화이트) → 매트 클리어
  5. 워터슬라이드 데칼 전사지로 눈금/숫자 인쇄 전사 → 바니시 코팅

바늘 제작

시계용 초침 기성품을 조합/가공. 스테퍼 축에 블루택(Blu Tack)으로 고정 (탈착 용이). 메인 바늘은 3개 기성품 부품으로 직접 제작.

케이스: 두 가지 스타일

정밀 기압계 모니터: 아두이노 우노/나노 듀얼 다이얼 바로미터
GTV 270° 인셋 힌지로 벽면 마운트, 개폐 가능

베로보드 배선

메인 베로보드에 MCU, 드라이버, RTC, 센서, LCD, 설정 스위치 모두 실장. LED 전용 별도 베로보드로 분리해 다이얼 탈착 시 커넥터만 뽑으면 되게 설계.

소프트웨어 구조

두 MCU가 독립 펌웨어로 동작하며, 메인 MCU(우노)가 RTC 관리와 1시간 펄스를 나노(3시간용)로 전송.

메인 펌웨어 (BarometerA4988_23.ino)

3시간/예보 펌웨어 (BarometerA4988_3hour__21.ino)

초기 설정 및 캘리브레이션

  1. RTC 설정: "Select Setting Enable" 스위치 ON → 포텐쇼미터로 메뉴 선택(시/분 전진/후진) → 빨간 버튼으로 변경
  2. 6시간 바늘: 인치 모드로 눈금 정렬 → 스텝 모드로 기준값(부팅 시 6시간 전 기압) 맞춤
  3. 메인 바늘: 동일하게 인치→스텝으로 현재 해수면 기압 맞춤
  4. 3시간 바늘: 나노 측 4개 버튼(인치 전진/후진, 스텝 전진/후진)으로 0점 정렬 후 기준값 맞춤

초기 6~8시간 동안은 히스토리 버퍼가 채워질 때까지 과거 데이터 수동 입력(코드 내 hour0~hour7 초기값 설정) 권장.

회로도

정밀 기압계 모니터: 아두이노 우노/나노 듀얼 다이얼 바로미터

소스 코드 (요약)

전체 코드는 길어 주요 구조만 요약. 전체 파일은 첨부 참조.

메인 펌웨어 핵심 루틴

// 주요 라이브러리
#include 
#include 
#include 
#include 

// 스테퍼 설정 (1/16 마이크로스텝)
AccelStepper stepper(1, stepPin, dirPin);      // 메인 바늘
AccelStepper stepper2(1, stepPin2, dirPin2);   // 6시간 바늘

// 8시간 기압 히스토리 링버퍼
int hour0=1013, hour1=1014, hour2=1015, hour3=1016;
int hour4=1016, hour5=1016, hour6=1012, hour7=1013;

void loop() {
  // RTC 읽기
  readDS3231time(&second, &minute, &hour, ...);
  
  // 10분마다 기압 측정 (분 0,10,20,30,40,50 초 59)
  if (minute % 10 == 0 && second == 59 && checkStop == 0) {
    getPressure();  // BMP180 읽기 → seaPressure 계산
    checkStop = 1;
  }
  
  // 정시 15초: 3시간 MCU로 시간 펄스 전송
  if (minute == 0 && second == 15) digitalWrite(hourPulse, HIGH);
  
  // 정시: 6시간 바늘 업데이트
  if ((minute == 59 && second > 50) || (minute == 0 && second < 10)) {
    if (hour != hourPrevious) {
      hourDiff = hour0 - hour6;  // 6시간 전과 비교
      hourChange = calculateSteps(hourDiff);
      if (hourChange > 0) stephourFwd();
      else if (hourChange < 0) stephourBwd();
      hourPrevious = hour;
      // 링버퍼 시프트
      hour7=hour6; hour6=hour5; ... hour0=seaPressure;
    }
  }
  
  // 설정 모드: 포텐쇼미터로 메뉴 선택, 버튼으로 실행
  if (digitalRead(adjustOn) == HIGH) Settings();
}

3시간/예보 펌웨어 핵심 루틴


#include 
#include 
#include 

AccelStepper stepper(1, stepPin, dirPin);  // 3시간 바늘

float hour0=1036.0, hour1=1036.0, hour2=1036.0, hour3=1036.0, hour4=1036.0;

void loop() {
  // 메인 MCU에서 1시간 펄스 수신
  if (digitalRead(hourPulse) == HIGH && hourPulseOff == 0) {
    getPressure();           // 기압 읽기
    getForecast();           // 예보 계산 → LED 점등
    showLCD();               // LCD 업데이트
    hourPulseOff = 1;
  } else if (digitalRead(hourPulse) == LOW) {
    hourPulseOff = 0;
  }
  
  // 3시간 바늘 자동 업데이트
  if (hourChange > 0 && hourChange < 20) { stephourFwd(); hourChange = 0; }
  else if (hourChange < 0 && hourChange > -20) { stephourBwd(); hourChange = 0; }
  
  // 수동 캘리브레이션 버튼 처리
  // ...
}

void getForecast() {
  // 기압 + 3시간 변화율로 8가지 예보 분기
  if (seaPressure < 1009 && hourDiff >= 0) { ClearforecastLED(); digitalWrite(ledChange, HIGH); digitalWrite(ledClear, HIGH); }
  else if (seaPressure < 1009 && hourDiff < 0 && hourDiff >= -1.5) { ClearforecastLED(); digitalWrite(ledRain, HIGH); digitalWrite(ledThreat, HIGH); }
  else if (seaPressure < 1009 && hourDiff < -1.5) { ClearforecastLED(); digitalWrite(ledStormy, HIGH); digitalWrite(ledThreat, HIGH); }
  else if (seaPressure >= 1009 && seaPressure <= 1022 && hourDiff >= -1.5 && hourDiff <= 1.5) { ClearforecastLED(); digitalWrite(ledNoChange, HIGH); digitalWrite(ledFair, HIGH); }
  // ... 나머지 분기 생략
}

참고 자료 및 다운로드

이 프로젝트는 정밀 기계 가공, 임베디드 프로그래밍, 기상학 지식이 결합된 고급 메이커 프로젝트입니다. 단계별로 차근차근 따라 하면 나만의 정밀 아날로그 기압계를 완성할 수 있습니다.

제조공정

  1. 무수은 기압계: 설계, 역사 및 압력 측정의 미래
  2. 혈압계: 설계, 제조 및 미래 트렌드
  3. 소화기: 유형, 설계 및 미래 트렌드
  4. 산업 및 안전용 정밀 압력 게이지
  5. 블루투스 제어 아두이노 스파이봇(Spybot) 만들기
  6. 플릭모트(FlickMote): 스마트 홈을 위한 제스처 제어 IR 리모컨
  7. DIY 아두이노 TV B-Gone: 모든 TV를 끄는 만능 리모컨
  8. 아두이노로 만드는 대형 LED 마스터 시계 (알람 기능 포함, 12m 거리에서도 식별 가능)
  9. 컴팩트 기상 관측소: 아두이노 나노 & ESP8266, BMP280 기압계 & OLED/노키아 LCD
  10. 아두이노와 블루투스로 만드는 스마트 물건 찾기 'Find Me'