Powered By Blogger

domingo, 30 de setembro de 2012

BUGBot - Robot Seguidor de Luz - Parte-2




Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);



Nesta segunda parte do Robot Seguidor de Luz, o BUGBot, veremos a parte de configuração lógica do cérebro (Arduino); mas também faremos uma simulação didática usando um pequeno, mas poderoso micro-controlador o PICAXE08M2 e usando o software didático de simulação de circuitos eletrônicos e para PICAXE, o Yenka Crocodile (esse software tem uma versão com licença gratuita para uso de propósito pessoal/residencial).

Baixe o Yenka Crocodile no site: http://www.yenka.com/en/Free_Yenka_home_licences/

Vamos então ao nosso projeto!

HARDWARE & MATERIAIS:

2 x Transistores TIP120
2 x Diodos 1N4001
2 x LEDs verde 3mm
2 x LDR
2 x Resistores de 1KΩ
2 x Resistores de 470Ω
2 x Capacitores de 100 nF
2 x Trim-pot 5KΩ
1 x Conectores AK300 de 2 pinos
2 x PinHead com 2 pinos
1 x PinHead com 6 pinos
1 x pack de bateria (9V ou 12V)



ESQUEMAS & LAYOUTs:

Abaixo vemos a placa de circuito impresso e o diagrama esquemático do nosso Hardware.

Layout da placa de circuito impresso do BUGBot

Note que:
Os diodos 1N4001 e os capacitores de 100nF, são para proteção do circuito e eliminação de ruídos; conforme já explicado no post sobre Ponte-H.
Temos LEDs verdes para indicar quando um motor está acionado ou não (cuidado com o valor do resistor, se você for usar uma tensão de trabalho maior que 6V. Aconselho usar 6V/270Ω, 9V/ 470Ω, 12/680Ω.

JP2 é a saída para o motor direito e JP3 é a saída para o motor esquerdo.
JP1 é a conexão com o arduino, sendo (da esquerda para a direita):
pino 1 = > LDR sensor esquerdo;
pino 2 => LDR sensor direito;
pino 3 => alimentação positiva logica dos sensores (+5V do Arduino);
pino 4 => negativo comum (Arduino)
pino 5 => comando para acionamento do motor esquerdo (vem do arduino)
pino 6 => comando para acionamento do motor direito (vem do arduino)

Mais adiante faremos uma paralelo entre a pinagem do JP1 com a pinagem usada no arduino

Vimos que os sensores usam a alimentação lógica do Arduino como referência, isso porque não podemos ter uma tensão maior que 5V nas portas do Arduino.
Quando tivermos luz incidente no LDR, teremos 0V na porta do Arduino, e quando não tivermos luz incidente no LDR, teremos 5V na porta do Arduino (logica reversa, já abordada na primeira parte do BUGBot).



Diagrama esquemático do BUGBot


Esse  é todo o hardware eletrônico que necessitaremos, mais o Arduino e pack de baterias para os motores.


Ajuste de sensibilidade:
Feito através dos Trim-Pots de 5KΩ, desta forma podemos ajustar com qual nível de luz queremos que o BUGBot tenha uma resposta e acione os motores para movimentação.

Abaixo os arquivos originais em Eagle:

Estes são os originais do equema e da placa de circuito impresso em Eagle.
http://www.4shared.com/file/K-dFSSPS/BugBot.html
http://www.4shared.com/file/XBHJe0QI/BugBot.html



Conexão com o Arduino:
pino do LDR Esquerdo => A0
pino do LDR Direito => A1
pino do Motor Esquerdo => 8
pino do Motor Direito => 9


Paralelo entre as conexões Arduino e conector JP1:
ARDUINO - JP1-x
A0 - JP1-1
A1 - JP1-2
+5V - JP1-3
GND - JP1-4
D8 - JP1-5
D9 - JP1-6



SOFTWARE & PROGRAMAÇÃO:


Fluxograma de operação no software Yenka Crocodile:
Notar que as entradas/saídas são apenas ilustrativas, foram as usadas no software didático Yenka Crocodile com o PICAXE.
Este já foi explicado na primeira parte do projeto.


Fluxo de operação logica do BUGBot

Fluxograma de operação usando o programa Logicator PIC.

LOGICATOR, usado para programar  PICAXE



Programa para Arduino:
Baixe diretamente neste link o  sketch para arduino IDE 0023: http://www.4shared.com/file/3FtFRaAS/Bug_Bot_R1.html



Agora vamos às simulações:
Assista no Youtube: http://youtu.be/8hBfOb6b1HU
Assista no screencast.com: http://www.screencast.com/t/2v6Lr9vQ7





Assista no Youtube: http://youtu.be/CnhTETe-OBk
Assista no screencast.com: http://www.screencast.com/t/a7d2yhcQsli







O próximo passo é a construção do chassi, que conterá a parte motriz, eletrônica de sensores, etapa de acionamento, alimentação (baterias) e a parte de processamento lógico (arduino),... mas isso só na Parte-3 do BUGBot - Robot Seguidor de Luz. Aguardem a execução final do projeto.
Então,... até lá!

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com

sábado, 29 de setembro de 2012

BUGBot - Robot Seguidor de LUZ - Parte-1

-->


Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);





