O PROJETO

Este projeto apresenta  uma   plataforma   robótica   para educação   denominada “EduBOT”     para        auxiliar          no          ensino           de           mecatrônica,     que engloba     componentes     de      Hardware      (mecânica e eletrônica)  e   software  (programação).    A    iniciativa      tem    como    meta    o   baixo      custo   e        a      utilização   da   metareciclagem para incentivar a criatividade sustentável   na era digital.

O robô proposto   é móvel, autônomo   e   opera   em   ambientes   desconhecidos. Juntamente   com   a   descrição    dos    elementos   mecânicos,  eletromecânicos   e      computacionais   do   projeto   encontram-se     os     esquemáticos     para     o funcionamento  do   protótipo. Um algoritmo   faz   a identificação de  obstáculos para verificar    se      executa   ou   não   manobras   evasivas,   evitando a  colisão. O     projeto     é     aberto   e   seus   arquivos podem ser baixados. Para  conhecer   mais     sobre       o      trabalho   navegue     e   fique à   vontade!     Para   Dúvidas   e criticas mande um E-mail.

PS:  Todas   as   imagens   do   blog    podem   ser   visualizadas   em   tamanho  real “clicando” sobre as mesmas.

VÍDEO 1:  em um minuto e 10 segundo (1:10),  o vídeo abaixo mostra o robô EDUBOT se deslocando e fazendo manobras evasivas.

VÍDEO 2: ROBOTDROID, estudantes do IFS (Instituto Federal de Sergipe) utilizaram EDUBOT no auxílio para seus estudos para o projeto de um robô móvel utilizando Android. Ian Oliveira e Iraildo da Costa Carvalho;

FOTOS DAS PLATAFORMAS EduBOT:

INICIATIVA

A  ideia do projeto surgiu de estudos realizados sobre programação, robótica    e placa   Arduino. Sendo mais   tarde   desenvolvido como um  trabalho curricular      para   disciplina  de    Arquitetura     de   computadores  II   do curso de     Ciência      da     Computação.      O    trabalho     teve      continuidade       com      apoio      dos       professores      do     Departamento       de     Engenharias          e  Ciência  da     Computação        da      Universidade           Regional        Integrada       do   Alto   Uruguai      e   das   Missões,    URI    Campus   Santo   Ângelo – RS.

Alunos responsáveis pela pesquisa e projeto: Versão 1.0 – EduBOT.

Carlos Solon Soares Guimarães Jr . E-mail: carlos.solon@ufrgs.br/juniorsolon@yahoo.com.br

Henrique Parcianello  Maurer. E-mail: henrique.parcianello.maurer@gmail.com

Artigo do Trabalho: http://www.santoangelo.uri.br/stin/Stin/trabalhos/12.pdf

Regulamentos do Torneio: http://www.santoangelo.uri.br/sri2011/wp-content/uploads/2011/09/Regras_torneio_robotica_2011_2.pdf

Reportagem do Torneio, 04/out: http://wp.clicrbs.com.br/santoangelo/tag/uri/page/2/

INTRODUÇÃO

A pesquisa em robótica tem diversas linhas   de   atuação,  no  qual a navegação e detecção de obstáculos têm sido  focadas   na  última década. Diversas aplicações são projetadas, como sistemas robóticos educacionais com objetivos específicos criados a partir da metareciclagem de lixo computacional por exemplo.

A metareciclagem é uma  rede  auto-organizada  que  propõe     a  desconstrução da tecnologia   para       transformação       social.    À  medida    que  a   tecnologia   avança sistemas         eletrônicos          de           computação         precisam            ser substituídos por equipamentos mais sofisticados, fazendo com que os velhos se tornem    obsoletos   sendo necessário o   seu    descarte (figura 01).

  Figura 01. Impressoras abertas para coleta das partes mecânicas e eletromecânicas.

Equipamentos      como   impressoras      possuem   materiais    pesados    que    são prejudiciais       a        natureza.        O       principal    objetivo foi   a     utilização     da metareciclagem      de       componentes    de  impressoras inutilizadas no ambiente acadêmico    para   coletar  componentes   mecânicos  e    eletromecânicos (figura 02)     para criação   de   uma   plataforma     robótica educacional de baixo  custo. Tanto   o   hardware   como  o  software tem  utilizam soluções open-source.

