Contatos

e-mail: daniloxc@msn.com

Skype: Daniloxc1

Pages

segunda-feira, 20 de maio de 2013

Programa de Controle - Sumô de Robô | Medusa Software

Segue explicações e regras para a confecção de um robô de sumô
http://www.area1.edu.br/_media/textos/2832013164658.pdf

Para a construção da parte física do Robô Medusa utilizamos placas de zinco, a estrutura física foi concebida por meu colega Leandro Leal.
* Motores de vidro elétrico da Bosch.
* Baterias de lítio de 12V, 2200mAH.
* Placa microcontroladora Arduino Uno, baseada no Microcontrolador ATmega328

http://arduino.cc/en/Main/arduinoBoardUno
* Sensores Infravermelhos (Utilizados para 'enxergar' a borda)
* Sensor Ultrassônico para enxergar o oponente.




Segue o programa de controle do robô.
Note que, quando o programa está em funcionamento, só utilizamos a função delay() quando ele encontra a borda. Isto é feito como medida de sobrevivência.

Porém, não é recomendável utilizar a função de delay() quando necessitamos que um equipamento realize diversas tarefas simultaneamente. Desta forma, utilizamos um conceito conhecido como Multitarefa (Multithread) para que fosse possível que 'ao mesmo tempo' o robô procurasse o oponente e verificasse se teria encontrado a borda.





 /*Este programa foi elaborado para controlar um robô de sumô*/  
 #define borda 2 //definimos que no pino 2 será conectado o sensor de borda  
 #define trigger 13 //definimos que o pino 13 funcionará como trigger do sensor ultrasônico  
 #define echo 7 //definimos o pino 7 como echo do sensor ultrasônico  
 #define motorDir01 6 //definimos que a porta 5 será o bit 1 da ponte H do motor direito (0x)  
 #define motorDir02 5 //definimos que a porta 6 será o bit 2 da ponte H do motor direito (x0)  
 #define motorEsq01 4 //definimos que a porta 3 será o bit 1 da ponte H do motor esquerdo(0x)  
 #define motorEsq02 3 //definimos que a porta 4 será o bit 1 da ponte H do motor esquerdo(x0)  
 //a ponte H funciona da seguinte maneira: (motorDir01,motorDir02,motorEsq01,motorEsq02)  
 // (0,1,0,1) Anda pra frente  
 // (1,0,1,0) Anda pra trás  
 // (0,0,0,0) Parado  
 // (1,1,1,1) Parado, condição não recomendada  
 /*********************Estrutura utilizada para realizar multitarefa ***************************/  
 typedef struct Timer  
 {  
   unsigned long start;//Armazena o tempo de quando foi iniciado o timer  
   unsigned long timeout;//Tempo após o start para o estouro  
 };  
 unsigned long Now ( void )  
 {  
   return millis ( );//Retorna os milisegundos depois do reset  
 }  
 boolean TimerEstorou (struct Timer * timer)  
 {  
   //Verifica se o timer estourou  
   if ( Now () > timer->start + timer->timeout) {  
     return true;  
   }  
   return false;   
 }  
 //após o tempo estourar temos que iniciar o timer com o tempo atual  
 void timerStart(struct Timer * timer){  
   timer->start = Now();  
 }  
 void timerDesloc(struct Timer * timer, unsigned long tempo){  
  timer->start = Now()+tempo;  
 }  
 Timer timerBorda = {0, 10}; //Verifica se achou a borda a cada 10 milisegundos  
 Timer timerAchou = {0, 100}; //verifica se achou o oponente a cada 100 milisegundos  
 Timer timerFrente = {0, 800}; //tempo que o robô passa indo pra frente  
 Timer timerGira = {0, 3243}; //tempo que o robô passa girando  
 Timer timerfinal = {0, 85000};// tempo de 1:30 minutos, final do round  
 boolean sentidoGiro=true; //variável criada para o robô girar hora pra direita, hora pra esquerda  
 /********** Função preparatória ****************/  
 void setup(){  
  // pinos definidos como saída  
  pinMode(motorDir01, OUTPUT);  
  pinMode(motorDir02, OUTPUT);  
  pinMode(motorEsq01, OUTPUT);  
  pinMode(motorEsq02, OUTPUT);  
  pinMode(trigger, OUTPUT);  
  // pinos definidos como entrada  
  pinMode(borda, INPUT);  
  pinMode(echo, INPUT);  
  //chama a função parado e espera 3 segundos antes de começar a luta.  
  parado();  
  delay(5000); //espera de 5 segundos antes do início da partida. Este parâmetro foi alterado para 3000 pois //quando testamos com o delay(5000) o robô ficava 7 segundos parado.  
  timerFrente.start= Now() - timerFrente.timeout; // atrasamos o Start do tempo de ir pra frente de modo ao robô começar a luta indo pra frente.  
  timerGira.start= Now();  
  timerAchou.start= Now();  
 }  
 int i=0;  
 void loop(){  
 if(TimerEstorou(&timerfinal)){  
  while(1)  
   parado();// função a ser chamada no final de cada round. Se o robô continuar andando isso caracteriza punição  
 }  
 if(i=0)  
 {  
  timerStart(&timerBorda);  
  timerStart(&timerGira);  
  timerStart(&timerAchou);  
  i+=1;  
 }  
 if(TimerEstorou(& timerFrente)){  
  andaFrente();  
  timerStart(& timerFrente);  
  //timerStart(& timerGira);  
 }  
 if(TimerEstorou(& timerBorda)){  
  if(!digitalRead(borda)){// verifica se achou a borda -- ver pino nomeado como borda  
   andaTras();  
   delay(1000);//delay de sobrevivência  
   timerStart(& timerFrente);//colocar o timer frente no início de seu ciclo  
   timerDesloc(& timerGira, -timerGira.timeout);// faz com que o robô gire  
   timerStart(& timerAchou);  
  }  
  timerStart(& timerBorda);  
 }  
 //dentro da função achou tem um delay,porém é na casa dos Microssegundos e isso o torna desprezível  
 if(TimerEstorou(& timerAchou)){  
  if(achou()){  
   andaFrente();  
   timerStart(& timerGira);  
  }  
  timerStart(& timerAchou);  
 }  
 if(TimerEstorou(& timerGira)){  
  if(sentidoGiro){  
   giraDireita();  
   sentidoGiro=!sentidoGiro;  
  }  
  else  
  {  
   giraEsquerda();  
   sentidoGiro=!sentidoGiro;  
  }  
  timerStart(& timerGira);  
 }  
 }  
 /********** Funções de movimento ****************/  
 void andaFrente(){  
  digitalWrite(motorDir01, HIGH);  
  digitalWrite(motorDir02, LOW);  
  digitalWrite(motorEsq01, HIGH);  
  digitalWrite(motorEsq02, LOW);  
 }  
 void andaTras(){  
  digitalWrite(motorDir01, LOW);  
  digitalWrite(motorDir02, HIGH);  
  digitalWrite(motorEsq01, LOW);  
  digitalWrite(motorEsq02, HIGH);  
 }  
 void parado(){  
  digitalWrite(motorDir01, LOW);  
  digitalWrite(motorDir02, LOW);  
  digitalWrite(motorEsq01, LOW);  
  digitalWrite(motorEsq02, LOW);  
 }  
 void giraDireita(){  
  digitalWrite(motorDir01, HIGH);  
  digitalWrite(motorDir02, LOW);  
  digitalWrite(motorEsq01, LOW);  
  digitalWrite(motorEsq02, HIGH);  
 }  
 void giraEsquerda(){  
  digitalWrite(motorDir01, LOW);  
  digitalWrite(motorDir02, HIGH);  
  digitalWrite(motorEsq01, HIGH);  
  digitalWrite(motorEsq02, LOW);  
 }  
 /********** Função de busca ****************/  
 float distancia() {  
  float tempo, dist;  
  digitalWrite(trigger, LOW);  
  delayMicroseconds(2);  
  digitalWrite(trigger, HIGH);  
  delayMicroseconds(10);  
  tempo = pulseIn(echo, HIGH);  
  dist = (((tempo/2) * 350)/1000000);  
  dist *= 100;  
  return dist;  
 }  
 boolean achou(){  
  /*if(giro)  
   giraHorario();  
  else  
   giraAnti();*/  
  if (distancia()<55)  
   return true;  
  else  
   return false;  
 }  
