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
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
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
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
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.
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.
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.