lunes, 7 de septiembre de 2015

Seguidor Solar (Brazo robotico solar)


En esta ocacion construiremos un seguidor solar con arduino, lo podemos aplicar en distintos proyectos especialmente a los que nos gusta la robotica y la energia reciclable como es la solar, es muy facil de hacer y muy interesante si queremos aprender un poco mas en el mundo de la electronica y el open source.





Lo que necesitamos:

- Un Arduino
- Un shield (es opcional)
- 4 Resistencias LDR (fotoceldas)
- 2 Servo motores
- 4 Resistencias de 10k Ohm
- Cables

El siguiente video muestra paso a paso la elavoracion y como vamos a ensamblar nuestro seguidor solar.


Diagrama de conexiones (los Potenciometros y el shield son opcionales)



Copiamos el codigo para Arduino:

#include <Servo.h> // libreria para los servo motores 

// 180 horizontal MAXIMO
Servo horizontal; // declaramos el valor para el servo horizontal
int servoh = 180;        

int servohLimitHigh = 180; //limite en posicion superior
int servohLimitLow = 65; //limite para posicion inferior


Servo vertical;   // vertical servo 
int servov = 45;    
int servovLimitHigh = 80;
int servovLimitLow = 15;



int ldrlt = 0; // conexion a las resistencias LDR
int ldrrt = 1; 
int ldrld = 2; 
int ldrrd = 3; 

void setup()
{
  Serial.begin(9600);
  horizontal.attach(9); //servo horizontal pin digital 9
  vertical.attach(10); // servo vertical pin digital 10
  horizontal.write(180);
  vertical.write(45);
  delay(3000);
}

void loop() 
{
  int lt = analogRead(ldrlt); // top left (superior izquierdo)
  int rt = analogRead(ldrrt); // top right (superior derecho)
  int ld = analogRead(ldrld); // down left (inferior izquierdo)
  int rd = analogRead(ldrrd); // down rigt (inferior derecho)
  
  // int dtime = analogRead(4)/20; // Opcional si utilizamos potenciometros para la velocidad 
  // int tol = analogRead(5)/4;
  int dtime = 10;
  int tol = 50;
  
  int avt = (lt + rt) / 2; // valor superior maximo
  int avd = (ld + rd) / 2; // valor inferior maximo
  int avl = (lt + ld) / 2; // valor izquierdo maximo
  int avr = (rt + rd) / 2; // valor derecho maximo

  int dvert = avt - avd; // diferencia entre superior e inferior
  int dhoriz = avl - avr;// diferencia entre izquierdo y derecho
  
  
  Serial.print(avt);   // Imnprimir valores  de posicion en monitor serial
  Serial.print(" ");
  Serial.print(avd);
  Serial.print(" ");
  Serial.print(avl);
  Serial.print(" ");
  Serial.print(avr);
  Serial.print("   ");
  Serial.print(dtime);
  Serial.print("   ");
  Serial.print(tol);
  Serial.println(" ");
  
    
  if (-1*tol > dvert || dvert > tol) // revisar la diferencia para cambiar al angulo vertical
  {
  if (avt > avd)
  {
    servov = ++servov;
     if (servov > servovLimitHigh) 
     { 
      servov = servovLimitHigh;
     }
  }
  else if (avt < avd)
  {
    servov= --servov;
    if (servov < servovLimitLow)
  {
    servov = servovLimitLow;
  }
  }
  vertical.write(servov);
  }
  
  if (-1*tol > dhoriz || dhoriz > tol) // revisar la diferencia para cambiar al angulo horizontal
  {
  if (avl > avr)
  {
    servoh = --servoh;
    if (servoh < servohLimitLow)
    {
    servoh = servohLimitLow;
    }
  }
  else if (avl < avr)
  {
    servoh = ++servoh;
     if (servoh > servohLimitHigh)
     {
     servoh = servohLimitHigh;
     }
  }
  else if (avl = avr)
  {
    
  }
  horizontal.write(servoh);
  }
   delay(dtime);

}

 Esperamos que este proyecto sea util y gracias siempre por visitar nuestro blog.

Hasta la proxima !!




SHARE THIS

15 comentarios:

  1. como se llama el programa para pasarlo al arduino?

    ResponderEliminar
  2. Muchas Felicidades este es un gran proyecto, sera posible utilizarlo para
    mover panel solar de grandes dimensiones claro esta adaptandole servos de Potencia. Gracias.

    ResponderEliminar
  3. Muchas Felicidades este es un gran proyecto, sera posible utilizarlo para
    mover panel solar de grandes dimensiones claro esta adaptandole servos de Potencia. Gracias.

    ResponderEliminar
  4. Lo probare inmediatamente.. Gracias.

    ResponderEliminar
  5. Ya estoy terminando este proyecto, con una estructura diferente, me sirvió de mucho, GRACIAS!

    ResponderEliminar
  6. Con este proyecto gane en mi colegio la feria de la ciencia, fue el mejor!!! gracias!!!

    ResponderEliminar
  7. tengo problemas para cargar el programa en arduino , si pudieras explicar como realizar este proceso te lo agradecería muchisimo

    ResponderEliminar
  8. Excelente lo use para adaptarlo a un seguidor con otra estructura q yo mismo construí aquí pego el link
    https://drive.google.com/file/d/0B065Z2nzMl2NeFk4cTJWdGhDTmM/view

    ResponderEliminar
  9. Maravilhoso!! Fiz um igual, os servos se mexem bastante, mas não segue a luz. O que poderia ser?

    ResponderEliminar
  10. Gracias trabajo de hacer el programa y gracias por ofrecerlo a las personas que como yo, hemos llegado tarde a estas tecnologías y nos cuesta mucho desarrollar un diseño así.
    Saludos

    ResponderEliminar
  11. Me aparece un error en el programa alguien me puede ayudar? Porfavor

    ResponderEliminar
  12. Disculpen el código no compila, necesito ayuda por favor!!!!!!!!!!

    ResponderEliminar
  13. Muy buen proyecto tengo unas dudas
    primero es como se hago para el momento de soldar, digo las resistencias en el circuito estan a tierra y pues eso me preocupa un poco

    ResponderEliminar