Figura 02. Componentes retirados da impressora: Rodas, motor DC, Engrenagem e eixo de suporte.

ELEMENTOS MECÂNICOS

Aqui   são   descritos os itens referentes  a   construção   da estrutura do robô, sua parte   mecânica,  desenho do projeto até    a   sua    montagem    (motores, chassi, carenagem,  rodas,  entre outros). Para quem quiser, outra opção     é    comprar plataformas prontas com motores e engrenagens adaptados e pular para parte eletrônica e programação;

Plataforma de suporte chassi

Download: Chassi: AutoCad 14

É   a    plataforma base para a fixação dos equipamentos que   constituem   o robô como os motores. O projeto do chassi do robô foi planejado   a   fim   de   reduzir   o   tempo   na    construção.   A     ferramenta     AutoCAD    14     foi utilizada para   automatizar  a   fase   de   projeto   de  chassi, desde o molde  da   base,   colocação de   parafusos,   mapeamento    do   lugar   de     motores,   rodas   e   bateria.

Depois der ter a parte do chassi    o próximo    passo   é    montar     estrutura     de cima  do robô.  O     diâmetro     do     chassi     é     de   23 cm,   a parte de   cima    é de  13 cm    e    é   ligado    ao   chassi     com   três  tubos    de alumínio  que    foram cortados   com   comprimento   de   6 cm cada,     parafusos grandes  com      8 cm passam por    dentro    do tubo,    duas ruelas    e   uma porca são     usados    em    cada   parafuso para  dar    mais estabilidade, para  uma     melhor   visualização   foi   desenhado   a    parte     estrutural do robô no aplicativo SolidWorks.

Figura 03. Sesenho da estrutura mecânica no SolidWork

Material      utilizado     para    o   chassi e a estrutura de cima:     madeira      fina   de   3 mm     tipo    MDF   e   tubos   leves      de     alumínio        com parafusos,    porcas     e   ruelas.    O    corte     foi     feito    passando   o   arquivo do AutoCAD 14 para uma fresadora a laser (figura 03).

Figura 04. Chassi com corte a laser

Rodas de tração

O robô é dotado de duas rodas    de   tração, totalmente independentes    uma das outras. As rodas responsáveis por dar  tração e torque são controladas     através dos motores e são as mesmas utilizadas    em   rolos    que     puxam  papel de uma impressora a jato de tinta comum.

Caracteristicas:
Para a composição de um robô, o tamanho das rodas  é  um  fator interessante de projeto. Com rodas grandes temos:   movimentos   rápidos, menos   torque    para transportar carga  pesada e controle   de   posição   difícil; Com   rodas   pequenas temos: movimentos   mais  lentos e fácil posicionamento. A baixo a figura mostra as    características  e   dimensões   da roda utilizadas   neste   trabalho   retirandas   de impressoras velhas (figura 05).

Figura 05. Rodas de tração

Roda de apoio

A roda de apoio está acoplada por um pino na traseira da plataforma de suporte, dando   auxilio    necessário    na     mudança    de   direção do robô. Por ser leve e possibilitar    movimentos    giratórios   rápidos,   estas  compõem suas principais características. A figura abaixo apresenta a roda de apoio utilizada   no    robô. A roda foi encontrada em lojas de materiais mecânicos (figura 06).

Figura 06. Roda de apoio

As engrenagens

São do   tipo   cilindricas   retas   que transmitem    rotação entre eixos paralelos e foram  retiradas     das   impressoras junto com o eixo de suporte que a sustenta.

As engrenagens tem a finalidade de:
– Aumentar o torque;
– Diminuir a velocidade;
– Melhorar a precisão no posicionamento do robô;
– Promover o acoplamento com a roda de tração.

O suporte do eixo foi cortado com ajuda de uma morça e serra:

Figura 07. Eixo de suporte e engrenagem.

