Parar motor cuando no recibe señal de los LDR.

#1
Buenas. Estoy con un proyecto de un girasol electrónico que mediante la lectura de dos LDR se mueve el motor al centro de dichos dos LDR, cuando el motor llega al centro ya no se mueve, pero sigue vibrando y no para, por lo tanto se calienta mucho.

Entonces, ¿se puede añadir unas lineas en el código para que cuando no reciba señal para moverse que se desconecte de los 5v del arduino o poner un timer para que pare 20 minutos?, ya que el sol no va que digamos muy veloz. :LOL:

El código es éste:
PHP:
#include <Servo.h>

    Servo myservo;

    int pos = 0;  // Variable para almacenar la posicion del servo a 0.
    int inputPhotoLeft = 1; // Fotorresistencia pin analogico 0 de arduino
    int inputPhotoRight = 0;// Fotorresistencia pin analogico 1 de arduino

    int Left = 0; // Almacena lecturas de los fotoresistores.
    int Right = 0; 

    void setup()
    {
    myservo.attach(9); // Servomotor en pin 9.
    }

    void loop()
    {
    // Lee los valores de las variables de fotoresistores a la izquierda y derecha.
    Left = analogRead(inputPhotoLeft);
    Right = analogRead(inputPhotoRight);

    // Comprueba si el valor de la derecha es mayor que el izquierdo, de ser así  se movera a la derecha.
    if (Left > (Right +20))
    // +20 es la zona muerta, para que no se agitan de ida y vuelta.
    {
    if (pos < 179)
    pos++;
    myservo.write(pos);
    }

    // Comprueba si el valor de la izquierda es mayor que la derecha, si es así se movera hacia la izquierda.
    if (Right > (Left +20))
    {
    if (pos > 1)
    pos -= 1;
    myservo.write(pos);
    }

    // Se añade cierto retraso, aumentar o disminuir si se quiere menos o más velocidad.
    delay(10);
    }
 
Última edición por un moderador:
#2
Hola, la mejor opción, es añadir histéresis a la línea de comparación de variables.

Algo similar a lo que utilizas:
if (Left > (Right +20)) , if (Right > (Left +20))

O también if(Left>Right){Left-Right>20} // Toma acción de movimiento en sentido favorable
, else {Right-Left>20}// Toma acción en sentido contrario al anterior
Lo que resulta extraño, es que el motor se vuelva inestable en la zona equilibrada, ya que tienes un margen de +-20, quizás ese valor sea pequeño.
 
Última edición:
#3
Entonces las lineas que me dices las añado al código o sustituyo esas lineas por las del código?

Es que programación arduino se me atraganta.

PD: Gracias por todo.
 
Arriba