quinta-feira, 26 de março de 2009

O meu Arduino já tem rodas






Já consegui juntar tudo e por o Arduino a rolar, a desviar-se de objectos e a buscar a luz.

Como rodas arranjei-lhe duas tampas plásticas de garrafão de agua.
Na frente tem 2 arames que accionam dois interruptores e para "vêr a luz" tem 2 LDR's.

O Código é bastante simples e foi feito numa noite.
#define moto1A 7
#define moto1B 8
#define moto1E 9

#define moto2A 4
#define moto2B 5
#define moto2E 6

#define sensor1 2
#define sensor2 3

#define ldr1 0
#define ldr2 1

#define vel1 150
#define vel2 255

void setup()
{
Serial.begin(9600);
Serial.println("SETUP");
}

void loop()
{
lerLuz();

if(!digitalRead(sensor1))
sensorDireita();

if(!digitalRead(sensor2))
sensorEsquerda();

motorFrente(vel1,250);
}


void motorFrente(int vel, int tempo){
digitalWrite(moto1A,LOW);
digitalWrite(moto1B,HIGH);
analogWrite(moto1E, vel);

digitalWrite(moto2A,LOW);
digitalWrite(moto2B,HIGH);
analogWrite(moto2E, vel);

delay(tempo);
}

void motorTras(int vel, int tempo){
Serial.print("Tras : ");
Serial.print(vel,DEC);
Serial.print(" , ");
Serial.println(tempo,DEC);

digitalWrite(moto1A,HIGH);
digitalWrite(moto1B,LOW);
analogWrite(moto1E, vel);

digitalWrite(moto2A,HIGH);
digitalWrite(moto2B,LOW);
analogWrite(moto2E, vel);

delay(tempo);
}

void motorDireita(int vel, int tempo){
Serial.print("Direita : ");
Serial.print(vel,DEC);
Serial.print(" , ");
Serial.println(tempo,DEC);

digitalWrite(moto1A,LOW);
digitalWrite(moto1B,HIGH);
analogWrite(moto1E, vel);

digitalWrite(moto2A,HIGH);
digitalWrite(moto2B,LOW);
analogWrite(moto2E, vel);

delay(tempo);
}

void motorEsquerda(int vel, int tempo){
Serial.print("Esquerda : ");
Serial.print(vel,DEC);
Serial.print(" , ");
Serial.println(tempo,DEC);

digitalWrite(moto1A,HIGH);
digitalWrite(moto1B,LOW);
analogWrite(moto1E, vel);

digitalWrite(moto2A,LOW);
digitalWrite(moto2B,HIGH);
analogWrite(moto2E, vel);

delay(tempo);
}

void motorParar(int tempo){
Serial.print("Parar ");
Serial.print(" , ");
Serial.println(tempo,DEC);

digitalWrite(moto1A,LOW);
digitalWrite(moto1B,LOW);
analogWrite(moto1E, 255);

digitalWrite(moto2A,LOW);
digitalWrite(moto2B,LOW);
analogWrite(moto2E, 255);

delay(tempo);
}

void sensorDireita() {
Serial.println("Sensor Direita");

motorParar(1000);
motorTras(vel1,1000);
motorEsquerda(vel1,700);
}

void sensorEsquerda() {
Serial.println("Sensor Esquerda");

motorParar(1000);
motorTras(vel1,1000);
motorDireita(vel1,700);
}

void lerLuz(){
int dir = analogRead(ldr1);
int esq = analogRead(ldr2);

Serial.print("Luz : ");
Serial.print(esq,DEC);
Serial.print(" , ");
Serial.println(dir,DEC);

if((dir-esq)<-100){
motorDireita(vel1,500);
}
else if((dir-esq)<-50){
motorDireita(vel1,250);
}
else if ((dir-esq)>100){
motorEsquerda(vel1,500);
}
else if ((dir-esq)>50){
motorEsquerda(vel1,2500);
}
}

2 comentários: