Francenanorecif

Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

SUJET : Librairie éclairage progressif soleil/lune (v1.05)

Librairie éclairage progressif soleil/lune (v1.05) 01 Oct 2012 21:55 #351529

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
Update 12/10/2012 :
Ajout d'une feuille de calcul excel vous permettant de déterminer au mieux les 4 valeurs Durée Totale, durée Rampe, Zenith et Max.

Max et le max du PWM (255 en 8 bits, 1024 en 10 bits)
Zenith est l'heure à laquelle la rampe a la valeur max, le zenith quoi :) (en minutes depuis minuit)
Durée totale est la durée totale de la courbe (en minutes)
Durée rampe est la durée ascendante de la rampe (en minutes)

il suffit de modifier une des 4 valeurs et le recalcul du graphique est automatique. Il faut activer les macros dans excel ainsi que le recalcul automatique, qui doit y être par défaut.

La feuile de calcul Excel est ici




v1.00 - 12/07/2012 : version initiale

v1.01 - 11/10/2012 :
patch pour le bug en mode 10 bits. Si la valeur pour AnalogWrite est 255, l'arduino n'envoie rien (=0V). donc si la valeur est 255, on envoie 254
TODO : identifier le bug (probablement mauvais param des registres TCCxx)

v1.02 - 25/10/2012 :
correction de la fonction SetLuneMax

v1.03 - 04/11/2012 : compatibilité Atmega 168P/328P

v1.04 09/01/2013 : Possibilité d'appeler SetLuneMax avec une structure "time_t"
modifs dans le fichier exemple

v1.05 07/07/2013 : Ajout de la fonction SunOrRain, qui permet de déterminer s'il pleut, ou s'il fait beau
Correction par Gerdel de la fonction LisserRampeLed : En phase descendante, pas de lissage dans la même minute


Voilà après quelques échanges avec Billyboyk il y a déjà quelques temps sur son implémentation de l'éclairage avec simulation de lever/coucher de soleil ainsi que la lune, voici le tout réuni dans une librairie qui j'espère sera pratique. C'est une pré version va t-on dire, qui fonctionne sur mon bac depuis 2/3 mois, qui est plus du copier coller du programme d'origine mais qui fonctionne.

Je sais qu'il reste un bug en mode PWM 10 bits lorsque la valeur est de 255, il n'y a plus d'éclairage. Le mode 8 bits fonctionne parfaitement.

