096_DC모터전류제어_토크 💪⚡

DC 모터 전류 제어

도로시와 지니가 함께하는 트랜지스터(Transistor)의 전류 증폭과 PWM 속도 밸브 조절 마법

  • 👧 도로시: “지니야! 릴레이는 전원을 켜거나 끄는 것만 되잖아! 미니카 바퀴 속도를 부드럽게 올리거나 힘을 조절하려면 전기를 수도꼭지처럼 조금씩 더 많이 틀어줄 순 없을까?”
  • 🐱 지니: “아주 날카로운 생각이야! 그럴 때 사용하는 전자식 수도꼭지가 바로 트랜지스터(Transistor) 란다! 아두이노의 작은 제어 신호로 거대한 전류의 수문을 활짝 열어줄 수 있지!”
  • 🐶 토토: “바우! 가변저항 손잡이를 돌려 자동차 액셀러레이터를 밟아보자 멍!”

  • 🖥️ 강의 슬라이드: slides.md

1. 도로시의 궁금증: 수도꼭지처럼 전류를 조절할 수 없을까?

전자 밸브의 필요성

🚰 온/오프 스위칭을 넘어 연속적인 전류 가변으로

릴레이는 기계식 접점이 붙거나 떨어지는 단순 2진(ON/OFF) 동작만 가능합니다. 하지만 DC 모터의 회전력(토크)과 속도는 코일에 흐르는 전류의 양에 비례하므로, 전류량을 부드럽게 증감시킬 수 있는 반도체 소자가 필요합니다.

graph LR
    Arduino["아두이노 PWM 출력<br>(베이스 전류 $I_B$ 미세 제어)"] --> Transistor["NPN 트랜지스터<br>(전류 증폭기)"]
    Batt["외부 전원 배터리"] --> Motor["DC 모터"]
    Motor -->|"컬렉터 전류 $I_C = \beta \times I_B$"| Transistor
    Transistor --> GND["GND"]
  • 전류 증폭률 ($\beta$ 또는 $h_{FE}$):
    • 트랜지스터는 베이스(B)에 흐르는 작은 전류를 수십~수백 배로 뻥튀기하여 컬렉터-에미터(C-E) 사이에 흐르게 합니다.
    • 달링턴 트랜지스터(TIP120 등)는 $\beta$ 값이 1000 이상에 달해, 아두이노의 수 mA 신호로 수 암페어(A)의 모터 전류를 거뜬히 통제합니다.

2. 전자 밸브: 트랜지스터의 3단자 동작 원리

트랜지스터 단자 구조

🔍 베이스, 컬렉터, 에미터의 역할 분담

NPN 바이폴라 트랜지스터(BJT)의 세 단자는 수도 시스템과 완벽히 대응됩니다.

트랜지스터 단자 영어 명칭 및 약칭 수도 시스템 비유 회로 연결 가이드
베이스 Base (B) 수도꼭지 손잡이 (미세 힘) 아두이노 디지털 9번 PWM 핀 (1kΩ 보호 저항 연결)
컬렉터 Collector (C) 물이 모여드는 유입관 DC 모터의 (-) 출력선
에미터 Emitter (E) 물이 빠져나가는 배수관 전원 접지 (GND)

[!NOTE] 베이스 저항(1kΩ)을 반드시 달아야 하는 이유: 베이스-에미터 접합부는 다이오드 구조이므로 저항 없이 아두이노 핀을 직결하면 쇼트 상태가 되어 핀에 과전류가 흘러 아두이노가 손상될 수 있습니다.


3. 브레드보드 회로 구성 및 부품 연결

트랜지스터 모터 회로도

🛠️ 안전한 모터 제어를 위한 5단계 배선

  1. 브레드보드에 NPN 파워 트랜지스터(TIP120 또는 2N2222)를 꽂습니다.
  2. 아두이노 디지털 9번(PWM) 핀에서 1kΩ 저항을 거쳐 트랜지스터 베이스(B) 로 연결합니다.
  3. DC 모터의 한쪽 선을 5V(또는 외장 배터리 +) 에 연결하고, 다른 쪽 선을 트랜지스터 컬렉터(C) 에 연결합니다.
  4. 트랜지스터 에미터(E) 를 아두이노 GND에 연결합니다.
  5. [필수] 모터 양단에 플라이백 다이오드(1N4007)를 역방향으로 병렬 장착합니다. (은색 띠가 모터 (+) 방향)
  6. 아날로그 A0 핀에 가변저항의 중앙 신호선을 연결합니다.

4. 실습 코드: 가변저항으로 실시간 속도 조절하기 (Speed Controller)

모터 가속 실습

💻 가변저항의 0~1023 입력을 PWM 0~255로 매핑하여 모터 구동

const int motorPin = 9; // 트랜지스터 제어용 PWM 핀 (~9)
const int potPin = A0;   // 가변저항 아날로그 입력 핀

void setup() {
  pinMode(motorPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("가변저항 DC 모터 스피드 컨트롤러 가동!");
}

void loop() {
  int potValue = analogRead(potPin); // 가변저항 아날로그 값 읽기 (0 ~ 1023)
  
  // map(입력값, 최소, 최대, 목표최소, 목표최대)
  int motorSpeed = map(potValue, 0, 1023, 0, 255); // PWM 듀티비(0 ~ 255)로 변환
  
  analogWrite(motorPin, motorSpeed); // 트랜지스터 베이스로 PWM 신호 공급!
  
  // 시리얼 모니터로 속도 상태 확인
  Serial.print("가변저항: "); Serial.print(potValue);
  Serial.print(" -> 모터 PWM 출력: "); Serial.println(motorSpeed);
  
  delay(20); // 안정적인 아날로그 샘플링 딜레이
}

🌟 도로시와 지니의 핵심 요약 노트!

전류 제어 요약

  • 👧 도로시: “가변저항을 돌릴 때마다 트랜지스터가 수도꼭지처럼 모터에 전기를 조금씩 더 흘려주어서, 자동차 액셀을 밟듯 속도가 붕~ 하고 올라가는구나!”
  • 🐱 지니: “맞아! 트랜지스터와 아두이노의 PWM 신호가 만나면 거대한 모터 전류도 손가락 하나로 섬세하게 주무를 수 있단다.”
  • 🐶 토토: “바우! 이제 모터의 속도뿐만 아니라 방향까지 앞뒤로 뒤집어주는 인버터와 H-브리지를 정복하러 가자 멍!”
서브목차