terça-feira, 28 de agosto de 2012

Baterias

Bom como todos sabem nosso tendão de aquiles tem sido as baterias. No primeiro robô que fizemos que usou baterias novas - de chumbo ácidas, recarregáveis conseguimos um resultado razoável. Ou seja, nossa meta a partir de agora é corrigir este problemas, afinal o problema de rodas está solucionado. A grande desvantagem do uso de baterias chumbo ácidas é o peso - quase 1,0 kg. Em nossa participação no torneio juvenil de robótica quase fomos desclassificados por isso.
O objetivo então é arrecadar um valor razoável - em torno de R$200,00 e comprar 3 conjuntos da baterias de aeromodelos (LiPo ou LiFePO4) e o carregador. Para a escolha usei este link como fonte: http://www.e-voo.com/artigos/bateria/.
Para tanto leve em consideração na escolha das baterias a especificação do seu robô - consumo dos motores, sensores e do Arduíno - e a taxa de descarga - o valor de corrente (mAh) vezes a taxa de descarga (quantos C´s da bateria) - o valor obtido corresponde a carga máxima instantânea da bateria. O valor de mAh indica quanto tempo a bateria aguenta - divida o valor de consumo pelo valor de mAh e o resultado é uma projeção, em horas, de quanto tempo a bateria aguenta.
Logo que começarmos os testes posto os valores para ficar mais fácil o entendimento.

Testamos as baterias na VI Semana de Educação, Ciência e Tecnologia e o resultado foi 100% positivo. Agora é só aplicar nos próximos projetos.

sábado, 25 de agosto de 2012

Sensor IR com R$0,00