As rodas foram presas com parafusos compridos e finos nas engrenagens. O motor, engrenagem e o seu eixo do suporte,    são    encontrados já unidos em  certas  impressoras a jato de tinta. Para a engrenagem com a roda não cair do seu eixo, deve ser feito um furo com parafusadeira (rotação lenta) e uma broca na ponta que deve ser mais fina do que o eixo a ser perfurado, com mais ou menos 0.5 cm de profundidade, logo em seguida deve ser  injetado com um alfinete o durapox  para preencher o orifício aberto e  depois colocar a roda já unida/parafusada com a engrenagem, e utilizando uma tachinha com pino fino de metal e ponta redonda ou com circunferência, a mesma deve ser introduzida no orifício/furo (antes de secar o durapox), para segurar a roda com engrenagem no seu eixo.

Figura 08. Engrenagem, eixo de suporte e motor DC. Peças inteiras unidas que ficam geralmente nas laterais de certas impressoras. A roda é parafusada na engrenagem.

ELEMENTOS ELETROMECÂNICOS

Os    elementos    eletromecânicos   são   dispositivos   que   transformam   energia  mecânica  em  energia    elétrica   e   vice-versa.   Entre   eles   pode   se   destacar no projeto os motores DC e os sensores ultra-sônicos.

Motor de corrente contínua (CC / DC) e PWM

Diferentemente    dos     motores      de     passo     e     dos     motores   de    corrente alternada,    o    controle     da   velocidade     de    um    motor   DC  é relativamente simples.   O    objetivo   é   realizar   o    controle   independente   de  dois   motores DC,   que   estão   fixados    no   chassi   do robô,   para   que o mesmo seja capaz de se   deslocar  em   qualquer direção. Os   motores   utilizados   foram   retirados de lixos     eletrônicos   como     impressoras   velhas     que      geralmente      possuem motores   elétricos   de  12Vdc (9-20V) (figura 09), os mesmos usados   para   este projeto.    Motores   elétricos    de   até   36V     são     suportados      pelo      driver    SN754410    descrito     nos     elementos     computacionais.    O      controle      dos motores        é     realizado     através     de     PWM  –   Modulação     por   Largura de Pulso.     A      técnica      de      PWM     constitui   uma   maneira  fácil  de  controlar motores,  onde   é   utilizada     uma     saída   digital   para   o     controle   e consiste em    um   padrão   de  rápida   alternância    entre   liga   e   desliga   de  um período T,   na   qual,   parte   do   tempo   ela   estará em estado ativo e parte do tempo em estado desativado.

Figura 09. Motores retirados de impressoras.

Sensor de Ultrassom

O   uso   de   sensores   para    detecção    de   obstáculos   possibilita  o aumento da precisão de   deslocamento   do   robô   em   um ambiente, uma   vez   que  permite que   o robô diminua   sua   incerteza   com   relação   à   sua  localização dentro de um   entorno   previamente    modelado.   Inicialmente    estão    sendo    utilizados sensores   de   ultrassom  do  modelo HC-SR04.  Sensores deste tipo se justificam pelo   seu   baixo   custo,  facilidade  de   processamento  e uma precisão aceitável para   determinar   a   distância   de   um   objeto   utilizando   o  sonar para desviar obstáculos.   O   princípio  do sonar baseia-se no envio de um sinal (neste caso, na faixa de ultrassom: 40 KHz)   e   a  detecção do seu eco, que é um pulso  em  nível  alto    que   corresponde   ao   tempo   de ida e volta do som, ou seja, é necessário  dividir este  tempo por 2.  Se nada for detectado, o sensor reduz sua linha de eco  depois  de cerca   de   36ms.   O sensor pode ser visto na (figura 10).

Figura 10. Sensor   ultra-sônico. Pinos: 1)  5V – Alimentação; 2) TRIG – Disparo do sinal, um pulso inicia; 3) ECO – Pulso do Eco; 4) GND – Terra.

Algumas características importantes:

Tensão  –  5v
Corrente  –  30mA Tip. 50mA Max.                                                                                             Freqüência – 40KHz
Distância Max.  –  500 cm                                                                                                                 Distância Min. – 3 cm
Sensibilidade  –  Detecta um cabo de vassoura com 3cm de diâmetro, a mais de 2m de distância.                                                                                                                           Disparo (Trigger)  –  10uS Min. nível TTL                                                                               Pulso de eco  –  Sinal TTL positivo, proporcional à distância ao obstáculo.             Dimensões – 43mm x 20mm x 17mm.

