terça-feira, 28 de dezembro de 2010

Sensor IR



Como prometi na postagem sobre o Robô lutador de sumô mostro aqui o sensor infravermelho usado.
O circuito é bem simples e barato, mas muito eficiente. Quando alimentado com 5v se estiver a cerca de 2cm de uma superfície branca sua saída ficará em nível alto 5v, se a superfície for preta a saída ficara em nível baixo 0v.



A base do circuito é formada por um fotodiodo e um led infravermelho facilmente encontrados em lojas de eletrônica. O led fica aceso sempre que o circuito estiver alimentado. O resistor de 470R, que limita a corrente no led, pode ser substituído dependendo do led utilizado. O fotodiodo é polarizado reversamente e não conduz enquanto não houver incidência de luz infravermelho sobre ele o que permitie que o transistor seja polarizado pelo resistor de 10k o que coloca a saída em nível baixo. Como o foto diodo esta ao lado do led a proximidade de uma superfície branca reflete a luz do led e o foto diodo conduz, impedindo a polarização do transistor pelo resistor de 10k, o que faz a saída ficar em nível alto graças ao resistor de 4k7.

Exemplo de utilização

No exemplo  do vídeo a cada vez que arduino recebe o sinal 1 (5V) do sensor IR  ele inverte a rotação do motor através da ponte H L298. Quando o sinal é 0 (0V) ele para o motor e aguarda 2 segundos até fazer nova leitura do sensor. O código, que é grosseiro, pois a intenção é apenas ilustrar o funcionamento de sensor IR, pode ser baixado aqui.

O layout da placa do sensor pode ser baixado clicando aqui.

Obs.: Os arquivos estão compactados com o 7zip.

O ExepressPCB pode ser baixado gratuitamente aqui.


segunda-feira, 27 de dezembro de 2010

Arduino sensor de som


Se preferir assista no Youtube

Um irmão me propôs montar um sistema de luz rítmica com o arduino.
Como nunca fiz nada do tipo fui pesquisar e encontrei alguma coisa que não usava microcontrolador mas um transformador ligado à saída de um amplificador como casador de impedância, uma etapa pré-amplificadora e SCRs ou TRIACs para acionar lâmpadas incandescentes para 110v ou 220v. Pensei então em usar um sensor de som no arduino e uma etapa de potência com TRIACs, SCRs ou Relés. Por conveniência escolhi usar relés que apesar de ter a limitação ser ON/OFF, não há possibilidade de controle da intensidade luminosa como nos TRIACs e SCRs e de seus contatos sofrerem desgaste com operações repetitivas, funcionaram satisfatoriamente.

O Sensor

Existe à venda o Arduino sound sensor, mas decidi adaptar um sensor simples e barato publicado pela editora Saber no livro Eletrônico Básica para Mecatrônica de Newton C. Braga. O circuito pode não ter a sensibilidade do sensor comercial, mas, atendeu muito bem ao propósito proposto. O microfone usado é de eletreto.

O Circuito

ATENÇÃO: TENHA MUITO CUIDADO AO  UTILIZAR TENSÃO DA REDE ALTERNADA 110V OU 220V. PARA ESSAS TENSÕES CHOQUES PODEM SER, NO MÍNIMO, DESAGRADAVÉIS.
                                                                                                                                                                
                                                                                                                                                                  
As lâmpadas usadas foram de um pisca-pisca comum com 100 lâmpadas e 8 funções. Ele tem quatro conjuntos de lâmpadas, cada conjunto ligado em série. A centralzinha de controle foi removida ficando cinco fios um de cada conjunto de lâmpada que foram ligados a cada um dos contatos normalmente abertos de quatro relés e, um fio comum ligado diretamente à rede 110V. O transistores usados para acionar os relés são BC548 e os resistores de 1k. 

