PROJET de Fin d'année STI2D [Arduino RTC]

Hello!

Comme ce nom l'indique je suis sur un projet de fin d'année avec 3 amis de classe, cependant je travaille sur la programmation, étant donné que je suis débutante sous Arduino, je ne connais pas grand chose sur les modules RTC..

Alors voici mon problème, j'ai pour projet d'allumer une lampe de 6h du matin à 7h du soir.

Je dois faire une simulation donc je n'utiliserai qu'une lampe à Led et pour ce qui est de mon module RTC, il s'agit d'un DS1307 :

http://www.gotronic.fr/art-horloge-temps-reel-grove-101020013-18984.htm

J'ai cherché beaucoup de programmes sur internet mais je suis assez perdue et je ne trouve pas grand chose que je puisse vraiment comprendre..
Pouvez-vous me guider s'il vous plaît?

Je ne cherche pas à avoir le code donné directement, car j'aimerai essayer de le faire tout en comprenant ce que je fais.. Donc si vous pouviez me donner des conseils sur ce que je dois utiliser ainsi que les bonnes librairies !

Merci beaucoup pour votre aide.

Bonjour,

Tu pourrais commencer par le wiki indiqué sur la page de ton capteur.

D'accord, j'y vais de ce pas.
Merci

Cependant, j'ai une question.
Ils disent:
"Cette horloge en temps réel se raccorde sur une entrée I2C du Grove Base Shield ou du Mega Shield via le câble 4 conducteurs inclus."

Est-on vraiment obligé d'acheter une de ces deux composant ?

