Mostrando postagens com marcador PWM. Mostrar todas as postagens
Mostrando postagens com marcador PWM. Mostrar todas as postagens

Controle de motor CC com potenciômetro.

Nesta experiencia iremos variar a velocidade de um motor dc usando PWM (não sabe o que é PWM - clique aqui) . A modulação do PWM será feita por um potenciômetro.

Material necessário:

- Arduíno
- 4 Led's
- 4 resistores 330 OHM
- Potenciômetro 10 kOHM
- Motor DC

Na figura 1 temos a montagem do circuito utilizado na experiencia.
Figura 1. Circuito usado para controlar velocidade do motor atraves do potenciometro.

int potenciometro = 5;
int vPot = 0;
int vmotor=0;

void setup()
{
  pinMode(7,OUTPUT);
  pinMode(6,OUTPUT); 
  pinMode(5,OUTPUT); 
  pinMode(4,OUTPUT);
  pinMode(10, OUTPUT);

  Serial.begin(9600);
}

void loop()
{
 //Leitura do valor do potenciômetro
  vPot = analogRead(potenciometro);
 
  vmotor = map(vPot, 0, 1023, 0, 255); // mapeamento do potenciometro(0 a 1023) para PWM (0 a 255)
  analogWrite(10, vmotor); // velocidade do motor em PWM
  // Chama função controle_led que irá ligar os led's em função da velocidade do motor.
  controle_led();
}

void controle_led()
{

   //Rotina para ligar led
  if( vPot >=180)
  {
   digitalWrite(7, HIGH);
   if( vPot >=360)
   {
    digitalWrite(6, HIGH);
    if( vPot >=540)
    {
      digitalWrite(5, HIGH);
      if( vPot >=720)
      {
        digitalWrite(4, HIGH);
      }
    }
   } 
  }   
 
    if( vPot <180)
    {
    digitalWrite(7, LOW);
    }
   if( vPot <360)
   {
    digitalWrite(6, LOW);
   }
    if( vPot <540)
    {
      digitalWrite(5, LOW);
    }
      if( vPot <720)
      {
        digitalWrite(4, LOW);
      }
}


Você poderá verificar a implementação do código/circuito acima clicando na imagem abaixo.

 Exclusão mutua com Arduíno


Leitura complementar:

Entendendo PWM
- O que é a função MAP
- Controle de motor DC


Não esqueça do like do video e de curtir nossa pagina no facebook no link abaixo:

Função MAP ()

Como o próprio nome diz, a função map() do Arduíno faz o mapeamento de um intervalo numérico em outro intervalo numérico desejado. Conforme figura 1, notamos que  um intervalo numérico que vai de um valor mínimo até um valor máximo, será mapeado para um novo valor de saída definido pelo programador.
Figura 1. Adicionar legenda
A sintaxe da função map() é dado por:

map (x, IN_min, IN_max, OUT_min, OUT_max);

onde temos:

X               - Variável com valor a ser convertido.
IN_min     -  Limite inferior do intervalo de entrada
IN_max    -  Limite superior do intervalo de entrada
OUT_min - Limite inferior do intervalo de saída
OUT_max- Limite superior do intervalo de saída

Essa função pode ser interessante quando queremos modular um pulso usando PWM (se não conhece PWM clique aqui) que será controlado por um potenciômetro. Considerando que os valores medidos no potenciômetro podem variar de 0 a 1023 para realizar o mapeamento será necessário implementar o seguinte código:

void loop()
{
  
  potenciometro = analogRead(5); //Leitura do analógico onde o potenciômetro esta ligado
  
  Converte= map(potenciometro,0,1023,0,255);
  
  analogWrite(10,Converte); //Escrita no pino digital com PWM
} 

A implementação do código acima pode ser visto no vídeo clicando na figura abaixo. Neste vídeo, iremos controlar a velocidade de um motor DC com um potenciômetro.  

 Exclusão mutua com Arduíno



Não esqueça do like do video e de curtir nossa pagina no facebook no link abaixo:

PWM - Simulando sinais analogicos

O PWM (Pulse Width Modulation) é uma técnica utilizada por microcontroladores que permite simular um sinal analógico através de um sinal digital. Nesta técnica, o controlador gera uma onda quadrada cujo valor de tensão varia entre HIGH (5V) e LOW (0V) por um período de tempo predeterminado (duty cycle). Ao variar um sinal entre HIGH e LOW a tensão final do sinal será uma média entre o tempo que o sinal ficará em HIGH e o tempo que o sinal ficará em LOW, por exemplo, se o PWM tiver um duty cicle de 50% a tensão será de 2,5 V. Para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:

Vout = (duty cycle/100)* Vcc

Onde:
Vout - tensão de saída.
Duty cycle - valor do ciclo ativo do PWM em %;
Vcc - tensão de alimentação.

Na figura 1, é possível observar a modulação da onda  quadrada para diferentes duty cycles:
Figura 1. Moduação por largura de pulso - crédito da imagem


Para usar o PWM com saída de dados será necessário utilizar a função AnalogWrite onde a sintaxe da função é dada por:


        analogWrite(pin, valor);

Onde:
        pin: representa o numero da porta que será usando pelo PWM


        valor: o rendimento do ciclo: entre 0 (sempre desligado) e 255 (sempre ligado).


No Arduino, as portas que utilizam PWM são identificadas por um " ~ " conforme indicado na figura 2 onde um Arduino Uno será usado na simulação.
Figura 2. Pinos que usam PWM no Arduino UNO - Pinos indicados pelo "~"

O PWM pode ser usado para diversas aplicações, como por exemplo:
    - Variação da luminosidade de leds;
    - Geração de sinais de áudio. (clique aqui para ouvir uma musica usando buzzer e PWM)
    - Controle de velocidade de motores;


Com base no exemplo da postagem "Motor DC - Como controlar via Arduino", vamos variar a velocidade de um motor CC com base no PWM. Neste projeto, o motor irá girar somente num sentido e a velocidade será incrementa via porta serial quando o usuário digitar "+". A Figura 3 abaixo mostra o circuito criado para essa experiência. 

Figura 3. Circuito de controle do motor com controle de velocidade por PWM

Para o circuito da Figura 3, foi implementado o seguinte código:

int motor = 9; // Variável criada para guardar numero da porta PWM que controlará o motor
char op; // Variável para incrementar ou decrementar velocidade do motor
int velocidade=0; // Variável para controlar velocidade do motor valor inicial 0 (motor desligado)

void setup() 
{
  Serial.begin(9600); // inicializa a comunicação serial com Baud rate de 9600  
  pinMode(motor, OUTPUT);
}

void loop() 
{
  analogWrite(motor, velocidade); // Saída de dados PWM usando analogWrite
  op=Serial.read();  // Lendo caractere da porta serial

  if(op=='+'&& velocidade <250)  // Se tecla + foi apertada E a velocidade < 250, aumeta velocidade
  {
    Serial.println(velocidade);  // exibi valor da velocidade na serial antes de incrementar
    velocidade=velocidade+50;   // velocidade será aumentada PWM 50
    Serial.println(velocidade);    // exibi valor da velocidade na serial depois de incrementar
  } 
}


Agora Pratique:

Exercício 1. Reproduza o esquema da Figura 3 e faça uma função que acelere e desacelere o motor usando as teclas "+" e "-"....

Exercício 2. Com base na Figura 4, reproduza a experiência realizada na postagem "Motor DC - Como controlar via Arduino".  Assim como no exercício 1, o motor deve ser acelerado e desacelerado usando as teclas "+" e "-"
Figura 4. Circuito para controle de motor CC usando ponte H (L293D)

Exercício 3. Reproduza o circuito da Figura 4 e adicione 2 botões. Ao inves da velocidade do motor ser controlada via serial, o controle será feito pelos botões.....



Ainda tá com duvida, curta nossa pagina no facebook no link abaixo e poste sua duvida lá.