dataSHEET do HC-SR04 aqui.

Ao tempo do pulso, é possível  calcular  a  distância  em   polegadas/centímetros, por  exemplo,   distância = (tempo  de   alto   nível  *  velocidade   do   som (340M /S) /2.

Montagem da estrutura mecânica e eletromecânica do robô (figura 11).

Figura 11. Mecânica e eletromecânica

ELEMENTOS COMPUTACIONAIS

A   complexidade   de  um robô passa pelas dificuldades dos projetos mecânicos e elétricos,   mas   o   principal   desafio   é,   com   certeza,   dar   ao    dispositivo     a “inteligência” necessária para que ele possa desempenhar suas tarefas.  O projeto usa a plataforma open-source Arduino em conjunto com   um  driver de Potência SN754410 .

Arduino

O    Arduino  Duemilanove   (figura 12),  faz   parte    do    conceito   de  hardware e software livre para uso  e contribuição de  toda    sociedade.    conceito    Arduino surgiu     na  Itália   em   2005    com   o   objetivo   de   criar    um   dispositivo para controlar projetos/protótipos  construídos de uma forma  menos       dispendiosa do    que outros sistemas disponíveis no mercado.  Arduino  é uma  plataforma de computação   física, baseada        em        uma       simples     placa de Entrada/Saída microcontrolada   e     desenvolvida     sobre   uma   biblioteca   que   simplifica     a escrita     da      programação     em    C/C++.    Um      microcontrolador    (também denominado   MCU)     é     um      “computador”      em     um      chip,   que   contém processador,     memória e periféricos de entrada/saída. É um  microprocessador que    pode   ser   programado   para   funções   especificas      em    contraste    com outros   microprocessadores    de  propósito  geral   (como os utilizados nos PCs). Eles   são   embarcados no interior   de algum outro dispositivo, no nosso caso o Arduino, para que possam controlar suas funções ou ações.

Figura 12. Arduino Duemilanove.

Mais informações: www.arduino.cc.

Driver SN754410

Para    implementar    um circuito capaz de inverter o sentido de circulação numa carga    usando   apenas   transistores e com fonte simples é usado a Ponte H. Pela distribuição   dos   componentes   lembra   a  letra “H”, assim temos uma ponte de controle completa,   pois   há   controle   das correntes em dois ramos do circuito. Para   este   funcionamento   é   utilizado  o  CI SN754410, presente no projeto. O CI contém quatro drivers  internos  que  permitem controlar  até quatro motores em  um  único   sentido   ou   dois   motores   nos dois sentidos. Os pinos 3, 6, 14 e 11 são utilizados para conectar os motores . A (figura 13) ilustra o componente.

Figura 13. Driver SN754410

dataSHEET SN754410 aqui

ARQUITETURA DO ROBÔ

O projeto será composto    de apenas três componentes de hardware: os motores DC, sonar,   Arduino   e  uma   matriz   de   contato  ou protoboard com um driver Ponte – H      para realizar   a   conexão dos motores. O arduino serve como ponte entre os     sensores (sonar)   e   os atuadores (motores),   transmitindo   a   eles  as instruções provenientes do firmware/software. A comunicação entre a interface de   controle   e   o   dispositivo   se   dá   através   de uma conexão serial padrão. O diagrama de blocos do projeto pode ser visto na (Figura 14).

Figura 14. Diagrama de blocos do projeto.

PS: Para ver as imagens em tamanho real click sobre as mesmas.

O circuito dos Módulos Arduino e driver ponte-h SN754410   na     protoboard, podem ser vistos no desenho feito no software Fritzing (Figura 15), juntamente com os elementos eletromecânicos do protótipo. Notem que existem 4 capacitores cerâmicos no circuito, são capacitores de 103pf, mas eles são opcionais no projeto, não sendo necessário usa-los.

Figura 15. Componentes eletrônicos e eletromecânicos do robô.

Download do aquivo do Fritzing

Os pinos de saída (output) 3, 4, 9. 5, 6 e 10 do Arduino são conectados  nos pinos de entrada (input) 2, 7, 1, 10, 15 e 9 do CI SN754410 para fazer o acionamento  nos motores, os demais pinos são ligados na protoboard (Figura 15).     Para conectar  o  Arduino com o Sonar são ligados os pinos digitais 13 e 12 do  Arduino com os pinos Trig e Eco do sonar. Detalhes sobre as conexão pino a pino   podem   ser   o   observados na tabela 1.



FIRMWARE

A linguagem utilizada é a WIRING uma linguagem de   programação baseada em C/C++ para escrever e ler nas entradas/saídas digitais   e analógicas do Arduino. Os programas desenvolvidos leêm valores do sensor de   ultrassom e quando recebem a reflexão de volta de algum obstáculo os motores DC são ativados.   Um conversor USB-TTL FTDI   no   Arduino encaminha   o   firmware através da comunicação serial USB.

Referência para programação: http://arduino.cc/en/Reference/HomePage

Para salvar e ver a imagem em tamanho real “click ” sobre a mesma.

Link do Sheet: http://www.cheat-sheets.org/saved-copy/Arduino-cheat-sheet-v02c.pdf

Códigos

Sketch 01:  Código 1 base para os Robôs e torneio. Controle dos motores com sensor para desviar de obstáculos e fazer manobras evasivas.

Sketch 02:  Código 2 base para os Robôs e torneio. Controle dos motores com sensor para desviar de obstáculos e fazer manobras evasivas.

01) Sketch 01 base do EduBOT

