Skip to content

CMYMC/Project-SmartFarm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 

Repository files navigation

Smart Farm

1. 개요

STM32, FreeRTOS를 기반으로 온습도 및 수위 데이터를 실시간 모니터링하고, 환경 변화에 따라 팬(Fan)과 펌프(Pump)를 자동 제어하여 최적의 환경을 조성하는 스마트팜 시스템 개발

2. 구성도 (System Architecture)

흐름도
  • Main Controller (STM32): FreeRTOS 기반으로 센서 데이터 수집 및 액추에이터 제어 태스크 스케줄링
  • Sensor: 온습도 센서(DHT11)와 물 수위 센서(ADC)를 통한 실시간 환경 데이터 수집
  • Actuator: 온도에 따른 스텝모터(선풍기) 속도 제어, 수위에 따른 서보모터(물 펌프) 구동
  • Monitoring: I2C LCD를 통한 데이터 시각화 및 RGB LED/Buzzer를 통한 직관적인 상태 알림

3. 기능 설명

1. 온습도 모니터링 및 자동 제어

기능1

DHT11 센서를 통해 실내 환경 데이터를 정밀하게 수집하고, 상황에 맞춰 능동적으로 대처합니다.

  • 정밀 데이터 수집: 센서로부터 40bit 데이터(16bit 온도 + 16bit 습도 + 8bit 체크섬)를 읽어오고, 이를 10진수로 변환하여 LCD 디스플레이에 실시간으로 표시합니다
  • 자동 온도 조절: 온도가 30℃ 이상으로 상승하면 스텝모터(선풍기)의 회전 속도를 자동으로 증가시켜 쾌적한 환경을 유지합니다

2. 스마트 수위 관리 시스템

기능2

물 수위 센서값을 분석하여 식물에 필요한 물을 자동으로 공급하거나 위험 상황을 알립니다.

  • 지능형 급수: 수위 부족 감지 시 서보모터(펌프)가 작동하며, 부족한 정도에 따라 2회, 3회, 4회 등 횟수를 조절하여 최적의 급수를 수행합니다
  • 만수 경고: 수위가 기준치 이상으로 높아져 넘칠 위험이 있을 경우, **부저(Buzzer)**를 울려 관리자에게 즉각 알림을 보냅니다

3. 시각화

기능3
  • RGB LED로 시스템 전체 상태 표시
    • 🟢 정상: 수위 정상 및 온도 30℃ 미만
    • 🟡 경계: 수위 낮음 또는 온도 30~32℃ 구간
    • 🔴 경고: 수위 높음 또는 온도 33℃ 이상
  • 안정적 멀티태스킹: 센서, LCD, 펌프, 팬 제어를 각각 독립적인 태스크로 분리하고 우선순위를 최적화하여, 특정 작업 부하로 인해 LCD가 갱신되지 않는 문제를 해결했습니다

4. RTOS 태스크 제어

기능4

FreeRTOS를 적용하여 각 기능을 독립적인 태스크로 분리하고 효율적인 멀티태스킹을 구현

  1. Task 분리: WaterLevel, ServoBuzzer, DHT(온습도), LCD, StepMotor, RGB 등으로 기능별 태스크 생성
  2. 우선순위 관리: 센서 데이터 처리와 모터 제어 등 중요도에 따라 태스크 Priority(우선순위)를 차등 부여하여 시스템 안정성 확보

4. 시연 영상 (Demonstration)

1. 온도 상승에 따른 자동 팬 가동

  • 시나리오: 온습도 센서(DHT11)에 열을 가해 온도가 30℃ 이상으로 상승
  • 동작: 설정 온도를 초과하자 스텝모터(선풍기)가 회전을 시작하여 온도를 낮춤
1.mp4

2. 수위 감지 및 펌프/부저 작동

  • 시나리오: 물 수위 센서를 물에 담가 수위 변화를 감지
  • 동작:
    • 물 부족 시: 서보모터(펌프)가 작동하여 급수 시뮬레이션
    • 만수 시: 부저(Buzzer)가 울리며 경고 알림 발생
_.2.mp4

5. 주요 기술

구성 요소 역할 및 기술
STM32F411RE 메인 컨트롤러, ADC, PWM, Timer, GPIO, I2C 통신 제어
FreeRTOS 실시간 운영체제 적용, 태스크 스케줄링 및 자원 관리
Sensors DHT11(1-wire 통신 프로토콜), 물 수위 센서(ADC) 데이터 처리]
Actuators 스텝모터(1-2상 여자 방식 제어), 서보모터(PWM Duty Cycle 제어)
Display I2C 통신을 활용한 LCD 데이터 출력 및 커서 제어

6. 트러블 슈팅 (Troubleshooting)

[FreeRTOS 태스크 우선순위 문제]

  • 현상: 온습도 센서의 값이 LCD에 업데이트되지 않고 멈추거나 동작하지 않는 현상 발생
  • 원인: DHT_Task의 우선순위(Priority)가 낮게 설정되어 있어, 다른 태스크에 밀려 센서 값을 제때 읽어오지 못함
  • 해결: 센서 데이터 처리 태스크의 우선순위를 Normal로 상향 조정하여 정상 작동 확인. RTOS 환경에서 필수 작업의 실행 보장을 위한 우선순위 설계의 중요성을 체감했습니다.

[스텝모터 속도 제어 불안정 문제]

  • 현상: 팬(선풍기) 역할로 스텝모터를 사용했으나, 속도 조절이 원활하지 않고 모터가 떨리거나 멈추는 현상 발생.
  • 원인: 스텝모터는 정확한 각도 제어가 목적임에도 불구하고, 일반 DC 모터처럼 PWM(Duty Cycle)으로 단순 속도 제어를 시도함.
  • 해결:
    1. 제어 방식 변경: PWM 제어가 아닌 **펄스 간 딜레이(Delay)**를 조절하는 주파수 기반 제어 방식을 도입.
    2. 한계 주파수 분석: 데이터시트를 통해 Idle Out-traction Frequency(정지 상태에서 기동 가능한 최대 주파수, 약 1000Hz)를 확인. 1000Hz 이상의 빠른 펄스를 주면 모터가 구동을 따라가지 못해 토크를 잃음을 파악.
    3. 파라미터 최적화: 펄스 간 딜레이를 900μs(약 1111Hz) 근사치로 설정하여, 모터가 탈조 없이 낼 수 있는 최대 속도 구간을 찾아 적용.
  • 배운 점: 스텝모터의 속도는 'PWM 비율'이 아닌 **'펄스 주기'**로 결정된다는 점을 명확히 이해했습니다. 또한, 단순 구현에 앞서 데이터시트의 주파수/토크 특성을 먼저 파악해야 진동과 토크 손실 없는 안정적인 제어가 가능하다는 것을 배웠습니다.

7. 고찰

하드웨어 제어에 대한 이해:
스텝 모터의 데이터시트를 분석하여 주파수 한계(Idle In-traction Frequency)를 파악하고, 이를 코드의 딜레이 값(900us)에 반영함으로써 탈조 없이 최대 속도로 제어하는 최적화 과정을 경험했습니다.

시스템 통합 역량:
개별적으로 동작하는 센서와 모듈들을 FreeRTOS 환경에서 통합하고, 태스크 간의 간섭을 줄이며 유기적으로 동작시키는 임베디드 소프트웨어 구조를 설계하는 능력을 키웠습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published