Partage
  • Partager sur Facebook
  • Partager sur Twitter

arduino

actionner un moteur en fonction de l'heure

    11 février 2015 à 19:34:17

    Bonjour,

    Je viens de commencer sur arduino et je suis vraiment pas forte. J'ai besoin d'aide pour créer un programme qui puisse me permettre de faire fonctionner un moteur a une heure précise de la journée (l'heure en question doit pouvoir être programmé par l'utilisateur), en sachant que j'ai un clavier (12 touches) et un écran LCD sur lequel doivent apparaître ce que l'on tape sur le clavier.

    Merci d'avance :)

    (désolé s'il y a des fautes d'orthographes)

    -
    Edité par melanouille 11 février 2015 à 19:35:06

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2015 à 12:25:18

      Bonjour melanouille,

      Avant de pouvoir t'aiguiller sur telle ou telle solution, j'aurais juste une petite question à te poser :

      Prévois tu d'acheter un module RTC (du genre un DS1302) ou non ?

      Je te demande ça car l'arduino n'est pas capable de retenir une heure de lui même.

      En clair, sans module RTC, l'arduino perdra l'heure à chaque fois que tu le débrancheras.

      Si tu ne le débranches pas, alors l'arduino est capable de maintenir une sorte d'heure artificielle grâce à la fonction millis.

      Cependant, je ne suis pas certain que cela soit aussi précis qu'un RTC (l'oscillateur de l'arduino pourrait très bien dériver de plusieurs minutes par mois).

      Bref, RTC ou pas RTC ?

      • Partager sur Facebook
      • Partager sur Twitter
        15 février 2015 à 21:51:04

        J'ai songé a l'acheté mais j'ai trouvé la bibliothèque "time" et je pensais que ça pouvais remplacer (en quelque sorte) le RTC.

        Mais j'en achèterais un si y faut ! :D

        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2015 à 22:57:06

          La lib time se base sur la fonction millis donc elle offre une heure virtuelle.

          => à chaque fois que tu débrancheras ton arduino, la lib time perdra l'heure.

          A toi de nous dire si c'est gênant ou non.

          • Partager sur Facebook
          • Partager sur Twitter
            16 février 2015 à 13:55:56

            je vais passer la commande aujourd'hui car je pense qu'il vaut mieux que l'arduino garde l'heure en mémoire indépendamment de l’alimentation.

            j'ai déjà un programme (que j'ai trouvé sur internet , qui marche très bien et que je pense avoir compris) pour afficher des chiffres sur un écran LCD a partir d'un clavier a 12 touches

            -
            Edité par melanouille 16 février 2015 à 14:06:18

            • Partager sur Facebook
            • Partager sur Twitter
              16 février 2015 à 15:30:57

              Une fois que tu auras ton RTC, je te propose d'y allé étape par étape, un peu comme sur l'autre sujet : http://openclassrooms.com/forum/sujet/arduino-projet-debutant

              Voici ce que je pourrais te proposer (j'adapte un peu à ton problème) :

              - réussir à afficher l'heure du DS1307RTCen temps réel sur ton afficheur LCD (dès qu'une seconde change, il te faudra afficher l'heure).

              - réussir à paramétrer l'heure du DS1307RTC avec une valeur brute (du genre 1er janvier 2010).

              - réussir à afficher les boutons appuyé sur le clavier.

              Maintenant que tu connais un peu les bases, je te propose de mixer un peu tout ça :

              - réussir à afficher l'heure sur la première ligne et les touches appuyées sur la seconde ligne

              - tout en affichant l'heure, réussir à détecter un appuie sur "#" puis attendre l'appuie sur 6 touches pour paramétrer l'heure (par exemple, l'utilisateur va taper "#124421" et ton programme devra paramétrer 12h44m21s dans le RTC)

              - réussir à faire de même avec l'étoile qui permettra de paramétrer l'heure d'activation du moteur

              - réussir à piloter le moteur en même temps que tout le reste

              Voila :)

              • Partager sur Facebook
              • Partager sur Twitter
                16 février 2015 à 19:10:51

                merci beaucoup ! je vais essayer de faire tout ça même si je peux me qualifier de noob sur arduino... je vais faire mon maximum et si j'ai un problème je vous demanderez de m'expliqué comment je peux le résoudre :)
                • Partager sur Facebook
                • Partager sur Twitter
                  16 mars 2015 à 13:59:19

                  Bonjour,

                  Je n'ai (malheureusement) pas encore reçu le module RTC que j’attends depuis deja quelques semaines, mais je viens de comprendre que le système que je souhaite créer s'apparente a un réveil. En effet, il effectue une action tous les jours a une heure précise qui est choisi par l'utilisateur.

                  Je vais aussi avoir des capteurs qui, s'ils sont enclenchés, devrons reporter la mise en marche du moteur de 5 ou 10 minutes. J'imagine qu'il faut que je crée une boucle pour que l'action sois reporter dans le temps, mais j'ai besoin que tu m'explique comment je dois faire ^^'

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 mars 2015 à 15:18:06

                    Pourquoi faire une boucle de report ?

                    Ton programme pourrait tout simplement être comme ceci :

                    void loop() {
                    
                        // On lit l'heure
                        heureActuelle = lireHeureRTC();
                    
                        // On compare avec l'heure de l'alarme
                        if ( heureActuelle > heureAlarm ) {
                    
                            // Si le capteur est activé
                            if ( capteurActif() ) {
                    
                                // On repousse un peu l'alarm et on ne fait rien
                                heureAlarm = heureAlarm + 5 minutes;
                    
                            // Sinon, 
                            else {
                    
                                // On fait notre action et on remet l'alarme pour demain
                                tournerMoteur();
                                heureAlarm = alarm_de_base + 1 jour;
                    
                            }
                    
                        }
                    
                    }

                    Vu que la fonction loop est exécutée en boucle, tout ce passera bien ;)

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 mars 2015 à 13:49:30

                      mais est-ce que le lendemain l'heure serra décalé de 5 minutes ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 mars 2015 à 14:33:49

                        Ah ça, c'est à toi de t'arranger pour faire correctement tes additions pour que ce soit le cas ou non.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 mars 2015 à 14:48:24

                          j'ai déjà quelques programmes pour faire ce que tu ma dis et je vien de recevoir le RTC donc je voulais les tester sauf que j'ai pas les bonnes librairies sur les ordis de mon lycée...

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 mars 2015 à 14:17:31

                            je sais mais a mon lycée c'est un peu compliqué puisqu'il faut des autorisation d'administrateur pour pouvoir télécharger des choses...

                            bref, j'ai reçu mon RTC et y va falloir que je trouve un moyen de vérifiersi y marchent

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 mars 2015 à 14:47:09

                              Des codes de démo concernant les RTC, ce n'est pas ce qu'il manque suir le WEB ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 mars 2015 à 14:58:43

                                oui j'en ai déjà plusieurs, celui qui fais afficher les touches du clavier sur l'écran LCD, celui qui relit l'écran au RTC, celui qui permet de créer une alarme, un qui permet la mise a l'heure du RTC, et un qui permet d'écrire sur les deux lignes de l'écran. Pour l'instant le premier marche mais je sais pas si les autres aussi puisque j'ai pas encore pue les tester...

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 mars 2015 à 15:00:03

                                  en plus je sais pas comment je peux faire un mix des 5

                                  par contre j'ai un problème, j'ai besoin de la librairie Wire mais je la trouve nulle par... je sais pas comment faire...

                                  -
                                  Edité par melanouille 23 mars 2015 à 15:01:40

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 mars 2015 à 17:00:06

                                    Faire un mixte des 5, cela revient à faire ton programme complet... ce n'est pas vraiment ce que j'appelle "tester"...

                                    On revient donc sur un de mes premiers messages : "procéder étapes par étapes".

                                    Quand à la lib Wire, elle est incluse dans l'IDE arduino donc tu n'as pas à la télécharger.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 mars 2015 à 12:11:15

                                      ah mince donc je cherchais tous ce temps pour rien ^^'

                                      mais dans l'hypothèse où je teste tout et que tout marche je suis sensé faire comment pour les fusionner ? y faut que je leur trouve un ordre, que je fasse attention a beaucoup de choses non ?

                                       y a un truc que je comprends pas trop non plus, je sais pas comment je peux faire pour que mon programme propose d'entrer une valeur qui va être intégré comme une constante

                                      -
                                      Edité par melanouille 24 mars 2015 à 12:34:04

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 mars 2015 à 12:52:34

                                        Si tu n'as aucune idée de comment réaliser les différentes étapes que je te propose, cela va être extrêmement compliqué de trouver une solution pour mixer l'ensemble...

                                        Attaquer directement par le programme final, cela demande une très bonne vue d'ensemble du projet ainsi qu'une grande maitrise de la programmation procédurale, ce qui est rarement le cas quand on débute.

                                        Donc je vais me répéter encore une fois : procèdes par étapes !


                                        Par exemple : "comment je peux faire pour que mon programme propose d'entrer une valeur qui va être intégré comme une constante ?"

                                        Même sur ce genre de chose on peut faire des étapes :

                                        => Étape 1 : Déclarer une constante, non paramétrable

                                        Là, c'est pas trop dure puisque le code ressemble à ça :

                                        int parametre = 12;

                                        => Étape 2 : Faire une programme qui affiche successivement les touches enfoncées

                                        => Étape 3 : Reprendre le programme précédant tout en enregistrant les touches enfoncées dans un buffer en plus de les afficher

                                        => Étape 4 : Reprendre le programme précédant pour que la touche # ne provoque pas un enregistrement mais plutôt un message particulié

                                        => Étape 5 : Faire un programme capable de transformer un buffer de texte en un nombre (Par exemple, un programme capable de convertir char buf[] = { '1', '2', '3' } en int nb = 123;)

                                        => Étape 6 : Mixer les étapes 4 et 5 pour obtenir le programme final



                                        -
                                        Edité par lorrio 24 mars 2015 à 12:55:30

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 mars 2015 à 20:22:29

                                          Je veux bien essayé mais je sais pas comment on fait pour enregistrer et tout... j'ai vraiment du mal... ^^‘

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            24 mars 2015 à 20:32:55

                                            Ce n'est pas en copiant/collant des codes sans les comprendre que tu progresseras ;)

                                            Le minimum à faire consiste donc à essayer.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              26 mars 2015 à 21:25:49

                                              dis... j'ai un problème, j'ai fait un programme qui devrait me permettre de paramétrer l'heure de l'alarme grasse a un clavier et a l'afficher sur un écran mais la librairie du RTC ne marche pas donc je peux pas essayer mon programme pour voir si y fonctionne... tu aurai pas une idée ?

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                26 mars 2015 à 22:15:24

                                                Une bonne idée serait de poster ton programme ainsi que ton schéma de câblage.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  28 mars 2015 à 20:49:48

                                                  comment tu fais pour l'afficher le programme en image ? une impr écran ou tu copie-colle juste ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    29 mars 2015 à 12:25:26

                                                    #include <Wire.h>
                                                    #include <RTC.h>
                                                    #include <LiquidCrystal.h>
                                                    #include <Keypad.h>
                                                    
                                                    RTC_DS1307 RTC;
                                                     
                                                    void setup () {
                                                      Serial.begin(57600); //Démarrage de la communication
                                                      Wire.begin(); //Démarrage de la librairie wire.h
                                                      RTC.begin(); //Démarrage de la librairie RTClib.h
                                                      LiquidCrystal.begin(); //Démarrage de la librairie LiquidCrystal.h
                                                      Keypad.begin(); //Démarrage de la librairie Keypad.h
                                                      
                                                      
                                                      //Si RTC ne fonctionne pas
                                                      if (! RTC.isrunning()) {
                                                        Serial.println("RTC ne fonctionne pas !");
                                                        
                                                        //Met à l'heure à date à laquelle le sketch est compilé
                                                        //RTC.adjust(DateTime(__DATE__, __TIME__));
                                                        }
                                                      }
                                                     
                                                     const byte LIGNES = 4; // 4 lignes
                                                    const byte COLONNES = 3; //4 colonnes
                                                    
                                                    
                                                    // --- constantes des broches ---
                                                    
                                                    const int C3=3; //declaration constante de broche 
                                                    const int C2=4; //declaration constante de broche 
                                                    const int C1=5; //declaration constante de broche 
                                                    const int RS=8; //declaration constante de broche 
                                                    const int E=9; //declaration constante de broche 
                                                    const int D4=10; //declaration constante de broche 
                                                    const int D5=11; //declaration constante de broche 
                                                    const int D6=12; //declaration constante de broche 
                                                    const int D7=13; //declaration constante de broche 
                                                    const int L4=16; //declaration constante de broche 
                                                    const int L3=17; //declaration constante de broche 
                                                    const int L2=18; //declaration constante de broche 
                                                    const int L1=19; //declaration constante de broche 
                                                    
                                                    // --- Déclaration des variables globales ---
                                                    
                                                    //--- Définition des touches 
                                                    char touches[LIGNES][COLONNES] = {
                                                      {'1','2','3'},
                                                      {'4','5','6'},
                                                      {'7','8','9'},
                                                      {'*','0','#'}
                                                    };
                                                    
                                                    // tableaux de lignes et colonnes
                                                    byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
                                                    byte BrochesColonnes[COLONNES] = {C1, C2, C3}; //connexions utilisées pour les broches de colonnes du clavier
                                                    
                                                    char touche; 
                                                    
                                                    
                                                    
                                                    
                                                    LiquidCrystal lcd(RS, E, D4, D5, D6, D7);/
                                                    
                                                    Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                                                    
                                                    void setup()
                                                    { 
                                                      
                                                    lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 
                                                    
                                                    delay(10);  
                                                    }
                                                     
                                                    void loop()
                                                    {
                                                      
                                                      //Heure actuel
                                                      DateTime now = RTC.now();
                                                      
                                                    toucheH = clavier.getKey(); // lecture de la touche appuyée
                                                    
                                                    if (toucheH != NO_KEY)
                                                    { // si une touche a été frappée -- gestion de la touche appuyée 
                                                    
                                                      if (touche=='*')
                                                     {
                                                       lcd.print (toucheH, ":");
                                                       toucheM = clavier.getKey();
                                                       
                                                        if (touche=='#') lcd.clear(); else lcd.print(touche); // efface écran si appui # sinon  affiche touche
                                                    
                                                        delay(100);
                                                      
                                                        if (toucheM != NO_KEY)
                                                        {
                                                          if (touche=='*')
                                                          {
                                                              
                                                              if(now.hour() == toucheH && now.minute() == toucheM)
                                                              {
                                                    
                                                                Serial.println("Declenchement de l'alarme");
                                                              //Pas d'alarme
                                                              }
                                                           
                                                              else
                                                              {
                                                                Serial.println("Pas d'alarme");
                                                              }
                                                             
                                                              delay(1000);
                                                          }
                                                        
                                                          if (touche=='#') lcd.clear(); else lcd.print(touche); // efface écran si appui # sinon  affiche touche
                                                        
                                                          delay(100);
                                                        }
                                                      }
                                                    }
                                                    
                                                    }

                                                    -
                                                    Edité par melanouille 29 mars 2015 à 18:32:49

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      29 mars 2015 à 12:49:50

                                                      Ton code contient 2 fonction setup... tu ne trouves pas ça étrange ???
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        29 mars 2015 à 17:38:16

                                                        je sais pas... je suppose qu'y devrait y en avoir qu'une... 

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        arduino

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                        • Editeur
                                                        • Markdown