Transposition maths en php

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)));

je me répond que j’ai trouvé l’erreur

Sans l’indiquer …

1 « J'aime »

ah ben voilà, y a des gens intéressés !!! ??

$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_teta5 = (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_teta5;

ci dessus la correction, en fait mes deux dernières lignes de def des cos teta commençaient par $cos_teta4 alors que ca aurait du être $cos_teta4 puis $cos_teta5 et remplacer les dernier $cos_teta4 par $cos_teta5 dans la ligne définissant le $cos_teta.

dommage qu’il n’y ai pas les numéros de ligne dans cet affichage …

2 « J'aime »

Merci, j’essaierai ça ce week-end pour voir ce que ça peut donner chez moi car avec des panneaux orientés plutôt EST et je n’arrive déjà pas à trouver une courbe qui simule une production normale (sans aucun nuages).

J’espère qu’avec tout ces calculs ça pourra le faire.

Tu nous dira chez toi ce que ça donne :wink:

Edit : quoi qu’il n’y a pas de notion de production en Watt dans le calcul en fait (sauf si j’ai mal vu)

je n’en sais pas plus pour le moment mais azimut, etc marchent par rapport a d’autres sites …

il faut que tu regarde a l’heure ou le soleil est face a tes panneaux pour controler, je te laisse trouver l’azimut positif, ou négatif, hein !! lol

pour le reste, je crois que lattitude, longitude, orientation et inclinaison panneaux doit suffire

effectivement, pas de watts pour l’instant mais comme l’angle d’incidence y ai pour bcp, il fallait bien que je le trouve.

je continue mes recherches et je publierais dès que j’arrive a quelque chose de « viable » ou au moins bon a essayer mais j’apprend le langage en même temps donc je patine pas mal

Je lirais le document à tête reposé voir si je comprends de mon côté comment en tirer une valeur de production du coup.

Mais merci d’avoir déjà défriché le sujet :+1:

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.