Go Down

Topic: Allumer une led au bout d'un temps donné. (Read 9375 times) previous topic - next topic

Christian_R


on m'en a proposer un second celui-ci : http://www.gotronic.fr/art-capteur-de-courant-asm10-11526.htm   mais je n'arrive pas à savoir si il fait pour du continu ou pas.

La doc indique "Fréquence: 50/60 Hz " et ça fonctionne sur le principe du transformateur, donc en alternatif.
Christian

SGRmetrage

Ah merci... J'ai cherché et je n'arrive vraiment pas à trouver ça n'existe donc pas pour du continu ?

icare

Bonsoir,

Ah merci... J'ai cherché et je n'arrive vraiment pas à trouver ça n'existe donc pas pour du continu ?

Si
Par exemple , http://www.gotronic.fr/art-capteur-de-courant-30-a-1122-12096.htm
ou http://www.gotronic.fr/art-capteur-de-courant-5a-mr361-20839.htm
Mais ils existent beaucoup d'autres fournisseurs
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

SGRmetrage

Bonjour;
GROS CHANGEMENT  !!!!!
Mon prof à décidé une toute autre manière.

Nous allons utiliser un capteur ILS, qui lorsque l'on rettirera le stylo de son socle le mettra en marche (Mais ça ce n'est pas ma partie) et qui déclenchera le comptage du temps avec la RTC grove. Une fois reposer ça arrétera le comptage et mettra en mémoire le temps d'utilisation dans la ram de la rtc. Voila les directives de mon prof j'avoue que je suis un peu perdu...

merci.

SGRmetrage

je comprends le principe mais le plus dur pour moi est de le réaliser étant totalement nul en électronique et programmation je suis vraiment perdu on va dire.. .

SGRmetrage

Nous allons utiliser un capteur ILS, qui lorsque l'on retirera le stylo de son socle le mettra en marche (Mais ça ce n'est pas ma partie) et qui déclenchera le comptage du temps avec la RTC grove(Par contre la si). Une fois reposer sa arrêtera le comptage et mettra en mémoire le temps d'utilisation dans la ram de la rtc. Au bout de 1000h une LED s'allumera donc ! Voila les directives de mon prof j'avoue que je suis un peu perdu...

Enfin je comprends le principe mais le plus dur pour moi est de le réaliser étant totalement nul en électronique et programmation je suis vraiment perdu on va dire.. .

J'ai déja mon programme pour ma RTC qui marche parfaitement.


Code: [Select]
#include <Wire.h>
#include "DS1307.h"

DS1307 clock;//define a object of DS1307 class
void setup()
{
    Serial.begin(9600);
    clock.begin();
    clock.fillByYMD(2014,2,6);// 06 Fevrier,2014
    clock.fillByHMS(17,50,30);//13:53 30"
    clock.fillDayOfWeek(THU);//Jeudi
    clock.setTime();//write time to the RTC chip
}
void loop()
{
    printTime();
}


/*--------------------------------------------------*
* Fonction: Affiche le temps sur le moniteur série *
*--------------------------------------------------*/
void printTime()
{
    clock.getTime();
         
        Affiche_JOUR();
    Serial.print("  ");       

        Affiche_JMA();
    Serial.println(" ");
       
        Affiche_HMS();
    Serial.print(" ");
         
        delay(500);
         
}

void Affiche_HMS()
    {
     Serial.print(clock.hour, DEC);
     Serial.print(":");
     Serial.print(clock.minute, DEC);
     Serial.print(":");
     Serial.print(clock.second, DEC);
    }

void Affiche_JOUR()
    {
    switch (clock.dayOfWeek)// Friendly printout the weekday
         {
        case MON:
          Serial.print("LUNDI ");
          break;
        case TUE:
          Serial.print("MARDI ");
          break;
        case WED:
          Serial.print("MERCREDI ");
          break;
        case THU:
          Serial.print("JEUDI ");
          break;
        case FRI:
          Serial.print("VENDREDI ");
          break;
        case SAT:
          Serial.print("SAMEDI ");
          break;
        case SUN:
          Serial.print("DIMANCHE ");
          break;
             }
    }
     
