Seguidor de luz con 2 ldr y servo

Tengo un servomotor de 180º i 2 ldr i no se como hacer para que el servo se mueva al ldr que tiene mas luz, porque si lo pongo de golpe me gira muy rápido y no quiero, quiero que lo haga poco a poco, alguien podría hacerlo? o explicarme como lo hago? estoy desesperado porque no me sale.., he provado un monton de códigos pero el servo hace lo que le da la gana.. ya no se que hacer

Entonces tendrias que hacer un bucle for para que el servo se mueva de grado en grado hasta alcanzar posicion y si aun se mueve demasiado rapido intercalar un delay e ir jugando con los milisegundos del delay por ejemplo para pasar de 45 a 90
Grados :

for (int i =45;i <=90;i++){
servo.write(i); // aqui pon el nombre de tu variable claro
delay(100); //juega con este delay
}

Primero te doy una ayuda y luego te hago una recomendación con tu título:

La ayuda:

trata de ver las cosas como una computadora lo hace o como tu robot debe hacerlo. Que pasa si el LDR -90 recibe toda la luz? Pues tu robot debe girar a la derecha pero a full. Trabo rueda derecha y muevo la izquierda 255. cuando pase por -45 dirá: Epaaaa estoy mas cerca entonces giro menos rápido... digamos a mitad pero sigo girando a derecha cuando este a 0 ambas ruedas deben moverse a la misma velocidad

Idem para otro par de sensores que harán moverlo a izquierda.

Ahi tienes una idea de como empezar. trata de ponerlo en código y luego vemos como resulta.

Ahora mi recomendación:

Si hubieras leido las normas te hubieras dado cuenta que no puedes poner por Titulo PROYECTO, debes ser descriptivo de lo que vas a hacer. Asi que vuelve al 1er post y puedes editar el título. Gracias

muchas gracias !!! :)

Publica la evolución de tu código, esta pregunta ya es la 3ra vez que la respondo y nadie lo ha hecho aún.

no me funciona, e probado y no se porque pero no me funciona del todo, me hace unos estravones muy rápido i no va de 1 en 1 sino que se va de una punta asta donde quiere..

el servomotor hace lo que quiere cuando quiere gira al máximo de un lado, tira para tras i vuelve al máximo pero muy rápido, no hace lo que le digo, he puesto lo del bucle pero hace lo que le da la gana igualmente…

He puesto este código i hace lo que quiere, como puedo hacer que me funcione ?

int const LDR1 = A0;
int const LDR2 = A1;

Servo myServo;

int angle = 90;
int ldr1 = 0;
int ldr2 = 0;
// Es casi imposible que left y right sean exactamente iguales por lo que el motor
// no se detendra, le voy a poner un colchon en el que considere left = right para
// que se detenga cuando esté en ese rango. Este valor se puede ir ajustando para lograr
// la precisión deseada sin que perjudique el funcionamiento del sistema
int colchon = 50;

void setup(){
myServo.attach(11);
Serial.begin(9600);
// Ponemos inicialmente el motor en 2º, no usar 0, puede dar vibraciones en el motor
// si este no consigue alcanzar los 0º
myServo.write(angle);
}

void loop(){
ldr1 = analogRead(LDR1);
delay(10);
ldr2 = analogRead(LDR2);
delay(10);
Serial.print("LDR1: ");
Serial.print(ldr1);
Serial.print("LDR2: ");
Serial.print(ldr2);
Serial.print("Angle: ");
Serial.println(angle);

if (ldr2 > ldr1 && angle > 5 && ldr2-ldr1 > colchon){
angle = angle - 5;
myServo.write(angle);
}
if (ldr1 < ldr2 && angle < 175 && ldr1-ldr2 > colchon){
angle = angle + 5;
myServo.write(angle);
}
else
//Este equilibrado, no mover
delay(15); // Ponemos un delay para que la placa pueda procesar los valores
}

