sexta-feira, 31 de maio de 2013

Artemis

01/08/2014

Seguidor de Linha:
1°) Sensores próximos e na linha do eixo de tração
  Em cinco testes o robô cumpriu o percurso em três - 60% de aproveitamento

2°) Sensores posicionados pouco á frente da linha de tração e nas extremidades do chassi
  Em doze repetições o robô realizou nove vezes o circuito - 75% de aproveitamento

Teste de sensor de Ultrassom
  o sensor de ultrassom está funcionando com leitura máxima de 57 cm

Teste de garra 
  A garra está funcionando , embora não foi testada junto com o robô.
14/06/2014 - Ártemis treinando na arena da OBR2014



23/08/2013 - Resultado do Torneio Juvenil de Robótica
Usando nosso programa base de sumô de robôs, conforme sketch abaixo, o robô Artemis conseguiu uma medalha de prata no sumô, nossa primeira medalha no Ensino Fundamental (parabéns Suzane/Celena/Eduardo):
Arenas de sumô (branca) e cabo de guerra (marrom)
Fotos da equipe com os robôs premiados

 As medalhas em detalhe
Programa
int emissor=7;
int receptor=6;
long cm1,duracao;

int sensor_d = 8; //conectar ao pino digital 
int sensor_e = 9; //conectar ao pino digital

int diff1;
int diff2;
int estado;

void setup(){
  pinMode (emissor, OUTPUT);
  pinMode (receptor, INPUT);
  pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (13, OUTPUT);
  pinMode (12, OUTPUT);  
Serial.begin (9600);
}
void loop(){
  //leitura dos sensores de IR
  int linha_d = direita(); //armazena o valor de leitura na viarável linha_d
  int linha_e = esquerda();//armazena o valor de leitura na variável linha_e

Serial.print (linha_d);
Serial.print (", ");
Serial.print (linha_e);
Serial.print (", ");
Serial.println (cm1);
//função que transforma a leitura dos sensores em uma variável, eliminando erros:
if (linha_d<800||linha_e<800){
  estado = 100;
}
if (linha_d>=800||linha_e>=800){
  estado = 300;
}
//se a leitura das linhas corresponder a branco, executa esta função
  if (estado==100){
   Serial.println ("Sobre a linha branca");
   digitalWrite (13, HIGH);
   
     //executa  a leitura de ultrassom
  sonar();
    if (cm1<30){
    Serial.println ("Atacar alvo");
  //comandos de ataque
  digitalWrite (2, HIGH);
  digitalWrite (3, LOW);
  digitalWrite (4, HIGH);
  digitalWrite (5, LOW);
  
    } //fim do if de atacar alvo
    if (cm1>30){
    Serial.println ("Procurando oponente");
 //comandos para localizar o oponente
  digitalWrite (2, HIGH);
  digitalWrite (3, LOW);
  digitalWrite (4, LOW);
  digitalWrite (5, HIGH);
  delay (500);
  digitalWrite (2, HIGH);
  digitalWrite (3, LOW);
  digitalWrite (4, HIGH);
  digitalWrite (5, LOW);
  delay (400);  
   }//fim do if procurando oponente
  }//fim do if sobre linha branca
//se estiver sobre linha preta executa esta função
  if (estado==300){
    Serial.println ("Linha preta retornar");
//comandos quando estiver sobre a linha preta
  digitalWrite (2, LOW);
  digitalWrite (3, HIGH);
  digitalWrite (4, LOW);
  digitalWrite (5, HIGH);
  digitalWrite (13, LOW);
  delay(800);
  digitalWrite (2, LOW);
  digitalWrite (3, HIGH);
  digitalWrite (4, HIGH);
  digitalWrite (5, LOW);
  delay(500);
    }//fim do if linha preta
  }//fim do loop


int sonar(){
  digitalWrite (emissor, LOW);
  delayMicroseconds (2); 
  digitalWrite (emissor, HIGH);
  delayMicroseconds (10); 
  digitalWrite (emissor, LOW);
  duracao=pulseIn(receptor,HIGH);
  cm1=microsecondstocentimeters(duracao);
}

long microsecondstocentimeters(long microseconds){
  return microseconds/29/2;
}

int direita(){
  //Retorna o valor do sensor 
  pinMode( sensor_d, OUTPUT );
  digitalWrite(sensor_d , HIGH );
  delayMicroseconds(10);
  pinMode( sensor_d, INPUT );

  long tempo1 = micros();

  //o tempo medido  HIGH, que acaba 3 segundos depois e retorna um valor de 0 (branco) a 3000 (preto)
  while (digitalRead(sensor_d) == HIGH && micros() - tempo1 < 3000);
  int diff1 = micros() - tempo1;

  return diff1;
}