O BUGBot, é um robot seguidor de luz (como se fosse realmente um inseto), ele sempre se desloca em direção a um foco de luz.  Na ausência de luz ele permanece parado.

Esse robot, será o primeiro de uma séria a ser mostrado aqui.
Nosso projeto é mostrar alem do BUGBot, mostrar também o:
LINUSBot que será um robot seguidor de linha e o ECOBot, um robot que será guiado por um sensor ultra-sônico, medindo distancia de obstáculos e desviando deles.


A primeira parte desta série, será a apresentação dos meios de construção do chassis e a parte mecânica em geral, bem como a parte eletrônica do robot.  Apresentaremos também uma simulação do BUGBot em um software didático.

Então mãos a obra....

Para construir o BUGBot, precisaremos de um chassis, que será construído em acrílico.
Precisaremos também, de um sistema de um sistema de transmissão (motor/engrenagem), para poder fazer o nosso robot se deslocar.
Além é claro da parte eletrônica de potência para controle dos motores; parte eletrônica para os sensores (serão utilizados LDRs como sensor) e a parte eletrônica de controle dos dispositivos (entrada = sensores LDR e saída = Motores), usaremos o Arduino ou Teensy para esta finalidade.

FUNCIONAMENTO:

A figura abaixo mostra a ideia básica de qualquer robot, onde temos os dispositivos de entrada e saída ligados ao cérebro, em particular para o BUGBot.

Processamento Básico dos sinais


Os dispositivos de entrada serão os LDR (Light Dependent Resistor) os resistores dependentes de luz, que tem a sua resistência alterada conforme a incidência de luz no dispositivo. Basicamente, se não houver incidência de luz, teremos uma alta resistência (na ordem de 200KΩ a 1MΩ ) no dispositivo, e quando houver a incidência de luz, termos uma diminuição da resistência do dispositivo, conforme a sua curva característica.

Curva, Resistência x Iluminação


Um LDR também é sensível ao comprimento de onda da luz incidente, desta forma podemos dizer que ele depende da cor da luz (o que caracteriza a cor da luz é o seu comprimento de onda).

Curva, Sensibilidade x Comprimento de onda

Espectro de cores (comprimento de Onda)

Detalhes dos LDRs



Estrutura e Simbologia do LDR

Encapsulamento do LDR

Circuito Básico
Circuito Básico com LDR para acionamento de um LED

Na figura acima, podemos ver o circuito básico para acionamento de um LED com o LDR como sensor de Luz.
No circuito da esquerda, notamos que inicialmente o LED estará apagado, pois a lata resistência do LDR sem luz incidente, deixará o transistor no estado de corte; ao incidir luz no LDR, ele terá uma diminuição de sua resistência e desta forma, teremos uma polarização na  base, fazendo com que o transistor entre no estado de condução, acendendo o LED.
No circuito da direita, notamos que o LED estará inicialmente aceso, pois o LDR sem luz incidente terá uma resistência muito maior do que a soma de resistências do resistor de 10KΩ + potenciômetro de 10KΩ, ficando a base do transistor polarizada e o transistor no estado de condução acendendo o LED; quando a luz incidir no LDR, este terá uma diminuição de sus resistência e levará o transistor ao estado de corte, desligando o LED.

Um ajuste de sensibilidade no sistema é permitido através do potenciômetro de 10KΩ.

Logicamente, podemos usar o LDR de outras maneira, mas esta é a forma mais usual.



BUGBot