Estávamos trabalhando num sensor IR usando partes de controle remoto (led emissores) e recpetores que existem em aparelhos com controle remoto. O sensor que fizemos, além de aquecer o resistor, mantinha pequenas distâncias (5cm). Bom, pesquisando no site do Arduíno (www.arduino.cc) encontrei o que pode ser a solução para o problema - na base do TSOP ligamos um resistor de 10Kohm, como os receptores normais mas, segundo a apostila da parallax (Apostila parallaxde onde eu tirei o esquema abaixo apareceu a solução - ligar um resistor de 220 ohm na base. Com isso a estimativa é um sensor de 30 cm. Se der certo conseguiremos 4 sensores de distância IR com boa resolução.


Sugiro o uso de resistores de 100 a 200 ohm no emissor para uma melhor distância.

Revista de Sábado - Programa com a Equipe Pequenos Cientistas

Estou publicando a cópia do programa "Revista de Sábado" da TV TEM - Sorocaba em que os alunos do projeto foram entrevistados sobre tecnologia. Este programa foi gravado logo após o 5° Grande Desafio, onde vencemos na categoria "Equipe Comunitária".

Projeto Fenix - Seguidor de linhas

19/12/2012
Apesar dos meses sem evolução e parados, neste fim de ano, esse chassi recebeu uma atenção especial e, esta semana, passou pelos primeiros testes usando o Arduino e 4 sensores de linha. Ainda com problemas para virar, este projeto se mostrou muito bom, precisando apenas de ajustes no motor dianteiro (que vira o carrinho), mas com boa velocidade e tração. Segue abaixo os vídeos de testes:

25/08/2012
A equipe Fenix está desenvolvendo um projeto de seguidor de linha para desafios "Labirinto de Linhas" do Torneio Juvenil de Robótica, Seguidor de Linhas do Summer Challenge da Robocore  e para o "Resgate de Alto Risco" da OBR - Olimpíada Brasileira de Robótica. Abaixo segue vídeo do chassi, doação da empresa Citoka Chinelos, em que a equipe transformou a base de um carrinho de controle remoto em um suporte para o Arduíno, protoboard e uma garra de acrílico (projeto vencedor do 5° Grande Desafio - Unicamp 2011).

Ainda falta material para completar o projeto mas podemos ver que ele é veloz e tem precisão de movimentos. Falta os sensores de linha (comprados hoje da empresa Laboratório de Garagem e da empresa Webtronico) que serão instalados nos próximos 15 dias. Serão 2 na lateral (25cm entre eles) e 1 na dianteira. Além disso, estamos trabalhando num projeto de sensor de ultrassom para detecção de objetos usando o esquema abaixo:

Em breve publicaremos a programação e os vídeos do robô com o Arduino instalado.

Obrigado Citoka, pela doação.

Boas Notícias

Depois de três dias de negociações temos grandes novidades, graças ao último resultado positivo:
Fechamos a compra de material com a Webtrônico, que inclusive apoia nossa iniciativa. Agradecemos ao Juliano e sua equipe.


Fechamos a compra de material com o Laboratório de Garagem, que foram muito solícitos em atender nossas condições e prazos. Obrigado Renata.


Parabéns equipe Pequenos Cientistas e bom trabalho prof. Alan

_________________________________________________________________________________

Infelizmente o pagamento das notas das empresas não foram efetuados e por isso os pedidos foram cancelados. Gostaria de poder comentar mais sobre o assunto mas não posso. Para bom entendedor basta ver a atualização do site para compreender o que acontece.
Prof. Alan 

sexta-feira, 24 de agosto de 2012

Nossa primeira vitória no sumô

Melhor de 3 rounds, o nosso não tem proteção na frente, vencemos o 2° round.
Torneio Juvenil de Robótica - ENIAC vs Orion

quarta-feira, 22 de agosto de 2012

Novo Desafio - Mostra Nacional Robótica

Recebemos hoje um e-mail da Diretoria de Educação de Jundiaí sobre a Mostra Nacional Robótica. Investigamos sobre o conteúdo da mostra e concluímos que nosso projeto se enquadra na Categoria Ciências , Vídeo e Ambiente, como projeto de reciclagem - desmontamos o robô do 6° Grande Desafio para fazer o robô do Torneio Juvenil de robótica e, grande parte do material do chassi (madeira, alumínio, motores e parte das baterias) foi obtido de reciclagem ou pode ser reciclado. Estava no planejamento inicial deste ano participar desta mostra mas, o projeto foi deixado de lado por conta do curto tempo entre as competições. Porém, vamos retomar a inciativa porque o material do blog está bem completo sobre como foi a transição dos protótipos. A responsabilidade desta inciativa irá cair sobre os ombros da Elaine e da Any. 

terça-feira, 21 de agosto de 2012

Reportagem Jornal Foco - Diretoria de Ensino Jundiaí

Sobre o Torneio Juvenil de Robótica USP 2012:

Planejamento 2012 - 2013

Planejamento 2012 - 2013

Cronograma de torneios
Evento
Data prevista
Tipo do robô
Robocore  Summer Challenge
Março 2013
Seguidor de linha
7° Grande Desafio
Abril a Junho 2013
Sem desafio previsto
OBR – 2013
Junho/Julho
Resgate de alto risco
Torneio Juvenil de robótica
Agosto 2013
Resgate de alto risco
Sumô (20x20, Large, MMA)
Seguidor de linha
Cabo de Guerra


Período de Desenvolvimento
Agosto de 2012 a Março de 2013

Chassis a serem construídos
- 4 rodas 20x20 2 andares - suporte de acrílico
- 4 rodas 40x40 2 andares - suporte de acrílico
- 6 rodas sem tamanho definido
- Esteiras

Placas
- sensor de linha 5cm - 12 sensores
- sensor de IR com amplificador - 20 sensores
- sensor de ultrassom - 20 sensores
- Drive de motor - l298n - 2
- Drive de motor - duplo l298n para motor de passo - 2

Metas 2012/2013
- Ampliar o grupo em mais 1 equipe ativa (atualmente são 4) - 2 Elza Facca (8 alunos), 2 do Frei (8 alunos)

- Desenvolver 1 robô de esteiras
- Produzir 2 robôs para resgate de alto risco (fundamental e médio)
- Melhorar a eficiência dos sensores de IR
- Comprar e produzir 8 sensores de ultrassom

- Robocore: classificar entre os 5 primeiros (tempo estimado do robô 0,1m/seg)
- Grande Desafio: Super Solução, prêmio para o Ensino Fundamental
- Torneio Juvenil de Robótica: 3 medalhas
- OBR - classificação na fase regional para a fase nacional

Orçamento Previsto 2012/2013
Projetos Descentralizados - sem prazo de pagamento - Previsto R$ 4000,00 sendo 50% transporte. Este orçamento é suficiente para o Grande Desafio e Torneio Juvenil de Robótica.
Sem patrocinadores oficiais ainda, mas com possibilidade de uma empresa de São Paulo.

Investimentos 2012/2013
- Compra de 5 Arduinos UNO - via projetos descentralizados - Custo Total - R$ 640,00
- Compra de 8 sensores de ultrassom - via Projetos descentralizados - R$ 50,00





domingo, 19 de agosto de 2012

Nossos Valores

Deixo aqui a memória de um pequeno episódio que mostra um pouco do espírito dos alunos:
Em determinado momento do trabalho o robô da Equipe Pequenos Cientistas parou de funcionar, apesar do Arduino estar ligado. Os alunos tentaram remontar mais de 5 vezes o robô e nada conseguiram. Bom, eu como professor deixo a situação problema no "colo" dos alunos e me dirijo a coordenação para ratificar a inscrição das equipes. Isso depois de tentar tudo que eu sabia e que eles sabiam (já havia passado mais de 1hora 30minutos, estava terminando o sumô do nível 2). 
Conversei com o pessoal da organização e comentei um fato bizarro que havia acontecido (a Elaine que descobriu): quando se conectava o cabo USB (+5V) em cima do conector de USB do Arduino, sem ligar o mesmo, o robô funcionava por alguns segundos e depois parava. Eles discutiram comigo sugerindo o que ey tentei e expliquei que os alunos tentaram ligar o Arduino com aterramento, ligar no 5V, medir a tensão do cabo USB e nada dava resposta. Um dos garotos que estava lá sugeriu que, o que poderia estar acontecendo lá era que o Arduino pudesse estar com a bateria com corrente fraca e, por isso, quando o cabo USB encostava no Arduino fornecia a carga necessária. Nesse momento acendeu a luzinha da salvação, corri para os alunos e disse que tinha uma boa notícia. Contei o resumo da conversa e, para minha surpresa, eles haviam descoberto isso e já estavam tomando providências - recolhendo todas as pilhas e baterias para ver o que conseguíamos.
Bom começa a luta de novo, a correria para remontar o robô pela décima vez no dia. Mas, como o destino é implacável, não achamos uma bateria para substituir. Nesse momento olhei para os alunos e, acho que todos nós sabíamos o que ia acontecer - estava perdido. Tínhamos 2 robôs mas baterias para 1 robô e meio e não foi falta de planejamento - tínhamos baterias recicladas de celular, baterias velhas que podiam ser usadas em série e 1 conjunto de pilhas comum - nada que fosse suficiente para alimentar o Arduino (9V), os sensores (4,8V) e os motores (8V/800mAh) conforme o planejado ou mesmo o suficiente para manter o robô ligado por mais de 3 minutos.
Nesta hora ainda veio um último lampejo mas o robô já havia sido desmontado e, todo nosso preparo para essa competição havia se perdido. Era visível o desânimo no rosto dos alunos. A equipe Orion entrou nesse momento pela porta desesperado porque o robô estava muito pesado. Imediatamente a equipe se levantou e entrou em ação - pegaram todas as baterias que estavam disponível e as pilhas dos sensores, que foram desmontados às pressas e entregaram ao grupo Orion. 
Alguns minutos depois, eles voltaram com a notícia: tinham perdido o primeiro combate (é a vida não é como filmes que tudo dá certo no final). Logo depois haveria um segundo combate, com nada menos que a equipe mais forte do em nossa opinião - ENIAC (inclusive tietei eles). O combate começou mal, perdendo o primeiro round mas, as vezes, nos surpreendemos com a vida e, o segundo round foi vencido pela Equipe Orion (em breve coloco neste post o vídeo). Perdemos o terceiro round e a luta.
Para quem não entende, este resultado é um fracasso, uma perda. A questão é: Davi é capaz de vencer Golias. Vencer um round de um oponente mais fraco é obrigação, porém, vencer um round de um oponente mais forte, em um desafio de robótica, é superação. Tanto é que, neste momento, independente da Equipe, houve uma torcida coletiva, uma comemoração geral. E mais, receber os cumprimentos da equipe vencedora que reconheceu-nos como um oponente forte foi o maior prêmio que podíamos receber.
Valores se constroem: honra, dignidade, altruísmo e solidariedade só existem com um caráter forte, acima de nomes de escolas, de bandeiras ou de cidades. Não é possível ensiná-los mas criar condições para que esses valores saiam de suas conchas.

"O homem é o que ele acredita." 
Anton Tchecóv


"Daqui a alguns anos estará mais arrependido pelas coisas que não fez do que pelas que fez. Solte as amarras! Afaste-se do porto seguro! Agarre o vento em suas velas! Explore! Sonhe! Descubra!"
Mark Twain

Obrigado aos alunos por mais esses 10 segundos.
PROF. Alan

Veja mais frases em http://www.belasmensagens.com.br/frases-celebres.php?pg=2#ixzz242quwseV

Parabéns - Medalha de Ouro

Aos alunos da EE Elza Facca Martins Bonilha e EE Frei Dagoberto que receberam o Prêmio de Mérito como Melhor Trabalho em Equipe no Torneio Juvenil de Robótica 2012, resultado de empenho, dedicação, superação das adversidades. Nas palavras dos organizadores do evento a coroação de um trabalho que envolveu dedicação e sacrifício:

Recebendo o prêmio:

Mais uma conquista do grupo:

 NÓS FAZEMOS A DIFERENÇA - PARABÉNS ÓRION E PEQUENOS CIENTISTAS

AGRADECIMENTOS:
A direção da EE Elza Facca M. Bonilha, na pessoa da diretora Elza e das Coordenadoras Vani e Fran, que forneceram recursos financeiros.

A Diretoria de Educação de Jundiaí, em especial as PCOP´s Monica e Alessandra, pelo transporte e suporte logístico para desenvolvimento do projeto.

A direção da EE Frei Dagoberto Romag, pelo espaço e baterias. Em especial a Dona Catarina que, sempre zelosa cuidou de nós enquanto trabalhávamos.

À  EECOMÁTICA pela doação das rodas - roletes de impressora HP - que permitiram a construção dos robôs.

Em especial a Prof. Andreia, que forneceu o aporte financeiro no momento mais difícil da preparação, permitindo o rápido desenvolvimento do projeto (15 dias).

A empresa Unicarga pelo transporte em segurança dos alunos e pelo excelente atendimento.

Ao Jornal de Jundiaí que, por sempre nos apoiar divulgando nosso trabalho.

sexta-feira, 17 de agosto de 2012

Reta final!!!

Amanhã é o grande dia. Como diz a lei de Murph - tudo que tem que dar errado, dá errado - os receptores de IR de 3 sensores estão com defeito. Agora temos muitos emissores e nenhum receptor. Para equipe Orion é reta final, falta os ajustes finos, enquanto para a equipe Pequenos Cientistas, apenas instalar as baterias e ligar os sensores. O teste de combate agendado para hoje, ficou para amanhã. 
O que nós costumávamos levar 3 meses para aprontar ficou pronto em 1 semana. Ainda não está ideal, nem usa os melhores sensores mas, é competitivo e isso é o que importa. É um projeto aberto a melhorias e desenvolvimento de ambas as equipes que, com certeza, daqui a um ano estará muito melhor!!! 

Equipe Orion

Estas fotos são do projeto do robô de sumô 40x40 da equipe Orion.


                                                    Testes com Arduino e protoboard


Fiação de teste



Diversas vistas do robô


Detalhes das rodas



Sensores IR instalados

Visão final com os sensores, faltando apenas alimentação
Testes de funcionamento com sensores

Projeto - Orion

31/05/2013
PROJETO ENCERRADO - Oficialmente estamos aposentando o projeto Orion por conta do seu tamanho, fato observado na arena da OBR 2013 e, em seu lugar, iniciamos a construção do projeto: Artemis.
Parabéns aos Orion que nos deu uma medalha de ouro no Torneio J. Robótica 2012.

11/05/2013
A programação do robô para resgate foi construída da seguinte forma:
Os testes começaram com a programação para resgate, conforme atualização da semana passada. Nesta semana desenvolvemos a programação para desviar de obstáculos conforme vídeo abaixo. Os dois leds ficam acesos (azul e verde) quando o robô está seguindo linha. Quando o led verde acende o objeto está a 15cm do robô então se inicia o procedimento de desvio, conforme fluxograma abaixo:


Após estes teste rodamos o programa completo conforme vídeo abaixo:
Quando o robô está seguindo linha os dois led´s ficam acesos (azul e verde), quando está sobre a linha preta, os dois led´s desligam e quando encontra um objeto somente o led verde acende e inicia-se o procedimento de desvio. Falta apenas ajustar os tempos e instalar os dois motores na frente para melhorar a tração e seguir linha.

02/05/2013
Os testes do Orion adaptados para resgate apresentaram resultados positivos. Inciamos com um preparativo fazendo com o que o robô ative um sinal luminoso e sonoro quando estiver a 5 cm da vítima, conforme o vídeo abaixo:
Fluxograma do programa:



Após estes testes configuramos o programa em 3 blocos:
Bloco 1 - o robô deve andar para frente durante 3 segundos e girar para direita 1 segundo
Bloco 2 - se o sensor acusar algum objeto entre 15 a 40 cm o robô deve se dirigir até o objeto.
Bloco 3 - se o sensor detecta a vítima a menos de 15 cm e aciona as luzes e emite um alerta parando o robô.
Vídeo do teste:

Após inúmeros testes que envolveram alterar  as variáveis como distância e como os blocos construídos liam as distâncias (invertendo os sinais de comparação > ou <), inserindo outras variáveis descobrimos que:
- os tempos do bloco 1 influenciavam a leitura do sensor de ultrassom, ou seja, enquanto estivesse rodando a ordem de andar por 3 segundos e girar por um segundo o sensor não funciona. Para corrigir o problema usamos a técnica de isolamento de blocos onde, separamos o programa em pedaços e o reconstruímos rodando cada pedaço de cada vez e depois inserindo os blocos um de cada vez.   
- O bloco 2 apresentava um erro que interferia no processo por isso o removemos o que resolveu os últimos problemas em reconhecer e vítima, visto que, facilitou a programação excluindo ordens de detalhamento excessivo.

Para coroar uma semana em que tudo deu errado, não conseguimos gravar os últimos testes porque o Arduino, após várias execuções parou de funcionar, os pinos não responderam mais. Esperamos que seja só o excesso de uso - os fios dos motores estavam muito quentes e notamos um aquecimento da ponte H que está sem diodo.

Vale um parabéns aqui para o Marcelo que foi o primeiro a analisar a programação e chegar a conclusão de que havia um erro de programação e não problemas com transientes ou ruído causado pelo motor (por falta de espaço e tempo estamos usando a ponte H sem diodos).
Ainda falta instalar os dois motores na parte dianteira para seguir linha mas faremos isso na semana que vem. Essa constatação foi resultado da pesquisa realizada pela equipe avaliando robôs de outros grupos que já participaram da OBR e outras competições.

12/04/2013
Após a falha nos testes para seguir linha do Orion, realizamos uma reunião de revisão de projeto e alguns testes preliminares e chegamos as seguintes conclusões:
- A limitação no ato de virar do chassi é causada não pela distância dos sensores mas pela posição dos sensores que ficam na frente, distantes do motor que realiza a tração e, portanto temos 2 opções
* ou adicionamos 2 motores na dianteira do robô, o que aumentaria a tração e facilitaria o robô virar, em compensação, aumentaria o consumo de bateria do robô (0,2 A em condições normais - 2 motores de 0,1 A - e 0,6 A em condições de motor em stall.
* ou então trocamos a posição dos sensores de linha para seguidor de linha da frente para traseira, invertendo o lado do robô.

O teste de inversão dos sensores não funcionou a contento pois estes ficaram muito altos, o que atrapalhou a sensibilidade, portanto, testaremos a hipótese 1 - mais  2 motores.

05/04/2013
Após um tempo sem mexer no projeto Orion, fizemos algumas alterações importantes:
- Instalação de um drive de motor feito com TIP 110/115 (NPN/PNP) - ponte H
- Nova programação: seguidor de linha
- Alteração da equipe responsável pelo Orion, passando a ser a equipe de 8ª série da EE Elza Facca

Segue abaixo vídeo dos testes "seguir linha" com robô Orion:


Outubro de 2012
O chassi Orion, após o Torneio Juvenil de robótica, sofreu alterações motivadas por 2 fatores fundamentais:
1- Peso - a armação de alumínio e madeira, somada a bateria de chumbo/ácido de 6V, aumentava significativamente o peso do robô e o deixava fora da especificação do torneio (1,5kg).
2- Baterias - a bateria de 6V não alimentava corretamente os sensores e os motores.

Isso nos motivou as 3 mudanças e o novo protótipo do Orion 2.0:
- Instalar uma bateria de 213g - 11,1 V e 1A;
- Instalar 2 breakouts de sensores de linha QR1113 e 4 sensores de ultrassom HCSR04;
- Substituir a base de madeira e alumínio por uma base de acrílico (prancheta usada doada pelas inspetoras do EE Elza Facca M. Bonilha).

Como resultado direto houve um aumento da velocidade (ainda não medimos mas é visível), do torque e a regularidade do funcionamento dos sensores. Apareceram outros problemas que, ainda não divulgaremos. O mesmo vale para o código fonte, pois este robô está sendo preparado para equipe de ensino fundamental e como robô-treino para o nosso novo protótipo.

Sensor de IR (QR1113) instalado para leitura de linha 


Sensor IR e Sensor de Ultrassom instalados na base de acrílico


Ainda com a bateria antiga


Sem bateria

Vídeo do Orion 2.0 já com a bateria nova e sensores




As primeiras imagens do robô da equipe Orion:
Plataforma de alumínio do chassi

Vista Inferior

Detalhe da roda traseira - Tração

Detalhe da roda dianteira - Roda Boba
Teste de funcionamento do chassi

quarta-feira, 15 de agosto de 2012

Programação final

Estes são os programas para robôs de sumô:
20x20 - Pequenos cientistas

/* Projeto desenvolvido para robô de sumô no Torneio Juvenil de robótica 2012 pela equipe Pequenos Cientistas*/
// Comando de motores usando ponte H
// —————————————————————————  Pinos dos Motores
int direito_frente = 7;
int direito_re = 8;
int esquerdo_frente = 9;
int esquerdo_re = 10;
//--------------------------------------------- giro de 90°
int giro = 200;
//--------------------------------------------- Pinos sensores
int IR1 = 0;
int IR2 = 1;
int IR3 = 2;
int IR4 = 3;
int IR5 = 4;
int IR6 = 5;
//--------------------------------------------Variaveis de leitura dos sensores
float maximo = 4.00; // tensão de detecção do sensor IR
int VR1;
int VR2;
int VR3;
int VR4;
int VR5;
int VR6;
// ————————————————————————— Setup
void setup() {
// Seleciona motores
pinMode(direito_frente, OUTPUT);
pinMode(direito_re, OUTPUT);
pinMode(esquerdo_frente, OUTPUT);
pinMode(direito_re, OUTPUT);
//Ativa sensores
pinMode(IR1, INPUT);
pinMode(IR1, INPUT);
pinMode(IR2, INPUT);
pinMode(IR3, INPUT);
pinMode(IR4, INPUT);
pinMode(IR5, INPUT);
}

// ————————————————————————— Loop
void loop() {
  //faz a leitiura dos sensores e converte o valor lido (de 0 a 1024) em valores de tensão
VR1 = analogRead(IR1) * 0.0049;//sensor de linha dianteiro
VR2 = analogRead(IR2) * 0.0049;//sensor de linha traseiro
VR3 = analogRead(IR3) * 0.0049;//sensor de objeto dianteiro
VR4 = analogRead(IR4) * 0.0049;//sensor de objeto traseiro
VR5 = analogRead(IR5) * 0.0049;//sensor de objeto direito
VR6 = analogRead(IR6) * 0.0049;//sensor de objeto esquerdo

//leitura de sensores e comparação com limite de leitura (variável máximo), com resposta
//S1 - ↓ - 9, 11
if (VR1 > maximo) {
digitalWrite (direito_frente,  LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
}
//S2 - ↑ - 8, 10
if (VR2 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S3 - ↑ - 8, 10
if (VR3 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S4 - ↓ - 9, 11
if (VR4 > maximo){
digitalWrite (direito_frente,  LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
}
//S5 - ←90° ↑ - 9, 10 DELAY 8,10
if (VR5 > maximo){
digitalWrite (direito_frente, LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S6 - →90º ↑ - 8, 11 DELAY 8,10
if (VR6 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S1 + S3 - ↑ - 8, 10
if (VR1 > maximo && VR3 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S1 + S4 - ↓ - 9, 11
if (VR1 > maximo && VR4 > maximo){
digitalWrite (direito_frente,  LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
}
//S2 + S3 - →90°↑→90°↑ - 8, 11 DELAY 8,10 delay 8, 11 DELAY 8,10
if (VR2 > maximo && VR3 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S1, S2, S3, S4, S5, S6 SEM SINAL - ↑
if (VR1 > maximo && VR2 > maximo && VR3 > maximo && VR4 > maximo && VR5 > maximo && VR6 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, HIGH);
}
}
/*
M1 motor direito: 8–FRENTE, 9–RÉ
M2 motor esquerdo: 10-FRENTE, 11–RÉ
S1 – sensor de linha dianteiro
S2 -  sensor de linha traseiro
S3 – sensor de objeto dianteiro
S4 – sensor de objeto traseiro
S5 – sensor de objeto direito
S6 – sensor de objeto esquerdo
---------------------------------------------------
S1 - ↓ - 9, 11
S2 - ↑ - 8, 10
S3 - ↑ - 8, 10
S4 - ↓ - 9, 11
S5 - ←90° ↑ - 9, 10 DELAY 8,10
S6 - →90º ↑ - 8, 11 DELAY 8,10
S1 + S3 - ↑ - 8, 10
S1 + S4 - ↓ - 9, 11
S2 + S3 - →90°↑→90°↑ - 8, 11 DELAY 8,10 - 8, 11 DELAY 8,10
TODOS OS SENSORES SEM SINAL ↑
*/
_________________________________________________________________________________/* Programa para leitura de 6 sensores IR - Projeto Robô Lutador de Sumô 40x40
Equipe Orion 2012
*/
//variavel dos pinos analogicos
int IR1=0;
int IR2=1;
int IR3=2;
int IR4=3;
int IR5=4;
int IR6=5;

//variavel dos pinos digitais
//pinos de ativação dos motores
int L1 = 4;
int L2 = 5;
int L3 = 6;
int L4 = 7;

//variaveis de comparação da leitura dos pinos analogicos
//valor da tensão do pino analógico que determina o sinal
int maximo = 2;
//variaveis das diversas leituras
int VR1;
int VR2;
int VR3;
int VR4;
int VR5;
int VR6;

void setup() {
// configura o pino como saida
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(L4, OUTPUT);

// configura o pino como entrada
pinMode(IR1, INPUT);
pinMode(IR1, INPUT);
pinMode(IR2, INPUT);
pinMode(IR3, INPUT);
pinMode(IR4, INPUT);
pinMode(IR5, INPUT);

}
void loop(){
 
  // le o estado do sensor e converte em volts
VR1 = analogRead(IR1) * 0.0049;
VR2 = analogRead(IR2) * 0.0049;
VR3 = analogRead(IR3) * 0.0049;
VR4 = analogRead(IR4) * 0.0049;
VR5 = analogRead(IR5) * 0.0049;
VR6 = analogRead(IR6) * 0.0049;

// verifica se o sensor está ativo
while (VR1 < maximo) {
// aciona os motores 1 e 2
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
//vire direita
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);//Pino digital 8= OV
delay (200);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}
while (VR2 < maximo){
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire esquerda
digitalWrite(L1, HIGH);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= 5V
digitalWrite(L3, LOW);//Pino digital 7= 5V
digitalWrite(L4, HIGH);//Pino digital 8= OV
delay (2000);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}
while (VR3 < maximo) {
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//ré
digitalWrite(L1, LOW); //Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, HIGH);//Pino digital 8= 5V
delay (1000);
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire direita
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);//Pino digital 8= OV
delay (2000);//giro de 90°
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

while (VR4 < maximo) {
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire direita
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);//Pino digital 8= OV
delay (1000);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

while (VR5 < maximo) {
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire esquerda
digitalWrite(L1, HIGH);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= 5V
digitalWrite(L3, LOW);//Pino digital 7= 5V
digitalWrite(L4, HIGH);//Pino digital 8= OV
delay (1000);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

while (VR6 < maximo) {
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}
//se nenhum sensor estiver ativo
while (VR1<maximo&&VR2<maximo&&VR3<maximo&&VR4<maximo&&VR5<maximo&&VR6<maximo){
//executar em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

}

Que dia!!!

Hoje foi o dia de altos e baixos. O que começou com um dia ruim melhorou, piorou, melhorou de novo e assim foi.
Primeiro: o professor Alan foi até Jundiaí para comprar os componentes e descobriu que hoje era feriado lá. Viagem perdida.
Depois: Começamos a mexer no chassi pois ele estava saindo pra esquerda e com dificuldade de virar para os lados. Muda daqui, muda de lá e finalmente decidimos colocar o motor em pé. Ficou bom, ele ficou meio rebaixado, mas funcionou, vira com velocidade. Boa notícia.
De repente, um dos motores travou. E depois o outro. Má notícia. 
Tivemos que desmontar tudo e dentro do motor tinha 2 porcas que eram usadas como suporte de uma chapa que prendia o motor. Menos mal, o motor voltou a funcionar. Boa notícia.
O Daniel tirou os parafusos e trocou por rebites o que ajudou muito pois sobraram parafusos (estavam em falta por falta de verba). Boa notícia.
A equipe Fenix conseguiu criar o suporte para a protoboard e Arduino e agora está trabalhando na garra. Boa notícia.
A Elaine conseguiu terminar as placas de sensor IR. Boa notícia.
Mas os sensores IR, mesmo com todos os testes (aumentamos a distância entre eles, testamos no pico digital) não conseguem detectar nada a mais de 5cm, como havíamos previsto no cálculo e, o sensor reciclado, ainda ferve quando colocado na bateria. Má notícia.
Quando testamos o sensor IR mudando o resistor de 220 ohm para 100 ohm a distância subiu para 10 cm. Boa notícia.
Mas o ressistor depois de alguns minutos ferve. Má notícia.
A possível solução seria usar uma tensão mais baixa, testamos e deu certo com 4V/800mAh, ou usar uma outra fonte - suporte de pilhas com 4 pilhas recarregáveis 230 mAh. Falta só 2 pilhas.
O professor colocou uma das baterias de 4V/800mAh para carregar com as polaridades trocadas. Má notícia.
A verba acabou e só podemos comprar 1 l298n e mais alguns resistores. Má notícia.
A broca que o Paulo comprou, de 1,5mm, não ficou perfeita, mas deu para terminar as placas. Boa notícia.

Se analisar o saldo do dia de hoje:
- Estamos atrasados mas com os sensores prontos, ou seja, dá pra tirar o atraso na quinta e na sexta fazer o teste com o robô do Elza.
- Mais boas notícias que ruins.

Ps: sexta a direção do Frei autorizou a vinda dos alunos do Elza e faremos nosso desafio interno para testar os nossos chassis - como sempre em cima da hora.

terça-feira, 14 de agosto de 2012

Sumo 20x20 - Pequenos Cientistas

Aqui estão os rascunhos de construção da estrutura do robô de sumô e viagem ao centro da Terra e as fotos da montagem, de responsabilidade do Daniel. Estas estruturas estão sem medidas pois se baseiam no projeto original e as adaptações foram feitas conforme os problemas foram surgindo. As fotos foram realizadas pelo celular do Daniel.

 Base do chassi e suporte para os servo-motores
 Suporte do Arduíno e Protoboard
 Rodas
Rampa de proteção

Bom depois de elaborar os rascunhos começou a construção:



Arduino sobre o suporte e Protoboard:

Montagem final do robô com a base, rodas, suporte e rampa de defesa. Agora só falta os sensores:




Programa usado no pré-teste dos motores, para testar o L297N (ponte H) e os servo motores:
/* Este código permite o passo de 2 motores*/
//motor direito
int motorPin1 = 7;
int motorPin2 = 8;
//motor esquerdo
int motorPin3 = 3;
int motorPin4 = 4;

int delayTime = 3000;

void setup() {
  //configura os pinos digitais do motor direito
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  //configura os pinos digitais do motor esquerdo
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  }

void loop() {
//motor direito
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
  } 

Vídeo do teste dos motores com L297:






Vídeos da montagem final com baterias, falta apenas a instalação dos sensores. O programa usado foi o mesmo do teste anterior mas agora somente


Vídeo do sistema completo embarcado, sem alimentação por fonte ligada a tomada.


Boas notícias:
- O chassi está quase pronto, faltando detalhes de regulagem
- Temos 7 sensores e falta apenas 7 sensores que ficam prontos nesta quarta-feira
- A bateria que montamos de 2 baterias chumbo-ácidas doadas estão "pegando" carga o que quer dizer uma economia de R$ 30 reais e uma bateria de 8V com 400 mAh
- Conseguimos, graças ao Paulo da Equipe Orion, uma broca de 1,5 mm que pode funcionar para fazer as placas de sensores que faltam, testaremos amanhã, por um módico preço de R$2,60.
- Estamos no prazo com todas as equipes.

Problemas a resolver ainda:
- Comprar L298N para a equipe Orion.
- Instalar os sensores de linha e distância e testar.
- Melhorar os sensores de distância pois o alcance está limitado a 5 cm.
- Testar as 2 configurações novas de sensores - aumentando a distância entre os led´s emissores e receptores para 2cm e usando resistores de 170 ohm no emissor e 4k7 no receptor.

Em breve postaremos as fotos dos sensores IR e o chassi com eles embarcados.
Estamos quase lá, força pessoal.

PS: Ainda não postamos nada da equipe Orion pois o material está no celular da Coordenadora Vani do Elza Facca.