Estrellas inactivasEstrellas inactivasEstrellas inactivasEstrellas inactivasEstrellas inactivas
 

Es un desarrollo propio, con la idea de montar sobre el dispositivo un panel fotovoltaico para generar electricidad solar. Este dispositivo es solo para probar el programa básico que opere al sistema.  Pueden bajar un DOC, con el artículo y  programa.

Es un dispositivo que sigue a la posición del sol. Esto es solamente una maqueta en escala para experimentar el programa.

Está montado sobre un mecanismo Pan & Tilt, comprado en Mercado Libre. Tiene un eje vertical de giro y un eje horizontal. Está accionado por dos servomotores miniatura, 90 G de 9 gramos de peso.

El sistema de detección está montado sobre el dispositivo. Es una cruz, plástica, que en sus extremos tiene 4 células fotoeléctricas tipo LDR. Van conectadas a los PINES A1, A2, A3 y A4, Analógicos. El programa lee estas 4 entradas y procede a seguir al sol, que en las pruebas es una luz de bajo consumo.

De la cruz salen 6 cables que van al Arduino, a saber: 4 de las LDR, uno a +5V y otro a Ground.

El Arduino se alimenta con una fuente externa de 6 Vcc.

Programa

#include <Servo.h>

Servo ServoEjeVert;    // Cada uno de los dos servos

Servo ServoEjeHori;    // Cada uno de los dos servos

int anguloEjeVert = 0;    // Angulo que gira el servo

int anguloEjeHori = 0;    // Angulo que gira el servo

int pinSensorARR = A0; // Cable Blanco        Variables de los 4 sensores

int pinSensorABA = A1; // Cable Amarillo

int pinSensorDER = A2; // Cable Rosa

int pinSensorIZQ = A3; // Cable Verde

 

double ValorARR;        // Valor leído en el PIN

double ValorABA;

double ValorDER;

double ValorIZQ;

void setup()

{

ServoEjeVert.attach(5); // Conectado al pin 5 PWM

ServoEjeHori.attach(6); // Conectado al pin 6 PWM

Serial.begin(9600);

ServoEjeVert.write(0);  // Posicion que toma al arrancar

ServoEjeHori.write(0);  // Posicion que toma al arrancar

} // FIN del void setup

void loop()

{

//                Se toman 100 valores de cada sensor, para promediar.

  for (int i=0; i<100; i++){ValorARR = ValorARR + analogRead(pinSensorARR); }

  ValorARR = ValorARR / 100;

  for (int i=0; i<100; i++){ValorABA = ValorABA + analogRead(pinSensorABA); }

  ValorABA = ValorABA / 100;

  for (int i=0; i<100; i++){ValorDER = ValorDER + analogRead(pinSensorDER); }

  ValorDER = ValorDER / 100;

 for (int i=0; i<100; i++){ValorIZQ = ValorIZQ + analogRead(pinSensorIZQ); }

  ValorIZQ = ValorIZQ / 100;

Serial.print("Arriba    "); Serial.println(ValorARR);

Serial.print("Abajo     "); Serial.println(ValorABA);

Serial.print("Derecha   "); Serial.println(ValorDER);

Serial.print("Izquierda "); Serial.println(ValorIZQ);

Serial.println("**************************");

    // Movimientos izquierda derecha

    if ((ValorDER - ValorIZQ)>5) { ServoEjeVert.write(anguloEjeVert = anguloEjeVert + 1);  }

    if (ValorDER < ValorIZQ) { ServoEjeVert.write(anguloEjeVert = anguloEjeVert - 1);  }

    if (anguloEjeVert < 1)   { ServoEjeVert.write(0); anguloEjeVert = 0;}

    if (anguloEjeVert > 180) { ServoEjeVert.write(180); anguloEjeVert = 180;}

    Serial.print("Angulo Eje Vertical   "); Serial.println(anguloEjeVert);

  // Movimientos arriba abajo

  if ((ValorARR - ValorABA)>5) { ServoEjeHori.write(anguloEjeHori = anguloEjeHori - 1); }

  if (ValorARR < ValorABA) { ServoEjeHori.write(anguloEjeHori = anguloEjeHori + 1); }

  if (anguloEjeHori < 1)   { ServoEjeHori.write(0); anguloEjeHori = 0 ;}

  if (anguloEjeHori > 60) { ServoEjeHori.write(60); anguloEjeHori = 60;}

  Serial.print("Angulo Eje Horizontal   "); Serial.println(anguloEjeHori);

 delay(300); // Variar a voluntad

} // FIN del void loop

0
0
0
s2smodern