O robot terá 2 sensores LDR para poder determinar se ele deve se movimentar para a direita, para a esquerda, para frente, ou permanecer parado.
sendo:

1 x LDR sensor DIREITO
1 x LDR sensor ESQUERDO

No nosso BUGBot, usaremos motores DC para comandar um sistema de transmissão (engrenagens mais Rodas) para que o robot possa se movimentar e assim seguir a luz incidente nos sensores.
Foi usado o Kit:  Tamiya Gear Box na proporção 58:1





Se o LDR esquerdo tiver luz incidente, deverá ser acionado o motor direito para que o robot possa girar ou mover-se para a esquerda.
Se o LDR direito tiver luz incidente, deverá ser acionado o motor esquerdo para que o robot possa girar ou mover-se para a direita.
Se ambos os LDRs tiverem luz incidente, deverão ser acionados ambos os motores para que o robot possa seguir em frente.
Se ambos os LDRs não tiverem luz incidente, não deverão ser acionados ambos os motores para que o robot possa permanecer parado.

Observação importante:
Não basta somente detectar a presença de luz nos sensores e ligar os motores, precisamos também manter os motores acionados por uma quantidade de tempo mínimo para o funcionamento.


O controle dos dispositivos sensores LDR e motores, será feito pelo Arduino com um software para executar exatamente os passos acima.

Para o acionamento dos motores (como eles deverão girar somente em uma direção), não será necessário usar uma ponte-H, poderemos efetuar o acionamento usando apenas um transistor Darlington de potência.

Abaixo temos um diagrama completo dos dispositivos eletrônicos, e que utilizaremos para simular o funcionamento (primeiramente usando um software didático).


Circuito, Sensores / acionamento / processamento


Note que na figura acima o cérebro do sistema é um PICAXE8M2 (não importando agora qual é o processador e sim a parte didática).
Aqui é possível verificar a interconexão dos sensores com o processador e com os motores/rodas.
Neste circuito é importante notar que o sistema sensor funciona com logica reversa, ou seja:
Quando não temos luz no sensor, temos nível alto na entrada do processador (5V ou binário 1).
Quando temos luz no sensor, teremos nível baixo na entrada do processador (0V ou binário 0).




É isso...
Finalizamos aqui a primeira parte do BUGBot; esperem o próximo post, onde veremos a parte de programação do cérebro eletrônico, e uma simulação completa usando o programa Yenka Crocodile.



Dúvidas e sugestões enviem para: arduinobymyself@gmail.com


















domingo, 9 de setembro de 2012

Reaction Time - com Teensy / Arduino

-->



Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);



Reaction Time - JOGO, Tempo de Reação

Um joguinho para medir o tempo de reação de uma pessoa entre o surgimento de um aviso luminoso e o apertar de um botão.
O tempo é medido em milisegundos, que seria o tempo normal de reação da maioria das pessoas...

O funcionamento é o seguinte:

Ao iniciar o Teensy, é mostrado no display de LCD 16x2, uma mensagem de inicialização.
Após isto é mostrado no display a mensagem "Teste de Reação!", "Aperte Botão"
Ao ser pressionado o botão, primeiramente toca uma música de inicio e acende os LEDs no ritmo da música; começa então, uma temporização aleatória (0-10s) para ser gerado o aviso luminoso inicial (em relação ao qual a pessoa deve ver e apertat novamente o botão para ver o seu tempo de reação ao aviso).
Antes de aparecer o aviso luminoso (LED azul) e durante o tempo aleatório, é mostrado as mensagens no LCD: "Preparado?", "... Aperte:..."; quando finalizar o tempo aleatório, será acionado o LED azul e mostrado a mensagem "<<<< AGORA! >>>>" no LCD.
Se a pessoa apertar o botão antes de 5000ms, será tocado uma música de parabenização, piscando os LEDs no ritmo da música e será mostrado uma mensagem com o tempo da pessoa em (ms), por exemplo "Seu tempo: 253ms", essa mensagem permanecerá por 2s na tela.
E o sistema voltará ao inicio esperando que seja apertado o botão, para começar novamente.

Condições extras:
1. Se a pessoa ficar apertando o botão (durante os 10s aleatórios) para burlar e quando vier o aviso o botão ja estar apertado???
Se você tiver um tempo de reação 0ms (não é impossível eu já consegui), ou você é um "SUPERMAN", ou você está trapasseando "Travessura", essas são as mensagem exibidas neste caso.
2. Caso a pessoa não aperte antes dos 5000 ms... ou o tempo de reação da pessoa é muito ruím, foi esquecido de apertar.... de qualquer forma "Falhou Feio!", "RIDICULO" são as mensagens exibidas e uma música de erro para finalizar.

