Robotica: mudanças entre as edições
Linha 57: | Linha 57: | ||
==Programas== | ==Programas== | ||
===Teste do sensor Infra Vermelho=== | ===Teste do sensor Infra Vermelho=== | ||
<source lang="c"> | <source lang="c"> | ||
Linha 79: | Linha 78: | ||
} | } | ||
</source> | </source> | ||
,!-- | |||
===Teste do Motor Shield DFrobotic=== | ===Teste do Motor Shield DFrobotic=== | ||
<source lang="c"> | <source lang="c"> | ||
Linha 151: | Linha 150: | ||
} | } | ||
</source> | </source> | ||
--> | |||
===Programa Seguidor de Linha V7 2017=== | ===Programa Seguidor de Linha V7 2017=== | ||
Edição das 11h55min de 25 de março 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)
Olimpíada Brasileira de Robótica - OBR
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)
- Regras das Competições de Robótica
- Baterias utilizados nos robôs
- Sensores e atuadores utilizados nos robôs
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);
}