x0FANSA-hk 님의 블로그

자취방 식물성장 LED 자동화 시스템 본문

Planet

자취방 식물성장 LED 자동화 시스템

x0fansa-hk 2026. 7. 8. 14:46

제가 식물을 좋아합니다. 많이 좋아합니다. 어릴때부터 제 방에는 꼭 화분이 있었던 것 같습니다.

 이번에 자취방으로 옮겨가게 되면서 식물을 몇개 가져오게 되었습니다. 제 본가에서는 식물성장 LED가 특정 주기마다 ON/OFF되기 때문에 별도로 신경쓰지 않아도 알아서 낮시간에 켜지고 꺼집니다. 그러나 이번 자취방의 경우 그걸 들고올 수 없었는데, 심지어 북향이어서 식물 키우기에 빛은 필요한 상황이었습니다. 따라서 식물성장 LED스트립을 옷걸이를 가지고 잘 배치시켜서 식물에게 빛을 제공하게 하였습니다. 그런데 이것도 문제가 있습니다. 회로에 5V와 LED가 직결되는 방식이기에, 끄려면 제가 직접 손으로 회로를 붙였다끊었다 해야합니다. 따라서 이걸 NMOS를 통해 ESP32가 제어하도록 만들었던 이야기를 여기에서 풀어볼까 합니다.


회로 사전지식

사실 지금까지 제가 포스팅한 사전지식만 가지고 충분히 만들 수 있는 간략한 회로 입니다. 사전지식 모음 ↓ ↓ ↓

https://x0fansa-hk.tistory.com/59

 

8bit CPU 사전준비) 하이사이드 & 로우사이드 스위칭

저번시간에 이어 이번시간에도 왜 MOSFET을 단순 스위치로 치환하면 안되는지에 대해 알아보겠습니다.https://x0fansa-hk.tistory.com/32 8bit CPU 사전준비) 풀업 & 풀다운Mosfet을 우리는 흔히 스위치에 비유

x0fansa-hk.tistory.com

https://x0fansa-hk.tistory.com/55

 

ESP32 C3 OLED 워밍업

이번에 One-Plant-One-IOT 프로젝트에서 주력을 사용할 MCU는 ESP32 C3입니다. 이중에서도 SuperMini Size에 0.42인치 OLED가 내장되어있는 제품을 사용하게 되었습니다. ESP32의 경우 지능형센서응용에서 다룬

x0fansa-hk.tistory.com

https://x0fansa-hk.tistory.com/32

 

8bit CPU 사전준비) 풀업 & 풀다운

Mosfet을 우리는 흔히 스위치에 비유해서 표현합니다. 실제로 Mosfet의 쓰임의 반 정도는 스위칭에 사용되지요. 그렇게해서 빵판에 MOSFET을 꽂고 무언가를 돌려보겠다고 하면 아마 이론처럼 잘 되지

x0fansa-hk.tistory.com

https://x0fansa-hk.tistory.com/33

 

파워전달을 위한 C타입 - USB PD

요즘 USB-C타입 단자를 주위에서 보는것이 그리 어려운 일은 아닙니다. 당장 제가 글을 쓰는중인 휴대폰과 노트북도 C타입 단자를 쓰고, 무선이어폰, 보조배터리, sd카드 리더기, 전자담배, esp32 개

x0fansa-hk.tistory.com

위의 개념들을 숙지했으면 진행해 봅시다.


목표동작

 식물성장LED가 x시부터 y시까지는 ON, 그 나머지 시간에는 OFF가 되는 것이 목표 입니다. 그렇다면 우선 LED를 제어하기 위해 LED와 전원 사이에 NMOS를 달아줍니다. 이 NMOS를 ESP32를 통해서 x시부터 y시까지 NMOS를 온, 나머지 시간에는 오프를 하면 되겠죠? 여기서 NMOS제어핀은 배선상 3번핀으로 정했습니다. 이걸 구현할 코드를 만들었습니다.

[env:esp32-c3-devkitm-1]
platform = espressif32
board = esp32-c3-devkitm-1
framework = arduino
monitor_speed = 115200
build_flags = 
    -D ARDUINO_USB_MODE=1
    -D ARDUINO_USB_CDC_ON_BOOT=1
#include <Arduino.h>
#include <WiFi.h>
#include <time.h>

const char* ssid="와이파이";
const char* password="비밀번호";
const int controlPin=3;
const int startHour=7;  
const int endHour=19;
struct tm NOW;

void GTI() {
  if(!getLocalTime(&NOW)){
    printf("Fail to get TIME\n");
    return;
  }
}

