bonsoir,
je tente de calculer l’incidence du soleil sur mes panneaux plein sud et inclinés a 30° par la méthode décrite dans le lien
mon premier contrôle a été simple (trop ?) :
mes panneaux sont plein sud, donc a 12h50 (environ 12h00 au soleil), j’ai regardé ce que me donnait mon code :
hauteur soleil : 21° (confirmé par héliotrope)
azimut : 0° (zénith donc ok)
angle Téta (angle du soleil/normale au panneaux) : 64°
la normale au panneau est une perpendiculaire au panneau
j’ai volontairement regardé a cette heure ci pour éliminer une dimension. Mes panneaux sont plein sud donc je devrait pouvoir dire :
si px horizontal : le soleil tape a 90-21=69° de la normale aux panneaux
puis lorsque j’incline mes panneaux de 30°, je me retrouve a 69-30=39° de la normale aux panneaux.
je dis une grosse connerie ? mon code ne me donne pas du tout ca (voir ci dessous, il est règle sur le zénith de ce midi)
est ce mon raisonnement ou la transformation des équations données ci dessus qui est fausse ? ou les deux ?
Merci de votre aide, je suis perdu !!
le code contient pas mal d’affichage dans le log pour visualiser les valeurs et en vérifier le maximum. Pour moi, seul l’angle Téta serait faux mais pkoi…
// données prises sur https://perso.limsi.fr/bourdin/master/Calculs_astronomiques_simples.pdf
$latitude = 47.077363;
$longitude = 4.553420;
//$timestamp=strtotime("now");
$timestamp=mktime(12,50,00,01,11,2022);
$scenario->setlog('timestamp : '.$timestamp);
$heure_en_cours = getdate($timestamp);
$scenario->setlog($heure_en_cours[hours].' heure '.$heure_en_cours[minutes].' minutes : '.$heure_en_cours[seconds].' secondes : ');
$scenario->setlog($heure_en_cours[mday].'/'.$heure_en_cours[mon].'/'.$heure_en_cours[year]);
//equation du temps
$n=date("z")+1;
$scenario->setlog($n);
$beta=(2*pi()*($n-81))/365;
$scenario->setlog($beta);
$Ecl=(7.53*cos($beta))+(1.5*sin($beta)-(9.87*sin(2*$beta)));
$scenario->setlog('equation du temps : '.$Ecl);
//TSV heure vraie
$ete_hiver = 1;// il faut détecter si on est en heure hiver ou été
$deltaHg = $longitude * 4;
$tsv=$heure_en_cours[hours]+(($heure_en_cours[minutes])/60)-$ete_hiver+(($deltaHg-$Ecl)/60);
$scenario->setlog('heure vraie : '.$tsv);
//déclinaison en degré
$declinaison = 23.45*sin((2*pi()*($n+284))/365);
$scenario->setlog('déclinaison : '.$declinaison);
//angle horaire en degré
$angle_horaire_degre = 15*(12-$tsv);
// angle horaire en radians
$angle_horaire_radian = pi() * (1-($tsv/12));
$scenario->setlog('angle horaire en degrés : '.$angle_horaire_degre);
$scenario->setlog('angle horaire en radians : '.$angle_horaire_radian);
//angle incidence sur panneau
$inclinaison_px = 30;
$azimut_px = 0;
$cos_teta1 = (sin(deg2rad($declinaison)))*(sin(deg2rad($latitude)))*(cos(deg2rad($inclinaison_px)));
$cos_teta2 = (sin(deg2rad($declinaison)))*(cos(deg2rad($latitude)))*(sin(deg2rad($inclinaison_px)))*(cos(deg2rad($azimut_px)));
$cos_teta3 = (cos(deg2rad($declinaison)))*(cos(deg2rad($latitude)))*(cos(deg2rad($inclinaison_px)))*(cos(deg2rad($angle_horaire_degre)));
$cos_teta4 = (cos(deg2rad($declinaison)))*(sin(deg2rad($latitude)))*(sin(deg2rad($inclinaison_px)))*(cos(deg2rad($azimut_px)))*(cos(deg2rad($angle_horaire_degre)));
$cos_teta4 = (cos(deg2rad($declinaison)))*(sin(deg2rad($inclinaison_px)))*(sin(deg2rad($azimut_px)))*(sin(deg2rad($angle_horaire_degre)));
$scenario->setlog('Cos Teta1 : '.$cos_teta1);
$scenario->setlog('Cos Teta2 : '.$cos_teta2);
$scenario->setlog('Cos Teta3 : '.$cos_teta3);
$scenario->setlog('Cos Teta4 : '.$cos_teta4);
$cos_teta = $cos_teta1 - $cos_teta2 + $cos_teta3 + $cos_teta4 + $cos_teta4;
$scenario->setlog('Cos Teta : '.$cos_teta);
$scenario->setlog('Teta : '.rad2deg(acos($cos_teta)));
//
//[Solaire][Teta][teta]
$cmdId_teta_a_alimenter = cmd::byString("#[Solaire][Teta][teta]#")->getId();
$cmd = cmd::byId($cmdId_teta_a_alimenter);
$cmd->addHistoryValue(rad2deg(acos($cos_teta))) ;
//[Solaire][Teta][100teta]
$cmdId_100teta_a_alimenter = cmd::byString("#[Solaire][Teta][100teta]#")->getId();
$cmd = cmd::byId($cmdId_100teta_a_alimenter);
$cmd->addHistoryValue(20*(rad2deg(acos($cos_teta)))) ;
// hauteur et azimut
$hauteur_sin = ((sin(deg2rad($declinaison)))*(sin(deg2rad($latitude))))+((cos(deg2rad($declinaison)))*(cos(deg2rad($latitude)))*(cos(deg2rad($angle_horaire_degre))));
$hauteur_calc = rad2deg(asin($hauteur_sin));//sin(h) = sin(δ )⋅sin(λ)+ cos(δ )⋅ cos(λ)⋅ cos(ω)
$scenario->setlog('hauteur : '.$hauteur_calc);
$azimut_sin = ((cos(deg2rad($declinaison)))*(sin(deg2rad($angle_horaire_degre))))/(cos(deg2rad($hauteur_calc)));
$scenario->setlog('azimut : '.rad2deg(asin($azimut_sin)));