Dois códigos funcionais estão disponíveis, ambos com o mesmo objetivo de desviar obstáculos, mudando somente o modo de implementação. Ambos servem como código base para o torneio e poderão ser testados no Laboratório de Circuitos Digitais – Prédio 7. Vale ressaltar que cada grupo é responsável em adaptar e estruturar o código conforme suas necessidades e lógica de programação.

// Autor: Carlos Solon G. Jr
// Data: 08/2011

// O robô possui dois motores DC independentes.
// cada motor tem dois fios

//MOTOR DIREITA - pinos para controlar o motor
#define DIR_VEL  10 // pino 10 Arduino - controla a corrente para o motor da direita
#define DIR_PIN1  5 //pino 5 do Arduino
#define DIR_PIN2  6 //pino 6 do arduino

//MOTOR ESQUERDA - pinos para controlar o motor
#define ESQ_VEL   9 // pino 9 do Arduino - controla a corrente para o motor da esquerda
#define ESQ_PIN1  3 //pino 3 do Arduino
#define ESQ_PIN2  4 //pino 4 do arduino

#define ECHO  12 // Pino 12 do Arduino - eco (rx) - onda refletida pelo objeto é capturada.
#define TRIG  13 // Pino 13 Arduino - Trig (tx) - transmitido como ultrassom pelo ar.

#define NORMAL_VEL 255 // Valor constante para alimentar os motores. Valores de 0 à 255.
#define PARA_VEL 0

// A função Setup apenas é executada uma vez e
// normalmente utilizada para executar a inicialização
// de variáveis ou pinos por exemplo.
void setup()
{
  Serial.begin(9600); // Permite a inicialização da comunicação Série - USB.
  setupMove(); // Chamada de função que seta os pinos dos motores com saída (OUTPUT). E prepara os motores colocando os pinos em LOW - baixo.
  setupUltrasonic(); //Seta os pinos do Sensor SR04 e prepara o pino trigger em LOW - baixo
}

void loop()
{
  unsigned int d; // declara um inteiro e faz com que só suporte números positivos.
  moveFrente(); // Função para mover motores para frente
  d = leDistancia(); // a variável d recebe o retorno da função leDistancia
  Serial.println(d, DEC); // Imprime no serial monitor a distância.
  if (d <= 20) // verifica se a distância é menor que 20 cm
  {
    moveTras(); // função para mover para trás
    delay(500); // metade de um segundo - em 1 segundo existem 1000 milissegundos.
    moveEsquerda(); // função para mover para esquerda
    delay(200); // 200 milissegundos
  }

}

