
course du soleil
#22
Posté 29 novembre 2019 - 03:57
BONJOUR
merci pour la réponse pour rattraper épaisseur du drawXBMP widht 16 ,height 16,
j'ai déduit la moitié de 16 = 8 et je l'ai déduit de x1et de y1 et le bitmap et pile en face du drawLine
je vous joint quelques photos .
merci beaucoup pour votre aide le sujet et fini et je remerci [attachment=10913:IMG_1631.JPG][attachment=10914:IMG_1635.JPG][attachment=10915:IMG_1638.JPG] tous les membres du forum .
à très bientôt ,bonne soirée.
#23
Posté 01 décembre 2019 - 05:25
Bonsoir les membres du forum
j'aimerai maintenant commander une pwm en incrémentation et décrémentation en sachant que le soleil ce lève sous l'angle 0°et se couche sous l'angle 180°
si joins photo de la course du soleil .
si vous avez une idée comment je pourrais faire je suis preneur .
merci à vous tous et bonne semaine et bonne soirée .[attachment=10928:640px-Momentsdelajournee.svg.png][attachment=10929:Aube-aurore-crépuscule.jpg]
#24
Posté 01 décembre 2019 - 06:45
Bonsoir,
est-ce que tu pourrais expliquer un peu mieux ce que tu veux faire?
A quoi sert ton PWM (commander un moteur, ajuster la luminosité d'une LED, ...)?
Et quand est-ce que tu veux incrémenter/décrémenter ton PWM?
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#25
Posté 02 décembre 2019 - 02:01
heureMidi = (heureLeve + HeureCouche)/2; if(heure < heureMidi ) pwm = map ( heure, heureLeve- margeAube, HeureMidi, 0, 255); else pwm = map ( heure, heureMidi, HeureCouche + margeCrepuscule, 255, 0);
Tu veux une idée de code comme celle là ci dessus?
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#26
Posté 02 décembre 2019 - 08:22
Bonjour à tous les membres du forum ,
désolé de n'avoir pas étais assez précis dans ma demande .
j'aimerai incrémenter une rampe de leds peut-être en utilisant l'angle qui augmente mais comme sur le dessin que j'ai trouvé sur internet .
il y a l'aube , l'aurore , le levée du soleil calculer avec sunrise et sunset et ensuite la baisse du soleil jusqu'au crépuscule et enfin la nuit .
et je répond aussi à administrateur (marge aube et marge crépuscule ) c'est exprimer en minutes ?
merci d'avance .
Bonne journée .
#27
Posté 02 décembre 2019 - 08:49
les marges sont à exprimer dans les même unités que les heureLeve et heureCouche.
PS : Dans le bout de code que je fournis, margeAube engloble le temps pour l'aube + l'aurore .
En utilisant la formule donnée pour les allumer des leds tu auras tes leds qui commencent à s'allumer à l'aube, qui seront allumées au maximum à midi, et qui s'éteindront complètement à la fin du crépuscule... Par contre ça fait deux pentes affines ... peut être qu'une formule en trapèze ou bien un sinus serait potentiement plus intéressant pour ce genre de fonctionnalité...
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#28
Posté 02 décembre 2019 - 11:48
Par contre ça fait deux pentes affines ... peut être qu'une formule en trapèze ou bien un sinus serait potentiement plus intéressant pour ce genre de fonctionnalité...
Pour des LED, pas la peine de t'embêter à essayer d'avoir quelque chose de plus "régulier" (ie sans trop grosse rupture de pente), car de toute façon, l'oeil ne perçoit pas du tout de manière linéaire les changements de PWM. Si on veut "arranger" une luminosité de LED pour être plus "linéaire" à l'oeil, il faut plutôt augmenter la pente à mesure qu'on se rapproche d'une forte valeur de PWM (on perçoit bien plus la différence entre PWM=1 et PWM=2 qu'entre PWM=250 et PWM=255)
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#29
Posté 02 décembre 2019 - 05:11
Rebonjour,
désolé mais formule en trapèze ou bien en sinus , je ne connais pas débutant en programmation Arduino.
si quelqu'un pourrais m'expliquer avec un exemple , d'avance merci .
Bonne soirée à tous .
#30
Posté 02 décembre 2019 - 07:34
Rebonjour,
désolé mais formule en trapèze ou bien en sinus , je ne connais pas débutant en programmation Arduino.
si quelqu'un pourrais m'expliquer avec un exemple , d'avance merci .
Bonne soirée à tous .
La conclusion est de ne pas s'embêter avec ça du moins pour le moment.
Déjà faire le code qui marche avec la formule que j'ai donné ça serait bien. =)
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#31
Posté 04 décembre 2019 - 03:29
Bonjour à tous les membres du forum,
voila le code du staff J'ai fait quelques modifications
je le teste en ce moment je reviens vers vous pour vous dire ce qu'il se passe .
d'avance merci de votre aide bonne soirée.
int pwm2 ;// pwm Sun int margeAube,margeCrepuscule; int heureMidi; void draw(void) { DateTime now = RTC.now(); //Timelord initialisation myLord.TimeZone(TIMEZONE * 60); myLord.Position(LATITUDE, LONGITUDE); sunTime[3] = now.day(); // Give Timelord the current date sunTime[4] = now.month(); sunTime[5] = now.year(); myLord.SunRise(sunTime); // Computes Sun Rise. Sunrise = sunTime[2] * 60 + sunTime[1]; // Sunrise returned in minutes past midnight SunriseHour = sunTime[2]; SunriseMin = sunTime [1]; sunTime[3] = now.day(); // Uses the Time library to give Timelord the current date sunTime[4] = now.month(); sunTime[5] = now.year(); myLord.SunSet(sunTime); // Computes Sun Set. Sunset = sunTime[2] * 60 + sunTime[1]; // Sunset returned in minutes past midnight SunsetHour = sunTime[2]; SunsetMin = sunTime [1]; TimeMins = (now.hour() * 60) + now.minute(); uint16_t time = now.hour() * 60 + now.minute(); uint16_t angle = map(time, Sunrise, Sunset, 0, 180);// Angle margeAube =(Sunset - Sunrise)/180*6;//calcul de la durer de uint16_t angle multiplier par 6° angle Aube Civil heureMidi = (Sunrise + Sunset)/2; margeCrepuscule =(Sunset - Sunrise)/180*6; //calcul de la durer de uint16_t angle multiplier par 6° angle Crepuscule Civil if(time < heureMidi ) pwm2 = map ( time, Sunrise - margeAube, heureMidi, 0, 255); else pwm2 = map ( time, heureMidi, Sunset + margeCrepuscule, 255, 0); analogWrite(9,pwm2); /*evite de depasser l'angle*/ if(angle < 0) angle = 0; else if(angle > 180) angle = 180; /* evite de depasser la valeur*/ if (pwm2<0) pwm2 = 0 ; else if (pwm2> 255) pwm2 = 255; } void setup(void) { pinMode (9,OUTPUT); // pwm led horticole analogWrite(pwm2,0);//pwm led horticole } void loop(void) { // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // rebuild the picture after some delay delay(100);
#32
Posté 04 décembre 2019 - 06:09
rebonsoir ,
le code ne fonctionne pas pwm et à zero et la led est allumée
si quelqu'un peu m'aider merci d'avance .
#33
Posté 04 décembre 2019 - 07:31
tu utilises mal la fonction analogWrite :
le premier argument est le numéro de pin, le deuxième la valeur.
Hors, tu écris :
analogWrite(pwm2,0);//pwm led horticole
Donc pwm2 devrait être remplacé par 9 (le pin que tu as choisi d'utiliser)
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#34
Posté 05 décembre 2019 - 09:44
bonjour
merci pour avoir trouver une erreur dans mon code .
voila j'ai changer et je teste et je reviens vers vous pour vous dire si cela règle mon problème .
int pwm2 ;// pwm Sun int margeAube,margeCrepuscule; int heureMidi void draw(void) { DateTime now = RTC.now(); //Timelord initialisation myLord.TimeZone(TIMEZONE * 60); myLord.Position(LATITUDE, LONGITUDE); sunTime[3] = now.day(); // Give Timelord the current date sunTime[4] = now.month(); sunTime[5] = now.year(); myLord.SunRise(sunTime); // Computes Sun Rise. Sunrise = sunTime[2] * 60 + sunTime[1]; // Sunrise returned in minutes past midnight SunriseHour = sunTime[2]; SunriseMin = sunTime [1]; sunTime[3] = now.day(); // Uses the Time library to give Timelord the current date sunTime[4] = now.month(); sunTime[5] = now.year(); myLord.SunSet(sunTime); // Computes Sun Set. Sunset = sunTime[2] * 60 + sunTime[1]; // Sunset returned in minutes past midnight SunsetHour = sunTime[2]; SunsetMin = sunTime [1]; TimeMins = (now.hour() * 60) + now.minute(); uint16_t time = now.hour() * 60 + now.minute(); uint16_t angle = map(time, Sunrise, Sunset, 0, 180);// Angle margeAube =(Sunset - Sunrise)/180*6;//calcul de la durer de uint16_t angle multiplier par 6° angle Aube Civil heureMidi = (Sunrise + Sunset)/2; margeCrepuscule =(Sunset - Sunrise)/180*6; //calcul de la durer de uint16_t angle multiplier par 6° angle Crepuscule Civil if(time < heureMidi ) pwm2 = map ( time, Sunrise - margeAube, heureMidi, 0, 255); else pwm2 = map ( time, heureMidi, Sunset + margeCrepuscule, 255, 0); analogWrite(9,pwm2); /*evite de depasser l'angle*/ if(angle < 0) angle = 0; else if(angle > 180) angle = 180; /* evite de depasser la valeur*/ if (pwm2<0) pwm2 = 0 ; else if (pwm2> 255) pwm2 = 255; } void setup(void) { pinMode (9,OUTPUT); // pwm led horticole analogWrite(9,0);//pwm led horticole } void loop(void) { // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // rebuild the picture after some delay delay(100);
#35
Posté 05 décembre 2019 - 05:36
Bonsoir , je viens vous donnez des nouvelles du programme .
hier j'avais un soucis avec la pwm .
j'ai changer le code sur les conseils de Sandro et j'ai suivi toute la journée la progression de la pwm à 7h 33 jusqu’à midi et décrémentation jusqu’à 0 à 17h 12 et après la led c'est rallumée à fond ????? alors que pwm = 0
si quelqu'un à une idèe , je suis preneur .
bonne soirée à tous .
[attachment=10937:IMG_1643.JPG]
comme vous pouvez le constater à 90 ° ZENITH soleil pwm 255
[attachment=10938:IMG_1644.JPG]
et passer 90° decrementation de pwm 252
#36
Posté 05 décembre 2019 - 08:25
Sauf erreur de ma part, la fonction map te renvois un nombre négatif quand tu dépasse le crépuscule.
Hors, ton test pour voir si pwm est négatif est fait APRÈS d'avoir utilisé analogWrite.
Hors, analogWrite suppose qu'on lui donne un PWM entre 0 et 255.
Si on regarde le code source de analogWrite (https://github.com/a...wiring_analog.c), on y trouve une ligne de type "ORCxx=val;" où val est la valeur du PWM.
Hors, l'Atmega étant un processeur 8 bits, ORCxx est très probablement un registre 8 bits.
Quand on essaye d'écrire un entier 16 bits dans un entier 8 bits, on garde les 8 bits de poids faible et on jette le reste. Si PWM est entre 0 et 255, on ne jette que des 0, donc ça change rien. Par contre, si PWM=-1, alors sur 16 bits, en binaire, ça s'écrit 1111 1111 1111 1111 (écriture en complément à 2). Si tu mets ça dans ORCxx, qui fait 8 bits, tu ne garde donc que les 8 bits de droite, soit ORCxx=1111 1111. Comme ORCxx est interprété comme entier 8 bits non signé, tu as donc ORCxx=255 : c'est donc normal que tu obtienne une LED allumée au max (probablement à 22h elle brillerait un peu moins fort)
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#37
Posté 09 décembre 2019 - 08:05
bonjour à tous
j'ai changer de pin pour la pwm pour travailler en 8 bits .
tout ce passe bien au démarrage incrémentation jusqu’à midi et décrémentation au delà de midi .
le soucis c'est quand elle s'éteint , elle se rallume malgrés que la pwm est arrivé à 0 .
j'ai modifier le code ce qui solutionne le non rallumage après la décrémentation jusuq'a 0 mais ce matin la led étais allumèe à 255 avant la margeAube donc mon problème n'est pas résolu si quelqu'un aurais une idèe est une solution .
Bonne journée à tous .
byte pwm2 ;// pwm Sun void draw(void) { DateTime now = RTC.now(); //Timelord initialisation myLord.TimeZone(TIMEZONE * 60); myLord.Position(LATITUDE, LONGITUDE); sunTime[3] = now.day(); // Give Timelord the current date sunTime[4] = now.month(); sunTime[5] = now.year(); myLord.SunRise(sunTime); // Computes Sun Rise. Sunrise = sunTime[2] * 60 + sunTime[1]; // Sunrise returned in minutes past midnight SunriseHour = sunTime[2]; SunriseMin = sunTime [1]; sunTime[3] = now.day(); // Uses the Time library to give Timelord the current date sunTime[4] = now.month(); sunTime[5] = now.year(); myLord.SunSet(sunTime); // Computes Sun Set. Sunset = sunTime[2] * 60 + sunTime[1]; // Sunset returned in minutes past midnight SunsetHour = sunTime[2]; SunsetMin = sunTime [1]; TimeMins = (now.hour() * 60) + now.minute(); uint16_t time = now.hour() * 60 + now.minute(); uint16_t angle = map(time, Sunrise, Sunset, 0, 180);// Angle /*evite de depasser l'angle*/ if(angle < 0) angle = 0; else if(angle > 180) angle = 180; margeAube =(Sunset - Sunrise)/180*6;//calcul de la durer de uint16_t angle multiplier par 6° angle Aube Civil heureMidi = (Sunrise + Sunset)/2; margeCrepuscule =(Sunset - Sunrise)/180*6; //calcul de la durer de uint16_t angle multiplier par 6° angle Crepuscule Civil if(TimeMins < heureMidi ){ pwm2 = map ( time, Sunrise - margeAube, heureMidi, 0, 255); analogWrite(5,pwm2);// PIN 5 timer 8 bits } else { if(pwm2>0) pwm2 = map ( time, heureMidi, Sunset + margeCrepuscule, 255, 0); analogWrite(5,pwm2);// PIN 5 timer 8 bits }
#38
Posté 09 décembre 2019 - 12:44
Tu as le même problème avant l'aube que ce que tu avais après le crépuscule : la fonction map ne fait rien d'autre que d'interpoler avec une droite, y compris si tu es entre les deux extrémités : du coup, si la droite est croissante et que ton heure est avant l'aube, le pwm est donc plus petit que celui de l'aube (pwm=0), donc négatif.
Je te suggèrerais le code suivant :
if(TimeMins < heureMidi ){ pwm2 = map ( time, Sunrise - margeAube, heureMidi, 0, 255); } else { pwm2 = map ( time, heureMidi, Sunset + margeCrepuscule, 255, 0); } if(pwm2<0) { pwm2=0; } analogWrite(5,pwm2);// PIN 5 timer 8 bits
Alternativement, tu peux utiliser la fonction constrain :
if(TimeMins < heureMidi ){ pwm2 = map ( time, Sunrise - margeAube, heureMidi, 0, 255); } else { pwm2 = map ( time, heureMidi, Sunset + margeCrepuscule, 255, 0); } pwm2=constrain(pwm2,0,255); analogWrite(5,pwm2);// PIN 5 timer 8 bits
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#39
Posté 09 décembre 2019 - 02:10
rebonjour,
merci SANDRO pour ton aide .
j'ai utilisé le deuxième code ,je te dis ce qui se passe après le test .
encore merci pour ce forum .
bonne journée.
#40
Posté 10 décembre 2019 - 09:45
Bonjour Sandro
voila j'ai essayer la deuxieme solution mais ça ne fonctionne pas.
à chaque fois que la pwm2 arrive à 0 elle recommence depuis le début 255 juqu'a 0 et rebelote et ça jusqu'a l'aube .
je teste aujourd'hui la première solution .
bonne journée.
1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users