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
  • 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 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)

Motores

Sites com materiais de apoio para controle dos motores:

Exemplos

Bibliotecas para motores

Baterias

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

Motor Shield
DK Electronics
//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