quarta-feira, 15 de agosto de 2012

Programação final

Estes são os programas para robôs de sumô:
20x20 - Pequenos cientistas

/* Projeto desenvolvido para robô de sumô no Torneio Juvenil de robótica 2012 pela equipe Pequenos Cientistas*/
// Comando de motores usando ponte H
// —————————————————————————  Pinos dos Motores
int direito_frente = 7;
int direito_re = 8;
int esquerdo_frente = 9;
int esquerdo_re = 10;
//--------------------------------------------- giro de 90°
int giro = 200;
//--------------------------------------------- Pinos sensores
int IR1 = 0;
int IR2 = 1;
int IR3 = 2;
int IR4 = 3;
int IR5 = 4;
int IR6 = 5;
//--------------------------------------------Variaveis de leitura dos sensores
float maximo = 4.00; // tensão de detecção do sensor IR
int VR1;
int VR2;
int VR3;
int VR4;
int VR5;
int VR6;
// ————————————————————————— Setup
void setup() {
// Seleciona motores
pinMode(direito_frente, OUTPUT);
pinMode(direito_re, OUTPUT);
pinMode(esquerdo_frente, OUTPUT);
pinMode(direito_re, OUTPUT);
//Ativa sensores
pinMode(IR1, INPUT);
pinMode(IR1, INPUT);
pinMode(IR2, INPUT);
pinMode(IR3, INPUT);
pinMode(IR4, INPUT);
pinMode(IR5, INPUT);
}