HARDWARE & MATERIAL:
1 x Teensy ou Arduino UNO/MEGA/Duemilanove
1 x BreadBoard
1 x Buzzer
1 x Display LCD 16x2 I2C
1 x LED RGB
3 x Resistores de  330Ω
1 x Resistor de 10KΩ
1 x Botão Tactil
1 x Capacitor Eletrolítico 10uFx16V
Fios e cabos para as ligações



ESQUEMA & LAYOUT:

Abaixo as interligações necessárias, com Arduino e Teensy.

Notar que o Botão tem um Capacitor Eletrolítico em paralelo com os seus terminais, para o Debounce do chavemaento.


                        pino
                           |
                           |
+5V <-----/\/\/\/\/\---|---o/ o--|-----|GND
                           |           |
                           |---| (-----|

Cada terminal do LED RGB, tem um resistor de 330Ω em série com a ligação ao processador. E o Catodo Comum ligado ao GND.

O Buzzer, tem seu terminal - (negativo), ligado ao GND e o terminal + (positivo), em série com um resistor de 150Ω, ligado ao processador.



Ligação com o Arduino:

LED vermelho, pino 13;
LED verde, pino 11;
LED azul, pino 10;
Botão, pino 9;
Buzzer, pino 12;
LCD_SDA, pino A4;
LCD_SCL, pino A5.



Conexões com o Arduino

Para o Teensy foram usados os seguintes pinos:
LED vermelho, pino 12;
LED verde, pino 14;
LED azul, pino 15;
Botão, pino 7;
Buzzer, pino 13;
LCD_SDA, pino 1;
LCD_SCL, pino 0.

Conexões com o Teensy


PROGRAMAÇÃO & SOFTWARE:

Obtenha o arquivo (.pde) diretamente do 4shared:

  http://www.4shared.com/file/1c7mBavR/Arduino_Reaction_Timer_2.html

http://www.4shared.com/file/haSv9q3Z/Teensy_Reaction_Timer_2.html



VIDEO:

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com

Youtube:  http://www.youtube.com/watch?v=-1nVPamC-5o



sexta-feira, 7 de setembro de 2012

Ponte H, Experimentos Parte-1



Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);


EXPERIMENTO 1


O primeiro experimento com a Ponte-H, será com as chaves liga/desliga/liga (alavanca 3T).

HARDWARE & MATERIAIS:
2 x Chaves alavanca de 3 posições, tipo LIGA/DESLIGA/LIGA
1 x motor DC de uso geral
Pack de bateria ou fonte de alimentação
Fios e cabos

Lembrando o conceito: 

em a) vemos as chaves sem acionamento e o motor está parado
em b) temos a chave superior da primeira "perna" do H acionada e a chave inferior da segunda "perna" do H acionada, o que resulta no motor girando em um sentido (por exemplo: horário).
em c) temos a chave inferior da primeira "perna" do H acionada e a chave superior da segunda "perna" do H acionada, o que resulta no motor girando no outro sentido (por exemplo: anti-horário).
NUNCA, deve ser acionado duas chaves na mesma "perna" do H, pois isso causaria um curto-circuito no sistema.
O acionamento de chaves em ambas as "pernas" do H, duas chaves superiores ou as dua chaves inferiores; isso não causaria efeito algum.



Esquema real de montagem:

Em X1-1 e X1-2, deve ser conectado o motor DC com tensão conveniente à alimentação do sistema.

Este esquema nos protege do caso que nunca devemos executar; pois, com o tipo de chave utilizado, nunca poderemos acionar somente uma "perna" do H (não podemos causar o curto-circuito).



O teste consiste em acionar as chaves de forma opostas; uma para cima e a outra para baixo e vice-versa.

VÍDEO:



Melhor visualizado pelo youtube: http://youtu.be/9Kz4qM8wOFY


EXPERIMENTO 2:

Agora vamos melhorar um pouco nossa ponte H, utilizando componentes eletrônicos discretos, tais como resistores e transistores bipolares de uso geral.

Isso permitirá utilizar o Arduino, para controlar o sentido da rotação de um motor DC.
De posse desse tipo de controle, podemos pensar em diversas utilizações para a ponte H.