A lógica é bem simples. O sensor é lido pelo arduino, através da entrada analógica, 0 (zero) que verifica três níveis de sinal e chama a função acende que gera um byte aleatório e usa os quatro primeiros bits para aciona as lâmpadas através dos relés isto é, bit 1 liga o relé correspondente bit 0 desliga o relé correspondente o que, por sua vez, acende ou apaga as lâmpadas respectivamente. Para cada nível de sinal é aplicado um delay, que determina quanto tempo a lâmpadas ficarão no estado atual antes de uma próxima leitura do sensor. No caso da faixa de mais alta a função acende é chamada duas vezes para causar um efeito diferenciado.

O código, que também é muito simples, pode ser visto abaixo.

 int soundPin = 0;  
 int lmpPin4 = 13;  
 int lmpPin3 = 12;  
 int lmpPin2 = 11;  
 int lmpPin1 = 10;  
 int val, val2;  
 byte Seq =0;  
 void setup()  
 {  
  pinMode(soundPin, INPUT);  
  pinMode(lmpPin4, OUTPUT);  
  pinMode(lmpPin3, OUTPUT);  
  pinMode(lmpPin2, OUTPUT);  
  pinMode(lmpPin1, OUTPUT);  
 }  
 void loop()  
 {  
   val2 = analogRead(soundPin); //le o sensor de som  
   val = map( val2, 0,1024,0,200); //muda de escala de 0-1024 para 0-200   
   if(val > 70 )  
   {  
   acende();  
   delay(100);  
   acende();  
   delay(100);  
   }  
   else if(val > 40 )  
   {  
   acende();  
   delay(200);  
   }  
   else if(val > 30 ) // nivel minimo valores menores são desprezados  
   {  
   acende();  
   delay(300);  
   }  
 }  
 void acende()  
 {  
 Seq = random(1,0xF);  // gera um byte aleatorio e armazena em Seq   
  if(bitRead(Seq,0 )==0)  
  digitalWrite(lmpPin1, LOW);  
  else  
  digitalWrite(lmpPin1, HIGH);  
  if(bitRead(Seq,1)==0)  
  digitalWrite(lmpPin2, LOW);  
  else  
  digitalWrite(lmpPin2, HIGH);  
  if(bitRead(Seq,2)==0)  
  digitalWrite(lmpPin3, LOW);  
  else  
  digitalWrite(lmpPin3, HIGH);  
  if(bitRead(Seq,3)==0)  
  digitalWrite(lmpPin4, LOW);  
  else  
  digitalWrite(lmpPin4, HIGH);   
 }  

Para baixar o código fonte  clique aqui.

Para baixar o layout da placa do sensor, feito no expressPCB clique aqui.

Para baixar o layout da placa dos relés, feito no expressPCB clique aqui.

Obs.: Os arquivos estão compactados com o 7zip.

Neste site você pode baixar gratuitamente o expressPCB.

Esta é apenas uma aplicação simples para o sensor de som. Usando a criatividade é possível implementar muita coisa com ele.

domingo, 26 de dezembro de 2010

Robô de sumô





No primeiro semestre deste ano surgiu a oportunidade de participar de uma guerra de robôs de sumô promovida pela faculdade em que eu estudo.
As regras foram as mesmas usadas em vários campeonatos que existem para robôs de sumo com limite de peso em três quilos exceto por uma peculiaridade, não permitia o uso de microcontroladores. Toda a lógica do robô deveria ser feita com portas lógicas e timers além de componente eletrônicos discretos como resistores capacitores e transistores.
Convidei um colega de curso, formamos uma dupla e nos escrevemos na guerra.


A estrutura física e a tração

 
Para mover o robô usamos dois motores de vidro elétrico. Na ponta do eixo de cada motor foi soldada uma porca para possibilitar a fixação de parafusos que serviriam de eixo para as rodas.
Um dos quatro pontos de fixação do motor foi serrado para que fosse possível usar rodas menores, que significam maior torque além de fazer com que os motores, parte mais pesada 
do conjunto, fiquem mais próximo ao solo aumentando a estabilidade.
Inicialmente os motores foram presos um ao outro com o uso de barra roscada de 4mm, porcas e arruelas,  então as laterais, feitas em compensado de 4mm, foram fixadas nas barras.
.

 



 

 Como eixo das rodas traseiras foi usado um pedaço de barra roscada presa nas laterais por quatro porcas. A intenção era prender o eixo e deixar as rodas girando livres.

   

