Páginas

sábado, 16 de novembro de 2013

Ponte H para movimentar um carrinho + Arduino e Android

Boa Tarde, Galera do Ardroid.


Neste post vamos ver como criar uma ponte H, para controlar o sentido um motor DC de um carrinho e tambem um software para controlar a velocidade e sentido do motor no Arduino + o software do celular Android  criado no APPInventor do MIT, utilizando um modulo Bluetooth conectado a um Arduino UNO.


Veja no video abaixo do projeto:



Antes de descrever o projeto vamos a um pouco de teoria...

O que é uma ponte H  e para que serve ?

Fonte Wikipedia

Ponte H é um circuito eletrônico que permite que o microcontrolador forneça a corrente necessária para o funcionamento do Motor de corrente contínua, visto que o micro controlador normalmente trabalha em 5V e em baixas correntes, enquanto o motor DC costuma exigir altas potências.

Além disso, a Ponte-H torna possível que o motor rode tanto para um sentido quanto o outro. Estes circuitos são geralmente utilizados em robótica e estão disponíveis em circuitos prontos ou podem ser construídos por componentes.


Quer saber + sobre ponte H veja este PDF

Transistores

Fonte Wikipedia

O transistor  é um componente eletrônico que começou a popularizar-se na década de 1950, tendo sido o principal responsável pela revolução da eletrônica na década de 1960. São utilizados principalmente como amplificadores e interruptores de sinais elétricos, também são usados como retificadores elétricos em um circuito podendo ter variadas funções . O termo provém do inglês transfer resistor(resistor/resistência de transferência), como era conhecido pelos seus inventores.

O processo de transferência de resistência, no caso de um circuito analógico, significa que a impedância característica do componente varia para cima ou para baixo da polarização pré-estabelecida. Graças a esta função, a corrente elétrica que passa entre coletor e emissor do transistor varia dentro de determinados parâmetros pré-estabelecidos pelo projetista do circuito eletrônico. Esta variação é feita através da variação de corrente num dos terminais chamados base, o que, consequentemente, ocasiona o processo de amplificação de sinal.

Entende-se por “amplificar” o procedimento de tornar um sinal elétrico mais fraco num mais forte. Um sinal elétrico de baixa intensidade, como os sinais gerados por um microfone, é injetado num circuito eletrônico (transistorizado por exemplo), cuja função principal é transformar este sinal fraco gerado pelo microfone em sinais elétricos com as mesmas características, mas com potência suficiente para excitar os alto-falantes. A este processo todo dá-se o nome de ganho de sinal.


Conheça mais sobre eletrônica deste curso básico em PDF

Agora que apendemos um pouco sobre ponte H e transistores vamos conhecer o projeto na pratica. tome nota do material utilizado:

1 Arduino UNO
4 Transistor  bipolar NPN - TIP 122 (data sheet)
4 Resistor 560 Ohms
1 Modulo Bluetooth
1 Prototype Universal Printed Circuit Board Breadboards
3 Jumpers Macho
2 Jumpers Femeas duas saidas


O modelo de ponte H retirei do forum do clube do hardware link adptando para uso com o Arduino. o esquema abaixo foi criado para ser utilizado em conjunto com arduino.

Esquema de ligação :

Ja foi testado na pratica e funciona muito bem, transferindo potencia suficinte para o motor.

Vejo o esquema de montagem abaixo:


Repare no esquema abaixo as imagens estão sobrepostas para entender melhor a ligação.
Veja na sequencia as duas fotos sem sobreposição.
Repare que a base dos transistor 1 e 3 estão ligadas, assim como a base dos transitor 2 e 4 como mostra a figura acima no esquema.




Se preferir monte em uma protobord o esquema, veja a foto abaixo :

O esquema acima não esta muito detalhado, mas tomando como refencia o esquema acima com um pouco de calma e perceverença, a montagem sai.

Vamos passar agora para a programação no Arduino.

Software de controle no Arduino

