Aller au contenu


Photo
- - - - -

course du soleil


  • Veuillez vous connecter pour répondre
207 réponses à ce sujet

#21 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 28 novembre 2019 - 07:08

On dirait qu'il faut décaler ton bitmap. Le point 0,0 doit être en haut à gauche. Si tu enlève la moitié de la largeur sur x et la moitié de la hauteur sur y, le bitmap devrait de trouver center sur le haut de ton segment.

Podcast Made By Humans

Je cherche des volontaires de tous niveaux pour nos petites conversations entre hobbyistes.

Accès aux salles secrètes

 


#22 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 679 messages
  • Gender:Male

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?



#25 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 886 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

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  !  :thank_you:

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 ! 

 

Les réalisations de Mike118  

 

 

 


#26 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 886 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

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  !  :thank_you:

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 ! 

 

Les réalisations de Mike118  

 

 

 


#28 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 679 messages
  • Gender:Male

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)



#29 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 886 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

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  !  :thank_you:

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 ! 

 

Les réalisations de Mike118  

 

 

 


#31 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 679 messages
  • Gender:Male

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)



#34 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 679 messages
  • Gender:Male

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)



#37 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 679 messages
  • Gender:Male

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


#39 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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 michel

michel

    Habitué

  • Membres
  • PipPip
  • 171 messages
  • Gender:Male
  • Location:nice

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.






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users