Calcular ubicacion del sol

Hola, estoy en un pequeño proyecto de un seguidor solar, por medio de un gps y un rtc, asi que me puse en campaña de ver si habia alguna libreria que calculara el azimut solar,probe varias pero ni ahi con los datos que me entregan las paginas web que lo calculan, ejemplo esta web Calculadora azimut solar. la verdad despues de probar varias no me da los datos correctos, y creo que yo estoy haciendo algo mal, este es el ultimo que probe.

//======================================================================================================================
// SolarCalculator Library for Arduino example sketch: SolarTrackingTimeLib.ino
//
// Monitor the Sun's position in the sky for any location on Earth.
//
// Tested with Arduino IDE 1.8.19 and Arduino Uno
//======================================================================================================================

#include <SolarCalculator.h>
#include <TimeLib.h>

// Location
double latitude = -31.3922;
double longitude = -58.0169;
int utc_offset = -3;

// Refresh interval, in seconds
int interval = 10;

void setup()
{
  Serial.begin(9600);

  // Set system time to compile time
  setTime(toUtc(compileTime()));

  // Set time manually (hr, min, sec, day, mo, yr)
   setTime(15, 5, 0, 30, 12, 2022);
}

void loop()
{
  static unsigned long next_millis = 0;

  // At every interval
  if (millis() > next_millis)
  {
    time_t utc = now();
    double az, el;

    // Calculate the solar position, in degrees
    calcHorizontalCoordinates(utc, latitude, longitude, az, el);

    // Print results
    Serial.print(F("Az: "));
    Serial.print(az);
    Serial.print(F("°  El: "));
    Serial.print(el);
    Serial.println(F("°"));

    next_millis = millis() + interval * 1000L;
  }
}

time_t toUtc(time_t local)
{
  return local - utc_offset * 3600L;
}

// Code from JChristensen/Timezone Clock example
time_t compileTime()
{
  const uint8_t COMPILE_TIME_DELAY = 8;
  const char *compDate = __DATE__, *compTime = __TIME__, *months = "JanFebMarAprMayJunJulAugSepOctNovDec";
  char chMon[4], *m;
  tmElements_t tm;

  strncpy(chMon, compDate, 3);
  chMon[3] = '\0';
  m = strstr(months, chMon);
  tm.Month = ((m - months) / 3 + 1);

  tm.Day = atoi(compDate + 4);
  tm.Year = atoi(compDate + 7) - 1970;
  tm.Hour = atoi(compTime);
  tm.Minute = atoi(compTime + 3);
  tm.Second = atoi(compTime + 6);
  time_t t = makeTime(tm);
  return t + COMPILE_TIME_DELAY;
}

comparo con esa web y otras y persiste el error, alguna sugerencia

de este usuario tome la libreria Libreria

Pregunta, que te da y que debe dar?

Solo puedo suponer que el tiempo de entrada utc es incorrecto.

Por favor compare los resultados con: NOAA Solar Calculator

hola surbyte y jpb10, primero gracias por responder y que tenga un feliz 2023,
en la pagina que uso de referencia me devuelve
|Zenith:|56.18°|con el mio que es 56° 15' es bastante exacto
| --- | --- |
|Acimut:|-275°|pero aca es el problema a mi me devuelve Az: 84.10°

esto es con los datos de hoy (que es mi cumpleaños, esto es auto bombo) 31/12/2022 10;27 -3

pero si le cambio a las 12:10 ya no es tan exato queda en 58° coontra los 76° que devuelve la calculadora

Una captura de pantalla

He calculado los datos en mi zona, usando arduino y he obtenido con el programa usando la funcion:

calcHorizontalCoordinates(2022, 12, 31, 15, 5, 0, latitude, longitude, a, e);

Y el resultado me da: 220.77 y 15.32.

Luego he comparado con la web de solartopo y no coincide.

Lo siguiente ha sido probar con la NOOA y el valor si coincide.

Quizás tenga mas que ver con la forma de calcular y el time zone que se use que con problema de la libreria en si

Gracias victor por probar yo probe con varias web esta es otra calculo azimut, hasta use mi querido y olvidado arduino due, que me dio ganas de comprar una Pantalla TFT SSD1963 y volver a usarlo, ya que con los esp32 lo abandone, FELIZ 2023

En esa web que has puesto ahora el calculo del azimuth me da lo mismo, aunque la elevación no es exacta aunque muy parecida 15.27 sobre 15.32.

Pero => 360 - 84.10 cuanto te da? 275,9

Feliz cumpleaños Adrián!!

Primero Gracias, surbyte, voy a ver ese calculo, capaz hay que modificar o agregar un calculo, y victorjam, si a las horas cerca de las 12 da bastante bien, pero si calculas sobre las 18 por ejemplo se defasa mucho

Para obtener el resultado correcto, debe descomentar la línea correspondiente y utilizar la hora universal (UTC):

  // Set system time to compile time
  //setTime(toUtc(compileTime()));

  // Set time manually (hr, min, sec, day, mo, yr)
  setTime(15, 12, 0, 30, 12, 2022);

En su captura de pantalla, 12:12 hora local (Argentina) es igual a 15:12 UTC.

SolarCalculator está diseñado para dar los mismos resultados que la calculadora solar NOAA.

Por principio, no me fiaría de los cálculos de www.solartopo.com; son de código cerrado.

Por ejemplo, utilizan incorrectamente el término "zenith" para referirse a la elevación (o altutide). Normalmente, el zenith es igual a 90° − elevación.

Otro detalle es que el azimut no está restringido a 0~360°. Estos descuidos me llevan a no confiar en el código subyacente.

Gracias por el dato, ni cuenta me di de esos errores

lo del // es error mio lo subi sin haberlas sacados, esta modificando y me olvide de sacarlas, ya que teias varias copias, perdon, y es correcto lo que comentas le que poner la hora en UTC, ahora funciona, gracias. Feliz 2023

Otros proyectos que he visto, nunca se usa el GPS, se usa sensores de luz como una buena LDR, según varía la luz, varía su resistencia y calcula valores entre su intensidad máxima para mover el motor y posicionarlo mejor.

Los seguidores solares, como este profesional.

También puede ser seguidor solar hecho con arduino.

Suele tener mejor precisión.

Saludos.

Feliz 2023 Metaconta, lo del gps es por la portabilidad, ya que mantendria siempre actualizado y exactitud y no depender del celular u otro elemento externo
porque no LDR, porque en pruebas con cielo nublado no me funciono, ya que no puede guiarse por la intensidad solar. y ahora esoy probando librerias que sean sencillas de implementar, ya que se me complica con el codigo de los motores paso a paso que me esta llevando mucho tiempo, a lo que le voy a tener que sumar el diseño de las partes para imprimirlo en la 3D.

No sabía el tema ese, de todas formas hay más sensores que traspasa las nubes y ve el Sol. Eso si, son caro de cojones.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.