Mostrando postagens com marcador nomes de robôs. Mostrar todas as postagens
Mostrando postagens com marcador nomes de robôs. Mostrar todas as postagens

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 Leto, irmã gêmea de Apolo ; mais tarde, associou-se também à luz da lua e à magia. Em Roma, Diana tomava o lugar de Ártemis, frequentemente confundida com Selene ou Hécate, também deusas lunares."

terça-feira, 27 de novembro de 2012

Quimera

A revista Mecatrônica Fácil publicou a alguns anos um trabalho do Newton C. Braga sobre os Veículos Mecatrônicos - VM, apresentando 3 modelos: a hélice, com polias feitas de latinha e com engrenagens. Todos estes modelos eram acionados por sensores de luz com LDR e transistor e, recentemente, um controlado por laser point. 
Uma ex-aluna do projeto, a Rayane, que hoje está na ETEC de Campo Limpo Paulista, nos procurou esta semana porque, a pedido do seu professor de Física, precisava desenvolver um VM, sem acionamento luminoso, um carro de Newton, que funcionasse por ação e reação e, estava sem material. Um dos seus pedidos é que o veículo fosse muito rápido, pois ela pretende ganhar a competição.
Ontem, dia 26/11, ela visitou sua antiga escola (EE Frei Dagoberto Romag) e veio buscar material e auxílio técnico em sua empreitada. Bom, o trabalho segue no vídeo e imagem abaixo e, como ela já foi do grupo de  Química do projeto, o Quimera, que participou do mapeamento dos mananciais da região e seu estado de poluição, resolveu lembrar dos velhos tempos e batizou o carrinho de "Quimera" - "figura mística caracterizada por uma aparência híbrida de dois ou mais animais e a capacidade de lançar fogo pelas narinas, sendo portanto, uma fera ou besta mitológica... 
Fonte: http://pt.wikipedia.org/wiki/Quimera


Ainda está com problemas de tração pois a roda é de plástico e a superfície lisa mas, com uma correia de borracha o problema deve ser solucionado...

domingo, 21 de outubro de 2012

Nomes de robôs

Seguindo nossa tradição de nomes de robôs, usando a referência - Bulfinch, T. O livro da Mitologia: História de Deuses e Heróis, Tradução: Luciano Alves Meira, Ed. Martin Claret, 2006. - segue a história por trás dos robôs atuais e sugestão dos nomes dos robôs em construção:

ORION - filho de NETUNO, era belo e grande caçador. Tinha o poder de andar sobre as profundezas e. dizia-se, andar sobre as águas.  Apaixona-se por Mérope e, como não conseguiu o consentimento do pai da moça para casar-se, tenta tomá-la a força. O pai vinga-se cegando Orion e lançando-o ao mar. Ele guia-se pelo som e, Vulcano o ajuda a encontrar  com o deus-Sol, que restabelece sua visão. Viveu com Diana até que esta o acertou com uma flecha e o matou. A deusa percebeu seu erro e o transformou em uma constelação.

TITAN - Raça de seres gigantes que ocupou a Terra antes dos homens. Um deles, Prometeu, a pedido do irmão Epimeteu - que havia distribuído todos os dons aos animais e não tinha deixado nenhum para os homens - roubou o fogo do céu e deu ao homem, assim concedendo a força de superar todos os outros dons dos animais. Júpiter agraciou o homem com a primeira mulher, Pandora, que recebeu uma caixa dos deuses com presentes. Inadvertidamente Pandora abriu a caixa e deixou os dons escaparem e, restou apenas a esperança dentro da caixa. Júpiter castiga Prometeu acorrentando-o no monte Cáucaso e colocando um abutre para comer seu fígado - órgão que se regenera e portanto Prometeu seria punido pelo resto da vida, tornando-se símbolo da resistência a opressão.

FÊNIX - Ser que surge sozinho, na cultura assíria. Vive por 5 séculos até criar uma pira funeral onde, de suas cinzas, surge uma nova ave. Símbolo da persistência e da criação.

Bom, temos 2 novos robôs que precisam de nomes e, como acho que os significados dos nossos robôs fica muito claro, segue abaixo sugestão:

Hermes - Deus do comércio, lutas e outros exercícios olímpicos. Representa habilidade e destreza. 
Odin - Senhor do céu e pai dos deuses.
Vishnu - deus que se transforma nos avatares, personificação do princípio conservador, protege os bons e pune os maus.
Tyr - deus da guerra.
Teseu - herói grego que venceu o Minotauro e seu labirinto, Amazonas, unificou a Ática.

Destes nomes, a minha inclinação recai sobre Hermes para o robô multi-tarefas do Paulo e Vishnu para o robô do Daniel.