#include <Stepper.h>
// Defina o número de passos por revolução do motor de passo
#define STEPS_PER_REV 2048 // 2048 é comum para motores 28BYJ-48
// Pinos para os motores de passo
Stepper motorX(STEPS_PER_REV, 8, 10, 9, 11); // Motor horizontal (X)
Stepper motorY(STEPS_PER_REV, 4, 6, 5, 7); // Motor vertical (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
void setup() {
// Inicializa os motores com uma velocidade (RPM)
motorX.setSpeed(10);
motorY.setSpeed(10);
// 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)
motorY.step(10); // Movimenta 10 passos, ajuste conforme necessário
} else {
// Mover para baixo (baixo tem mais luz)
motorY.step(-10);
}
}
// Controle do eixo X (horizontal)
int horizontalDiff = leftValue - rightValue;
if (abs(horizontalDiff) > threshold) {
if (horizontalDiff > 0) {
// Mover para a esquerda (esquerda tem mais luz)
motorX.step(10);
} else {
// Mover para a direita (direita tem mais luz)
motorX.step(-10);
}
}
// Pequena pausa para evitar movimentação muito rápida
delay(100);
}