⚙️ 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
HIGH
ouLOW
para 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_PULLUP
dispensa 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 } } }