Robotica: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
 
(4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 8: Linha 8:


;Modalidades:  
;Modalidades:  
*'''Seguidor de linha Junior''' (Lego)
*Seguidor de linha Junior (Lego)
*'''Seguidor de linha Pro''' (Arduíno)
*Seguidor de linha Pro (Arduíno)
*'''Resgate OBR''' (Lego e Arduíno)
*Resgate OBR(Lego e Arduíno)
*'''Sumô 1 kg''' (Lego)
*Sumô 1 kg (Lego)
*'''Mini Sumô 500 g''' (Arduíno)
*Mini Sumô 500 g''' (Arduíno)


==[[Oficina_de_Robotica|Oficina de Robótica]]==
==[[Oficina_de_Robotica|Oficina de Robótica com Arduíno]]==


Nesta oficina são desenvolvidos os conhecimentos básicos sobre o '''[[Arduino|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'''.
Nesta oficina são desenvolvidos os conhecimentos básicos sobre o '''[[Arduino|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'''.


==Robótica com Lego Mindstorms==
===Materiais sobre robótica com Arduíno===
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'''.
 
;Sites com projetos para NXT:
*[http://www.nxtprograms.com/projects2.html Projetos com Lego Mindstorms]
 
;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.
 
;Sensores:
;Sensores:
*[[Mídia:RoboticaSensores.pdf|Sensores e atuadores utilizados nos robôs]]
*[[Mídia:RoboticaSensores.pdf|Sensores e atuadores utilizados nos robôs]]
Linha 43: Linha 25:
*[[Mídia:RoboticaBaterias.pdf|Baterias utilizados nos robôs]]
*[[Mídia:RoboticaBaterias.pdf|Baterias utilizados nos robôs]]
*[https://www.youtube.com/watch?v=_fT_W3AwIT8 Como recuperar baterias baixas]
*[https://www.youtube.com/watch?v=_fT_W3AwIT8 Como recuperar baterias baixas]
===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 <ref>https://www.robocore.net/loja/produtos/julieta.html</ref>
Detalhes do '''hardware''' do módulo e exemplos de '''programas''' podem ser visualizados no site [https://www.robocore.net/loja/produtos/julieta.html '''Robocore/Julieta'''].


==Seguidor de Linha com controle PID==
==Seguidor de Linha com controle PID==
Linha 54: Linha 30:
;[[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'''.
;[[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==
==Robótica com Lego Mindstorms==
===Teste do sensor Infra Vermelho===
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.
<source lang="c">
//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);
}
</source>


===Teste dos motores com módulo Ponte H L298===
;Projetos para Lego NXT 2.0:
*[http://www.nxtprograms.com/projects2.html Projetos com Lego Mindstorms]


[[Arquivo:PonteH_L298N.jpg|250px]] <ref NAME=FelipeFlop> FelipeFlop. Motor DC com Driver Ponte H L298N, 2013. https://www.filipeflop.com/blog/motor-dc-arduino-ponte-h-l298n/</ref>
;Software para módulo Lego NXT:  
 
*O '''Lego NXT''' usa software proprietário que roda sobre a plataforma '''Windows''' da '''MicroSoft'''.
<source lang="c">
*O '''[[Enchanting e LeJOS|Enchanting]]''' (descontinuado) era 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'').
//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);
</source>
 
<!--
===Teste do Motor Shield DFrobotic===
<source lang="c">
//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);
  } 
}
</source>
 
===Teste do Motor Shield DKelectronics===
<source lang="c">
//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
}
</source>
-->
 
===Programa Seguidor de Linha 2022===
 
;Ponte H: Módulo L298D
 
<source lang="c">
//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();
 
}
</source>
 
===Programa Seguidor de Linha V7 2017===
 
;Motor Shield: DK Electronics
 
<source lang="c">
//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);
}
</source>


==Referências==
==Referências==

Edição atual tal como às 17h39min 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 com Arduíno

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

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.

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 (descontinuado) era 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).

Referências