Mostrando postagens com marcador motor CC. Mostrar todas as postagens
Mostrando postagens com marcador motor CC. 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:

Bibliotecas no Arduino

As bibliotecas são fundamentais para o desenvolvimento de programas em C. Caracterizadas como um conjunto de rotinas padronizadas da linguagem, as bibliotecas contém funções de entrada/saída e processamento de informações.  O uso de uma biblioteca facilita o desenvolvimento de aplicações, pois para que a função digitalRead leia o valor de tensão na entrada de uma porta qualquer, alguém já programou algumas dezenas de linhas indicando como o digitalRead irá acessar a porta, coletar o valor e definir se esse valor é HIGH ou LOW. Ao adicionar uma biblioteca ao seu projeto, as funções contidas nessa biblioteca podem ser acessadas e utilizadas pelo desenvolvedor.
Além de facilitar nossa vida, é nas bibliotecas que o compilador irá verificar se as funções que você digitou não contem nenhum erro de sintaxe, ou seja, se você escreveu o comando corretamente.
Ao contrario da programação C convencional, no Arduino a biblioteca padrão (core) não precisa ser declarada, por isso que quando você usa algumas funções como digitalRead, digitalWrite, Serial.begin e analogRead (entre outras) o programa "roda" normalmente.

Como as bibliotecas na verdade são códigos adicionais, a IDE do Arduino não adiciona todas as bibliotecas que ele possui para não utilizar recursos de memória sem necessidade, sendo assim, quando um projeto requer o uso de uma biblioteca adicional, o desenvolvedor deve adiciona-la através do comando #include.

Além das funções básicas do Arduino, segue uma relação com as principais bibliotecas que podem ser usadas no seu projeto.


#include EEPROM.h 

Usada para ler e gravar dados em uma memória EEPROM no Arduino. No Arduino Uno a EEPROM tem o tamanho de 1024 bytes, no ATmega328 a capacidade da EEPROM é de 1024 bytes  e no ATmega168 e ATmega8 a capacidade é de 4096 bytes. Dentre as funções dessas bibliotecas temos:
read(), write(), update(), get(), put(),EEPROM[]...

#include Ethernet.h

Permite conectar o Arduino à Internet ou à rede local usando um shield Ethernet. Dentre as funções dessas bibliotecas temos:
begin(), localIP(), maintain(), IPAddress(), etc...

Também não podia deixar de citar que ela retorna o valor absoluto de um número inteiro usando abs.

#include LiquidCrystal.h

Com essa biblioteca podemos controlar displays de cristal líquido (LCD). Dentre as funções dessas bibliotecas temos:
LiquidCrystal(), begin(), clear(), home(), setCursor(), write(), print() etc....


#include SD.h

 Biblioteca muito importante, usada para que seja possível escrever e ler dados em cartões de memória SD/SDHC.Dentre as funções dessas bibliotecas temos:
begin(), exists(), mkdir(), open(), remove(), rmdir(), etc


Além das bibliotecas citadas acima, a IDE do Arduino possui outras que não foram citadas como SPI (Serial Peripheral Interface), a  Servo usada para controlar motores servo e a WiFi que permite conexão à uma rede (LAN e/ou WAN)por meio de um shield WiFi. Para conhecer outras bibliotecas e aprender mais sobre a sintaxe das funções contidas nessas bibliotecas, Clique aqui e acesse o site do Arduino.

Bibliotecas desenvolvida e disponibilizadas por desenvolvedores "Anônimos" também podem ser incluídas no seus projetos, para o Arduino reconhecer essas bibliotecas basta adiciona-la IDE do Arduino conforme indicado na Figura 1.
Figura 1. IDE Arduino - Instalando e selecionando bibliotecas.



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


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á.


Motor DC - Como controlar via Arduino

Os motores de corrente contínua (CC) ou motores DC (Direct Current), como também são chamados, são dispositivos que transformam energia elétrica em mecânica aproveitando as forças de atração e repulsão geradas por eletroímãs e ímãs permanentes. O vídeo abaixo, apesar de estar inglês é bem simples e exemplifica o principio de funcionamento do motor DC.





Conforme visto no vídeo acima, ao passar corrente por um condutor o campo magnético fará com que o eixo do motor gire, logo para que um motor CC seja acionado pelo Arduino, basta implementar o circuito apresentado na Figura 1.

Figura 1. Circuito simples de controle de motor CC.
Com base no circuito da Figura 1 o código abaixo irá acionar o motor por 2 segundos e desligar o motor por 1 segundo.

int motor = 8; // Varíavel criada para guardar numero da porta que controlará o motor

void setup() 
{
  pinMode(motor, OUTPUT);
}

void loop() 
{
  digitalWrite(motor, HIGH);   // liga o motor
  delay(2000);               // espera 2 segundos
  digitalWrite(motor, LOW);    // desliga o motor
  delay(1000);               // espera 1 segundo
}

No circuito da Figura 1, note que o terminal 2 do motor foi ligado no GND e o terminal 1 na porta 8 do Arduino. Se a ligação foi invertida, o sentido da corrente támbem será invertido fazendo com que o motor gire no sentido oposto (faça o teste no seu simulador).
Para fazer uso dessa característica do motor podemos usar uma Ponte H para mudar o sentido que o motor irá girar. O principio da ponte H é o bem simples, o motor conectado a ponte será controlado por 4 chaves e uma fonte de alimentação conforme mostrado na Figura 2.

Figura 2. Esquema de chaveamento da ponte H
Conforme Figura 3, podemos observar que quando as chaves 1 e 4 (Figura 3 (A)) estiverem fechadas a corrente irá passar no sentido anti-horário, ao inverter o fechamento das chaves (chave 2 e 3 fechadas, Figura 3 (B))a corrente irá passar no sentido horário invertendo o giro do motor.
Figura 3. Principio de funcionamento da Ponte H

O CI utilizado da ponte H é o L293D cujo Datasheet já está disponível no blog. Para utilizar o CI L293D além de polarizar o CI conforme Figura 4, o desenvolvedor irá ligar uma tensão de referencia ao pino 1 (setar como HIGH ou usar PWM)  e controlar o sentido da corrente através dos pinos 2 e 9 (Fios verdes na figura 4). Se o pino 2 foi setado como HIGH e 9 como LOW o motor irá girar no sentido horário, ao inverter (pino 2= LOW e pino 9 = HIGH) o motor irá girar no sentido anti-horário.
Figura 4. Controle de motor CC usando ponte H (L293D)


Agora Pratique:

Exercício 1. Reproduza o esquema da Figura 4 e controle o motor via porta serial. Onde o programa deve atender as seguintes condições:
  - Se o usuário digitar 1 - Motor gira em sentido horário
  - Se usuário  digitar 2 - Moto gira em sentido anti-horário.
  - Se o usuário digitar 0 -Motor desliga.

Exercício 2. Reproduza o mesmo projeto do exercício 1 e adicione dois Led (Vermelho e Laranja) , quando o motor girar no sentido horário, o Led vermelho deve estar ligado, quando o motor inverter o Led azul deve ser ligado.

Exercício 3. Realize um projeto com 2 motores ligados ao L293D que serão controlados pela serial. O motores quando ligados devem sempre girar em sentidos opostos.


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