Peut-on simplement relier le câble femelle du module RTC avec des fils mâles directement sur la carte arduino ? (j'ai une carte MEGA ADK)

J'ai déjà regardé le wiki au début, mais lorsque je mettais le code sous Arduino, çà ne marchait pas mais je viens de réessayer et çà marche.. ^^

Merci

Bonjour

Pour le câblage : une simple recherche Google "Arduino DS1307" devrait te renvoyer pas mal d'images.
Peu importe la forme des connecteurs, pourvu que le courant passe.

Pour le programme : sur ce forum, quelque part en haut de ton écran, il y a une section Tutoriels et cours. Tu pourrais aussi y jeter un œil, dès fois qu'un sujet récent soit en rapport avec ton besoin...

Bonjour,

Oui merci j'ai pu trouver sur internet comment faire pour le câblage.
Pour ce qui est du schéma pour mon module RTC et la led en plus, il s'agit donc du suivant :

Merci de l'info, je vais voir dans les tutoriels.

L'image n'est pas très nette, mais cela ressemble assez à un montage avec une led (et sa résistance) et avec un DS1307 (branché sur les bonnes pin SDA et SCL, qui ne sont pas A4 et A5 sur une mega).

Tu utilises quoi comme librairie ? Tu as normalement des exemples qui te permettent de comprendre comme tout ça marche :wink:

Ya rien de bien compliquer , en une dizaine de lignes , ton programme sera fait :wink: !

bricoleau
C'est exact j'avais demandé à un professeur de physique qui programme beaucoup sur Arduino et m'a expliqué que sur une Mega c'était différent que sur une UNO.
Comme l'exemple que j'ai utilisé qui est dans la librairie que j'ai téléchargé RTC marche alors je suppose que le montage est bien juste.
Merci


BrUnO14200

C'est exact mais quelques exemples ne marchent pas vraiment..

Pour ce qui est de mes librairies, j'utilise donc RTC, mais en cherchant sur internet j'ai aussi RTClib-master.
Enfin, j'en ai une autre que mon professeur de Physique m'avait passé, il s'agit de DS1307RTC ainsi que DS1307RTC-master.

Les exemples qui marchent sont:

  • TimeRTC (librairie : DS1307RTC-master)

  • SetTimeAndDisplay (librairie : RTC):

  • ds3231 (librairie : RTClib-master):

Les autres exemples de la librairie RTClib-master, affiche des caractères comme ceci :

Donc je ne pense pas que çà marche vraiment..

J'ai essayé les autres mais çà n'a pas l'air de marcher. (Je regarde le fonctionnement de mon RTC sur SSCOM32E )

Merci bien. :slight_smile:

Utilises les bibliothèques qui fonctionnent , les autres tanpis ... :smiley:

Perso j'utilise RTClib(-master) et dans le dernier exemple que tu mets , tu as des caractères bizarres mais c'est parce que tu n'as pas la bonne vitesse de transmission ( à 57000bd dans les exemples) :wink: !

Dans un autre exemple tu tests un programme prévu pour utiliser des DS3231 et je sais pas s'ils sont compatibles avec les DS1307 .

Merci, j'ai changer la vitesse de transmission et çà marche :smiley:
C'est exact je pense que je n'ai pas besoin d'utiliser l'exemple pour DS3231.. :slight_smile:
Cependant j'aimerais savoir comment on change l'heure et la date dans l'exemple DS1307, car sur le simulateur çà m'affiche ceci:

Pourriez-vous m'expliquer ? :slight_smile:

Merci!

Mets le code utilisé sur le forum qu'on puisse voir :wink:

Cependant j'aimerais savoir comment on change l'heure et la date dans l'exemple DS1307, car sur le simulateur çà m'affiche ceci:

tu vas sur le wiki et tu verras dans le setup ces lignes

void setup()
{
	Serial.begin(9600);
	clock.begin();
	clock.fillByYMD(2013,1,19);//Jan 19,2013
	clock.fillByHMS(15,28,30);//15:28 30"
	clock.fillDayOfWeek(SAT);//Saturday
	clock.setTime();//write time to the RTC chip
}

il suffit de faire un prog tout bête, le même du wiki et après tu vire dans le setup les déclarations pour la maj de l'heure, date, etc...
A savoir que si tu retire la pile, il faudra tout refaire.

BrUnO14200

Celui-ci :

#include <Wire.h>
#include "RTClib.h"

#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
#define Serial SerialUSB
#endif

RTC_DS1307 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {

#ifndef ESP8266
while (!Serial); // for Leonardo/Micro/Zero
#endif

Serial.begin(57600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// 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, 1, 21, 3, 0, 0));
}
}

void loop () {
DateTime now = rtc.now();

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.print(" since midnight 1/1/1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");

// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now + TimeSpan(7,12,30,6));

Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();

Serial.println();
delay(3000);
}

infobarquee

Quand tu parles de la maj de l'heure, qu'est ce que c'est exactement ..? :confused:
Merci

Quand tu parles de la maj de l'heure, qu'est ce que c'est exactement ..? :confused:

simplement que lorsque tu recois le rtc, il n'est pas à l'heure :wink:
donc il faut le Mettre A Jour (maj) et ceci à chaque fois que la pile est retirée.

infobarquee

D'accord, mais ce que je ne comprend pas, pour ce code :

#include <Wire.h>
#include "RTClib.h"

#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
#define Serial SerialUSB
#endif

RTC_DS1307 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {

#ifndef ESP8266
while (!Serial); // for Leonardo/Micro/Zero
#endif

Serial.begin(57600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
// 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, 1, 21, 3, 0, 0));
}
}

void loop () {
DateTime now = rtc.now();

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.print(" since midnight 1/1/1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");

// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now + TimeSpan(7,12,30,6));

Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();

Serial.println();
delay(3000);
}

Il m'affiche çà :

2165/165/165 (Wednesday) 165:165:85
since midnight 1/1/1970 = 2087399889s = 24159d
now + 7d + 30s: 2036/3/2 5:48:15

Et je ne vois pas comment, dans le code, on fait pour modifier et bien régler l'heure et la date.. :confused:

J'ai aussi une autre question, la carte arduino on doit toujours l'a laisser allumer si on ne veut pas dérégler le module RTC ou non ? Sans toucher à la pile evidément! :slight_smile:

Merci

testes ca

    rtc.adjust(DateTime(14, 1, 21, 3, 0, 0));

après, c'est le timestampt depuis 1970

comme quoi tu ne lis pas ce qu'on te dit.
tu fais un code avec juste une maj de la date et heure;
une fois ca, tu n'as plus besoin des lignes mettant a jour date heure, etc...

il suffit de faire un prog tout bête, le même du wiki et après tu vire dans le setup les déclarations pour la maj de l'heure, date, etc...
A savoir que si tu retire la pile, il faudra tout refaire.

infobarquee

Merci, j'arrive à mettre l'heure et la date sur l'exemple de wiki:

#include <Wire.h>
#include "DS1307.h"

DS1307 clock;//define a object of DS1307 class
void setup()
{
Serial.begin(9600);
clock.begin();
clock.fillByYMD(2016,4,6);//Jan 19,2013
clock.fillByHMS(16,28,30);//15:28 30"
clock.fillDayOfWeek(FRI);//Saturday
clock.setTime();//write time to the RTC chip
}
void loop()
{
printTime();
}
/Function: Display time on the serial monitor/
void printTime()
{
clock.getTime();
Serial.print(clock.hour, DEC);
Serial.print(":");
Serial.print(clock.minute, DEC);
Serial.print(":");
Serial.print(clock.second, DEC);
Serial.print(" ");
Serial.print(clock.month, DEC);
Serial.print("/");
Serial.print(clock.dayOfMonth, DEC);
Serial.print("/");
Serial.print(clock.year+2000, DEC);
Serial.print(" ");
Serial.print(clock.dayOfMonth);
Serial.print("*");
switch (clock.dayOfWeek)// Friendly printout the weekday
{
case MON:
Serial.print("MON");
break;
case TUE:
Serial.print("TUE");
break;
case WED:
Serial.print("WED");
break;
case THU:
Serial.print("THU");
break;
case FRI:
Serial.print("FRI");
break;
case SAT:
Serial.print("SAT");
break;
case SUN:
Serial.print("SUN");
break;
}
Serial.println(" ");
}

Maintenant, j'aimerai savoir s'il-vous plaît, grâce à qu'elle variable peut-on ordonner que à telle heure il faut allumer la lampe jusqu'à telle heure ?
Merci bien! :slight_smile:

Maintenant, j'aimerai savoir s'il-vous plaît, grâce à qu'elle variable peut-on ordonner que à telle heure il faut allumer la lampe jusqu'à telle heure ?

va falloir chercher un peu aussi de ton coté, on ne va pas tout faire non plus pour toi.
si tu cherchais alarme rtc sur le net, il y a plein d'exemples tous bêtes.

Pour te donner des pistes , tu choisis une variable ou 2 ou 3 selon tes besoins :
int h=12;
int min=34;
int sec= 56;

Là on fait une alarme à 12:34:56 , maintenant tu sais comment récupérer l'heure , il suffit de comparer les heures à h , les minutes à min et les secondes à sec , puis de faire ce que tu as besoin !

Commence à faire clignoter une led pendant un temps que tu définies , tu t'occuperas de la partie lampe après :wink: !