ESP32 마이크로파이썬 MOSFET 모듈

이 튜토리얼에서는 ESP32와 MicroPython으로 MOSFET 모듈을 전원 스위치로 사용하는 방법을 알아봅니다. 자세히 배울 내용은 다음과 같습니다:

ESP32 마이크로파이썬과 aod4184, lr7843 또는 fr120n mosfet 모듈

준비물

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1×(또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1×(또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1×(또는) ESP32 Uno-form board 아마존
1×(또는) ESP32 S3 Uno-form board 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×MOSFET Module (AOD4184, LR7843 or FR120N) 아마존
1×12V LED 스트립 아마존
1×(또는) 12V DC 선풍기 아마존
1×12V 전원 어댑터 아마존
1×DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

MOSFET 모듈에 대하여

MOSFET 모듈은 전류를 여닫는 수도꼭지라고 생각하면 됩니다. ESP32가 3.3V의 작은 신호로 수도꼭지를 돌리면, 별도의 12V 전원에서 훨씬 큰 전류가 기기로 흘러갑니다. 대표적인 기기로는 LED 스트립, DC 모터, 팬, 펌프, 솔레노이드 밸브, 작은 히터가 있습니다.

초보자는 이런 일에 먼저 릴레이를 써 보는 경우가 많습니다. MOSFET 모듈은 릴레이보다 분명한 장점이 있습니다:

  • 딸깍 소리가 나지 않고 움직이는 부품이 없어서 수명이 훨씬 깁니다.
  • 매우 빠르게 스위칭하므로 PWM을 쓸 수 있습니다. 즉, 조명을 어둡게 하거나 모터를 느리게 만들 수 있습니다. 릴레이는 완전히 켜거나 완전히 끄는 것만 가능합니다.

한 가지 제한이 있습니다. DC 전원만 다룰 수 있습니다. AC 교류 전원에는 절대 쓰면 안 됩니다. AC 기기를 스위칭해야 한다면 ESP32 마이크로파이썬 - 릴레이을 사용하세요.

이 보드는 세 가지 MOSFET 칩으로 살 수 있습니다: AOD4184(D4184로도 판매), LR7843, FR120N. 칩만 다르고 나머지는 같은 보드입니다. 크기, 핀 순서, 배선, 아래의 MicroPython 코드가 모두 같으므로 이 가이드 하나로 세 가지를 모두 다룹니다.

AOD4184 LR7843 FR120N
MOSFET AOD4184A (N채널) IRLR7843 (N채널) IRFR120N (N채널)
최대 부하 전압(MOSFET 정격) 40V DC 30V DC 100V DC
최대 전류(MOSFET 정격) 50A 161A 9.4A
온 저항 RDS(on) 약 7 mΩ 약 3.3 mΩ 약 210 mΩ
방열판 없이 실제 사용 가능한 전류 약 10–15A 약 15A 약 2A
제어 신호 3.3V / 5V 로직, 액티브 HIGH 3.3V / 5V 로직, 액티브 HIGH 3.3V / 5V 로직, 액티브 HIGH
절연 PC817 포토커플러 PC817 포토커플러 PC817 포토커플러
PWM 가능, ~1 kHz 이하로 유지 가능, ~1 kHz 이하로 유지 가능, ~1 kHz 이하로 유지
부하 종류 DC 전용 DC 전용 DC 전용

어느 것을 사야 할까요? 간단한 안내입니다:

  • 12V나 24V에서 큰 전류가 필요한 경우(예: 길고 밝은 LED 스트립이나 큰 모터): LR7843을 고르세요. 저항이 가장 낮아서 발열이 가장 적습니다. 최대 전압은 30V입니다.
  • 12V, 24V, 36V에서 일반적인 용도: AOD4184를 고르세요. 강한 전류와 최대 40V를 지원하는 균형 잡힌 선택입니다.
  • 전압은 높지만 전류가 작은 경우(예: 24V나 48V 기기): FR120N을 고르세요. 최대 100V까지 받을 수 있지만 저항이 높아서 방열판 없이는 약 2A까지만 생각해야 합니다.

표의 큰 숫자에 대해 주의할 점이 있습니다. 50A와 161A는 칩 자체의 한계입니다. 작은 보드는 그전에 이미 뜨거워집니다. 진짜 한계는 열입니다. 기기를 한동안 작동시킨 뒤 조심스럽게 칩을 만져 보세요. 손가락을 댈 수 없을 만큼 뜨겁다면 방열판을 달거나 부하를 줄이세요.

핀 배치

aod4184, lr7843, fr120n mosfet 모듈 핀 배치

모듈에는 ESP32와 연결하는 저전력 쪽과 부하와 연결하는 고전력 쪽이 있습니다.

저전력 쪽(2.54mm 간격의 2핀 헤더라서 브레드보드에 꽂을 수 있습니다):

  • PWM 핀: ESP32의 GPIO 핀에 연결합니다. 이 튜토리얼에서는 GPIO18을 사용합니다.
  • GND 핀: ESP32의 GND(0V)에 연결합니다.

고전력 쪽(나사 단자 3개):

  • + 핀: 부하용 전원 공급 장치의 양극 출력(이 튜토리얼에서는 12V)에 연결합니다. 부하의 양극 선도 이 단자에 함께 들어갑니다. 두 선을 먼저 합친 다음 넣어도 됩니다.
  • LOAD 핀: 부하의 음극 선에 연결합니다. MOSFET이 이 선을 켜고 끕니다.
  • − 핀: 부하용 전원 공급 장치의 음극 출력(0V)에 연결합니다.

보드에 인쇄된 글자는 제조 묶음에 따라 조금 다를 수 있습니다. 나사를 조이기 전에 가지고 있는 모듈의 표기를 확인하세요.

내부에서 일어나는 일

보드 안에서 GPIO18의 신호는 PWM 핀으로 들어가 작은 저항을 지나 PC817 포토커플러 안의 LED에 도달합니다. 이 LED의 빛이 PC817 안에 있는 포토트랜지스터를 켭니다. 포토트랜지스터는 MOSFET의 게이트를 구동하고, 포토커플러가 꺼져 있는 동안에는 저항이 게이트를 0V로 끌어내립니다. MOSFET은 LOAD 단자와 − 단자 사이에 놓여 있어서, 양극 선이 아니라 부하의 음극 선을 끊습니다. 부하는 + 와 LOAD 사이에 연결됩니다.

이제 GPIO18의 신호 종류별로 어떤 일이 일어나는지 따라가 봅시다.

GPIO18이 0V(LOW)일 때

pwm.duty_u16(0)으로 만들 수 있으며, 듀티 사이클 0%입니다.

  1. 핀이 0V를 출력하므로 포토커플러 안의 LED로 전류가 흐르지 않습니다. LED는 꺼져 있습니다.
  2. 빛이 없으면 포토트랜지스터는 꺼진 상태를 유지합니다. 풀다운 저항이 MOSFET 게이트를 0V로 유지합니다.
  3. MOSFET은 OFF입니다. LOAD와 − 사이에서 열린 스위치처럼 동작합니다.
  4. 부하의 음극 선이 그라운드에 연결되지 않으므로 전류가 흐를 수 없습니다. 부하는 0V를 받고 OFF 상태가 됩니다.

GPIO18이 3.3V(HIGH)일 때

pwm.duty_u16(65535)로 만들 수 있으며, 듀티 사이클 100%입니다.

  1. 3.3V 핀이 포토커플러 안의 LED로 몇 mA를 보내면 LED가 켜집니다. 칩 안에 밀봉되어 있어서 눈으로는 볼 수 없습니다.
  2. 이 빛이 포토트랜지스터를 켭니다. 이제 MOSFET 게이트는 부하 전원의 약 절반을 받습니다. 12V 어댑터를 쓰면 약 6V입니다.
  3. MOSFET이 완전히 ON이 됩니다. 매우 작은 저항을 가진 닫힌 스위치처럼 동작합니다. AOD4184와 LR7843은 몇 mΩ뿐이고, FR120N은 약 0.2Ω입니다.
  4. 전류가 회로를 따라 흐릅니다: 어댑터 + → + 단자 → 부하 → LOAD 단자 → MOSFET → − 단자 → 어댑터 −.
  5. 부하는 거의 12V 전체를 받아 최대 출력으로 작동합니다.

LED에는 작은 전류만 있으면 됩니다. 그래서 3.3V ESP32 핀만으로 추가 부품 없이 모듈을 구동할 수 있습니다. 5V 보드에서도 작동합니다.

GPIO18이 PWM 신호를 보낼 때

pwm.duty_u16()에 0에서 65535 사이의 값을 넣으면 만들 수 있습니다. 듀티 사이클은 그 값을 65535로 나눈 값입니다.

  1. 핀이 0V와 3.3V 사이를 매우 빠르게 오갑니다. 여기의 코드는 500 Hz를 쓰며, 1초에 500번이라는 뜻입니다.
  2. MOSFET은 모든 변화를 따라갑니다. HIGH 구간에는 ON이고 LOW 구간에는 OFF입니다.
  3. 부하는 12V 펄스를 받습니다. 듀티 사이클은 신호가 HIGH로 유지되는 시간의 비율입니다.
  4. 평균 전압과 평균 전력은 듀티 사이클에 최대 값을 곱한 값입니다.

12V 전원일 때의 세 가지 예:

  • duty_u16(6553), 듀티 10%: 시간의 10분의 1 동안 ON입니다. 평균은 약 1.2V이고, 전력은 약 10분의 1입니다.
  • duty_u16(32767), 듀티 50%: 시간의 절반 동안 ON입니다. 평균은 약 6V이고, 전력은 약 절반입니다.
  • duty_u16(58981), 듀티 90%: 시간의 10분의 9 동안 ON입니다. 평균은 약 10.8V로 거의 최대 출력입니다.

부하에서 느끼는 변화:

  • LED 스트립은 더 어둡게 보입니다. 실제로는 깜빡이지만 눈으로 보기에는 너무 빠릅니다.
  • 모터, 팬, 펌프는 더 느리게 돕니다. 회전하는 무게가 펄스를 부드럽게 만들어 줍니다.

주파수를 낮게(약 500 Hz에서 1 kHz) 유지해야 하는 이유: PC817은 느린 부품입니다. PWM이 너무 빠르면 MOSFET이 완전히 ON, 완전히 OFF가 되지 못합니다. 부하가 깨끗한 펄스를 받지 못하고 MOSFET이 뜨거워집니다.

아래 스크립트는 이 단계를 사용합니다: 10%에서 100%까지 10% 단위로 올라갑니다.

기억해 둘 점

  • 최소 6V 이상의 전원 공급 장치: 게이트 전압은 부하 전원에서 만들어지므로 5V 부하 전원은 너무 약합니다. 약 6V 이상을 사용하고, 부하가 몇 A 이상 흐르면 9V 이상을 사용하세요.
  • 서로 분리된 두 그라운드: 포토커플러 때문에 ESP32 그라운드와 부하 그라운드는 보드에서 연결되어 있지 않습니다. 분리된 상태로 두세요.
  • 보드에 플라이백 다이오드가 없음: 모터, 팬, 펌프, 솔레노이드, 릴레이에는 직접 추가해야 합니다. 아래 배선 예시를 참고하세요.

선연결

ESP32는 제어 핀 두 개에만 연결됩니다. 12V 어댑터는 나사 단자에만 연결합니다. 12V를 ESP32의 어떤 핀과도 멀리 떨어뜨리세요. 그렇지 않으면 보드가 망가질 수 있습니다.

12V LED 스트립 배선

LED 스트립은 시작하기에 가장 간단한 부하입니다. 추가 부품이 필요 없습니다.

aod4184, lr7843 또는 fr120n mosfet 모듈을 사용한 ESP32 마이크로파이썬 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

MOSFET 모듈 핀 연결 대상
PWM ESP32 GPIO18
GND ESP32 GND
+ 12V 어댑터 +(DC 전원 잭 경유) 및 LED 스트립 + 선
LOAD LED 스트립 − 선
− 12V 어댑터 −(DC 전원 잭 경유)

다른 12V 기기 연결하기

LED 스트립은 하나의 예일 뿐입니다. 같은 모듈로 모터, 팬, 펌프, 솔레노이드도 구동할 수 있습니다. ESP32 배선은 그대로입니다(GPIO18은 PWM에, GND는 GND에). 나사 단자에 연결하는 기기만 바뀌며, 항상 다음 패턴을 따릅니다:

  • 어댑터 +는 +에, 어댑터 −는 −에 연결합니다.
  • 기기의 + 선도 +에, 기기의 − 선은 LOAD에 연결합니다.

어댑터 전압은 기기와 맞아야 합니다. 12V 기기에는 12V 어댑터가 필요하며, 전원은 6V보다 낮으면 안 됩니다. 기기가 얼마나 많은 전류를 쓰는지도 확인하세요. FR120N은 방열판 없이 약 2A 정도의 작은 부하에만 적합합니다. 더 큰 부하에는 AOD4184나 LR7843을 사용하세요.

이런 기기 대부분은 안에 코일이 있습니다. MOSFET이 전원을 끊을 때마다 코일이 짧은 고전압 스파이크를 내보냅니다. 시간이 지나면 이 스파이크가 MOSFET을 망가뜨릴 수 있습니다. 플라이백 다이오드(예: 1N5819 또는 1N4007)는 스파이크가 안전하게 흐를 길을 만들어 줍니다. 기기의 두 선 사이에 연결하세요:

  • 다이오드 캐소드(줄무늬가 있는 쪽): 기기 + 선(+ 쪽)에 연결
  • 다이오드 애노드: 기기 − 선(LOAD 쪽)에 연결

다이오드를 거꾸로 달면 MOSFET이 켜질 때 전원이 단락됩니다. 줄무늬를 두 번 확인하세요.

아래 어떤 기기든 MicroPython 스크립트를 바꿀 필요는 없습니다. 한 가지 예외는 솔레노이드입니다: set_load(100)과 set_load(0)만 호출하고 페이드는 빼세요.

예시: 12V DC 모터

ESP32 마이크로파이썬 예시 - mosfet 모듈에 연결한 dc 모터

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 모터 + 선은 +에, 모터 − 선은 LOAD에 연결합니다.
  • 여기서는 플라이백 다이오드가 꼭 필요합니다.
  • PWM 듀티가 모터 속도를 정합니다.

이 모듈은 모터를 한 방향으로만 돌릴 수 있습니다. 양방향으로 돌리려면 L298N 같은 모터 드라이버가 필요합니다. 자세한 내용은 ESP32 마이크로파이썬 - DC 모터를 참고하세요.

예시: 12V 쿨링 팬

12v 쿨링 팬과 mosfet 모듈 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

팬에는 빨간 선(+)과 검은 선(−)이 있습니다. 일부 팬에는 속도 신호용 노란 선도 있습니다. 그 선은 연결하지 마세요.

  • 빨간 선은 +에, 검은 선은 LOAD에 연결합니다.
  • 플라이백 다이오드도 추가하세요. 저렴하고 해가 되지 않습니다.
  • 듀티가 속도를 정합니다. 일부 팬은 듀티가 매우 낮으면 시작하지 않으므로 약 30% 이상에서 시작하세요.

팬에 대한 더 많은 아이디어는 ESP32 마이크로파이썬 - 팬 제어를 참고하세요.

예시: 12V 솔레노이드 밸브(평상시 닫힘)

평상시 닫힘 솔레노이드 밸브를 구동하는 mosfet 모듈

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 밸브 + 선은 +에, 밸브 − 선은 LOAD에 연결합니다.
  • 코일이 있으므로 다이오드를 달아야 합니다.
  • 완전히 ON이면 밸브가 열리고 OFF이면 닫힙니다. PWM이 아니라 ON과 OFF만 사용하세요.

예시: 12V 워터 펌프

mosfet 모듈에 연결한 워터 펌프 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 펌프 + 선은 +에, 펌프 − 선은 LOAD에 연결합니다.
  • 여기에도 다이오드가 필요합니다.
  • 듀티가 물이 흐르는 양을 정합니다.
  • 물 없이 펌프를 작동시키지 마세요.

예시: 12V 솔레노이드 도어락

mosfet 모듈에 연결한 솔레노이드 도어락 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 락 + 선은 +에, 락 − 선은 LOAD에 연결합니다.
  • 다른 코일 기기와 마찬가지로 다이오드를 추가하세요.
  • 100% 또는 0%만 사용하세요. 어둡게 하지 마세요.
  • 잠금을 풀 만큼만 짧게 ON으로 하세요. 오래 ON 상태로 두면 뜨거워집니다.

예시: 12V LED 스트립, 전원 쪽 자세히 보기

mosfet 모듈에 연결한 12v LED 스트립 전원 쪽

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 스트립 + 선(보통 12V로 표시됨)은 +에, 스트립 − 선은 LOAD에 연결합니다.
  • 스트립에는 코일이 없으므로 다이오드가 필요 없습니다.
  • 듀티가 밝기를 정합니다. 스트립이 길수록 전류를 더 많이 쓰므로 모듈을 고르기 전에 전류를 확인하세요.
  • 단색 스트립에서만 작동합니다. RGB 스트립과 주소 지정형 스트립은 방식이 다릅니다.

ESP32 마이크로파이썬 코드 - MOSFET 모듈

추가 라이브러리는 필요 없습니다. 스크립트는 MicroPython에 내장된 machine.PWM을 사용합니다. GPIO18에 500 Hz PWM 출력을 만듭니다. set_load() 함수는 0에서 100 사이의 퍼센트 값을 받아 0에서 65535 사이의 duty_u16() 값으로 바꾸고, 그 레벨을 Shell에 출력합니다.

각 루프에서 부하는 2초 동안 완전히 켜지고 2초 동안 완전히 꺼집니다. 그다음 전력이 10%에서 100%까지 10% 단위로, 단계마다 0.5초씩 올라갑니다. 이어서 같은 방식으로 0%까지 내려옵니다. 1초 쉬고 루프가 다시 시작됩니다.

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-mosfet-module */ from machine import Pin, PWM import time MOSFET_PIN = 18 # ESP32 GPIO18 connected to the PWM pin of the MOSFET module pwm = PWM(Pin(MOSFET_PIN), freq=500) # 500 Hz PWM, slow enough for the module's optocoupler pwm.duty_u16(0) # start with the load OFF def set_load(percent): pwm.duty_u16(percent * 65535 // 100) # convert 0-100% to 0-65535 print("Load power: {}%".format(percent)) while True: # turn the load fully ON, then fully OFF print("Load: ON") set_load(100) time.sleep(2) print("Load: OFF") set_load(0) time.sleep(2) # increase the power step by step (PWM) for percent in range(10, 101, 10): set_load(percent) time.sleep(0.5) # decrease the power step by step (PWM) for percent in range(90, -1, -10): set_load(percent) time.sleep(0.5) time.sleep(1)

빠른 단계

Thonny IDE를 사용하여 ESP32에서 MicroPython 코드를 설정하고 실행하는 방법은 다음과 같습니다:

  • 컴퓨터에 Thonny IDE가 설치되어 있는지 확인하세요.
  • ESP32 보드에 MicroPython 펌웨어가 설치되어 있는지 확인하세요.
  • ESP32에서 MicroPython이 처음이라면 ESP32 마이크로파이썬 - 시작하기 가이드부터 시작하세요.
  • 제공된 다이어그램에 따라 MOSFET 모듈, LED 스트립(또는 팬), DC 전원 잭을 ESP32 보드에 연결하세요. 12V 어댑터는 아직 꽂지 마세요.
  • USB 케이블로 ESP32 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Thonny IDE를 여세요.
  • Thonny에서 도구 옵션으로 이동하여 인터프리터 탭을 열고 드롭다운에서 MicroPython (ESP32)를 선택하세요.
  • 제공된 MicroPython 코드를 복사하여 Thonny 편집기에 붙여넣으세요.
  • 코드를 ESP32에 저장하려면:
    • 저장 버튼을 클릭하거나 Ctrl+S를 누르세요.
    • 저장 대화 상자에서 MicroPython 장치를 선택하세요.
    • 파일 이름을 main.py로 입력하세요.
  • 12V 어댑터를 DC 전원 잭에 꽂으세요.
  • 초록색 실행 버튼을 클릭하거나 (또는 F5 키를 눌러) 스크립트를 실행하세요.
  • LED 스트립을 보세요. 2초 동안 최대 밝기로 켜졌다가 2초 동안 꺼지고, 천천히 밝아졌다가 천천히 어두워집니다. 팬의 경우에는 대신 속도가 올라갔다 내려가는 소리가 들립니다.
  • Thonny 하단의 Shell에서 메시지를 확인하세요.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot Load: ON Load power: 100% Load: OFF Load power: 0% Load power: 10% Load power: 20% Load power: 30% Load power: 40% Load power: 50% Load power: 60% Load power: 70% Load power: 80% Load power: 90% Load power: 100% Load power: 90% Load power: 80% Load power: 70% Load power: 60% Load power: 50% Load power: 40% Load power: 30% Load power: 20% Load power: 10% Load power: 0%
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

스크립트 이름을 main.py로 지정하여 MicroPython 장치에 저장하면, ESP32의 전원이 켜질 때마다 자동으로 실행됩니다.

Shell에는 메시지가 나오는데 스트립이 꺼져 있나요? 부하 전원 전압을 측정해 보세요. 약 6V 이상이어야 하며, 그렇지 않으면 MOSFET이 열리지 않습니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.