Robot Light Chaser

Com o chassi de um carro telecomandado encontrado ao pé de casa, fiz um robot para “perseguir” luz. Usando o Arduino, uma breadboard, um L298, três LDRs e umas resistências, montei o carro que se pode ver no video a ser testado.

Video

Esquema

Código


/*
* LDR direction test with the wheels and motor
*
* 20111109 Luis Sismeiro
*/

//#define DEBUG

/* LDR pins */
const int pinLdrRight = A0;
const int pinLdrCenter = A1;
const int pinLdrLeft = A2;

/* Direction pins */
const int dirInput1 = 7;
const int dirInput2 = 8;
const int dirEnable = 12;


/* Motor pins */
const int motorEnable = 3;
const int motorInput1 = 2;
const int motorInput2 = 4;

/* Global variables inicialization */
int valueLdrRight = 0;
int valueLdrCenter = 0;
int valueLdrLeft = 0;
int ldrMedia = 0;
int ldrComp = 0;
int diffValue = 75; // Sensitivity value for direction threshold

void setup() {
pinMode(dirInput1, OUTPUT);
pinMode(dirInput2, OUTPUT);
pinMode(dirEnable, OUTPUT);
pinMode(motorInput1, OUTPUT);
pinMode(motorInput2, OUTPUT);
pinMode(motorEnable, OUTPUT);
#ifdef DEBUG
Serial.begin(9600);
#endif
}

void loop() {
valueLdrRight = analogRead(pinLdrRight);
valueLdrCenter = analogRead(pinLdrCenter);
valueLdrLeft = analogRead(pinLdrLeft);

#ifdef DEBUG
Serial.print(“valueLdrRight: “);
Serial.println(valueLdrRight);
Serial.print(“valueLdrCenter: “);
Serial.println(valueLdrCenter);
Serial.print(“valueLdrLeft: “);
Serial.println(valueLdrLeft);
#endif

ldrMedia = (valueLdrRight + valueLdrCenter + valueLdrLeft) / 3;

#ifdef DEBUG
Serial.print(“ldrMedia: “);
Serial.println(ldrMedia);
#endif

ldrComp = ldrMedia + diffValue; // Sensivity adjust calculation

#ifdef DEBUG
Serial.print(“ldrComp: “);
Serial.println(ldrComp);
Serial.println(“###”);
#endif

if (valueLdrRight > ldrComp && valueLdrCenter < ldrComp && valueLdrLeft Go right!”);
#endif

/* Dir right */
digitalWrite(dirInput1, HIGH);
digitalWrite(dirInput2, LOW);
digitalWrite(dirEnable, HIGH);

/* Motor forward */
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
digitalWrite(motorEnable, HIGH);

} else if (valueLdrRight ldrComp && valueLdrLeft Go front!”);
#endif

/* Dir forward */
//digitalWrite(dirInput1, LOW);
//digitalWrite(dirInput2, LOW);
digitalWrite(dirEnable, LOW);

/* Motor forward */
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
digitalWrite(motorEnable, HIGH);

} else if (valueLdrRight < ldrComp && valueLdrCenter ldrComp) {
#ifdef DEBUG
Serial.println(“–> Go left!”);
#endif

/* Dir left */
digitalWrite(dirInput1, LOW);
digitalWrite(dirInput2, HIGH);
digitalWrite(dirEnable, HIGH);

/* Motor forward */
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
digitalWrite(motorEnable, HIGH);
} else {
digitalWrite(dirEnable, LOW);
digitalWrite(motorEnable, LOW);
}

#ifdef DEBUG
delay(1000);
#endif
}

Etiquetas: ,

Uma resposta to “Robot Light Chaser”

  1. Tiago (@Tiagooooo0) Says:

    Muito bom! Eu estou a espera de um arduino e de um usb host shield que comprei, vou começar a fazer um robot em que o cerebro vai ser um android ligado por usb, para aproveitar o processamento, cam, gps etc do android😉

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s


%d bloggers like this: