Pilotage éclairage en fonction de l'heure.

Leboulet
sam, 11/28/2015 - 18:15
Bonjour, débutant en Arduino je vous sollicite pour me sortir de l'ambarras.
J'ai trouvé beaucoup de projets sur le net proches de ce que je voulais faire.
N'étant ni électronicien ni programmeur j'ai essayé de coller au plus près de mon besoin en mixant différentes sources, et aujourd'hui je suis bloqué.
Je suis plutôt confiant dans la partie "hard" testée avec d'autres programmes et oriente ma recherche de panne plutôt du côté "soft".
Voici mon besoin:
Pour faire simple je souhaite piloter un éclairage LED RVB en fonction de l'heure.
J'utilise donc un shield RTC DS1307 (testé individuellement il fonctionne correctement).
//Pour un essai simplifié les différents scénaris vont être réalisés sur une heure
//0'-14'59'': Lumière blanche normale pendant 10s puis lumière jaune pendant 5s
//15'-29'59'': Lumière violette pendant 10s puis lumière bleu foncé pendant 5s
//30'-44'59'': Lumière rouge pendant 10s puis lumière bleu foncé pendant 5s
//45'-59'59'': Lumière blanche pendant 10s puis lumière jaune pendant 5s
Leboulet
sam, 11/28/2015 - 18:21
Et voici le programme ci dessous.
Pour info je me suis rendu compte que l'on pouvait avoir différentes bibliothèqes pour un même composant (ici le DS1307) avec différentes commandes, et là j'ai peur de ne pas les utiliser correctement.
Le programme se charge correctement dans l'Arduino mais une fois le système alimenté rien ne se passe (pas d'éclairage du ruban RVB).
Si vous pouvier m'aider à trouver la coquille...
Merci d'avance.
// -------- Que fait ce programme ? ---------
// Ce programme pilote un éclairage LED RVB en fonction de l'heure:
//Pour un essai simplifié les différents scénaris vont être réalisés sur une heure
//0'-14'59'': Lumière blanche normale pendant 10s puis lumière jaune pendant 5s
//15'-29'59'': Lumière violette pendant 10s puis lumière bleu foncé pendant 5s
//30'-44'59'': Lumière rouge pendant 10s puis lumière bleu foncé pendant 5s
//45'-59'59'': Lumière blanche pendant 10s puis lumière jaune pendant 5s
// -------- Circuit à réaliser ---------
// Broche 3 : La broche Vert du ruban LED RGB
// Broche 5 : La broche Rouge du ruban LED RGB
// Broche 6 : La broche Bleu du ruban LED RGB
// Entrée analogique 4 = SDA pour ds1307
// Entrée analogique 5 = SCL pour ds1307
// /////////////////////////////// 1. Entête déclarative ///////////////////////
// A ce niveau sont déclarées les librairies incluses, les constantes, les variables, les objets utiles...
// --- Déclaration des constantes ---
// --- Inclusion des librairies ---
#include "RTClib.h" // Librairie Real Time Clock pompé ici:
http://www.worldofgz.com/electronique/gerez-lheure-date-arduino-rtc/
#include <Wire.h> // Librairie protocle i2c pour l'accès RTC
// --- Déclaration des constantes utiles ---
const int R=1;
const int V=1;
const int B=1;
// --- Déclaration des constantes des broches E/S numériques ---
const int ledVert=3; // Constante pour la broche 3
const int ledRouge=5; // Constante pour la broche 5
const int ledBleu=6; // Constante pour la broche 6
// --- Déclaration des constantes des broches analogiques ---
// --- Déclaration des variables globales ---
// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
RTC_DS1307 RTC;
//// 2. FONCTION SETUP = Code d'initialisation //////////////////////////
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
void setup() { // debut de la fonction setup()
// --- ici instructions à exécuter 1 seule fois au démarrage du programme ---
// ------- Initialisation fonctionnalités utilisées -------
// ------- Broches en sorties numériques -------
pinMode (ledVert,OUTPUT); // Broche ledVert configurée en sortie
pinMode (ledRouge,OUTPUT); // Broche ledRouge configurée en sortie
pinMode (ledBleu,OUTPUT); // Broche ledBleu configurée en sortie
// ------- Broches en entrées numériques -------
// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------
// ------- Initialisation des variables utilisées -------
RTC.adjust(DateTime(__DATE__, __TIME__)); //Met à l'heure à date à laquelle le sketch est compilé
} // fin de la fonction setup()
// ***********************************************
///// 3. FONCTION LOOP = Boucle sans fin = coeur du programme ///////
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop(){ // debut de la fonction loop()
//
Récupérer l'heure du DS1307
DateTime now = RTC.now();
//Scénaris éclairage fontion de l'heure
if (now.minute() > 0 && now.minute() < 15) {
ledRVB(R,V,B); // allume Rouge Vert et Bleu => blanc
delay(10000); // pause
ledRVB(R,V,0); // allume Rouge et Vert => jaune
delay(5000); // pause
}
else if (now.minute() >= 15 && now.minute() < 30) {
ledRVB(R,0,B); // allume Rouge et Bleu => violet
delay(10000); // pause
ledRVB(0,0,B); // allume bleu
delay(5000); // pause
}
else if (now.minute() >= 30 && now.minute() < 45) {
ledRVB(R,0,0); // allume Rouge
delay(10000); // pause
ledRVB(0,0,B); // allume bleu
delay(5000); // pause
}
else if (now.minute() >= 45 && now.minute() < 60) {
ledRVB(0,V,0); // allume Vert
delay(10000); // pause
ledRVB(R,V,0); // allume Rouge et Vert => jaune
delay(5000); // pause
}
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ************
//FONCTIONS DE GESTION DES INTERRUPTIONS ////////////////////
//AUTRES FONCTIONS DU PROGRAMME ////////////////////
//---- fonction pour combiner couleurs ON/OFF ----
void ledRVB(int Rouge, int Vert, int Bleu) {
if (Rouge==1) digitalWrite(ledRouge,HIGH); // allume couleur
if (Rouge==0) digitalWrite(ledRouge,LOW); // éteint couleur
if (Vert==1) digitalWrite(ledVert,HIGH); // allume couleur
if (Vert==0) digitalWrite(ledVert,LOW); // éteint couleur
if (Bleu==1) digitalWrite(ledBleu,HIGH); // allume couleur
if (Bleu==0) digitalWrite(ledBleu,LOW); // éteint couleur
}
// ////////////////////////// Fin du programme ////////////////////
Zorro_X
dim, 11/29/2015 - 17:57
tu l'alimentes comment ton ruban RVB ? si tu l'as branché directement sur l'Arduino sans aucune alimentation supplémentaire c'est peut-être normal que ca ne fonctionne pas, l'arduino ne peut alimenter qu'en 40mA sur ses sorties (cf les vidéos U=RI, notamment pour les moteurs à courrant continu).
Leboulet
dim, 11/29/2015 - 18:50
Bonsoir, je suis peut-être passé un peu vite sur mon insatllation.
Je suis reparti des infos données ici: http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.Ardui...
Les sorties 3, 5 et 6 de mon Arduino alimentent un ULN2803 tel que décrit dans le lien ci-dessus.
L'ULN2803 est lui-même alimenté par une alim.12V séparément de la carte Arduino.
Mon ruban RVB (30cm...il n'en demande pas trop à l'alim.) a déjà fonctionné avec différent programmes de test, je pense donc que le souci se trouve plutôt dans le code ci-dessus...
Zorro_X
dim, 11/29/2015 - 20:13
tu devrais essayer ton code en simplifiant, essaie simplement d'allumer du blanc (les 3 couleurs/composantes) pour vérifier déjà que ton code fonctionne sans tenir compte de l'heure... Un truc genre :
const int R=1;
const int V=1;
const int B=1;
const int ledVert=3; // Constante pour la broche 3
const int ledRouge=5; // Constante pour la broche 5
const int ledBleu=6; // Constante pour la broche 6
void setup() {
pinMode (ledVert,OUTPUT); // Broche ledVert configurée en sortie
pinMode (ledRouge,OUTPUT); // Broche ledRouge configurée en sortie
pinMode (ledBleu,OUTPUT); // Broche ledBleu configurée en sortie
}
void loop(){
ledRVB(R,V,B);
delay(1000);
}
void ledRVB(int Rouge, int Vert, int Bleu) {
if (Rouge==1) digitalWrite(ledRouge,HIGH); // allume couleur
if (Rouge==0) digitalWrite(ledRouge,LOW); // éteint couleur
if (Vert==1) digitalWrite(ledVert,HIGH); // allume couleur
if (Vert==0) digitalWrite(ledVert,LOW); // éteint couleur
if (Bleu==1) digitalWrite(ledBleu,HIGH); // allume couleur
if (Bleu==0) digitalWrite(ledBleu,LOW); // éteint couleur
}
Ensuite tu pourras y aller petit à petit pour vérifier que chaque élement fonctionne...
Leboulet
lun, 11/30/2015 - 21:16
Effectivement, je pense qu'il faut que je décompose pour isoler l'erreur.
Je fais l'essai et vous tiens au courant.
Merci.