int esquerda(){
  //Retorna o valor do sensor 
  pinMode( sensor_e, OUTPUT );
  digitalWrite(sensor_e , HIGH );
  delayMicroseconds(10);
  pinMode( sensor_e, INPUT );

  long tempo2 = micros();

  //o tempo medido  HIGH, que acaba 3 segundos depois e retorna um valor de 0 (branco) a 3000 (preto)
  while (digitalRead(sensor_e) == HIGH && micros() - tempo2 < 3000);
  int diff2 = micros() - tempo2;

  return diff2;
}

Logo depois iniciamos o preparo do ano que vem, aprimorando o programa de sumô nos erros cometidos:
- ausência de proteção na dianteira e traseira do robô o que deixou 2 pontos de ataque. Na primeira luta o robô ficou preso no canto e foi empurrado até cair e na terceira luta fomos derrotados pela rampa preta vindo pela frente, que fez com que o robô recuasse sozinho.
- Trocamos as 8 pilhas de 1,2V/2A (9,6V) que tem baixa capacidade de descarga por uma bateria 7V/2A de Ni-MH, que além de menos poluentes, apresentaram um rendimento melhor.
Vídeo do cabo de guerra: Artemis vs Inacio

O planejamento agora envolve o uso do PWM no Artemis para aumentar o torque, dando mais potência para o robô, tornando-o mais eficiente no combate. Aliás, um ótimo resultado foi no cabo de guerra em equipe, onde o Artemis sozinho carregou 2 legos, segurando-os. Não teve força para arrastá-los mas também não foi arrastado, sendo derrotado porque o parceiro que caiu no fosso.   

28/06/2013 - Instalação do suporte de baterias e pilhas
Fotos da instalação do suporte de baterias e pilhas no robô. Estamos quase prontos, falta só providenciar uma sensor de ultrassom...





14/06/2013 - Teste de Combate
O robô Artemis recebu seu programa de combate e foi testado. Este programa é o módulo básico de combate do robô.
No primeiro teste o robô reconhece a linha e foi programado para virar:

Este teste falhou pois o robô saía da área de luta o que, no sumô, causaria a queda para fora da arena.
Para o segundo teste, inserimos um comando para que o robô, quando encontrasse a linha, retornasse e depois virasse, o que resolveu o problema, conforme o vídeo abaixo.

Na primeira tentativa, por conta da pista improvisada ele passou reto mas, com mais um pouco de fita adesiva no local, para evitar ondulações, o robô se comportou como esperado. A mesa suja causou interferência no processo mas não compromoteu o teste.

