Robotica: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Sem resumo de edição
Linha 29: Linha 29:
O '''[http://www.lego.com/en-us/mindstorms/ 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.
O '''[http://www.lego.com/en-us/mindstorms/ 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'''.
;Projetos para Lego NXT 2.0:
 
;Sites com projetos para NXT:
*[http://www.nxtprograms.com/projects2.html Projetos com Lego Mindstorms]
*[http://www.nxtprograms.com/projects2.html Projetos com Lego Mindstorms]


;Software para módulo Lego NXT:  
;Software para módulo Lego NXT:  
*O '''Lego NXT''' usa software proprietário que roda sobre a plataforma '''Windows''' da '''MicroSoft'''.
*O '''Lego NXT''' usa software proprietário que roda sobre a plataforma '''Windows''' da '''MicroSoft'''.
 
*O '''[[Enchanting e LeJOS|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'').
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'').


==Seguidor de Linha com controle PID==
==Seguidor de Linha com controle PID==

Edição das 17h32min de 31 de outubro de 2022

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)

Oficina de Robótica

Nesta oficina são desenvolvidos os conhecimentos básicos sobre o Arduíno, assim como o uso de sensores de linha e controle de motores, necessários para a montagem de Robôs Seguidores de Linha.

Materiais sobre robótica com Arduíno

Sensores
Baterias

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.

Projetos para Lego NXT 2.0
Software para módulo Lego NXT
  • O Lego NXT usa software proprietário que roda sobre a plataforma Windows da MicroSoft.
  • 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).

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 Exemplo

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 dos motores com módulo Ponte H L298

[1]

//Programa para teste do motor CC com o L293D

//Definicoes pinos Arduino ligados a entrada da Ponte H
int IN1 = 2;
int IN2 = 4;
int IN3 = 7;
int IN4 = 8;
int  MA = 5;
int  MB = 6;
   
int velocidade = 200; //Velocidade do motor (0? a  255)
                      //Testar velocidade mínima para vencer inércia dos motores
   
void setup()  
{  
  //Define os pinos como saida  
  pinMode(IN1, OUTPUT);  
  pinMode(IN2, OUTPUT);  
  pinMode(IN3, OUTPUT);  
  pinMode(IN4, OUTPUT);
  pinMode(MA,  OUTPUT);  
  pinMode(MB,  OUTPUT);  
  
}  
   
void loop()  
{  
  //Configura velocidade dos motores
  analogWrite(MA, velocidade);   
  analogWrite(MB, velocidade);   
  //Aciona o motores 
  digitalWrite(IN1, LOW);  //A 
  digitalWrite(IN2, HIGH); //A
  digitalWrite(IN3, LOW);  //B
  digitalWrite(IN4, HIGH); //B 
  delay(1000);  
  //Pára motores  
  digitalWrite(IN1, HIGH);  
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);  
  digitalWrite(IN4, HIGH);  
  delay(1000);  
  //Aciona o motores no sentido inverso  
  digitalWrite(IN1, HIGH); //A  
  digitalWrite(IN2, LOW);  //A  
  digitalWrite(IN3, HIGH); //B 
  digitalWrite(IN4, LOW);  //B  
  delay(1000);  
  //Pára motores  
  digitalWrite(IN1, HIGH);  
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);  
  digitalWrite(IN4, HIGH);  
  delay(1000);
}


Programa Seguidor de Linha 2022

Ponte H
Módulo L298D
//Componentes: Ponte H L298D e sensor InfraRed
//Programador: Evandro Cantu
 
//Veriáveis utilizadas
int     sensorEsq, sensorLinha, sensorDir;
//int     sensorFim;
int     velMin = 120, velMed = 180, velMax = 240; //Velocidades dos motores
int     limiar = 400; //limiar do sensor de luz

//Definicoes pinos Arduino ligados a entrada da Ponte H
int IN1 = 2;
int IN2 = 4;
int IN3 = 7;
int IN4 = 8;
int  MA = 5; //Motor direito
int  MB = 6; //Motor esquerdo

void setup(){
  
  //Define os pinos como saida  
  pinMode(IN1, OUTPUT);  
  pinMode(IN2, OUTPUT);  
  pinMode(IN3, OUTPUT);  
  pinMode(IN4, OUTPUT);
  pinMode(MA,  OUTPUT);  
  pinMode(MB,  OUTPUT);  
  
}

void para_frente(int vel) {
  //Configura velocidade dos motores
  analogWrite(MA, vel);   
  analogWrite(MB, vel);   
  //Aciona o motores 
  digitalWrite(IN1, LOW);  //A 
  digitalWrite(IN2, HIGH); //A
  digitalWrite(IN3, LOW);  //B
  digitalWrite(IN4, HIGH); //B   
}

void vira_esquerda(int vel) {
  //MotorA_frente
  analogWrite(MA, vel);
  digitalWrite(IN1, LOW);  //A 
  digitalWrite(IN2, HIGH); //A  
  //MotorB_tras 
  analogWrite(MB, vel);   
  digitalWrite(IN3, HIGH); //B
  digitalWrite(IN4, LOW);  //B   
}

void vira_direita(int vel) {
  //MotorA_tras
  analogWrite(MA, vel);
  digitalWrite(IN1, HIGH);  //A 
  digitalWrite(IN2, LOW); //A  
  //MotorB_frente 
  analogWrite(MB, vel);   
  digitalWrite(IN3, LOW); //B
  digitalWrite(IN4, HIGH);  //B   
}

void segueLinha(){      

  //le os sensores
  sensorDir   = analogRead(2); 
  sensorLinha = analogRead(1);
  sensorEsq   = analogRead(0);
  //sensorFim   = analogRead(3);

  //Se estiver na linha segue em frente 
  if (sensorLinha < limiar){
    para_frente(velMax);    
  }
 
  //Se sensorDir acha linha vire para a direita
  if (sensorDir < limiar && sensorLinha > limiar){
    vira_direita(velMed);
  }
 
  //Se sensorEsq acha linha vire para a esquerda
  if (sensorEsq < limiar && sensorLinha > limiar){
    vira_esquerda(velMed);
  }

}
 
void loop(){

   segueLinha();

}

Programa Seguidor de Linha V7 2017

Motor Shield
DK Electronics
//Componentes: Motor Shield DKelectronics e sensor InfraRed
//Programadores: Eduardo Alexandre; Joabe Oliveira; 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

  1. FelipeFlop. Motor DC com Driver Ponte H L298N, 2013. https://www.filipeflop.com/blog/motor-dc-arduino-ponte-h-l298n/