void Affiche_JMA()
    {
     Serial.print(clock.dayOfMonth, DEC);
     Serial.print("/");
     Serial.print(clock.month, DEC);
     Serial.print("/");
     Serial.print(clock.year+2000, DEC);
     Serial.print(" ");

    }

     

Je voulais stocker ces valeurs dans la RAM de la RTC mais mon prof me conseille fortement de stocker dans l'EEPROM de ma carte Arduino... mais comment faire ? C'est mon problème...

Parler moi comme un abrutis, je débute vraiment en Arduino je n'ai vraiment pas beaucoup de base!
Merci de votre aide. 

SGRmetrage

Bonsoir;
Petit up j'ai toujours besoin d'aide en voulant vous remercier de votre aide et du temps que vous prenez pour répondre à mes messages(qui doivent parfois vous rendre dingue), pour les explications et j'en passe! Merci infiniment.

icare

Bonsoir,
C'est quoi ton PB ?
Si c'est de sauvegarder des data dans EEPROM de la carte Arduino, tu aurais du utiliser Google pour trouver ceci :
http://arduino.cc/en/Tutorial/EEPROMWrite
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

SGRmetrage

#23
Mar 26, 2014, 05:48 pm Last Edit: Mar 26, 2014, 06:03 pm by SGRmetrage Reason: 1
Veillez m'excusez je me suis mal exprimé, j'ai déja vu ce programme biensur.

Ce que je voulais dire c'est que mon prof me conseil l'EEPROM mais il y a tout de mème une limitation d'écriture... je ne sais pas trop quoi choisir entre les deux. Je sais que la limite est de 100000 mais ce ne serait pas mieux de stocker dans la RAM de la rtc ?


Imaginons que je choisi l'EEPROM :
Quote


#include <EEPROM.h>

// the current address in the EEPROM (i.e. which byte
// we're going to write to next)
int addr = 0;

void setup()
{
}

void loop()
{
  // need to divide by 4 because analog inputs range from
  // 0 to 1023 and each byte of the EEPROM can only hold a
  // value from 0 to 255.
  int val = analogRead(0) / 4;
 
  // write the value to the appropriate byte of the EEPROM.
  // these values will remain there when the board is
  // turned off.
  EEPROM.write(addr, val);
 
  // advance to the next address.  there are 512 bytes in
  // the EEPROM, so go back to 0 when we hit 512.
  addr = addr + 1;
  if (addr == 512)
    addr = 0;
 
  delay(100);
}


Vous allez trouver ma question stupide mais...
Dois-je remplir le programme comme ceci ? J'ai du mal justement dans la programmation.. je tatonne.

   "EEPROM.write(clock.hour,hour);
   EEPROM.write(clock.minute,minu);
   EEPROM.write(clock.second,sec);"

SGRmetrage

Je bloque sur cette partie de mon programmme :
Code: [Select]
// Sauvegarde
   EEPROM.write(clock_hour,hour);
   EEPROM.write(clock_minute,minu);
   EEPROM.write(clock_second,sec);

  // advance to the next address.  there are 512 bytes in
  // the EEPROM, so go back to 0 when we hit 512.
  clock_hour = clock_hour + 1;
  if (clock_hour == 512)
    clock_hour = 0;
 
  delay(100);



Je comprends pas la partie

Code: [Select]
// advance to the next address.  there are 512 bytes in
  // the EEPROM, so go back to 0 when we hit 512.
  clock_hour = clock_hour + 1;
  if (clock_hour == 512)
    clock_hour = 0;
 
  delay(100);



Enfaite je suis réellement totalement perdu... je comprends vraiment plus..

Christian_R

On incrémente le compteur de 1 à chaque fois.
On teste s'il atteint le maximum (512) pour le remettre alors à zéro, pour ne pas dépasser les limites physiques permises par l' EEPROM.
C'est un "modulo 512" pour les matheux.
Christian

SGRmetrage

Bonsoir;
Alors voila quelques avancées cette semaine, des idées un peu de programmation ^^"

J'ai déja repris mon programme de la RTC, j'y ai ajouté un bouton  qui lorsque l'on appuis dessus fais le calcul du nombre d'heures, de minutes et de secondes et converti tout en secondes et affiche le total sur el moniteur série.
Voila la bète :

Code: [Select]

#include <TinkerKit.h>

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

double SEC;
const int buttonPin = A2;
int buttonState = 0; 