HARDWARE & MATERIAIS:
2 x Transistores BC548C
2 x Transistores BC558C
4 x Resistores de 1KΩ
4 x resistores de 10KΩ
4 x Diodos 1N4148
1 x Motor DC
1 x BreadBoard
Fios e cabos para as conexões
Conectores parafusáveis (opcional)
Placa de circuito (opcional)

DataSheet dos Transistores
http://www.datasheetcatalog.org/datasheet/fairchild/BC548.pdf
http://www.datasheetcatalog.org/datasheet/fairchild/BC558.pdf



ESQUEMA & LAYOUT:



Abaixo o esquema e o layout da placa em eagle.

Não esqueça de conectar o GND do arduino com o GND do circuito (pino 2 - central do conector JP1)
Os outros dois pinos do conector JP1 são de sinal proveniente do Arduino (conforme programa).

No arduino os pinos usados foram o 10 e 11 .
Ligar M1-A ao pino 10 e M1-B ao pino 11

X1 é a conexão do Motor DC.

X2 é a coneção da alimentação externa para o motor. Sendo: X2-1=+VCC e X2-2=GND

Esquema Eletrônico
Os resistores podem ser testados com outros valores para melhores resultados.
Por exemplo: 330 Ω ou 470 Ω.

Ao colocar  M1-A em nível Alto, T1 ficará no estado de corte (Aberto) e T3 em saturação (conduzindo), ao mesmo tempo, colocando M1-B em nível Baixo, T4 ficará no estado de corte (aberto) e T2 em saturação (conduzindo). O motor irá ter uma rotação em um sentido.
Invertendo as condições em M1-A e M1-B, teremos rotação no outro sentido.

Layout Circuito Impresso
OBS.: Por questão de simetria, foi feito a opção por um jumper na placa de circuito impresso, conectando o GND externo (conector X2-2) com o GND da placa. Apenas por questão de simetria. Modificações podem ser feitas a vontade!

Pegue os arquivos originais aqui:
http://www.4shared.com/file/xaqSKSfU/Ponte_H_BC548-558.html

Como os transistores admitem no máximo 500 mA de pico máximo e trabalahm com 100 mA continuo, devemos escolher um motor DC que puxe no máximo 100 mA.

Circuitos mais avançados podem também ser testados.


SOFTWARE & PROGRAMAÇÃO:

O programa para teste é muito simples; consiste em um programa que comanda o motor em uma direção durante 1 segundo, inverte a direção por mais um segundo e assim por diante em loop.
Neste caso o suso é muito limitado, porém temos grandes possibilidades, tais como: controle de motor de passo para maior precisão no giro, uso do PWM para variação de velocidade, controle de servo-motores em aplicações de Robótica, Domótica ou Modelismo.
Enfim....
Basta programar e usar sua Ponte H com transistores.


// programa exemplo, somente

void setup(){
  pinMode(10, OUTPUT); // definição dos pinos
  pinMode(11, OUTPUT);
  digitalWrite(10, HIGH); // para o motor
  digitalWrite(11, HIGH);
}

void loop(){
  digitalWrite(10, HIGH); // primeira direção
  digitalWrite(11, LOW);
  delay(1000); // espera 1 segundo
  digitalWrite(10, LOW); // segunda direção
  digitalWrite(11, HIGH);
  delay(1000); // espera 1 segundo
}
// FIM DA COMPILAÇÃO


EXPERIMENTO 3:

Para obtermos uma maior corrente no acionamento de dispositivos que puxam uma maior corrente, devemos usar transistores que forneças esta corrente, assim, neste experimento, foi usado o transistor Darlington TIP-120 para a montagem da Ponte H.
Com isto garantimos uma maior corrente, um maior ganho de corrente, ou seja: necessitaremos menos corrente do Arduino para acionar uma carga que exige uma maior corrente.

Detalhe do circuito na BreadBoard

Mais detalhe, conector de alimentação externa



Circuito com o controle por PWM, via potenciômetro



HARDWARE & MATERIAIS:
4 x Transistores TIP120 ou TIP122
4 x Resistores de 1KΩ
1 x Motor DC
1 x BreadBoard
Fios e cabos para as conexões
Conectores parafusáveis (opcional)
Placa de circuito (opcional)


http://www.fairchildsemi.com/ds/TI/TIP120.pdf