void setup() {
  Serial.begin(115200);
  delay(2000);
  pinMode(controlPin, OUTPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status()!=WL_CONNECTED) delay(500);
  printf("\nWi-Fi Connected: %s\n\n",ssid);
  configTime(9*60*60, 0, "time.google.com");
}

void loop() {
  GTI();
  if(NOW.tm_hour>=startHour&&NOW.tm_hour<endHour) digitalWrite(controlPin, HIGH);
  else digitalWrite(controlPin, LOW);
  WiFi.disconnect(true);
  yield();
  WiFi.mode(WIFI_OFF);
  delay(300000);
  WiFi.begin(ssid, password);
  yield();
}

 

어디서 많이 본 코드들일 것입니다. 굳이 겹쳤던 함수들은 설명하지 않겠습니다. 바로 loop()함수로 넘어갑시다.


loop()함수

 이미 setup()함수에서 와이파이와 연결했기 때문에 GTI()함수를 사용하여 시간구조체 NOW에 새로운 시간으로 갱신합니다. 그 다음은 if-else문입니다. 조건과 동작을 보니 "현재시간≤startHour"와 "현재시간<endHour"를 동시에 만족하면 3번핀을 1로 출력하고 아니면 0으로 출력합니다. 이후 전력소모를 줄이기 위해 Wi-Fi연결을 끊고 5분뒤에 다시 켜서 반복합니다. 요약하자면 5분마다 인터넷을 통해 실시간을 받아오고 그 시간을 기반으로 LED을 킬지끌지를 결정하는 코드입니다.


회로구성

 

 코드를 기반으로 회로를 구성해봅시다. 일단 이번에 식물성장LED 스트립은 약 50구정도 됩니다. LED 한구가 약 20mA정도 소모한다는걸 고려했을 때, 스트립 총 소모 전력은 5W정도 입니다. 보통의 USB 충전기는 PD를 지원하던, 하지않던 기본적으로 5V만큼은 지원하기 때문에 3.3V에서 동작하는 LED에 직렬저항으로 180Ω을 달아서 5V에서 동작하게 만든 저항-LED 세트를 여러개 병렬로 구성한 스트립입니다.

 

 당연히 5W는 ESP32의 GPIO로 공급할 수 있는 전력이 아니기에 5V파워라인을 구성하여 스트립에 전력을 공급하고, 이때 ON/OFF를 ESP32가 NMOS로 제어하면 됩니다. 따라서 ESP32의 로직인 3.3V에서도 4A까지 스위칭하는 AO3400을 사용하였습니다.

크기가 많이 작은 NMOS이기에 3번째 사진처럼 전용 어댑터를 사용해야 합니다.

https://www.alldatasheet.com/view.jsp?Searchword=AO3400

 

LM324 Datasheet, PDF

LM324 Datasheet. Part #: LM324. Datasheet: 136Kb/7P. Manufacturer: NXP Semiconductors. Description: Low power quad op amps. 1,089 Results. Datasheet: 142Kb/14P. Manufacturer: STMicroelectronics.

www.alldatasheet.com:443

 

 5W의 경우 PD를 지원하지 않는 보급형 충전기중에서는 한계인 경우가 많고, PD를 쓰자니 전용 트리거와 충전기가 필요하여 가격이 증가하기에, 처음부터 고압직류를 공급하는 DC24V공급장치로부터의 전력을 5V로 강압한 후 사용하였습니다. 이때 강압모듈로 MP1584모듈을 사용하였습니다.(이 모듈은 나중에 자세하게 다룰 예정이에요. 제가 애용하는 모듈이거든요.) MP1584모듈의 역할을 간략하게 소개하자면, 출력보다 높은 직류를 입력하면, 출력으로 설정된 직류를 최대 3A까지 공급하는 DCDC컨버터 입니다. 이때, 전압을 낮출려고 저항으로 다 태워버리는 저항제어와는 다르게, PWM제어를 사용하여 낭비되는 전력소모가 적습니다.

 

 아무튼 이 모듈을 통해 LED스트립에 필요한 5V를 만들어 낼 수 있었고, 이를 LED스트립에 인가해주면 됩니다. 그 후 LED의 온오프를 NMOS로 제어하면 해당 장치가 완성됩니다.


시연사진

 현재 이 글을 작성한 시간은 오후 2시 43분입니다. if문의 조건에 해당하는 시간이기에 불이 켜져서 동작하는 모습입니다.


 

ESP32_Plant_LEDs.zip
0.06MB