|
|
(6 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) |
|
| |
|
| ==Robótica com Lego Mindstorms== | | ==[[Oficina_de_Robotica|Oficina de 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:
| | 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'''. |
| *[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.
| |
|
| |
|
| | ===Materiais sobre robótica com 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 39: |
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 50: |
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== |