// ————————————————————————— Loop
void loop() {
  //faz a leitiura dos sensores e converte o valor lido (de 0 a 1024) em valores de tensão
VR1 = analogRead(IR1) * 0.0049;//sensor de linha dianteiro
VR2 = analogRead(IR2) * 0.0049;//sensor de linha traseiro
VR3 = analogRead(IR3) * 0.0049;//sensor de objeto dianteiro
VR4 = analogRead(IR4) * 0.0049;//sensor de objeto traseiro
VR5 = analogRead(IR5) * 0.0049;//sensor de objeto direito
VR6 = analogRead(IR6) * 0.0049;//sensor de objeto esquerdo

//leitura de sensores e comparação com limite de leitura (variável máximo), com resposta
//S1 - ↓ - 9, 11
if (VR1 > maximo) {
digitalWrite (direito_frente,  LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
}
//S2 - ↑ - 8, 10
if (VR2 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S3 - ↑ - 8, 10
if (VR3 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S4 - ↓ - 9, 11
if (VR4 > maximo){
digitalWrite (direito_frente,  LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
}
//S5 - ←90° ↑ - 9, 10 DELAY 8,10
if (VR5 > maximo){
digitalWrite (direito_frente, LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S6 - →90º ↑ - 8, 11 DELAY 8,10
if (VR6 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S1 + S3 - ↑ - 8, 10
if (VR1 > maximo && VR3 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S1 + S4 - ↓ - 9, 11
if (VR1 > maximo && VR4 > maximo){
digitalWrite (direito_frente,  LOW);
digitalWrite (direito_re, HIGH);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
}
//S2 + S3 - →90°↑→90°↑ - 8, 11 DELAY 8,10 delay 8, 11 DELAY 8,10
if (VR2 > maximo && VR3 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, LOW);
digitalWrite (esquerdo_re, HIGH);
delay(giro);
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, LOW);
}
//S1, S2, S3, S4, S5, S6 SEM SINAL - ↑
if (VR1 > maximo && VR2 > maximo && VR3 > maximo && VR4 > maximo && VR5 > maximo && VR6 > maximo){
digitalWrite (direito_frente, HIGH);
digitalWrite (direito_re, LOW);
digitalWrite (esquerdo_frente, HIGH);
digitalWrite (esquerdo_re, HIGH);
}
}
/*
M1 motor direito: 8–FRENTE, 9–RÉ
M2 motor esquerdo: 10-FRENTE, 11–RÉ
S1 – sensor de linha dianteiro
S2 -  sensor de linha traseiro
S3 – sensor de objeto dianteiro
S4 – sensor de objeto traseiro
S5 – sensor de objeto direito
S6 – sensor de objeto esquerdo
---------------------------------------------------
S1 - ↓ - 9, 11
S2 - ↑ - 8, 10
S3 - ↑ - 8, 10
S4 - ↓ - 9, 11
S5 - ←90° ↑ - 9, 10 DELAY 8,10
S6 - →90º ↑ - 8, 11 DELAY 8,10
S1 + S3 - ↑ - 8, 10
S1 + S4 - ↓ - 9, 11
S2 + S3 - →90°↑→90°↑ - 8, 11 DELAY 8,10 - 8, 11 DELAY 8,10
TODOS OS SENSORES SEM SINAL ↑
*/
_________________________________________________________________________________/* Programa para leitura de 6 sensores IR - Projeto Robô Lutador de Sumô 40x40
Equipe Orion 2012
*/
//variavel dos pinos analogicos
int IR1=0;
int IR2=1;
int IR3=2;
int IR4=3;
int IR5=4;
int IR6=5;

//variavel dos pinos digitais
//pinos de ativação dos motores
int L1 = 4;
int L2 = 5;
int L3 = 6;
int L4 = 7;

//variaveis de comparação da leitura dos pinos analogicos
//valor da tensão do pino analógico que determina o sinal
int maximo = 2;
//variaveis das diversas leituras
int VR1;
int VR2;
int VR3;
int VR4;
int VR5;
int VR6;

void setup() {
// configura o pino como saida
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
pinMode(L4, OUTPUT);

// configura o pino como entrada
pinMode(IR1, INPUT);
pinMode(IR1, INPUT);
pinMode(IR2, INPUT);
pinMode(IR3, INPUT);
pinMode(IR4, INPUT);
pinMode(IR5, INPUT);

}
void loop(){
 
  // le o estado do sensor e converte em volts
VR1 = analogRead(IR1) * 0.0049;
VR2 = analogRead(IR2) * 0.0049;
VR3 = analogRead(IR3) * 0.0049;
VR4 = analogRead(IR4) * 0.0049;
VR5 = analogRead(IR5) * 0.0049;
VR6 = analogRead(IR6) * 0.0049;

// verifica se o sensor está ativo
while (VR1 < maximo) {
// aciona os motores 1 e 2
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
//vire direita
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);//Pino digital 8= OV
delay (200);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}
while (VR2 < maximo){
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire esquerda
digitalWrite(L1, HIGH);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= 5V
digitalWrite(L3, LOW);//Pino digital 7= 5V
digitalWrite(L4, HIGH);//Pino digital 8= OV
delay (2000);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}
while (VR3 < maximo) {
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//ré
digitalWrite(L1, LOW); //Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, HIGH);//Pino digital 8= 5V
delay (1000);
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire direita
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);//Pino digital 8= OV
delay (2000);//giro de 90°
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

while (VR4 < maximo) {
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire direita
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, HIGH);//Pino digital 6= 5V
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);//Pino digital 8= OV
delay (1000);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

while (VR5 < maximo) {
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//vire esquerda
digitalWrite(L1, HIGH);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= 5V
digitalWrite(L3, LOW);//Pino digital 7= 5V
digitalWrite(L4, HIGH);//Pino digital 8= OV
delay (1000);//giro de 90°
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

while (VR6 < maximo) {
//parar
digitalWrite(L1, LOW);//Pino digital 5= OV
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, LOW);//Pino digital 7= OV
digitalWrite(L4, LOW);//Pino digital 8= 0V
delay (50);
//em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}
//se nenhum sensor estiver ativo
while (VR1<maximo&&VR2<maximo&&VR3<maximo&&VR4<maximo&&VR5<maximo&&VR6<maximo){
//executar em frente
digitalWrite(L1, HIGH);//Pino digital 5= 5V
digitalWrite(L2, LOW);//Pino digital 6= OV
digitalWrite(L3, HIGH);//Pino digital 7= 5V
digitalWrite(L4, LOW);////Pino digital 8= OV
}

}

Nenhum comentário:

Postar um comentário