void moveFrente() // Implementação da função para acionar os motores para frente.
{
  analogWrite(ESQ_VEL, NORMAL_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  digitalWrite(ESQ_PIN2, HIGH);

  analogWrite(DIR_VEL, NORMAL_VEL);
  digitalWrite(DIR_PIN1, LOW);
  digitalWrite(DIR_PIN2, HIGH);
}

void moveTras() // Implementação da função para acionar os motores para trás.
{
  analogWrite(ESQ_VEL, NORMAL_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  digitalWrite(ESQ_PIN1, HIGH); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  digitalWrite(ESQ_PIN2, LOW);

  analogWrite(DIR_VEL, NORMAL_VEL);
  digitalWrite(DIR_PIN1, HIGH);
  digitalWrite(DIR_PIN2, LOW);
}

void moveEsquerda() // Implementação da função para acionar os motores para esquerda.
{
  analogWrite(ESQ_VEL, NORMAL_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  digitalWrite(ESQ_PIN1, HIGH); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  digitalWrite(ESQ_PIN2, LOW);

  analogWrite(DIR_VEL, NORMAL_VEL);
  digitalWrite(DIR_PIN1, LOW);
  digitalWrite(DIR_PIN2, HIGH);
}

void moveDireita() // Implementação da função para acionar os motores para direita.
{
  analogWrite(ESQ_VEL, NORMAL_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 255); Valores de 0 à 255.
  digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  digitalWrite(ESQ_PIN2, HIGH);

  analogWrite(DIR_VEL, NORMAL_VEL);
  digitalWrite(DIR_PIN1, HIGH);
  digitalWrite(DIR_PIN2, LOW);
}

void movePara() // Implementação da função para parar os motores.
{
  analogWrite(ESQ_VEL, PARA_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 0); Valores de 0 à 255.
  digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  digitalWrite(ESQ_PIN2, LOW);

  analogWrite(DIR_VEL, PARA_VEL);
  digitalWrite(DIR_PIN1, LOW);
  digitalWrite(DIR_PIN2, LOW);
}

void setupMove() // seta os pinos dos motores como saída
{
  pinMode(ESQ_VEL, OUTPUT);
  pinMode(ESQ_PIN1, OUTPUT);
  pinMode(ESQ_PIN2, OUTPUT);

  pinMode(DIR_VEL, OUTPUT);
  pinMode(DIR_PIN1, OUTPUT);
  pinMode(DIR_PIN2, OUTPUT);

  analogWrite(ESQ_VEL, PARA_VEL); //Possibilita a utilização dos pinos PWM. analogWrite(ESQ_VEL, 0); Valores de 0 à 255.
  digitalWrite(ESQ_PIN1, LOW); // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
  digitalWrite(ESQ_PIN2, LOW);

  analogWrite(DIR_VEL, PARA_VEL);
  digitalWrite(DIR_PIN1, LOW);
  digitalWrite(DIR_PIN2, LOW);
}

unsigned int leDistancia() // Implementação da função do sensor SR04. Retorna a distância em cm.
{

  int duracao; // Variável para receber o comprimento do pulso em microssegundos e dividir por 58.
  digitalWrite(TRIG, LOW);//Deixa trig em baixo
  delayMicroseconds(2);// por 2 uS - microssegundos
  digitalWrite(TRIG, HIGH); //Deixa trig em estado alto, Um sinal de um pulso curto de 10uS é disparado
  delayMicroseconds(10); //O sensor envia uma ‘explosão’ de 8 ciclos de ultra-som em 40khz
  digitalWrite(TRIG, LOW); // diminui a sua linha de eco para LOW - baixo.

  duracao = pulseIn(ECHO, HIGH); // aumenta a sua linha de eco para alto.
                                // Lê um pulso (HIGH ou LOW) em um pino. Retorna o comprimento do pulso em microssegundos.
                               //pulseIn retorna (tempo de alto nível * velocidade do som (340M/S)/2).
  return duracao/58; //retorna a divisão por 58 da duração para converter em centímetro.

}

void setupUltrasonic() // seta os pinos do sensor SR04 e prepara o trigger como LOW
{
  pinMode(TRIG, OUTPUT); // seta pin 13 como saída - transmissor - trigger
  pinMode(ECHO, INPUT); // seta pin 12 como entrada - receptor - echo

  digitalWrite(TRIG, LOW);
}

02) Sketch 02 base do EduBOT

// Autor: Carlos Solon G. Jr 
// Data: 08/2011

//vetor - ARRAY
const int numLeituras = 10; // número de leituras na vetor, constante
int armazena[numLeituras]; // armazena as leituras de distância em um vetor
int indiceVetor = 0; // indice do item atual do array
int total = 0; // armazena o total acumulado
int mediaDistancia = 0; // variável que armazena o valor médio

// Pinos de configuração e variáveis para SRF04 dispositivo de sonar
int echoPin = 12; // Pino 12 do Arduino - eco (rx) - onda refletida pelo objeto é capturada.
int trigPin = 13; // Pino 13 Arduino - Trig (tx) - transmitido como ultrassom pelo ar.
unsigned long tempoPulso = 0; // armazena o pulso em Microsegundos
unsigned long distancia = 0; // variável para armazenar a distância em cm

// O robô possui dois motores DC independentes.
// cada motor tem dois fios

//MOTOR DIREITA - pinos para controlar o motor
int motor1Pin1 = 3; //pino 3 do Arduino
int motor1Pin2 = 4; //pino 4 do Arduino

int corrente1Pin = 9; // pin 9 Arduino - controla a corrente para o motor da direita

//MOTOR ESQUERDA - pinos para controlar o motor
int motor2Pin1 = 5; // pino 5 do Arduino
int motor2Pin2 = 6; // pin 6 do Arduino

int corrente2Pin = 10; // pin 10 Arduino - controla a corrente para o motor da equerda

// A função Setup apenas é executada uma vez e
// normalmente utilizada para executar a inicialização
// de variáveis ou pinos por exemplo.
void setup () {

 // pinMode recebe como parametro o pino e as constante OUTPUT/INPUT
 // Seta os pinos do motor da direita como saídas (OUTPUT)
 pinMode (motor1Pin1, OUTPUT);
 pinMode (motor1Pin2, OUTPUT);

 pinMode (corrente1Pin, OUTPUT); // seta como saída o pino que libera corrente para o motor1

 // Seta os pinos do motor da esquerda como saídas (OUTPUT)
 pinMode (motor2Pin1, OUTPUT);
 pinMode (motor2Pin2, OUTPUT);

 pinMode (corrente2Pin, OUTPUT); // seta como saída o pino que libera corrente para o motor2

 // digitalWrite passa como parâmetro o pino e as constantes HIGH/LOW
 // liberando ou não a corrente da bateria para alimentar os motores
 digitalWrite (corrente1Pin, HIGH);// corrente1Pin (MOTOR DIREITA) e corrente2Pin (MOTOR ESQUERDA) definidos como HIGH
 digitalWrite (corrente2Pin, HIGH);// outra maneira: analogWrite(corrente2Pin, 255); Valores de 0 à 255.
 //Possibilita a utilização dos pinos PWM

 // Seta os pinos do sonar como OUTPUT/INPUT
 pinMode (trigPin, OUTPUT); // seta pin 13 como saída - transmissor - trigger
 pinMode (echoPin, INPUT); // seta pin 12 como entrada - receptor - echo

 // Inicializa os indices do vetor (array) com valor 0
 for (int leituras = 0; leituras < numLeituras; leituras ++)
 {
 armazena[leituras] = 0;
 }
}

// Todos os comandos existentes no interior desta função são sucessivamente repetidos.
void loop () {

 digitalWrite (trigPin, HIGH); //Deixa trig em estado alto, Um sinal de um pulso curto de 10uS é disparado
 delayMicroseconds (10); //O sensor envia uma ‘explosão’ de 8 ciclos de ultra-som em 40khz
 digitalWrite (trigPin, LOW); // diminui a sua linha de eco para LOW - baixo.

 tempoPulso = pulseIn (echoPin, HIGH); // aumenta a sua linha de eco para alto.
 // Lê um pulso (HIGH ou LOW) em um pino. Retorna o comprimento do pulso em microssegundos.
 //pulseIn retorna (tempo de alto nível * velocidade do som (340M/S)/2).

 distancia = tempoPulso/58; // distância recebe a divisão por 58 do tempoPulso para converter em centímetro.

 total = total - armazena[indiceVetor]; // subtrai da última distância

 armazena[indiceVetor] = distancia; // adiciona a leitura da distância para array

 total = total + armazena[indiceVetor]; // adiciona a leitura ao total

 indiceVetor = indiceVetor + 1; // vai para o próximo item na matriz

 // Verifica o tamanho do indice do vetor e compara com a constante numLeituras
 if (indiceVetor >= numLeituras) // se for maior ou igual a 10 o indiceVetor é zerado.
 {
 indiceVetor = 0;
 }

 mediaDistancia = total/numLeituras; // calcula a distância média

 delay(5);

 if (mediaDistancia <= 10) // Verifica a distância média
 {

 // Para trás
 digitalWrite (motor1Pin1, HIGH);
 digitalWrite (motor1Pin2, LOW);
 digitalWrite (motor2Pin1, HIGH);
 digitalWrite (motor2Pin2, LOW);
 }

 if (mediaDistancia <= 25 && mediaDistancia > 10) {
 // recua e desvia para esquerda
 digitalWrite (motor1Pin1, HIGH);
 digitalWrite (motor1Pin2, LOW);
 digitalWrite (motor2Pin1, LOW);
 digitalWrite (motor2Pin2, HIGH);
 }

 if (mediaDistancia > 25) {
 // Vai para a frente
 digitalWrite (motor1Pin1, LOW);
 digitalWrite (motor1Pin2, HIGH);
 digitalWrite (motor2Pin1, LOW);
 digitalWrite (motor2Pin2, HIGH);
 }
}

CONCLUSÃO E FOTOS DO TORNEIO

Neste   trabalho  propôs-se   uma   nova   plataforma  robótica com a utilização da metareciclagem   para   o   desenvolvimento   de   um   robô voltado para o ensino de   mecatrônica.   Implementou-se    um     protótipo       que       foi     denominado “EduBOT”.  Os    resultados   obtidos   neste   trabalho demonstram a importância da    utilização    do   lixo  eletrônico para a viabilização do ensino e diminuição da poluição. Conseguiu-se,   assim,   a implementação de um robô  móvel  autônomo  sem    supervisão    externa   e   com   possibilidade   de   navegação   em ambiente não   estruturado   a   um   custo financeiro relativamente   baixo.   O   sistema   irá desempenhar     tarefas     e   tomar decisões, de   maneira   autônoma, através   de programas     específicos     construídos   para   este   equipamento.   Entre   outras aplicações, o   robô    permitirá   novas implementações   de algoritmos e técnicas que permitiram a navegação em ambientes desconhecidos com busca inteligente de rotas  seguras.  Como   trabalhos futuros podem ser utilizados novos sensores para aumentar a capacidade de interação com o ambiente.

Vencedores do 1º Torneio de Robótica Livre:

1º lugar – Equipe: “Benders” – Nome do Robô: Rôbinho

Integrantes: Hermes Wiederkehr, Leonardo Zinelli Volpato, Matheus Schafer Schumacher, Charles Vinicius Lubini, Vinícius Ismael Zuse, Vinícius Silva da Cruz.

2º lugar – Equipe: “Morde es Number 1” – Nome do Robô: Mordekaiser

Integrantes: Rodney Sales Nogueira Júnior, Bruno dos Santos da Luz, Paulo Nerí Antunes Cavalheiro Filho, Maikel Losekann, Eduardo Wilhelm, Vagner Rigon Mizdal.

3º lugar – Equipe: “Não se Mixemo!” – Nome do Robô: Mixaria

Integrantes: Leonardo Perez, Eduardo Pereira Mothci, Elisiara Podgorski, Maiquel Nascimento Copetti, Tatiana Fernanda Mousquer dos Santos.

FOTOS DOS TORNEIOS: primeiro (I/2011) e segundo (II/2011) torneio de Robótica Livre da URI, utilizando as plataformas EduBOT.

DSCF7154

DSCF6944 (1)DSCF6948DSCF6960DSCF6976DSCF6978DSCF6980DSCF6988DSCF6990DSCF7118DSCF7124DSCF7130DSCF7133DSCF7135DSCF7139DSCF7146robo_usado_1ed