[RESUELTO]Calcular el orto/ocaso del sol con Arduino.

Calcular el orto y el ocaso.

Hola chicos,

Estoy viendo como cálcular a que hora sale y se pone el sol. He buscado librerias para Arduino que lo hagan por no estar haciendo cálculos astronómicos y me encontré con estas tres:

Dusk2Dawn
TimeLord
Sunrise

Nota: Sunrise en una versión anterior a TimeLord.

No consigo con éxito que me den la hora de la salida/puesta del sol ni por asomo. Si se aproximán algo a la salida, se alejan de la puesta, etc…

He jugado con combinaciones de latitud/longitud y zona de tiempo y nada.

Para ello estoy usando las coordenadas de Cuenca (España) que son 40.06N y 2.13W y la siguiente tabla:

CUENCA                                     SALIDA Y PUESTA DE SOL PARA 2018             Observatorio Astronómico Nacional
Latitud y longitud: 40  4 40, - 2  7 49                                                   Instituto Geográfico Nacional
Año 2018                                Hora oficial en la península y Baleares           Ministerio de Fomento, España

Dia  Enero   Febrero    Marzo     Abril      Mayo     Junio     Julio     Agosto   Septiem.  Octubre   Noviemb.  Diciemb.
   Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas  Ort Ocas
   h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m
 1 831 1754  817 1827  742 1900  753 2033  709 2103  642 2131  643 2142  707 2123  736 2040  805 1951  737 1806  811 1744
 2 831 1755  816 1829  741 1901  751 2034  707 2104  641 2132  644 2141  707 2122  737 2039  806 1949  739 1805  812 1743
 3 831 1755  815 1830  739 1902  750 2035  706 2105  641 2133  644 2141  708 2120  738 2037  807 1948  740 1804  813 1743
 4 831 1756  814 1831  738 1903  748 2036  705 2106  640 2133  645 2141  709 2119  739 2036  808 1946  741 1803  814 1743
 5 831 1757  813 1832  736 1904  746 2037  704 2107  640 2134  645 2141  710 2118  740 2034  809 1945  742 1802  815 1743
 6 831 1758  812 1833  735 1906  745 2038  703 2108  640 2135  646 2141  711 2117  741 2032  810 1943  743 1801  816 1743
 7 831 1759  811 1835  733 1907  743 2039  702 2109  640 2135  646 2140  712 2116  742 2031  811 1941  744 1800  817 1743
 8 831 1800  810 1836  731 1908  742 2040  700 2110  639 2136  647 2140  713 2115  743 2029  812 1940  746 1759  818 1743
 9 830 1801  809 1837  730 1909  740 2041  659 2111  639 2136  648 2140  714 2113  744 2027  813 1938  747 1758  819 1743
10 830 1802  808 1838  728 1910  739 2042  658 2112  639 2137  648 2139  715 2112  745 2026  814 1937  748 1757  819 1743
11 830 1803  807 1839  727 1911  737 2043  657 2113  639 2138  649 2139  716 2111  745 2024  815 1935  749 1756  820 1743
12 830 1804  805 1841  725 1912  735 2044  656 2114  639 2138  650 2138  717 2110  746 2023  816 1934  750 1755  821 1743
13 829 1805  804 1842  724 1913  734 2045  655 2115  639 2138  650 2138  718 2108  747 2021  817 1932  751 1754  822 1743
14 829 1806  803 1843  722 1914  732 2046  654 2116  639 2139  651 2137  719 2107  748 2019  818 1931  752 1753  823 1744
15 829 1807  802 1844  720 1915  731 2047  653 2117  639 2139  652 2137  720 2106  749 2018  819 1929  754 1752  823 1744
16 828 1808  800 1845  719 1916  729 2048  652 2118  639 2140  653 2136  721 2104  750 2016  820 1928  755 1751  824 1744
17 828 1810  759 1846  717 1917  728 2049  651 2119  639 2140  654 2135  722 2103  751 2014  821 1926  756 1751  825 1745
18 827 1811  758 1848  716 1918  726 2050  651 2120  639 2140  654 2135  723 2101  752 2013  822 1925  757 1750  825 1745
19 827 1812  756 1849  714 1919  725 2051  650 2121  639 2141  655 2134  724 2100  753 2011  823 1923  758 1749  826 1745
20 826 1813  755 1850  712 1920  724 2052  649 2122  639 2141  656 2133  725 2059  754 2009  824 1922  759 1749  826 1746
21 826 1814  754 1851  711 1921  722 2053  648 2123  640 2141  657 2133  726 2057  755 2008  825 1920  800 1748  827 1746
22 825 1815  752 1852  709 1922  721 2054  647 2123  640 2141  658 2132  727 2056  756 2006  826 1919  802 1747  827 1747
23 825 1817  751 1853  707 1923  719 2055  647 2124  640 2141  658 2131  727 2054  757 2004  827 1918  803 1747  828 1747
24 824 1818  750 1855  706 1925  718 2056  646 2125  640 2142  659 2130  728 2053  758 2003  829 1916  804 1746  828 1748
25 823 1819  748 1856  804 2026  717 2057  645 2126  641 2142  700 2129  729 2051  759 2001  830 1915  805 1746  829 1748
26 822 1820  747 1857  803 2027  715 2058  645 2127  641 2142  701 2128  730 2050  800 1959  831 1914  806 1745  829 1749
27 822 1821  745 1858  801 2028  714 2059  644 2128  641 2142  702 2128  731 2048  801 1958  832 1912  807 1745  829 1750
28 821 1822  744 1859  759 2029  713 2100  644 2128  642 2142  703 2127  732 2047  802 1956  733 1811  808 1745  830 1750
29 820 1824            758 2030  711 2101  643 2129  642 2142  704 2126  733 2045  803 1954  734 1810  809 1744  830 1751
30 819 1825            756 2031  710 2102  643 2130  643 2142  705 2125  734 2043  804 1953  735 1809  810 1744  830 1752
31 818 1826            754 2032            642 2131            706 2124  735 2042            736 1807            830 1753
   h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m  h m

