Controle de um Micro Motor DC com Arduino
⚙️ Como Funciona o Projeto
🧩 Lógica:
-
Botão pressionado: o Arduino detecta isso usando o pino com
INPUT_PULLUP. -
O código alterna o estado do motor: se estava ligado, desliga; se estava desligado, liga.
-
O Arduino envia um sinal
HIGHouLOWpara a base do transistor (via pino 9). -
O transistor atua como interruptor eletrônico: permite a corrente fluir pelo motor ou não.
-
O motor gira quando recebe energia.
-
O diodo protege o transistor de picos de tensão reversa gerados pelo motor (fenômeno de indução).
🔧 Materiais necessários:
-
Arduino Uno (ou qualquer compatível)
-
Micro motor DC 3-6V
-
Transistor NPN (exemplo: 2N2222 ou BC337)
-
Diodo 1N4007 (proteção contra corrente reversa)
-
Resistência de 220Ω
-
Push button
-
Jumpers
-
Protoboard
-
Fonte 5V (ou via USB do Arduino)
🔌 Diagrama de Ligações (explicado)
-
Motor:
-
Um terminal vai ao coletor do transistor.
-
O outro vai à fonte de alimentação positiva (ex: +5V externo).
-
-
Transistor:
-
Base → Resistor 10kΩ → Pino D9 do Arduino
-
Coletor → Motor
-
Emissor → GND
-
-
Diodo (1N4007):
-
Cátodo (listra) → +5V (do motor)
-
Ânodo → Coletor do transistor
-
-
Botão:
-
Um terminal → Pino 2 do Arduino
-
Outro → GND
-
O pino do botão é configurado como
INPUT_PULLUP, então o botão é ativo em nível baixo (LOW).
💡 Detalhes Técnicos
-
O motor não é alimentado diretamente pelo Arduino. Ele recebe energia de uma fonte separada, e o transistor controla essa alimentação.
-
O uso do
INPUT_PULLUPdispensa resistor externo de pull-up para o botão. -
O diodo é essencial para evitar que a corrente reversa danifique o transistor ou o Arduino.
✅ Código-fonte Arduino (C++)
// Definições dos pinos
const int motorPin = 9; // Pino que aciona o transistor/motor
const int buttonPin = 2; // Pino conectado ao botão
bool motorLigado = false; // Estado do motor
void setup() {
pinMode(motorPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Utiliza o resistor interno de pull-up
Serial.begin(9600);
}
void loop() {
// Verifica se o botão foi pressionado
if (digitalRead(buttonPin) == LOW) {
delay(50); // Debounce simples
if (digitalRead(buttonPin) == LOW) {
motorLigado = !motorLigado; // Inverte o estado do motor
digitalWrite(motorPin, motorLigado ? HIGH : LOW);
Serial.print("Motor ");
Serial.println(motorLigado ? "ligado" : "desligado");
// Espera até o botão ser solto para evitar múltiplos toques
while (digitalRead(buttonPin) == LOW);
delay(100); // Evita bounce extra
}
}
}