// Defina os pinos para os motores de passo
// Motor X (Horizontal)
const int dirPinX = 8; // Pino de direção para motor X
const int stepPinX = 9; // Pino de passo para motor X
// Motor Y (Vertical)
const int dirPinY = 10; // Pino de direção para motor Y
const int stepPinY = 11; // Pino de passo para motor Y
// Defina os pinos dos LDRs
const int ldrTop = A0; // LDR superior
const int ldrBottom = A1; // LDR inferior
const int ldrLeft = A2; // LDR esquerdo
const int ldrRight = A3; // LDR direito
// Defina uma sensibilidade para a diferença de luz entre os LDRs
const int threshold = 50; // Ajuste conforme necessário
// Defina a quantidade de passos por movimento
const int stepsPerMove = 10; // Ajuste conforme necessário
void setup() {
// Defina os pinos dos motores como saída
pinMode(dirPinX, OUTPUT);
pinMode(stepPinX, OUTPUT);
pinMode(dirPinY, OUTPUT);
pinMode(stepPinY, OUTPUT);
// Inicializa a comunicação serial para monitoramento (opcional)
Serial.begin(9600);
}
void loop() {
// Leia os valores dos LDRs
int topValue = analogRead(ldrTop);
int bottomValue = analogRead(ldrBottom);
int leftValue = analogRead(ldrLeft);
int rightValue = analogRead(ldrRight);
// Mostra os valores no Monitor Serial (opcional)
Serial.print("Top: "); Serial.print(topValue);
Serial.print(" | Bottom: "); Serial.print(bottomValue);
Serial.print(" | Left: "); Serial.print(leftValue);
Serial.print(" | Right: "); Serial.println(rightValue);
// Controle do eixo Y (vertical)
int verticalDiff = topValue - bottomValue;
if (abs(verticalDiff) > threshold) {
if (verticalDiff > 0) {
// Mover para cima (topo tem mais luz)
moveStepper(stepPinY, dirPinY, HIGH, stepsPerMove); // Ajuste para mover para cima
} else {
// Mover para baixo (baixo tem mais luz)
moveStepper(stepPinY, dirPinY, LOW, stepsPerMove); // Ajuste para mover para baixo
}
}
// Controle do eixo X (horizontal)
int horizontalDiff = leftValue - rightValue;
if (abs(horizontalDiff) > threshold) {
if (horizontalDiff > 0) {
// Mover para a esquerda (esquerda tem mais luz)
moveStepper(stepPinX, dirPinX, HIGH, stepsPerMove); // Ajuste para mover para a esquerda
} else {
// Mover para a direita (direita tem mais luz)
moveStepper(stepPinX, dirPinX, LOW, stepsPerMove); // Ajuste para mover para a direita
}
}
// Pequena pausa para evitar movimentação muito rápida
delay(100);
}
// Função para mover o motor de passo
void moveStepper(int stepPin, int dirPin, int dir, int steps) {
// Define a direção
digitalWrite(dirPin, dir);
// Dá os passos
for (int i = 0; i < steps; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500); // Ajuste a duração do pulso conforme necessário
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
}