| Estación meteorológica  Cómo montar una estación meteorológica
 Juan Antonio Villalpando
 -- Tutorial de montaje y configuración --  Volver al índice del tutorial   ____________________________ 9.- Formulario meteorológico. - Aquí presento varias fórmulas para obtener datos meteorológicos. - Las aplicaciones las he realizado con Autoit, atrévete a pasarlas a App inventor 2. - Los sensores de las estaciones meteorológicas suelen medir: Humedad exterior, Humedad interior, Temperatura exterior, Temperatura interior, Presión, Velocidad del viento, Cantidad de lluvia y Dirección del viento.  Los demás valores que observamos en las web de las estaciones meteorológicas, por ejemplo: sensación térmica, punto de rocío, índice de calor, fase lunar,... están obtenidas mediante expresiones matemáticas con los datos de los sensores indicados anteriormente. - Aquí he puesto alguno de ellos:  _________________________________________ - De Centígrados a Fahrenheit.  
 fahrenheit.exe  _________________________________________ - De Fahrenheit a Centígrados.  
 centigrados.exe  _________________________________________ - De mph a km/h. De millas por hora a kilómetros por hora.  
 - De km/h a mph. De kilómetros por hora a millas por hora.  
 mph.exe  _________________________________________ - De m/s a km/h. De metros por segundo a kilómetros por segundo.  
 - De km/h a m/s. De kilómetros por segundo a metros por segundo.  
 ms.exe  _________________________________________ - De mm a in. De milímetros a pulgadas (inches).  
 pulgadas.exe 
 _________________________________________ - De in a mm. De pulgadas (inches a milímetros). 
   milimetros.exe  _________________________________________ - Punto de rocío.  
 Pr = Punto de rocío. H = Humedad. T = Temperatura.  punto_de_rocio.exe  _________________________________________ - Humedad.  
 H = Humedad. Pr = Punto de rocío. T = Temperatura. humedad.exe  _________________________________________ - Altura de la base de las nubes.  
 T = Temperatura. Pr = Punto de rocío.   altura_de_las_nubes.exe  _________________________________________ - Sensación térmica.  
  Twc = Sensación térmica. T = Temperatura. V = Velocidad del viento en km/h.  sensacion_termica.exe  _________________________________________ - Índice de calor.  
 indice_de_calor.exe  _________________________________________ - Índice de humedad.  
 IH = Índice de humedad. T = Temperatura. Pr = Punto de rocío. indice_de_humedad.exe  _________________________________________ - Altura por relación de presiones.  
 a = Altura en metros. Po = Presión estática. Pref = Presión de referencia.   altura.exe  _________________________________________ - Cálculo de la fase lunar.  fase_lunar.exe  
   
                 
                   | Con autoit |  
                   | #include <ButtonConstants.au3>
 #include <EditConstants.au3>
 #include <GUIConstantsEx.au3>
 #include <StaticConstants.au3>
 #include <WindowsConstants.au3>
 #Region ### START Koda GUI section ### Form= $Form1_1 = GUICreate("Fase Lunar", 361, 271, 192, 124)
 $Label1 = GUICtrlCreateLabel("Día", 32, 40, 31, 24)
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Input1 = GUICtrlCreateInput("", 72, 32, 33, 28, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Label2 = GUICtrlCreateLabel("Mes", 128, 40, 37, 24)
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Input2 = GUICtrlCreateInput("", 176, 32, 33, 28, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Label3 = GUICtrlCreateLabel("Año", 232, 40, 36, 24)
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Input3 = GUICtrlCreateInput("", 280, 32, 49, 28, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Button1 = GUICtrlCreateButton("Pulsa para obtener la fase lunar", 80, 72, 201, 33)
 $Label4 = GUICtrlCreateLabel("Fase lunar:", 24, 128, 94, 24)
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Label5 = GUICtrlCreateLabel("", 128, 128, 172, 20)
 GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
 $Pic1 = GUICtrlCreatePic("C:\estacion_meteorologica\imagenes\fase_lunar.gif", 32, 176, 305, 57, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
 GUISetState(@SW_SHOW)
 #EndRegion ### END Koda GUI section ###
 
 While 1 $msg = GuiGetMsg()
 Select
 Case $msg = $GUI_EVENT_CLOSE
 ExitLoop
 ; Cuando pulsa el botón realiza el cálculo.
 Case $msg = $Button1
 
 $dia = GUICtrlRead($Input1)
 $mes = GUICtrlRead($Input2)
 $anno = GUICtrlRead($Input3)
 $c = 0 $e = 0
 $jd = 0
 $b = 0
 If ($mes < 3) Then $anno = $anno - 1
 $mes = $mes + 12
 EndIf
 $mes = $mes + 1 $c = 365.25 * $anno
 $e = 30.6 * $mes
 $jd = $c + $e + $dia - 694039.09 ; jd es el tiempo total transcurrido
 $jd = $jd / 29.5305882 ; divide por el ciclo lunar  $b = Int ($jd) $jd = $jd - $b
 $b = Round($jd * 8)
 If ($b >= 8 ) Then $b = 0 
 Switch $b
 Case 0
 $fase = "Luna nueva"
 Case 1
 $fase = "Poco creciente"
 Case 2
 $fase = "Cuarto creciente"
 Case 3
 $fase = "Muy creciente"
 Case 4
 $fase = "Luna llena"
 Case 5
 $fase = "Poco menguante"
 Case 6
 $fase = "Cuarto menguante"
 Case 7
 $fase = "Muy menguante"
 EndSwitch
 GUICtrlSetData($Label5, $b & "-" & $fase)  EndSelect WEnd
 Exit
 
 |  _________________________________________ - Cálculo de la salida y puesta de sol. Orto y Ocaso. ¿Te atreves con esto? Se trata de pasar un algoritmo que calcula la salida y la puesta del sol a un lenguaje de programación, en nuestro caso el AutoIt.  - El algoritmo lo encontramos en: http://williams.best.vwh.net/sunrise_sunset_algorithm.htm.
 - Los datos de entrada son el día, mes, año, longitud y latitud.
 
 - Los lenguajes de programación realizan las funciones seno, coseno, tangente, arcoseno, arcocoseno y arcotangente en radianes, y el algoritmo hace los cálculos en grados, por lo cual debemos hacer conversiones de grados a radianes y viceversa:
 - g = (r * 360) / (2 * PI) = 57.29578 * r
 - r = (g * 2 * PI) / 360 = 0.0174532 * g
 Notas palurdas:  
                 
                   | sin (angulogrados * r) cos (angulogrados * r)
 tan (angulogrados * r)
 | g * asin(valor) g * acos(valor)
 g * atan(valor)
 |  - floor es un redondeo al menor entero. floor(4.76) = 4          floor(-4.29) = -5  - Nota sabia: si hablas con un argentino, no le menciones el orto ;-)  ___________________________________________________
 
   |