Para alterar a velociade do motor e fazer sua inversão será utilizado duas funções.

// funcao para mudar a velocidade para frente
void andaFrente(char AndroidFrente, int frenteVel) {

  if (android == AndroidFrente)
  {
    analogWrite(pinSentidoTraz,0);
    delay(300);
    analogWrite(pinSentindoFrente,frenteVel);
    delay(300);
  }

// funcao para mudar a velocidade para traz
void andaTraz(char AndroidTraz, int trazVel) {
  
  if (android == AndroidTraz)
  {
  analogWrite(pinSentidoFrente,0);
  delay(300);
  analogWrite(pinSentidoTraz,trazVel);
  delay(300);
  }

}
Como podemos ver nas funções acima quando ela recebe o parametro da porta serial (no nosso caso vem do Bluetooth) a rotação contraria é parada para iniciar a rotação atual. Istó é necessario pois se a ponte é acionada nos quatro transitor ao mesmo tempo o circuito entrará em curto, danificando-o. TOME CUIDADO !!! Acione apenas um sentido de cada vez.

Veja o  código completo abaixo:

// controle do sentido e velocidade do carrinho

int pinSentidoFrente = 6; // atribui o pino 6 pra andar para frente

int pinSentidoTraz = 5; // atribui o pino 5 para andar para traz
void andaFrente(char AndroidFrente, int frenteVel); // função para contolar a velocidade no sentido para frente
void andaTraz(char AndroidTraz, int trazVel); // função para contolar a velocidade no sentido para traz
void parar (char AndroidParar); //  função para parar o carrinho
char android; // Recebe o parametro enviando pelo celular

/* a,b,c,d,e,f,g Velocidades para frente

 h,i,j,k,l,m,n Velocidades para traz */

void setup() {

  Serial.begin(9600);
  pinMode(pinSentidoFrente,OUTPUT);
  pinMode(pinSentidoTraz,OUTPUT);
}

void loop() {


  android = Serial.read();// faz a leitura do SmartFone por Bluetooth

  delay(100);
  
  // parar o carrinho
  parar('z');
  
  // altera a velocidade do motor para frente
  andaFrente('a',100);// utiliza o pino 6 até a letra g
  andaFrente('b',125);
  andaFrente('c',150);
  andaFrente('d',175);
  andaFrente('e',200);
  andaFrente('f',225);
  andaFrente('g',250);// 255 equivale ao MAX = 5 Volts
  
  // altera a velocidade do motor para Traz
  andaTraz('h',100);// utiliza o pino 5 até a letra n
  andaTraz('i',125);
  andaTraz('j',150);
  andaTraz('k',175);
  andaTraz('l',200);
  andaTraz('m',225);
  andaTraz('n',250);// 255 equivale ao MAX = 5 Volts
}

// funcao para mudar a velocidade para frente

void andaFrente(char AndroidFrente, int frenteVel) {
  if (android == AndroidFrente)
  {
    analogWrite(pinSentidoTraz,0);
    delay(300);
    analogWrite(pinSentidoFrente,frenteVel);
    delay(300);
  }
}

// funcao para mudar a velocidade para traz
void andaTraz(char AndroidTraz, int trazVel) {
  if (android == AndroidTraz)
  {
  analogWrite(pinSentidoFrente,0);
  delay(300);
  analogWrite(pinSentidoTraz,trazVel);
  delay(300);
  }
}

// função para parar o carrinho

void parar (char AndroidParar) {
  if (android == AndroidParar)
  {
  analogWrite(pinSentidoFrente,0);
  analogWrite(pinSentidoTraz,0);
  delay(300);
  }
}

O código acima foi testado e funciona adquadamente, fica faltando agora a programação do Android. Que em  breve colocarei aqui para finalizar o projeto.

Veja o video abaixo com o funcionamento do motor invertendo a rotação.
Qualquer duvida ou sujestão entre em contato terei o maio prazer, de tirar duvidas aceitar sujestoes ou criticas.



3 comentários: