Robotica

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar

Robótica

Objetivo

O objetivo do projeto de Robótica é preparar equipes de alunos para participar das competições da Olimpíada de Robótica do IFPR.

Modalidades
No Edital 06/2019 PROEPI a Olimpíada de Robótica do IFPR terá as seguintes modalidades:
  • Seguidor de linha Junior (Lego)
  • Seguidor de linha Pro (Arduíno)
  • Resgate OBR (Lego e Arduíno)
  • Sumô 1 kg (Lego)
  • Mini Sumô 500 g (Arduíno)

Olimpíada de Robótica do IFPR

15/maio
Primeira Fase - Campus Foz do Iguaçu

Equipes Robótica Livre 2019

Equipe 1
Fares Josif Solibie
Gabriel Felipe
Guilherme Franchin
Henrique Amaral
Yan Diogo Mafafon

Equipes Lego 2018

Equipe 1
Juliana Kashina
Rafael Mateus Techio
Jhonatan Felipe dos Santos
Augusto de Antoni Pavlak
Antônio Carlos
Equipe 2
Thalitah Lael Lerias
Lucas Georgetti Pais de Oliveira
Wesley Costa
Agatha Isabelle Loreto Camara
Equipe 3
Luiz Felipe Gomes de Oliveira Ramires
Paule Sergio Godoi Portugal
Estevão Henrique Danielli de Oliveira
Guilherme Henrique Barros Fragoso Sobral

Olimpíada Brasileira de Robótica - OBR

Regras Modalidade Prática

Robótica com Lego Mindstorms

O Lego Mindstorms é uma linha do brinquedo LEGO, voltada para a educação tecnológica. É constituído por um conjunto de peças de montar da linha tradicional LEGO e peças especiais integradas com motores, eixos, engrenagens, polias e correntes, acrescido de sensores de toque, de intensidade luminosa e de temperatura, controlados por um processador programável.

Neste projeto utilizaremos o módulo Lego NXT 2.0.

Sites com projetos para NXT
Software para módulo Lego NXT
O Lego NXT usa software proprietário que roda sobre a plataforma Windows da MicroSoft.
Softwares Alternativos para Lego Mindstorms
  • Scratch: Linguagem de programação gráfica, baseada em blocos construtivos que lembra o brinquedo Lego.
  • Enchanting e LeJOS: O Enchanting é uma adaptação da linguagem Scratch, voltada para a programação dos módulos Lego NXT, através da substituição do firmware original pelo sistema LeJOS (Lego Java Operating System).

Robótica Livre com Arduíno

A modalidade Robótica Livre permite que os robôs sejam construídos com materiais e componentes diversos e programados por qualquer sistema de microcontroladores, incluindo o Arduíno.

Materiais disponibilizados no Curso de Capacitação em Robótica organizado pelo IFPR
Ministrado pelo professor Marcos Dinís Lavarda (Campus Campo Largo)
Sites com materiais de apoio para controle dos motores

Módulo Julieta

O módulo Julieta é uma solução completa para criação de robôs móveis de pequeno porte que possui todos os componentes necessários para movimentar seu robô em uma única e compacta placa [1]

Detalhes do hardware do módulo e exemplos de programas podem ser visualizados no site Robocore/Julieta.

Seguidor de Linha com controle PID

Seguidor de Linha com controle PID
Página Wiki com resumo da Teoria de Controle PID e de uma forma de implementação deste tipo de controle em um Robô Seguidor de Linha.

Programas

Teste do sensor Infra Vermelho

//Arduino Sensor Infra Red
int sensor = 0;  
int leitura = 0;  
 
void setup() 
{ 
    pinMode(sensor, INPUT);   
    Serial.begin(9600);
} 
 
void loop() 
{ 
  leitura1 = analogRead(sensor);
  Serial.print("Leitura: ");
  Serial.println(leitura);
  Serial.println();  
  delay(1000);
}

Teste do Motor Shield DFrobotic

//Arduino Shield DFrobotic
//PWM Speed Control

int E1 = 5;  
int M1 = 4; 
int E2 = 6;                      
int M2 = 7;                        
 
void setup() 
{ 
    pinMode(M1, OUTPUT);   
    pinMode(M2, OUTPUT); 
} 
 
