Avançar para o conteúdo principal

Arduino & Motor DC

Neste post vou apresentar um pequeno projeto com o Arduino, a ideia é simples, controlar um motor DC.





O projeto vai incluir um potenciómetro para regular a velocidade do motor.

O circuito é o apresentado a seguir, criado com o fritzing.

Como o motor consome mais energia do que o Arduino lhe pode fornecer vamos utilizar uma pilha de 9V só para o motor. O truque está no transistor IRF520 MOSFET que vai controlar a energia que o motor recebe, da pilha de 9V, em função do valor que o Arduino lhe vai enviar.

O transistor tem 3 pernas: a base, o coletor e o emissor. A base está ligada ao pino digital do Arduino, o coletor é ligado ao motor e o emissor é ligado no neutro. O transistor além de funcionar como interruptor, ligado e desligado o motor, vai funcionar como um acelerador pois quanto maior o valor da base maior a corrente que flui entre o emissor e o coletor.

Antes de definir a velocidade do motor o Arduino lê o valor do potenciómetro, ajusta a escala, no potenciómetro vai de 0 a 1023, para um valor entre 0 e 255 e depois envia esse valor para a porta onde a base do transistor está ligada.

A porta do potenciómetro é analógica o que permite ler valores entre 0 e 1023.

Por outro lado a porta do transistor é digital e a variação da velocidade é conseguida através da técnica PWM - Pulse With Modulation.

Por fim temos de ligar o Arduino à terra da pilha de 9V.

O código fica assim:
Primeiro as constantes e as variáveis

const int potPin=0;  //pino onde o potenciometro fica ligado
const int transistorPin=9;  //pino onde fica ligado o transistor
int potValue=0;  //valor lido do potenciometro

Depois a função setup (é executada uma vez quando o programa arranca)
void setup(){
  pinMode(transistorPin,OUTPUT);
  Serial.begin(9600);
}

Por fim o ciclo (Repetido eternamente)
void loop(){
  potValue=analogRead(potPin)/4;
  analogWrite(transistorPin,potValue);
  Serial.println(potValue);
}


Além do código que lê os valores do potenciómetro e escreve para a porta do transistor incluí código para debug, enviando os valores para o computador através do cabo USB.

E a magia acontece...

Mas, sim tem um mas, o motor só pode rodar numa direção.

É um projeto simples mas que pode ser reutilizado para energias maiores, dependendo dos valores que o transistor suportar.

Por segurança incluí um diodo para proteger o Arduino de eventuais descargas que o motor possa gerar quando pára.

Projeto para download.

Comentários

Mensagens populares deste blogue

Upgrade do Windows Home para Pro sem formatar

 Há algum tempo que tentava fazer o upgrade do meu Windows 10 da versão Home para a versão Pro, mas chegava sempre a um ponto em que me era solicitado para formatar o sistema e não estava para isso. Finalmente conseguinte seguindo estes passos: - seguinte estes passos  utilizei uma das chaves genéricas para o Windows 10 Pro e fui a Settings > Update & Security > Activation > Change the product key; - após inserir uma das chaves o Windows instala as funcionalidades Pro e pede para reiniciar; - agora tem o Windows Pro mas não está ativado, assim fui ao site urcdkeys  onde comprei uma chave para o Windows Pro por menos de €20; - com essa chave voltei a funcionalidade Change the product key e ativei o Windows; - e pronto, Windows Pro ativado sem formatar ou reinstalar. Importante : eu não tenho nada a ver com o site urcdkeys por isso a vossa experiência pode correr de forma diferente da minha.

Encriptar e Desencriptar

Com o .Net podemos facilmente codificar e descodificar mensagens através do namespace Cryptography. Neste post vamos estudar um programa que encripta um texto com base numa palavra passe e posteriormente descodifica a mensagem. Começamos por criar uma função para encriptar: string codifica(string mensagem, string ppasse) {   //este vector vai ficar com a mensagem encriptada   byte [] mensagem_codificada;  //vamos utilizar codificação UTF8   System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();   // Vamos utilizar o algoritmo MD5 para fazer o Hash da palavra passe   MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();   //Agora podemos então fazer o hash da palavra passe   byte[] TDESChave = HashProvider.ComputeHash(UTF8.GetBytes(ppasse));   //De seguida vamos escolher o algoritmo de encriptação   TripleDESCryptoServiceProvider TDESAlgoritmo = new TripleDESCryptoServiceProvider();   //Confi...

PONG em Flash AS3.0

Mais um pequeno jogo para demonstrar algumas das funcionalidades do AS3.0. Para este exemplo vamos implementar uma versão do Pong. Para este Pong vamos criar a possibilidade de acelerar a bola com a raqueta e, para tornar o jogo mais difícil, quando se atingir uma determinada pontuação fazemos aparecer uma parede no meio do campo de jogo. O código é muito parecido com o jogo do post anterior, mas um pouco mais complicado. Para controlar a nossa raqueta utilizamos a seguinte função: function teclado(e:KeyboardEvent):void{ dir_j1=0; if (e.keyCode == Keyboard.UP){ if(jogador1.y>0) jogador1.y -=5; dir_j1=-5; } if (e.keyCode == Keyboard.DOWN){ if(jogador1.y<370) jogador1.y +=5; dir_j1=5; } } Agora está mais simples pois só percorremos as linhas, ou seja, a coluna nunca muda. A raqueta que é controlada pelo computador depende do seguinte código: function movepc():void { if (bola.y>jogador2.y) jogador2.y = jogador2.y + velocidade_y; if (bola.y<jogador2.y) joga...