ESQUEMA & LAYOUT:



Abaixo o esquema e o layout da placa em eagle.

No circuito,foi utilizado resistor de 1KΩ





A1 e A2 são as ligações com o Arduino nos pinos 10 e 11 respectivamente. No Conector JP1 são os pinos 1 e 3. Enquanto que o pino 2 é o GND comum.
X1-1 e X1-2, é a conexão do Motor DC.
X2-1 é a Conexão do GND e X2-2 é a conexão do +V Externo.

Originais Eagle:

http://www.4shared.com/file/sTNEBxsB/Ponte_H_TIP120.html




SOFTWARE & PROGRAMAÇÃO:

Para o teste podemos usar o mesmo código da seção anterior.

Porém;
É possível colocar um potenciômetro conectado ao arduino (pino A0 por exemplo) e assim efetuar um controle PWM de velocidade e direção do Motor DC.

+5V----------/\/\/\/\/\-------------GND
                    |
                    |
                  A0

O 5V é o a alimentação proveniente do arduino (alimentação lógica, separada da alimentação do Motor DC).
O Código abaixo é um simples exemplo de como efetuar esse controle.
Na posição central do potenciômetro, teríamos o motor parado, girando para a esquerda o motor teria sentido anti-horário, e girando para a direita o motor teria sentido horário.



/* código de domínio público
modificações são permitidas sem necessidade de aviso prévio*/

// definição de pinos e constantes
int pinH1 = 9;
int pinH2 = 10;
int pinPOT = 0;  
int valor; 
int valorH1; 
int valorH2;
void setup() 
  Serial.begin(9600); // inicialização da comunicação serial
// loop prinicpal do programa
void loop() 
  valor = analogRead(pinPOT); // faz a leitura analógica do potenciômetro            
  
  // mapeia os valores lidos
  valorH1 = map(valor, 0, 511, 255, 0); // entre 0 e metade do cursor do POT
                                                             // determina rotação em um sentido     
  valorH2 = map(valor, 512, 1023, 0, 255); // entre metade do cursor do POT e o fim de curso
                                                                  // determina rotação no outro sentido
  
  if (valor > 511){
     valorH1 = 0; // ao ultrapassar a metade do cursor do POT, zera este valor
  }
  else{
    valorH2 = 0; // se ainda não está na metade, deixa este valor zerado
  }
  
  // imprime no monitor serial as informações recebidas do POT e valores H1 e H2
  Serial.print("Valor: ");
  Serial.print(valor, DEC);
  Serial.print(" Valor H1: ");
  Serial.print(valorH1, DEC);
  Serial.print(" Valor H2: ");
  Serial.println(valorH2, DEC);
  
  // aciona os pinos do arduino convnientemente com o valor para o PWM.
  analogWrite(portaH1, val1);
  analogWrite(portaH2, val2);  
}
// FIM DA COMPILAÇÃO




VÍDEOS:

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com

No youtube: http://www.youtube.com/watch?v=hk4APp1_Jd0



















quarta-feira, 29 de agosto de 2012

Ponte H - Controle de Motores DC


Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);


Ponte H - Teoria, Conceitos & Usos

Motores são dispositivos que convertem a energia elética em energia mecânica de rotação, e tem infinidades de usos na Eletrônica, Robótica e Mecatrônica.

O maior problema com motores DC é controlar sua rotação e direção para que você possa ter uma ampla gama de utilização.

O PWM resolve o problema de controle de velocidade, onde inserindo um sinal controlado por PWM no motor torna se possível controlara a rotação do mesmo. Outro problema seria com relação ao torque, para isso temos também as caixas de redução que diminuem a rotação do motor, mas garantem um aumento de torque devido a relação existentes para as engrenagens utilizadas.

A ponte H é um conceito utilizado para que seja possível controlara o sentido da rotação (horário ou anti-horário).

Todas as técnicas citadas acima, garantem um excelente uso de motores de corrente DC e de vários tamanhos e potências.

Motor DC de pequeno porte:-
Vista expandida do Motor DC






Alguns modelos







Motor de Passo:-








Servo Motor:-


 






Vamos nos deter na PONTE H:-

Definição do Wikipedia:
Ponte H é um circuito eletrônico que permite que um micro controlador controle um motor DC, o micro controlador por sí não consegue "dar" a corrente necessária para o funcionamento do motor, e ainda 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.
Ponte H - Teórica, com chaves
Funcionamento para os 2 sentidos de rotação



