Bonjour à tous,
Pour commencer je tien à préciser que je ne connait rien à l'électronique et que mes connaissances en programmations sont très limitées.
Du coup après avoir réaliser un "truc qui marche" sur ma platine d'essai je viens chercher des commentaires/critiques avant de souder tout ça sur une strip-board.
Le projet est assez simple : il s'agit de contrôler l'éclaire de deux aquariums éclairer par des rubans à LEDs de deux couleurs différente (blanc chaud et blanc froid) en simulant (de manière simplifié) un lever et un coucher de soleil.
L'allumage et l'extinction se faisant à heures fixes chaque jour.
Voici le code que je compte utiliser (commenter en anglais au cas où...) :
/*
Fade cycle on 2 minutes for testingpurpose (instead of 24 hours)
*/
//Librairies :
#include <Wire.h>
#include "RTClib.h"
//Variables :
RTC_DS1307 rtc;
int ledWarmWhite = 9; // the pin that the warm white LEDs are attached to
int ledCoolWhite = 10; // the pin that the cool white LEDs are attached to
//Fonctions to be called in loop :
void fadeIn(int pinWarm, int pinCool){
/* //For debbuging purpose
Serial.println("Start fade in");
*/
int brightnessWarm=0;
int brightnessCool=0;
while(brightnessWarm<150){
brightnessWarm++;
analogWrite(pinWarm, brightnessWarm);
delay(10546);
/* //For debbuging purpose
Serial.print("Warm : ");
Serial.println(brightnessWarm);
Serial.print("Cool : ");
Serial.println(brightnessCool);
*/
}
while(brightnessWarm<255){
brightnessWarm++;
brightnessCool++;
analogWrite(pinWarm, brightnessWarm);
analogWrite(pinCool, brightnessCool);
delay(10546);
/* //For debbuging purpose
Serial.print("Warm : ");
Serial.println(brightnessWarm);
Serial.print("Cool : ");
Serial.println(brightnessCool);
*/
}
while(brightnessCool<255){
brightnessCool++;
analogWrite(pinCool, brightnessCool);
delay(10546);
/* //For debbuging purpose
Serial.print("Warm : ");
Serial.println(brightnessWarm);
Serial.print("Cool : ");
Serial.println(brightnessCool);
*/
}
// delay(10546/720); //10546ms for a 45' fade
}
void fadeOut(int pinWarm,int pinCool){
/* //For debbuging purpose
Serial.println("Start fade out");
*/
int brightnessWarm=255;
int brightnessCool=255;
while(brightnessCool>150){
brightnessCool--;
analogWrite(pinCool, brightnessWarm);
delay(10546);
/* //For debbuging purpose
Serial.print("Warm : ");
Serial.println(brightnessWarm);
Serial.print("Cool : ");
Serial.println(brightnessCool);
*/
}
while(brightnessCool>0){
brightnessWarm--;
brightnessCool--;
analogWrite(pinWarm, brightnessWarm);
analogWrite(pinCool, brightnessCool);
delay(10546);
/* //For debbuging purpose
Serial.print("Warm : ");
Serial.println(brightnessWarm);
Serial.print("Cool : ");
Serial.println(brightnessCool);
*/
}
while(brightnessWarm>0){
brightnessWarm--;
analogWrite(pinWarm, brightnessWarm);
delay(10546);
/* //For debbuging purpose
Serial.print("Warm : ");
Serial.println(brightnessWarm);
Serial.print("Cool : ");
Serial.println(brightnessCool);
*/
}
}
// the setup routine runs once when you press reset:
void setup(){
/* //For debbuging purpose
Serial.begin(9600);
*/
Wire.begin();
rtc.begin();
// following line sets the RTC to the date & time this sketch was compiled
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 8, 13, 13, 58, 0));
pinMode(ledCoolWhite, OUTPUT);
pinMode(ledWarmWhite, OUTPUT);
}
void loop() {
DateTime now = rtc.now(); //Check time
if(now.hour()==12 && now.minute()==30){
fadeIn(ledWarmWhite, ledCoolWhite );
}else
if(now.hour()==20 && now.minute()==45){
fadeOut(ledWarmWhite, ledCoolWhite);
}
/* //For debbuging purpose
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
*/
delay(30000); // just to not run the loop too often
}
Et coté matériel j'en suis là :
Comme vous le voyez le montage est réduit à sa plus simple expression, je me suis contenter de ce que je comprenais, mais en regardant différents montages similaires je vois qu'il y a souvent des composant supplémentaire, à priori pas nécessaires puisque ça marche sans, mais probablement essentiels puisque tout le monde les utilises ![]()
Du coup je me pose la question de l’intérêt des résistances "pull-up" sur les canaux I2C , elles sont généralement présentes sur des break-out du coup j'ai un doute puisque l'Arduino en a en interne.
Et pour la partie PWM, je vois souvent des montages plus complets (ou simplement plus complexe...) comme par exemple ici :
Bon là c'est le montage le plus compliquer que j'ai pu trouver ![]()
Cependant je m'interroge : bien que je ne vois rien de gênant à l'œil nu, est-ce que ce type de montage peu apporter quelque chose ? (fiabilité, durée de vie...).
Et sinon toutes les critiques sur le projet sont les bienvenues.
En vous remerciant,
LaMain