Pour l'installation il suffit de décompresser le zip ci dessous dans le répertoire libraries, relancer l'IDE Arduino. Ensuite il y a 2 programmes exemples dans le menu fichier/Exemples/Aqualight. Une version utilisant un module RTC (que je remets ci dessous sans les commentaires de l'exemple), un autre exemple avec simulation rapide du temps qui passe, histoire de voir ce que ça donne rapidement.
Il faudra également la librairie RTC.

Dans l'attente de vos retours, positifs ou négatifs, mais constructifs :)

Librairie Aqualight v1.05

Librairie RTC et Librairie Time
#include <Time.h>  
#include "AquaLight.h" // La librairie magique
#include <DS1307RTC.h>
#include <Wire.h>


// Numéro de broche PWM
#define LED_Blanc_PIN 2
#define LED_Lune_PIN 3

// on déclare l'objet principal
// Ici on transmet juste le n° de broche, le mode PWM 8 ou 10 bits (PWM8 ou PWM10)
// Ainsi que le type de rampe (classique ou moonlight)
AquaLight LED_Blanc(LED_Blanc_PIN,PWM8,DAYLIGHTMODE);
AquaLight LED_Lune(LED_Lune_PIN,PWM8,MOONMODE);

// La valeur PWM calculée (pour info ou affichage, le digitalWrite étant directement dans la librairie)
int PWM_Led_Blanc=0;
int PWM_Led_Lune=0;

int heures, minutes, secondes, jour, mois, annee;

time_t RTCTime;
tmElements_t RTCtm;

void setup()
{
  // Toujours garder une trace du reboot pour ceux qui ne seraient pas voulus !!
  Serial.begin(57600);
  Serial.println("Reboot!!");
  
  // Init circuit I2C
  Wire.begin();

  //Ordre des paramètres : DUREE_TOTALE, DURE_RAMPE, MAX, ZENITH,
  // Attention aux valeurs de MAX et ZENITH , les valeurs max sont 1024 en mode 10 bits et 255 en mode 8 bits !
  // Pour la lune pas de valeur Max à l'initialisation, on calcule après en fonction du jour de l'année.

  LED_Blanc.SetParams(750,240,240,945);
  LED_Lune.SetParams(720,180,0,950);

}


void loop()
{

SetTime();

PWM_Led_Blanc = LED_Blanc.LisserRampeLED(heures,minutes);    
LED_Lune.SetLuneMax(jour, mois, annee);
PWM_Led_Lune = LED_Lune.LisserRampeLED(heures, minutes);


delay(2000);

}

void SetTime()
{


 RTCTime=RTC.get();  // Format Unix TimeStamp
  
 breakTime(RTCTime,RTCtm); // Structure RTCtm avec propriétés Heures, minutes ... etc.

    heures     = RTCtm.Hour;   
    minutes    = RTCtm.Minute;    //Minutes
    secondes   = RTCtm.Second;    //Secondes
    jour       = RTCtm.Day;    //Jour
    mois       = RTCtm.Month;    //Mois
    annee      = RTCtm.Year;    //Annee   
    
 }

Dernière édition: 08 Jan 2014 21:00 par the_ccm.
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 11 Oct 2012 10:52 #353261

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2257
  • Remerciements reçus 58
Ah la voilà! Je l'avais pas vue la librairie, je vais donc essayer de l'intégrer car mon code commence à être lourd. J'avais pas vu que je n'avais pas donné la solution pour le 255 en 10 bits, je corrige donc tout de suite, ce code est à insérer dans la fonction LisserRampe juste avant l'analogwrtie:
if (_led.valeur_actuelle > 254.0 && _led.valeur_actuelle < 256.0) // Pour éviter le soucis à 255
    {
        _led.valeur_actuelle = 254.0;         
    }

Merci the_ccm!

Julien
Dernière édition: 11 Oct 2012 13:18 par billyboyk.
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 11 Oct 2012 13:19 #353283

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2257
  • Remerciements reçus 58
J'ai modifié mon message précédent avec les bons noms de variable ;)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 11 Oct 2012 13:39 #353289

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2257
  • Remerciements reçus 58
Par contre comment fait-on pour passer un paramètre une fois que l'objet est déclaré?

Depuis la dernière fois, j'ai rajouté une fonction "Soirée spéciale" qui permet de prolonger l'affichage si il y a du monde à la maison par exemple.

De même, maintenant j'ai fait des menus et je peux changer certains paramètres et les stocker dans l'EEprom, comme la valeur Max par exemple, je ne vois pas comment je peux utiliser ceci dans la librairie :(
Dernière édition: 11 Oct 2012 13:39 par billyboyk.
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 11 Oct 2012 20:33 #353374

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
billyboyk écrit:
J'ai modifié mon message précédent avec les bons noms de variable ;)

c'est inclus, j'ai même rajouté le test si on est en mode 10 bits uniquement
billyboyk écrit:
Par contre comment fait-on pour passer un paramètre une fois que l'objet est déclaré?

si tu regardes le code en première page, ou l'exemple depuis le menu de l'IDE, c'est fait dans le setup grace à la fonction SetParams :
 //Ordre des paramètres : DUREE_TOTALE, DURE_RAMPE, MAX, ZENITH
 LED_Blanc.SetParams(750,240,240,945);



du coup dans le setup du récupère les valeurs depuis ton EEPROM, tu n'as plus qu'à les transmettre à la fonction SetParams :)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 11 Oct 2012 20:53 #353383

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2257
  • Remerciements reçus 58
Ça Ok mais si je change après le setup?
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 11 Oct 2012 20:57 #353384

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
normalement aucun soucis tu peux appelet SetParams d'où tu veux, même dans le loop et autant de fois que tu veux...
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 12 Oct 2012 12:39 #353496

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
mise à jour du premier post avec la feuille de calcul excel pour déterminer les valeurs de la courbe :)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 12 Oct 2012 12:46 #353499

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2257
  • Remerciements reçus 58
the_ccm écrit:
normalement aucun soucis tu peux appelet SetParams d'où tu veux, même dans le loop et autant de fois que tu veux...

Parfait, je vais essayer cela :)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 23 Oct 2012 08:30 #355255

  • billyboyk
  • Portrait de billyboyk
  • Hors Ligne
  • Chargé de Rédaction
  • Messages : 2257
  • Remerciements reçus 58
Moi j'ai 6 lignes de LED, 3 blanches et 3 bleues, qui sont indépendantes ;)
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 23 Oct 2012 21:41 #355358

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
Nop 180 c'est la durée de la rampe :)

Pour la lune on passe zéro en valeur Max a l'init. (3è paramètre) et on le calcule ensuite le max en fonction du jour de l'année , avec la fonction setLuneMax un peu plus loin.
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Librairie éclairage progressif soleil et lune 24 Oct 2012 05:57 #355368

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
Ah Ben oui pas faux !
Je vais faire la correction.
L'administrateur a désactivé l'accès en écriture pour le public.
Modérateurs: unjall, tulottes
Temps de génération de la page : 0.233 secondes

Une bouteille à la mer

billyboyk - 17:19

20 kilos de PV avec du mou, ça tiendra 2 jours dans un bidon brassé/chauffé ;)

billyboyk - 08:22

:D Bonne année à tous !!! xD

habaqouq - 22:06

bonsoir comme insérer une image dans un post merci

delphizorglub - 18:08

Ouaou :p super

babe91800 - 12:18

Bonjour à tous :) petit come back après un moment d'absence

The shoutbox is unavailable to non-members