void loop() 
{ 
  int value;
  for(value = 150 ; value <= 250; value+=10) 
  { 
    digitalWrite(M1,HIGH);   
    digitalWrite(M2, HIGH);       
    analogWrite(E1, value);   //PWM Speed Control
    analogWrite(E2, value);   //PWM Speed Control
    delay(30); 
  }  
}

Teste do Motor Shield DKelectronics

//Programa : Teste de motor DC12V com motor shield ponte H
//Autor : Equipe FILIPEFLOP
 
#include <AFMotor.h>
 
AF_DCMotor motor1(1); //Seleciona o motor 1
AF_DCMotor motor2(2); //Seleciona o motor 2
 
void setup()
{}
 
void loop()
{
motor1.setSpeed(255); //Define a velocidade maxima
motor2.setSpeed(255); //Define a velocidade maxima
motor1.run(FORWARD); //Gira o motor sentido horario
motor2.run(FORWARD); //Gira o motor sentido horario
 
delay(5000);
motor1.setSpeed(0);
motor2.setSpeed(0);
motor1.run(RELEASE); //Desliga o motor
motor2.run(RELEASE); //Desliga o motor
 
delay(5000);
motor1.setSpeed(150); //Define velocidade baixa
motor2.setSpeed(150); //Define velocidade baixa
motor1.run(BACKWARD); //Gira o motor sentido anti-horario
motor2.run(BACKWARD); //Gira o motor sentido anti-horario
 
delay(5000);
motor1.setSpeed(0);
motor2.setSpeed(0);
motor1.run(RELEASE); //Desliga o motor
motor2.run(RELEASE); //Desliga o motor
 
delay(5000); //Aguarda 5 segundos e repete o processo
}

Programa Seguidor de Linha V7 2017

//Componentes: Motor Shield DKelectronics e sensor InfraRed
//Programadores: Eduardo Alexandre; Joabe; Evandro Cantu
 
#include <AFMotor.h>
 
AF_DCMotor motorEsq(2);  //Seleciona o motor esquerdo
AF_DCMotor motorDir(1);  //Seleciona o motor direito

int     sensorEsq, sensorLinha, sensorDir, sensorFim;
int     contFim = 4; //Conta marcas de início, fim e cruzamentos
boolean flag = false; 
long    tempoTotal; //Tempo total da volta
int     tempoExtra = 2000; //Tempo extra após fim de pista
int     velMin = 80, velMed = 120, velMax = 255; //Velocidades dos motores
int     limiar = 500; //limiar do sensor de cor

void segueLinha(){      

  //le os sensores
  sensorEsq   = analogRead(5); 
  sensorLinha = analogRead(4);
  sensorDir   = analogRead(3);
  sensorFim   = analogRead(1);

  //Se estiver na linha segue em frente 
  if (sensorLinha < limiar){
    motorEsq.setSpeed(velMax);
    motorEsq.run(FORWARD);
    motorDir.setSpeed(velMax);
    motorDir.run(FORWARD);    
  }
 
  //Se sensorDir acha linha vire para a direita
  if (sensorDir < limiar && sensorLinha > limiar){
    motorEsq.setSpeed(velMed);
    motorEsq.run(FORWARD);
    motorDir.setSpeed(velMin);
    motorDir.run(BACKWARD);  
  }
 
  //Se sensorEsq acha linha vire para a esquerda
  if (sensorEsq < limiar && sensorLinha > limiar){
    motorDir.setSpeed(velMed);
    motorDir.run(FORWARD);
    motorEsq.setSpeed(velMin);
    motorEsq.run(BACKWARD);
  }
}
 
void setup(){
}

void loop(){

 //Segue linha até encontrar marca de fim de pista
 while(contFim > 0){
   segueLinha();
   if (sensorFim < limiar)
      flag = true; 
   if (sensorFim > limiar && flag == true){
      flag=false;
      contFim--;
   }
 }

 //Segue linha por mais 2 segundos antes de parar
 tempoTotal = millis();
 while((millis() - tempoTotal) < tempoExtra)
   segueLinha();

 //Pára motores
 motorDir.run(RELEASE);
 motorEsq.run(RELEASE);

 //Espera 10s
 delay(10000);
 
 while(true);
}

Referências