DS1307 clock;//define a object of DS1307 class
void setup()
{
Serial.begin(9600);
clock.begin();
clock.fillByYMD(2014,3,27);// 06 Fevrier,2014
clock.fillByHMS(17,50,30);//13:53 30"
clock.fillDayOfWeek(THU);//Jeudi
  clock.setTime();//write time to the RTC chip
}
void loop()
{
printTime();
        calcul_SEC();
        buttonState = digitalRead(buttonPin);
}


/*--------------------------------------------------*
* Fonction: Affiche le temps sur le moniteur série *
*--------------------------------------------------*/
void printTime()
{
clock.getTime();
       
        Affiche_JOUR();
Serial.print(" ");       

        Affiche_JMA();
Serial.println(" ");
       
        Affiche_HMS();
Serial.println(" ");
       
        delay(500);
       
}

void Affiche_HMS()
    {
     Serial.print(clock.hour, DEC);
     Serial.print(":");
     Serial.print(clock.minute, DEC);
     Serial.print(":");
     Serial.print(clock.second, DEC);
    }

void Affiche_JOUR()
    {
    switch (clock.dayOfWeek)// Friendly printout the weekday
     {
case MON:
  Serial.print("LUNDI ");
  break;
case TUE:
  Serial.print("MARDI ");
  break;
case WED:
  Serial.print("MERCREDI ");
  break;
case THU:
  Serial.print("JEUDI ");
  break;
case FRI:
  Serial.print("VENDREDI ");
  break;
case SAT:
  Serial.print("SAMEDI ");
  break;
case SUN:
  Serial.print("DIMANCHE ");
  break;
             }
    }
   
void Affiche_JMA()
    {
     Serial.print(clock.dayOfMonth, DEC);
     Serial.print("/");
     Serial.print(clock.month, DEC);
     Serial.print("/");
     Serial.print(clock.year+2000, DEC);
     Serial.print(" ");
    }
   
void calcul_SEC()
     {
    buttonState = digitalRead ( buttonPin ) ;
     if (buttonState == HIGH)
     {
       SEC= ((clock.hour)*36E2)+((clock.minute)*60)+ (clock.second);
       Serial.println(SEC);
     
     }
     }



Il faudrait donc que lorsque j'appuie sur le bouton il stocke le temps en seconde dans l'EEPROM. En fait plus précisément  nous allons utiliser un capteur ILS, qui lorsque l'on retirera le stylo de son socle le mettra en marche (Mais ça ce n'est pas ma partie) et qui déclenchera le comptage du temps avec la RTC grove(C'est donc ça que je veux réaliser). Une fois reposer, le comptage s'arrêtera et mettra en mémoire le temps d'utilisation dans la ram de la rtc.
Pour le moment le capteur ILS est remplacé par le bouton, il faudrait donc lorsque j'appuie que ça stocke en mémoire sur l'EEPROM et à chaque nouvelle utilisation que ça face un cumule du temps... je sais pas si vous arrivez à me suivre.

Voila le programme de l'EEPROM que j'ai commencé à remplir mais je sais pas trop comment..

Code: [Select]

/*
* EEPROM Write
*
* Stores values read from analog input 0 into the EEPROM.
* These values will stay in the EEPROM when the board is
* turned off and may be retrieved later by another sketch.
*/
#include <EEPROM.h>

int clock_hour=0;
int clock_minute=0;
int clock_second=0;

byte sec,minu,hour;

/* the current address in the EEPROM (i.e. which byte
we're going to write to next)*/

void setup()
{
}

void loop()
{
  // need to divide by 4 because analog inputs range from
  // 0 to 1023 and each byte of the EEPROM can only hold a
  // value from 0 to 255.
  int val = analogRead(0) / 4;
 
  // write the value to the appropriate byte of the EEPROM.
  // these values will remain there when the board is
  // turned off.
   
   // Sauvegarde
   EEPROM.write(clock_hour,hour);
   EEPROM.write(clock_minute,minu);
   EEPROM.write(clock_second,sec);

  // advance to the next address.  there are 512 bytes in
  // the EEPROM, so go back to 0 when we hit 512.
addr = addr + 1;
  if (addr == 512)
    addr = 0;
 
  delay(100);
}


    Merci d'avance pour votre patience et votre aide.
   

Go Up