No dijiste que eran 5 LDRs, cuento solo dos en tu código?

Si, solo hay 2 ya que finalmente lo voy a hacer con 2, el servo hace lo que quiere igualmente, ya no se que hacer y lo tengo que entregar dentro de poco

seria como si un girasol siguiera la luz, con 2 ldr i 1 servomotor, yo ya no se que hacer..

arnaubena: seria como si un girasol siguiera la luz, con 2 ldr i 1 servomotor, yo ya no se que hacer..

es que todavia no se que aparato quieres hacer exactamente....

Usa esto para las LDR

Bien. En esas condiciones hay que lograr respuestas parejas de los sensores sino la tendencia será ir sobre aquella LDR que entregue menos tensión.

Bien, elimina de tu codigo o comentalo todo lo que sea motor al menos en el loop. Y veamos como se comporta justamente esa parte del programa.

Ya se que funciona pero hablo de prácticamente.

Otra cosa, toma al menos 20 a 50 muestras y promédialas para evitar cosas raras.

Buscando la foto encontré este código y todo el tutorial. Es mas complicado que el tuyo pero quedate con la parte izq, derecha (left-right)

Es concretamente una casa que gira en función del sol, cuando gira el sol la casa lo va siguiendo, voy a probar eso que me has dicho, mañana te digo si me va bien

Hola. Yo te recomendaría dos cosillas: Que promedies varias lecturas de ambos sensores antes de comparar. Que subas/bajes el ángulo del servo grado a grado, en lugar de a golpes de cinco grados.

surbyte, en el código que me diste me lio mucho con lo de tantas cosas me lio y elimino cosas que tocan

Pero si solo tienes que eliminar lo que va arriba y abajo. Muy fácil.

/* this code is written by geobruce
for more info check my site http://xprobe.net
*/
#include <Servo.h> // include Servo library 

Servo horizontal; // horizontal servo
int servoh = 90; // stand horizontal servo


// LDR pin connections
// name = analogpin;
int ldrlt = 0; //LDR top left
int ldrrt = 1; //LDR top rigt

void setup()
{
  Serial.begin(9600);
// servo connections
// name.attacht(pin);
  horizontal.attach(9); 
}

void loop() 
{
  int lt = analogRead(ldrlt); // top left
  int rt = analogRead(ldrrt); // top right

  int dtime = 100;               // Valor que he modificado a gusto. Checar si esta bien
  int tol = analogRead(3)/4;    //Usa este potenciómetro para ajustar el umbral de disparo de los LDR
                                // si no queres usar un potenciómetro, ponele un valor, digamos 300 para empezar.
  
  int avl = lt;
  int avr = rt;
  
  int dhoriz = avl - avr;// check the diffirence og left and rigt
  

    if (-1*tol > dhoriz || dhoriz > tol) { // check if the diffirence is in the tolerance else change horizontal angle
        if (avl > avr) {           // si el valor de LDR izq es mayor que DER entonces disminuyo servoh pero no mas de 0.
          servoh = --servoh;
          if (servoh < 0) {
              servoh = 0;
          }
        }
    else if (avl < avr) {          // si el valor de LDR izq es menor que DER entonces aumento servoh pero no mas de 180.
            servoh = ++servoh;
            if (servoh > 180) {
              servoh = 180;
            }
         }
         else if (avl == avr) {   // si son iguales no hago nada por ahora.
                // nothing
         }
    horizontal.write(servoh);
  }
  delay(dtime);
}

Me sonaba haber visto esto antes. Lo tienen resuelto aqui:

http://scuola.arduino.cc/courses/lessons/view/qXB7gEg

claro es la misma versión que yo posteé que tiene 4 LDRs. 2 arriba y 2 abajo, izq y derecha en ambos casos.

Del código de 4 lo bajé a dos para simplificar las cosas.

Uff me funciona de maravilla, muchísimas gracias!!!!

Dime si estas haciendo un tracker (seguidor) solar?