O nome ponte H é dado pela forma que assume o circuito quando montado. O ciruito é construído com quatro "chaves" ( S1-S4 ) que são acionadas de forma alternada ( S1 e S4 ou S2 e S3). Para cada configuração das chaves o motor gira em um sentido.
As chaves S1 e S2 assim como as chaves S3 e S4 nao podem ser ligadas ao mesmo tempo pois podem gerar um curto circuito.
Para construção da ponte H pode ser utilizado qualquer tipo de componente que simule uma chave liga-desliga como transistores, relés, MOSFETs.
Para que o circuito elétrico fique protegido, é aconselhável que sejam configuradas portas lógicas com componentes 7408 e 7406 a fim de que nunca ocorram as situações de curto circuito descritas acima.
Outro melhoramento que pode ser feito à ponte H , seria a colocação de diodos entre as "chaves", pois quando a corrente não tem onde circular, no caso de o motor parar, ela volta para a fonte de alimentação
economizando assim o gasto de energia de uma bateria ou evitando que a corrente danifique o microcontrolador, por exemplo.


Quem quiser aprofundar-se mais um pouco no assunto, sugiro a leitura do artigo:
http://www.maxwellbohr.com.br/downloads/robotica/mec1000_kdr5000/tutorial_eletronica_-_montagem_de_uma_ponte_h.pdf

HARDWARE & MATERIAIS:

1 x Arduino Duemilanove, UNO, MEGA ou Teensy
1 x BreadBoard
4 x TIP-120
1 x Circuito Integrado L298N - Ponte H Dupla
2 x Transistores BC548
2 x Transistores BC558
2 x Resistores de 0,47 Ohms x 2W
4 x Resistores de 1K Ohms
4 x diodos 1N4148
2 x Capacitores de 100 nF cerâmicos
2 x Chaves 1 Pólo x 2 Posições
1 x Pack de Bateria de 9V ou 4,5V
Fios e Cabos para as conexões


CIRCUITO & ESQUEMAS:

Primeiro teste; simulação com chaves:
Usando o diagrama citado na parte teórica acima, e usando duas chaves de 1 x pólo / 2 x posições.

Chave Liga/Desliga/Liga Alavanca 3T