Se ha considerado el horario adelantado desde el último domingo de marzo al último domingo de octubre. Las coordenadas
vienen dadas en grados, minutos y segundos, siendo la longitud positiva al Este y negativa al Oeste del meridiano cero.

Por ejemplo, para el dia 27 de Noviembre y usando Sunrise con el siguiente código:

#include <Sunrise.h>

// create a Sunrise object
char s[64];
Sunrise Cuenca(40.06,-2.13,1);//Lisbon, Portugal, Europe - Latitude/Longitude and Timezone   38.79/-9.12, 0

void setup(){
  Serial.begin(9600);
  Cuenca.Astronomical(); //Actual, Civil, Nautical, Astronomical
  byte h,m;
  int t;
  t = Cuenca.Rise(9,28);
  if ( t>=0 ) {
    h = Cuenca.Hour();
    m = Cuenca.Minute();
    sprintf(s,"Salida: %02d:%02d", h, m);
    Serial.println(s);
  }
  t = Cuenca.Set(9,28);
  if ( t>=0 ) {
    h = Cuenca.Hour();
    m = Cuenca.Minute();
    sprintf(s,"Puesta: %02d:%02d", h, m);
    Serial.println(s);
  }
}

void loop(){
}

Obtengo de hora de salida las 5:28 y la de puesta a las 20:29.

¿Alguien ha utilizado estas librerias y ha obtenido algún resultado satisfactorio?

Podria hacer una tabla con los valores que he puesto, pero consumiría mucha memoria, además del hecho de tener que reprogramar al menos una vez al año con la nueva tabla…

Este tema fue consultado por alguien y no recuerdo si respondí con una página que lo resolvía, claro que no comprobé su precisión.
Porque te lo comento, porque una alternativa sujeta a cambios del web designer es que leas los datos de un sitio dedicado a tal efecto y recibas su respuesta en tu arduino/ESP.

Bien, ahora la pregunta clave: para poder seguirte necesitamos una fecha digamos hoy 27/11/18 y datos reales de salida/puesta del sol para comparar con los que genera la librería.

Tenemos Cuenca (España) que son 40.06N y 2.13W
salida las 5:28 y la de puesta a las 20:29.

y los reales que puedes dar son

salida :
puesta aun no lo tienes pero seguro lo sabes

He descargado Dusk2Dawn del sitio que tu dices.
Busqué los datos de mi zona (-3) las coordenadas, puse todo en el código y lo he comparado con esta página meteored.com.ar

Que me dice que el sol salio a las 05:37 y se pondrá a las 20:57
y el programa ha calculado esto

338 minutos desde la salida del sol
1258 minutos para la puesta del sol
05:37 salida del sol
20:58 puesta del sol
13:18 y esto no es si es la luna Solar, bueno no importa.

O sea lo ha hecho bien.

Te dejo que datos use

#include <Dusk2Dawn.h>


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

  Dusk2Dawn comodoroRivadavia(-45.866667, -67.5, -3);


  /*  Available methods are sunrise() and sunset(). Arguments are year, month,
   *  day, and if Daylight Saving Time is in effect.
   */
  int crvSunrise  = comodoroRivadavia.sunrise(2018, 11, 27, false);
  int crvSunset   = comodoroRivadavia.sunset( 2018, 11, 27, false);



  /*  Time is returned in minutes elapsed since midnight. If no sunrises or
   *  sunsets are expected, a "-1" is returned.
   */
  Serial.println(crvSunrise);  // 418
  Serial.println(crvSunset);   // 1004
  

  /*  A static method converts the returned time to a 24-hour clock format.
   *  Arguments are a character array and time in minutes.
   */
  char time[6];
  Dusk2Dawn::min2str(time, crvSunrise);
  Serial.println(time); // 06:58


 /*  Alternatively, the array could be initialized with a dummy. This may be
  *  easier to remember.
  */
  char time2[] = "00:00";
  Dusk2Dawn::min2str(time2, crvSunset);
  Serial.println(time2); // 16:53
}


void loop() {
}

Revisa que estos datos 40.06N y 2.13W deben expresarse en formato decimal
Que son 40.071667, -2.135, 1

Lo he hecho y me ha dado

08:07 salida del sol
17:45 puesta del sol

Aca los resultados no son tan buenos, meteored dice:

Salida Sol
08:15 +8 min
Puesta Sol
18:02 +17min

Muchas gracias, Surbyte.

No sé porque no me funcionaba antes. No tenia el Arduino a mano y estaba haciendo una simulación con proteus… no creo que fuera eso.

Ahora si funciona. Creo que tenía un lío con las coordenadas y por eso fallaba. Ahora las he copiado directamente de Google Maps y funciona. Un error de un minuto mas o menos, probado en varios dias, teniendo en cuenta el “cambio de hora”, cambiando el time zone para invierno/verano.

Muchas gracias de nuevo.

X nada.. seguramente tus coordenadas estaban mejor que las mias pero para mi ciudad fue bastante preciso y me alegro que para ti sucediera lo mismo.