terça-feira, 24 de julho de 2012

Teste - sensores ativando o passo e motores

O filme abaixo apresenta o teste em Simulino apresentando 6 sensores ativando 2 motores (led´s verdes) e o passo utilizado nestes motores (led´s azuis). O objetivo e controlar sincronicamente 2 motores de passo utilizando 6 sensores e o Arduino.


 O código fonte utilizado está "sujo", ou seja, ainda não usa equações, vetores ou funções para obter o resultado final e, tem opção de 4 pinos digitais para ativação de motores.

/* Programa para leitura de 6 sensores IR - Projeto Robô Lutador de Sumô
Equipe Pequenos Cientistas 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;
//pinos do passo
int L5 = 8;
int L6 = 9;
int L7 = 10;
int L8 = 11;
//tempo do passo
int tempo = 500;

//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);
pinMode(L5, OUTPUT);
pinMode(L6, OUTPUT);
pinMode(L7, OUTPUT);
pinMode(L8, OUTPUT);

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

Serial.begin (9600);
}
void loop(){
   
  // le o estado do botao
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
if (VR1 > maximo) {
// aciona os motores 1 e 2
//digitalWrite(L1, HIGH);
//digitalWrite(L2, HIGH);
digitalWrite(L3, HIGH);
digitalWrite(L4, HIGH);
//passo
digitalWrite(L5, HIGH);
delay(tempo);
digitalWrite(L5, LOW);
digitalWrite(L6, HIGH);
delay(tempo);
digitalWrite(L6, LOW);
digitalWrite(L7, HIGH);
delay(tempo);
digitalWrite(L7, LOW);
digitalWrite(L8, HIGH);
delay(tempo);
digitalWrite(L8, LOW);
}
else {
//desliga os motores 1 e 2
//digitalWrite(L1, LOW);
//digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
//desliga o passo
digitalWrite(L5, LOW);
digitalWrite(L6, LOW);
digitalWrite(L7, LOW);
digitalWrite(L8, LOW);
}

if (VR2 > maximo){
//aciona um dos motores, o outro desligado
//digitalWrite(L1, HIGH);
//digitalWrite(L2, HIGH);
digitalWrite(L3, LOW);
digitalWrite(L4, HIGH);
//passo
digitalWrite(L5, HIGH);
delay(tempo);
digitalWrite(L5, LOW);
digitalWrite(L6, HIGH);
delay(tempo);
digitalWrite(L6, LOW);
digitalWrite(L7, HIGH);
delay(tempo);
digitalWrite(L7, LOW);
digitalWrite(L8, HIGH);
delay(tempo);
digitalWrite(L8, LOW);
}
else {
//digitalWrite(L1, LOW);
//digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
}

if (VR3 > maximo) {
//aciona o outro dos motores, o anterior desligado
//digitalWrite(L1, LOW);
//digitalWrite(L2, LOW);
digitalWrite(L3, HIGH);
digitalWrite(L4, LOW);
//passo
digitalWrite(L5, HIGH);
delay(tempo);
digitalWrite(L5, LOW);
digitalWrite(L6, HIGH);
delay(tempo);
digitalWrite(L6, LOW);
digitalWrite(L7, HIGH);
delay(tempo);
digitalWrite(L7, LOW);
digitalWrite(L8, HIGH);
delay(tempo);
digitalWrite(L8, LOW);
}
else {
//digitalWrite(L1, LOW);
//digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
}

if (VR4 > maximo) {
// aciona os motores 1 e 2
//digitalWrite(L1, HIGH);
//digitalWrite(L2, HIGH);
digitalWrite(L3, HIGH);
digitalWrite(L4, HIGH);
//PASSO INVERTIDO
digitalWrite(L8, HIGH);
delay (tempo);
digitalWrite(L8, LOW);
digitalWrite(L7, HIGH);
delay (tempo);
digitalWrite(L7, LOW);
digitalWrite(L6, HIGH);
delay (tempo);
digitalWrite(L6, LOW);
digitalWrite(L5, HIGH);
delay (tempo);
digitalWrite(L5, LOW);

}
else {
//digitalWrite(L1, LOW);
//digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
}

if (VR5 > maximo) {
//digitalWrite(L1, HIGH);
//digitalWrite(L2, HIGH);
digitalWrite(L3, HIGH);
digitalWrite(L4, LOW);
//PASSO INVERTIDO
digitalWrite(L8, HIGH);
delay (tempo);
digitalWrite(L8, LOW);
digitalWrite(L7, HIGH);
delay (tempo);
digitalWrite(L7, LOW);
digitalWrite(L6, HIGH);
delay (tempo);
digitalWrite(L6, LOW);
digitalWrite(L5, HIGH);
delay (tempo);
digitalWrite(L5, LOW);
}
else {
//digitalWrite(L1, LOW);
//digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);
}

if (VR6 > maximo) {
digitalWrite(L3, LOW);
digitalWrite(L4, HIGH);
//PASSO INVERTIDO
digitalWrite(L8, HIGH);
delay (tempo);
digitalWrite(L8, LOW);
digitalWrite(L7, HIGH);
delay (tempo);
digitalWrite(L7, LOW);
digitalWrite(L6, HIGH);
delay (tempo);
digitalWrite(L6, LOW);
digitalWrite(L5, HIGH);
delay (tempo);
digitalWrite(L5, LOW);
}
else {
//digitalWrite(L1, LOW);
//digitalWrite(L2, LOW);
digitalWrite(L3, LOW);
digitalWrite(L4, LOW);

}
}


Nenhum comentário:

Postar um comentário