Fotos do robô





quinta-feira, 16 de maio de 2013

Autocad - Perspectiva Isométrica

Algumas vezes é necessário fazer desenhos em perspectivas para a melhor implementação de um projeto.
No AutoCAD temos um recurso que facilita o desenho em perspectiva isométrica.
Segue vídeo explicando como utilizar tal recurso.


http://www.youtube.com/watch?v=ODXyYdokdfE

quarta-feira, 15 de maio de 2013

Programa em Arduino para sensor Ultrasom


/*segue código comentado para a utilização do sensor ultrasom HC-SR04

void setup() {
pinMode(13, OUTPUT); // pino 13 seria a saída (Trig). Trigger
pinMode(7, INPUT);// pino 7 será a entrada
Serial.begin(9600); // aqui inicia-se uma comunicação serial com o arduino com taxa de transf. de 9600bps

}
void loop() {
float tempo, dist; //declara-se as variáveis como float...
digitalWrite(13, LOW);// inicialmente o pino trigger vai a nível 0
delayMicroseconds(2); //aguarda-se um delay de 2 microsegundos
digitalWrite(13, HIGH); //e o pino trig vai a nível 1
delayMicroseconds(10);// delay de 10 microsegundos
tempo = pulseIn(7, HIGH); // a função PulseIn retorna o tempo em milisegundos entre o tempo q essa
//função foi chamada e o pino 7 entrar em nível lógico 1.
//Ou seja, o tempo que a onda sonora leva para ir e voltar até o sensor
dist = (((tempo/2) * 350)/1000000);//o tempo será divido por 2 pois contamos a ida e volta
//escolhi a velocidade do som como 350, pois o rsultado para a minha aplicação foi mais satisfatório
dist *= 100;//multiplica-se a distância por 100, pois queremos em centímetros.
//Saídas
Serial.print(tempo);
Serial.print(" microssegundos, ");
Serial.print(dist);
Serial.print(" centimetros");
Serial.println();
delay(500);
}

Imagem do sensor


Lembrem-se que o ground (referência) do arduino deve ser a mesma do sensor.

Até mais.

Será que a ciência seria capaz de responder perguntas existenciais?

Todas as civilizações formadas, dos primórdios até os dias de hoje, fizeram as
perguntas: ‘De onde viemos?’, ‘Pra onde iremos?’, ‘Por que aqui estamos?
E apesar das inúmeras explicações continuamos sem ter as respostas. Este
presente trabalho visa demonstrar que a ciência é, apesar de ser vista, pela
maioria da sociedade atual, como uma vertente do conhecimento humano que
necessita de certa frieza na maneira de lidar com os fenômenos que
acontecem no universo que estamos inseridos, é uma das formas mais belas e
importantes, que o homem encontrou para entender as questões citadas
anteriormente.
Citando Marcelo Gleiser no livro A Dança do Universo:
“Muitos pensam que a pesquisa científica é uma
atividade puramente racional, na qual o objetivismo
lógico é o único mecanismo capaz de gerar
conhecimento. Como resultado, os cientistas são vistos
como insensíveis e limitados, um grupo de pessoas que
corrompe a beleza da Natureza ao analisá-la
matematicamente. Essa generalização, como a maioria
das generalizações, me parece profundamente injusta, já
que ela não incorpora a motivação mais importante do
cientista, o seu fascínio pela Natureza e seus mistérios.”
Quando se está inserido no âmbito da ciência, o indivíduo observa que além de
meras fórmulas, estatísticas e tabelas, existe um ser humano que anseia por
conhecimento profundo sobre a vida e os fenômenos naturais de modo a
conhecê-lo e, conhecendo o mundo, ele atingirá um saber maior sobre si
mesmo, isso é visto claramente na Astrofísica, através dela descobrimos
diversos componentes químicos da Tabela Periódica e ao fazer uma análise
notamos que a proporção dos elementos que compõem o universo, se
encaixam com a proporção dos elementos
(oxigênio, carbono, hidrogênio, nitrogênio) que são importantes para que
aconteça o maior fenômeno de todos, a VIDA.
O ser humano é questionador por natureza, tenta entender como e por que os
fenômenos ocorrem e, sabendo como estes nos afetam, utilizam conceitos
internalizados para modificar a natureza de modo a nos trazer benefícios.
Citando Feynman, no seu livro Feynman Lectures on Physics:
Imagine que o mundo seja algo como uma gigantesca
partida de xadrez sendo disputada pelos deuses, e que
nós fazemos parte da audiência. Não sabemos quais são
as regras do jogo; podemos apenas observar seu
desenrolar. Em princípio, se observarmos por tempo
suficiente, iremos descobrir algumas das regras. As
regras do jogo é o que chamamos de física fundamental.
Ao pesquisarmos o conceito de ciência vemos:
Em sentido amplo e
diversificado, ciência (do latim scientia, traduzido por
"conhecimento") refere-se a qualquer conhecimento ou
prática sistemáticos. Em sentido estrito, ciência refere-se
ao sistema de adquirir conhecimento baseado no método
científico bem como ao corpo organizado de
conhecimento conseguido através de
tais pesquisas.(Wikipédia)
Antes de existir a ciência, como o conhecemos hoje, alguns fenômenos
naturais eram atribuídos a deuses, considerados seres capazes de fazer
modificações na natureza. Fenômenos tais como chuvas fortes, erupções de
vulcões ou qualquer tipo de fenômeno que afetasse os humanos, eram visto
como uma espécie de castigo divino. Porém, os deuses não eram
responsáveis, somente, por esses acontecimentos, também ajudaram o ser
humano a lidar com a morte ou qualquer tipo de conhecimento que ainda não
tínhamos ciência de por que, e como aconteciam. A morte é, até hoje, o maior
medo dos seres humanos, pois dentre os animais é o único que sabe que irá
falecer. Lidar com esse conhecimento levou o homem a transgredir o conceito
de morte, internalizando conhecimentos não-científicos (não necessitam de
provas empíricas, somente de crença), gerando assim as religiões.
• Exemplificando o conhecimento científico (Eletricidade)
Muitos dos conhecimentos adquiridos pelo homem, são obtido através da
observação de fenômenos da natureza, não importando quão pequenos e
estranhos pareçam. Um bom exemplo, da evolução do homem e da ciência é
no contexto da que talvez seja uma das maiores descobertas feita pelo ser
humano, a eletricidade. O primeiro experimento registrado em que se
comprova que há presença das leis da eletrostática foi realizado pelo filósofo
Tales de Mileto, que ao esfregar um âmbar a um pedaço de carne de carneiro,
observou-se que pedaços de palha e fragmentos de madeira começavam a ser
atraídos pelo próprio âmbar. Do âmbar (grego. Élektron) surgiu o nome
eletricidade.
Um pequeno efeito, como a atração de pedaços de alguns materiais, foi o
suficiente para ser estudado por uma legião de cientistas, que a cada nova
experiência obtinha-se um conceito matemático que funcionava para descrever
de forma sistemática como tal fenômeno se comportava. Todavia, é inevitável
ao homem não usar uma nova tecnologia ao seu favor, e com a concretização
do conceito de corrente elétrica, o mundo passou por uma mudança em seus
costumes e seu modo de viver.
Tenhamos uma breve visão de como a sociedade estava situada antes da
descoberta da eletricidade. Pessoas precisavam estar sempre à mão uma fonte
de luminosidade durante a noite, pois contavam somente com a luz do luar e
seus lampiões para iluminar seu caminho. A única maneira de conservar certos
tipos de alimento era cozinhando-os, a carne cozida imersa em banha de
porco, em latões era o único meio de retardar o apodrecimento. Tinha-se a
necessidade de ir periodicamente ao mercado comprar alimentos frescos.
Usava-se ferro a brasa, que tinha uma tampa que era levantada para se
colocar a brasa lá dentro. A vida antigamente não era tão cômoda, pois não
havia as facilidades existentes hoje. A própria evolução dos conceitos elétricos
trouxe novos campos de estudo ao homem, como a eletrônica, que se
tornaram necessárias para suprir o desejo do homem moderno, estar
conectado ao mundo em tempo real, além de realizar tarefas indesejáveis em
menor tempo possível.
A cada nova invenção surgem mais necessidades ocupacionais que imploram
por uma nova invenção. Celulares de ultima geração estão nas prateleiras a
cada mês para alimentar o desejo do homem de consumir compulsivamente
apenas por um desejo de satisfação própria.
• Conclusão
Não há outro modo de chegar-se a uma sociedade em que seja possível
realmente entender a mente e a alma humana, se não tivermos paixão em
descobrir conceitos novos, se não soubermos lidar com dúvidas ou se não
montarmos um modelo sistemático capaz de analisar o mundo e seus eventos
de forma minuciosa a fim de captar informações úteis para este objetivo. E, no
que concerne a alguma vertente que seja capaz de realizar este feito, a ciência
é o melhor caminho.
Porém, o ser humano tem limitações de conhecimento, somente estudamos o
que nós percebemos. Dificilmente, o ser humano será capaz de entender as
grandes perguntas, pois estamos inseridos numa realidade a qual não temos
capacidade de transgredir. Podemos fazer predições, previsões, estudos etc.,
porém, isso não é ruim, pois é isso que faz-nos pensar. Saber lidar com
incertezas, e continuar nesta busca incessante pelo conhecimento, é o que nos
mantém como a raça predominante e ativa no mundo.
Apesar de notarmos que a ciência é uma forte arma para o desenvolvimento
intelectual e pessoal do indivíduo, e da sociedade como um todo, nós
facilmente notamos que a aceleração de processos industriais, das resoluções
de problemas e suprimento necessidades do homem moderno, molda uma
sociedade com pessoas cada vez menos altruístas, solidárias etc..
Como diz George Orwell (Pseudônimo de Eric Arthur Blair), no seu livro 1984:
“...expressa-se um sentimento de desespero acerca do
futuro do homem, e a advertência é que, a menos que o
curso da história se altere, os homens do mundo inteiro
perderão suas qualidades mais humanas, torna-se-ão
autômatos, sem alma e nem sequer terão consciência
disso.”
Porém, note que, este comportamento não é concebido por causa da evolução
da ciência, pois, as maiores descobertas feitas pelo homem foram descobertas
de cunho meramente científico, de modo a satisfazer a curiosidade, e não a
necessidade, esta (a necessidade) é criada posteriormente.


REFERÊNCIAS BIBLIOGRÁFICAS
ORWELL, George. 1984, Editora Schwarcz. 2012.
http://www.escolakids.com/eletricidade.htm, acessado em 15/03/2013
http://saibahistoria.blogspot.com.br/2010/11/o-jeito-brasileiro-de-viver-antesda.
html, acessado em 15/03/2013
http://www.mundociencia.com.br/fisica/eletricidade/historiaeletricidade.htm
acessado em 15/03/2013
GLEISER, Marcelo. A dança do Universo (Dos mitos de criação ao Big Bang).
Editora Schwarcz. 1997.