Um detalhe importante é a tração nas quatro rodas,conseguida com a utilização de uma corrente e engrenagens do cambio de bicicleta. Uma solução simples porém eficiente.
Como as rodas usadas são de borracha maciça ficou fácil prender as engrenagens nelas com parafusos.










Funcionamento

 A figura ao lado mostra o diagrama lógico simplificado onde é possível ver como funciona o Eniac acompanhando a descrição abaixo.

  • Depois de contado o tempo para iniciar o funcionamento por  TM liga, os motores rodam para frente;
  • Os motores são acionados por dois relés cada como mostrado na figura ao lado. Alimentar as bobinas inverte a rotação do motor;
  • Quando um dos sensores de linha esta SLE ou  SLD  encontra a linha branca este aciona os dois timers que determinam quanto tempo cada motor respectivamente terá sua rotação invertida ou por quanto tempo a procura ao oponente será inibida no caso do timer direito;
  • De tempo em tempo o TM BUSC manda um sinal para inverter a rotação do motor direito fazendo o robô girar em torno do próprio eixo. Antes de chegar ao motor esse sinal passa por um AND com o sinal do sensor de busca e o sinal do timer direito. Se o sensor de busca encontrar algo ele manda 1 que negado, interrompe a procura. A procura também é interrompida quando o sensor de linha direito é acionado, já que se afastar da linha é mais importante que procurar o oponente;
  • As chaves CH1 e CH2  combinadas permitem alguns modos de funcionamento mostrado abaixo.

A montagem da lógica

Não poder usar microcontrolador foi o meu maior desafio. Depois de varias tentativas, simulando a associação de portas lógicas em um simulador da CLP Zelio, onde você arrasta e solta blocos lógicos. Percebi a possibilidade de fazer blocos lógico físicos com os CIs de portas lógicas e o TIMER 555 e, através de jumper, alteras a “programação” do robô o quanto fosse necessário. Disso também surgiu a idéia do nome Eniac. - O Eniac foi o primeiro computador eletrônico construído. Nele alterar o programa executado significava fazer uma reorganização de jumpers e chaves.

A idéia foi montar pequenas placas, uma contendo um CI porta NOT outra placa com um CI de porta OR, outra com a porta AND e outras quatro com timers tendo como base o LM555.
Blocos lógicos

Os potenciômetros dos timers ficam na parte de cima do robô possibilitando alterações de seu comportamento até mesmo nos intervalos das lutas.

O robô deveria esperar 5 segundos antes de começar funcionar. Para isso foi usado um dos timers que recebe um pulso negativo assim que o interruptor geral do Eniac é ligado, o que mantém sua saída em nível alto pelo tempo determinado por seu potenciômetro. Esta saída negada aciona através de  transistores  três reles,  dois  ligados  em
Time
paralelo para alimentar o circuito de força. Após o tempo determinado a saída do timer volta a zero o que iria desenergizar os reles, isso não acontece por causa do terceiro relé, que serve como contato de retenção mantendo o conjunte de reles acionados até que a chave geral seja desligada.


Outros detalhes

Para fixar a parte eletrônica foram usadas barras roscadas na vertical e placas quadradas  de compensado de 4mm de espessura e 18cm  de lado. A bateria usada, Lipo 2200 mAh , foi colocada em cima dos motores de forma que ficasse fácil troca-lá pela reserva caso fosse necessário. Logo acima da bateria na primeira plataforma ficou a parte de força composta por duas placas com relés (detalhe mostrados acima). A primeira é acionada pelo timer LIGA. Na segunda placa é feito o controle do sentido de rotação dos motores. Na segunda plataforma de baixo para cima estão os blocos lógicos. Todos os timers foram colocados na ultima plataforma, feita em alumínio, presos apenas pelos potenciômetros.

Fico devendo os detalhes sobre os timers e os sensores de linha para uma próxima postagem.


Críticas e comentários construtivos serão sempre bem vindos.