01/08/2014
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):
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.
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
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 OBR201423/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;
}
- 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:
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.
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 motoresVídeo de teste sobre uma superfície
Vídeo de teste de luta: o alvo é um pedaço de fonte ATX de computador
-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."
Vocês possuem o diagrama? Estou fazendo o tcc do técnico em mecatronica e gostaria de ver as ligações. Obrigado desde já pelo post
ResponderExcluirOlá Natan tudo bem? Que tipo de diagrama você precisa? Da eletrônica do Artemis? Como ligamos o l293d o sensor de ultrassom? Tem uns erros nesse projeto que precisamos avisar... Me passe seu e-mail que eu mando o artigo que tem os detalhes do projeto
Excluir