Segundo teste; usando transistores NPN e PNP (isso evita a condição de termos as chaves de um lado da ponte ligadas ao mesmo tempo.  Podendo ser usados transistores BC548 e BC558 (NPN e PNP, respectivamente).
Neste caso, os transistores Q4 e Q1 serão mantidos no estado de saturação (para um sentido de rotação) enquanto Q3 e Q2 são mantidos no estado de corte (base em 0 Volts)
E para o outro sentido, o caso inverso; Q4/Q1 em corte e Q3/Q2 em saturação.

Os diodos são para proteção dos Transistores devido à força contra eletromotriz gerada pelo motor durante os acionamentos de partida e paradas bruscas.
O capacitor serve para minimizar picos de tensão nas bobinas do motor, bem como evitar faiscamento nas escovas. Além disso, serve também para:
- Filtrar ruídos de Alta-Freqüência
- Minimizar interferências em equipamentos de RF (rádios AM/FM, televisores, etc...)





Para acionamento do primeiro sentido de rotação, devemos ter:
Q4 e Q1 no estado de saturação = Q4 sem sinal na base e Q1 com sinal positivo na base
Enquanto isso Q3 e Q2 devem ficar no estado de corte, ou seja: Q3 sem sinal na base e Q2 com sinal positivo na base.
O inverso ocorrendo para o segundo sentido de rotação.
Resumindo: Q4 e Q3 devem ser acionados ao mesmo tempo e com o mesmo tipo de sinal, enquanto Q2 e Q1 também devem se acionados ao mesmo tempo e com o mesmo tipo de sinal.
Veja tabela:

Sentido 1 => Q4=Q3=sem sinal         e Q2=Q1=sinal positivo
Sentido 2 => Q4=Q3=sinal positivo   e Q2=Q1=sem sinal

Estes circuitos usando transistores bipolares de baixo ganho, tem um inconveniente:

O consumo de corrente elevado na porta do Arduino!!!

Analisando a curva de ganho (HFE) x corrente de coletor (IC) de um transistor bipolar BC548 temos:



Podemos ver que para correntes de coletor de 2 mA o ganho seria de 300 vezes.
Enquanto que para correntes de coletor de 300 mA o ganho seria de 20 vezes apenas.
Isso nos mostra que para termos correntes de  300 mA, exigidas pelos motores DC, necessitaríamos de correntes de base de 15 mA ou maior (15 mA x 20 = 300 mA).
O Arduino pode fornecer no máximo 40 mA nas portas.

Calculo do resistor
R=V/I
R=(5V - 0,7V) / 0,015 ~= 280 Ohms

Quanto menos corrente sendo consumida da porta do Arduino, melhor....


Terceiro teste; Ponte H com Transistores Darlington  TIP-120 (NPN):
Usando o esquema abaixo.

Exemplo com Transistores NPN TIP-120
Neste circuito não é necessário os diodos, pois o TIP-120 já tem internamente um diodo de proteção.

Conforme as entradas A e B recebem níveis ALTO ou BAIXO, teremos determinado o sentido de rotação.
segundo a tabela abaixo:

A = ALTO, B = BAIXO -> Sentido Direto de rotação
A = BAIXO, B = ALTO -> Sentido Reverso de rotação
A = BAIXO, B = BAIXO -> Parado
A = ALTO, B = ALTO -> PROÍBIDO, Curto Circuito

Os transistores Darlingtons tem um ganho maior para altas correntes de coletor, reduzindo aquele problema anteriormente citado.
Veja na figura abaixo, que para altas correntes de coletor, temos altos ganhos... acima de 1000
Assim, por exemplo: para 300 mA teriamos ganho de 1200 vezes (usando 1 mA na base) teríamos um resistor de base igual a:

R = (5V - 0,7V) / 0,001 ~= 4300 Ohms



Circuito equivalente

Substrato






Quarto teste; usando o Circuito Integrado (CI) L298N Dual H-Bridge (Ponte H Dupla).
DataSheet do L298
http://www.sparkfun.com/datasheets/Robotics/L298_H_Bridge.pdf


L298N Substrato


Ponte H Dupla - L298N. 
Alimentação de 5V - 35V. 
Corrente máxima de 2A. 
Potencia máxima de 25W. 
Pode comandar um stepper de 2 fases ou um stepper de 4 fases ou 2 motores DC. 



L298N Pinagem


L298N Diagrama em Blocos
Como mostrado no diagrama acima, temos os pinos 1 e 15 como sendo o Current sense (sensor de corrente). Na verdade este pino pode ser ligado diretamente ao GND de nosso circuito, mas toda via o uso correto seria colocando um resistor de baixíssimo valor (para não interferir na corrente de saída, cerca de 0,1 Ohm) e de tal forma que possamos medir a tensão em cima deste resistor e calcular a corrente que está sendo fornecida (funciona como um shunt). Por isso o resistor deve ter uma dissipação potência elevada, da ordem de 1 a 5 Watts dependendo da corrente a ser usada na saída (geralmente usa se associação de resistores em paralelo para isto).
O pino 4, Supply voltage Vs é a tensão de alimentação para os motores, enquanto que o pino 9, Logical Supply Voltage Vss é a tensão do circuito de controle +5V do Arduino. o pino 8, GND é comum aos dois circuitos.
Sempre colocar um capacitor de desacoplamento de 100nF entre os VCC/VDD (Vss/Vs) e o terra.
Os pinos 6 e 11 (ponte A e ponte B) Enable, podem ser colocados en nível alto diretamente conectados ao Vs, ou podem ser usados por pinos de controle provenientes do Arduino


L298N Circuito Típico com 2 motores
Você pode também usar cada uma das saídas para controlar individulamente um motor DC, com somente uma direção de rotação. Assim podemos controlar até 4 motores DC.
Podendo também, mesclar o uso, ou seja um motor numa ponte H (dois sentidos de roatação) e dois outros com somente um sentido de rotação.

Controle de Motor de passo,  visite para maiores informações:
http://www.roboticasimples.com/artigos.php?acao=14

L298N Circuito para motor de passo Bipolar

Nos Próximos posts; veremos a parte prática desta teoria, com os testes realizados.

Primeira parte com a Ponte H com Chave, Ponte H com Transistores bipolares NPN e PNP e Ponte H com transistores Darlington.

Segunda parte com o Controle via L298H (Ponte H Dupla).

Terceira Parte controle de Servomotores e Motores de Passo.

Então, até Breve!

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com