Controle de um Micro Motor DC com Arduino

⚙️ Como Funciona o Projeto

🧩 Lógica:

  1. Botão pressionado: o Arduino detecta isso usando o pino com INPUT_PULLUP.

  2. O código alterna o estado do motor: se estava ligado, desliga; se estava desligado, liga.

  3. O Arduino envia um sinal HIGH ou LOW para a base do transistor (via pino 9).

  4. O transistor atua como interruptor eletrônico: permite a corrente fluir pelo motor ou não.

  5. O motor gira quando recebe energia.

  6. 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
    }
  }
}
Please follow and like us:
error0
fb-share-icon
Tweet 20
fb-share-icon20