Olá, hoje vou mostrar um circuito simples e muito didático para controlar um motor DC via PWM e Arduíno. O controle por PWM (Pulse Width Modulation) ou Modulação por Largura de Pulso, é um tipo de controle bastante utilizado em automações. Com esse controle podemos variar velocidades, luminosidades e potências em geral. Basicamente conseguimos um resultado de controle analógico através de pulsos digitais. O PWM funciona da seguinte maneira - Dentro de um certo período, podemos controlar o tempo em que um pulso digital fica em nível alto. A duração do pulso em alto dentro desse período é chamada de Duty Cycle ou Largura de Pulso. A função que vamos utilizar é a analogWrite() que varia de 0 a 255, com 255 representando o PWM em 100% de Duty Cycle. Os valores intermediários representam proporcionalmente o PWM em % de Duty Cycle, por exemplo, o valor 127 representa o PWM em 50% de Duty Cycle. No nosso caso vamos estar pegando o valor lido pelo pino do potenciômetro ( que vai de 0 a 1023) e dividindo por 4 para dar valores entre 0 e 255. Vamos utilizar um Transistor para controlar a potencia e chaveamento do motor, visto que o Arduíno não fornece alta corrente em seus pinos de I/O. O transistor desse exemplo será um TIP41, um transistor darlington fácil de encontrar. Lista de Materiais: 1x Arduino 1x Potenciômetro ( pode ser qualquer valor, acima de 1k de preferência) 1x resistor 2k2ohm * 1x Transistor TIP41 1x Motor DC 12v 1x Diodo 1N4148 * Obs: O resistor será utilizado na base do transistor e pode variar conforme a corrente no coletor, depende da resistência e do tipo do motor utilizado. Este resistor deve estar dimensionado para que o transistor atue como chave. As ligações são feitas conforme mostrado abaixo, mas temos que tomar cuidado ao alimentar o Arduíno pelo pino correto, pois a tensão do cooler é 12V, caso contrário podemos queimar o Arduino. Os GNDs devem estar conectados. O Pino de saída escolhido foi o pino D10 que possui um PWM. É recomendável colocar um diodo para proteger o circuito contra tensão reversa proveniente do motor, pois, quando este é desligado, a inercia o faz virar um gerador. : Após feito as conexões conforme visto acima, segue o programa para enviarmos ao Arduino: /* // Programa :Controle PWM de Motor DC // Autor : Fernando Moreira //Controla a velocidade de um motor conforme o valor do potenciômetro */ int motPin = 10; // pino do motor 1 int analogPin = 0; // pino para leitura do potenciômetro int val = 0; //variável para armazenar o valor lido void setup() { pinMode(motPin, OUTPUT); // configura pino 10 como saída } void loop() { val = analogRead(analogPin); // lê o valor analógico no pino do potenciômetro analogWrite(motPin, val / 4); // aciona motor com o valor analógico lido (0-1023) //dividido por 4 para ajustar ao valor ( 0- 255) } Após fazer o upload do código para o Arduíno é só testar. Variando o potenciômetro veremos o motor variar a velocidade. Esse programa também serve para controlar outras cargas como Servo motor, LEDs, Lampadas, Resistências, etc. Um exemplo para testar servos utilizado em aeromodelos e robôs: É só alimentar o servo com 5V e ligar o fio de sinal do servo na saída pino 10 conforme a imagem acima. Espero que tenham gostado deste post e que ele seja útil para vocês implementarem outros tipos de controle. Se inscrevam no meu canal no youtube, Obrigado! https://www.youtube.com/channel/UCh_d8IZS0gB68gJGoZ8d6Qg Obrigado!