07/06/2013 Teste de programação
Hoje testamos uma programação básica para o robô usando um simulador feito em protoboard e o TCRT 5000 como sensor IR de linha. A ideia foi usar 2 led´s acendendo representando os motores, ou seja, quando o robô estiver sobre a linha preta deve virar (acende um led) e depois, quando está sobre a linha branca os dois motores devem estar no mesmo sentido (acende os dois led´s ).
De início, no código, não desligamos os 2 pinos que fariam o reverso do motor (primeira parte do vídeo) o que deixava os led´s acesos constantemente, representando que o motor não inverteria o sentido.
/*Progamação de robô de sumô para o torneio juvenil de robotica*/
int sensor;
void setup(){
pinMode(5, OUTPUT);//MOTOR DIREITO PARA FRENTE
pinMode(6, OUTPUT);//MOTOR DIREITO PARA TRAZ
pinMode(8, OUTPUT);//MOTOR ESQUERDO PARA FRENTE
pinMode(7, OUTPUT);//MOTOR ESQUERDO PARA TRAZ
pinMode(A0, INPUT);//SENSOR
}
void loop(){
  sensor=analogRead(A0);
  if (sensor<500){
    digitalWrite(5, HIGH);
    digitalWrite(7, HIGH);
    delay(500);
  }
  else{
    digitalWrite(5,HIGH);
    digitalWrite(8,HIGH);
  }
}
Na segunda tentativa usamos o LOW para desligar os pinos digitais que não estavam ativos e o resultado foi melhor.
/*Progamação de robô de sumô para o torneio juvenil de robotica*/
int sensor;
void setup(){
pinMode(5, OUTPUT);//MOTOR DIREITO PARA FRENTE
pinMode(6, OUTPUT);//MOTOR DIREITO PARA TRAZ
pinMode(8, OUTPUT);//MOTOR ESQUERDO PARA FRENTE
pinMode(7, OUTPUT);//MOTOR ESQUERDO PARA TRAZ
pinMode(A0, INPUT);//SENSOR
}
void loop(){
  sensor=analogRead(A0);
  if (sensor<500){
     digitalWrite(6, LOW);
    digitalWrite(8, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(7, HIGH);
    delay(500);
  }
  else{
     digitalWrite(6,LOW);
    digitalWrite(7, LOW);
    digitalWrite(5,HIGH);
    digitalWrite(8,HIGH);
  }
}
Vídeo dos testes

Para o próximo teste usaremos um delay após o comando dos motores para frente, como forma de otimizar o sistema de ataque do robô.
Este programa será a primeira estratégia de ataque.

03/06/2013
Informações técnicas sobre o Artemis:
Dimensões: 17x26x6,5 cm
Cérebro: Arduino Uno Rev.3
Alimentação: Bateria LiPo 11V/1A ou 6V/2A (motores)  e 9V/350mA (Arduino)
Sensores: IR - QR1113 (2) e Ultrassom - HC-SR04
Controle de motores: L293d
Motores: 4 servo-motores Gardner adaptados para rotação contínua
Consumo Previsto: 400 mAh dos motores e 100 mAh do Arduino e sensores

Fotos do Projeto:
Estrutura do projeto




Adicionando o Arduino, protoboard, sensor de ultrassom e l293d





Vídeos dos testes:
Condições: fonte de alimentação 9V/500mA, teste de sumô com localização de objeto e emissão de som (buzzer) mais agudo conforme a distância do objeto. Por uma questão de estratégia ainda não vamos divulgar a programação do Arduino mas, após o Torneio Juvenil de Robótica 2013, divulgaremos a programação.
Vídeos de teste do robô: teste de motores


Vídeo de teste sobre uma superfície

Vídeo de teste de luta: o alvo é um pedaço de fonte ATX de computador
Ajustes necessários:
-Fixação do Arduino
-Fixação da Protoboard
-Instalação das baterias
-Instalação dos sensores de IR
- Ajuste de servo-motores e rodas, corte dos parafusos e melhorias na estrutura
-Instalação dos led´s de alerta
- Nova programação completa

31/05/2013
Sua origem está na estrutura do projeto Orion que teve seu tamanho reduzido para 17x20. Mantém a base de 4 servo-motores com alimentação por pilhas AA 1,2V recarregáveis (6V/2000mAh) e o uso de um Arduino UNO alimentado por baterias de 9V/350mA.
Segundo o Wikipédia (http://pt.wikipedia.org/wiki/%C3%81rtemis):
"Na GréciaÁrtemis ou Artemisa (em gregoΆρτεμις1 ) era uma deusa ligada inicialmente à vida selvagem e à caça. Durante os períodos Arcaico e Clássico, era considerada filha de Zeus e de Letoirmã gêmea de Apolo ; mais tarde, associou-se também à luz da lua e à magia. Em RomaDiana tomava o lugar de Ártemis, frequentemente confundida com Selene ou Hécate, também deusas lunares."

Recuperação de baterias LiPO

Bom, tínhamos 2 baterias completamente descarregadas de 11V/1000mAh. Bom, pesquisando na internet achamos este vídeo que explica como recuperar baterias LiPO:
Bom testamos este método, usando as novas baterias e deu 100% certo, ou seja, agora temos 4 baterias de LiPO.
Para recuperar baterias LiPO, mesmo inchadas como as nossas, basta ligá-las em paralelo (http://pt.wikipedia.org/wiki/Circuito_paralelo), ou seja, ligando o fio preto no fio preto e o fio vermelho no fio vermelho (só cuidado, use um fio grosso). Levou apenas alguns segundos e a bateria já estava carregada a meia carga. O passo seguinte foi ligá-la no carregador/balanceador de baterias que reconheceu a bateria conforme está no vídeo. Uma delas inclusive estava com 0V de carga e carregou completamente. Não se esqueça das regras:
- Use a mesma bateria - corrente e tensão, se possível, a mesma marca.
- Use uma bateria carregada completamente para carregar uma que não seja reconhecida pelo carregador.
- Monitore o tempo todo as baterias, notamos que uma delas começou a aquecer. Este é o sinal para parar o processo. Não deixe as baterias sozinhas em hipótese nenhuma, a temperatura sobe bastante. Mesmo quando ligar no carregador, fique de olho.
Lembrando que baterias LiPO são perigosas e não faça este procedimento sem ter absoluta certeza do que está fazendo (uma das baterias faiscou o suficiente para ligar um fogão).
NUNCA INVERTA AS POLARIDADES DOS FIOS (VERMELHO POSITIVO/PRETO NEGATIVO - LIGADOS EM PARALELO).
- USE UM MULTÍMETRO PARA MONITORAR O PROCESSO.

quarta-feira, 29 de maio de 2013

Plano de melhoria

Pensando em inovar e melhorar nossos resultados estabelecemos um novo plano de ação para o Torneio Juvenil de Robótica que inclui:

- Implantação de manual individual de cada protótipo utilizado.

- Criação de um manual de emergência para as situações em que o projeto não funcione adequadamente.

- Manuais de campo com os principais comandos do Arduino.

Além disso, dentro desta perspectiva vamos separar os materiais usados em cada escola, formando kit´s individuais por equipe, para evitar perdas de material.

- Compra de mais 2 baterias de 9V recarregáveis e 2 baterias de aeromodelo 11V/1A para alimentação dos motores.

- Aposentadoria do chassi Orion 2.0 e criação do novo chassi Artemis (post em breve).

- Especialização de alguns robôs em modalidades de competição.

- Revisão dos procedimentos de calibração e teste dos robôs.

- Segmentação das lideranças das equipes para melhorar a eficácia geral.

domingo, 26 de maio de 2013

Parabéns: Medalha de honra ao mérito por dedicação

02/07/2013
Saiu os certificados dos alunos que participaram da OBR 2013:

31/05/2013
Vídeos da Globo News sobre a OBR - Filma nóis Galvão KKKKKKK
http://globotv.globo.com/globo-news/jornal-globo-news/v/sao-paulo-sedia-etapa-regional-da-olimpiada-brasileira-de-robotica/2596145/
Neste aqui o Daniel aparece ao fundo

http://globotv.globo.com/globo-news/jornal-das-dez/v/comeca-em-sao-paulo-a-olimpiada-brasileira-de-robotica/2596679/
Neste aqui o prof. Alan aparece orientando a equipe amarela à esquerda.


25/05/2013
Numa das edições mais disputadas da Regional da OBR - SP a equipe "Pequenos Cientistas" formada por alunos da EE Elza Facca M. Bonilha recebeu a medalha de "Honra ao Mérito: Dedicação" como reconhecimento do trabalho realizado. O projeto Osiris não atingiu seu principal objetivo pois sua velocidade influenciava na leitura de linha mas o projeto foi reconhecido pela Organização do Torneio que premiou a equipe de Ensino Médio, formada pelo Marcelo, Paulo e Jaqueline com esta medalha. É mais um título para o grupo e mais uma vez o trabalho em equipe, que contou com a ajuda dos alunos do Ensino Médio da EE Frei Dagoberto Romag, reconhecido em um dos grandes torneios nacionais.

As medalhas:





 Fotos do projeto sem as baterias:



Além disso, o prof. Alan participou do evento como Juiz da Arena 3. Nossos parabéns a ele pelo trabalho. 

Aqui algumas fotos que dão a dimensão do evento que contou com mais de 60 equipes de todo Estado de São Paulo, sendo a maior Regional da OBR do Brasil e que, será realizado em 2 fases, por conta do grande número de inscrições de equipes.



Nossos alunos estão no canto esquerdo próximo a coluna de metal:







sexta-feira, 3 de maio de 2013

Problemas e dificuldades

08/05/2013
Boas notícias: acabamos de receber a verba de R$100,00 para compra de drives de motor de passo L298 da EE Elza Facca e, com isso, podemos pedir a entrega via sedex. Se tudo der certo na semana que vem já estaremos com os drives e portanto poderemos finalizar o chassi do ensino médio e os outros chassis. Falta apenas a bateria. Gostaríamos de agradecer a Direção e Coordenação da EE Elza Facca que nos tem apoiado muito nesta empreitada e, esperamos trazer ótimos resultados do dia 25/05. Vamos nós na OBR 2013!!!
Ultrapassamos a marca de 10.000 visitas!!!

04/05/2013
Mais uma vez o que está ruim pode ser pior: um dos motores com caixa de redução também já era e não temos reserva. O que eram 4 chassis agora são 3.
Bom o importante é que falta só as baterias.

30/04/2013
Há dias de participar da OBR, que ainda não tem data marcada começam os problemas graves:
- Tínhamos 2 baterias de LiPO para usar nos robôs e, por descuido nosso, usamos as baterias e as descarregamos totalmente, ocasionando a perda das mesmas. Na tentativa de reabilitar uma delas, ligamos em paralelo no carregador e uma delas inchou, sinal de que foi PERDA TOTAL!!!
- O projeto da garra ia bem, no papel, até fazermos a estrutura de abrir e fechar - o sistema não funcionou, a garra não tinha força nenhuma. Muito bonito esteticamente mas, não funcionava - PERDA TOTAL. Entrou em ação o plano B - ligar a garra direto no servo. Como se não bastasse, um dos servos não está funcionando corretamente, falhando às vezes, ou seja, mais uma PERDA TOTAL!!!
- Apesar da contribuição da Prof. Renata, uma pessoa muito especial para o projeto (mulher do prof. Alan) e uma das nossas patrocinadoras, ainda estamos distantes do sonho de ter condição de disputar competições nacionais. O problema é que o material que compramos com a verba do projeto descentralizado fornecido pela EE Elza Facca não é suficiente para comprarmos todo material que precisamos e não deixa margem de erro nenhuma para pesquisas e, estamos tentando conseguir mais dinheiro para repor as perdas das baterias. Não há tempo suficiente para fazermos as placas de l298n, porque ainda faltam alguns componentes e não temos placas suficientes pois perdemos algumas fazendo os sensores de LDR para o Ensino Fundamental e nos testes de transferência do esquema da placa por método térmico (baixa qualidade da placa de fenolite dupla face). 
- Fora isso, o chassi de 6 rodas com caixa de redução da equipe do fundamental do EE Frei Dagoberto, por falta de ferramentas, não poderá ser concluído - ou PERDA TOTAL - o que nos leva ao plano B - motores reserva e um novo chassi para resolver o problema, focando o mesmo no resgate de alto risco.

Recentemente, analisando os dados obtidos com o Orion, constatamos que os sensores de IR para resgate, diferente dos sensores para sumô, devem ser colocados nas rodas de tração do robô, para que não ocorra efeito do arraste dos sensores. Ou seja, será necessário mudar a posição e o rebaixamento dos robôs para usar nas duas competições, isso porque não sabemos quando será a etapa estadual da OBR.

Ainda assim, não vamos nos abater nem desistir. É possível que a EE Elza Facca consiga solucionar na terça-feira o problema da compra dos drivers de motor (l298) e, com empenho dos alunos e a nossa nova investida no site vakinha - http://www.vakinha.com.br/VaquinhaP.aspx?e=198773 - para arrecadarmos fundos para terminar os projetos, que enviamos a todos nossos amigos no facebook, consigamos vencer mais esse desafio.
PEDIMOS A TODOS OS SEGUIDORES DO BLOG QUE NOS AJUDEM EM MAIS ESSA!!!

quinta-feira, 2 de maio de 2013

19ª Ciência Jovem‏


Pré-inscrições prorrogadas

Espaço Ciência abre pré-inscrições para uma das maiores feiras de ciência do Brasil
Até 30 de abril 15 de maio, professores e estudantes de escolas públicas e privadas do país podem se inscrever para a 19ª Ciência Jovem. Os projetos que realizarem a pré-inscrição serão beneficiados na fase de avaliação com 1 ponto. A pré-inscrição deverá ser realizada exclusivamente através do site www.espacociencia.pe.gov.br.
Poderão ser pré-inscritos um ou mais trabalhos de uma mesma escola. Na fase de inscrição definitiva, a comissão do evento escolherá no máximo um trabalho por categoria para cada escola. Os trabalhos pré-selecionados, bem como os que perderem o período de pré-inscrições, terão que realizar a inscrição, que estará aberta de 01 a 31 de agosto.
As categorias da feira de ciências são: Iniciação à Pesquisa, para o Ensino Fundamental I, Divulgação Científica, para o Ensino Fundamental II, Desenvolvimento Técnico e Incentivo à Pesquisa, voltadas para o Ensino Médio, e Educação Científica, para professores.
A Ciência Jovem tem como objetivo contribuir para a melhoria do processo de ensino-aprendizagem em ciências, estimulando nos alunos e professores o interesse pela pesquisa e pela comunicação científica, além de promover a interação entre as escolas participantes e comunidades.