Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Code arduino



  1. #1
    ktber

    Code arduino

    bonjour,
    je cherche à faire tourner deux moteurs en utilisant ce module : https://www.bananarobotics.com/shop/...-Driver-Module .
    Les deux moteurs devront se mettre en marche pendant un certain nombre de secondes, un certain nombre de fois par semaine. Deux boutons devront aussi servir à lancer les moteur manuellement (le moteur s’arrête quand on relâche le bouton) sans dérégler la "programmation" de mise en marche sur la semaine.

    Quelles sont donc les instructions (de code) les plus efficaces pour respecter ces conditions ?

    Merci beaucoup

    -----


  2. Publicité
  3. #2
    HAYAC

    Re : Code arduino

    Bonjour et bienvenu sur futura,

    Déjà, un schéma du montage avec les entrées et sorties de la carte arduino.
    Le model de la carte arduino, les modules complémentaires exactes utilisés.
    D'autre par, nous n'allons pas écrire ton programme à ta place, présente nous tes réflexions et là nous t’aiderons.

    Cordialement,

  4. #3
    Yoruk

    Re : Code arduino

    Citation Envoyé par ktber Voir le message
    un certain nombre de secondes, un certain nombre de fois par semaine.
    Tu as besoin de précision ? Il te faudra un module horloge externe, non ?
    La robotique, c'est fantastique !

  5. #4
    ktber

    Re : Code arduino

    Je n'ai pas besoin de précisions, du moment que le moteur (une pompe pour aroser des plantes ) se déclenche un certain nombre de fois (3ou4 fois) par semaine pendant un temps défini.
    J'ai pensé à utiliser la bibliothèque "time" ainsi que "timealarms" avec la fonction "Alarm.alarmRepeat(dowMonday,1 2,00,00,Plant1);" et d'en mettre plusieurs pour chaque jour de la semaine où le moteur doit tourner.

  6. #5
    HAYAC

    Re : Code arduino

    Bonjour Yoruk,

    Tu as raison mais ne vas pas trop vite, voyons déjà ce que KTBER à pensé pour la réalisation de son projet

    Cordialement,

  7. A voir en vidéo sur Futura
  8. #6
    Yoruk

    Re : Code arduino

    Donne un schéma global du système, et une idée générale de l’algorithme utilisé.

    (@Hayac -> Oui, attendons...)
    La robotique, c'est fantastique !

  9. Publicité
  10. #7
    ktber

    Re : Code arduino

    En effet, vous n'allez pas écrire le programme à ma place, je voulais juste d'abord introduire mon sujet.
    Comme je le disait au-dessus, ce programme à pour but de déclencher des pompes (moteurs dc) pour arroser 2 plantes.
    J'utilise la arduino uno r3. Voici mon code tel qu'il est actuellement :


    #include <Time.h>
    #include <TimeAlarms.h>

    #define A-IA 10 //pump 1 speed control
    #define A-IB 11 //pump 1 reverse / forward

    #define B-IA 10 //pump 2 speed control
    #define B-IB 11 //pump 2 reverse / forward


    void setup()
    {
    pinMode(B-IA, OUTPUT);
    pinMode(B-IB, OUTPUT);
    digitalWrite(B-IA, LOW); //motor off
    digitalWrite(B-IB, LOW);

    //Plant 1
    Alarm.alarmRepeat(12,00,0, plant1); //Aroser la plant1 chaque jour

    //Plant 2
    Alarm.alarmRepeat(dowMonday,8, 30,30,plant2a);
    Alarm.alarmRepeat(dowWednesday ,8,30,30,plant2b); //Aroser la plant2 trois fois par semaine
    Alarm.alarmRepeat(dowFriday,8, 30,30,plant2c);

    }

    void loop() {

    void plant1(){
    digitalWrite(A-IA, HIGH); //on
    digitalWrite(A-IB, HIGH); //forward
    delay(10000); //10sec
    digitalWrite(A-IA, LOW); //off
    digitalWrite(A-IB, LOW);
    }

    void loop() {

    void plant2a(){
    digitalWrite(B-IA, HIGH); //on
    digitalWrite(B-IB, HIGH); //forward
    delay(10000); //10sec
    digitalWrite(B-IA, LOW); //off
    digitalWrite(B-IB, LOW);
    }

    void loop() {

    void plant2b(){
    digitalWrite(B-IA, HIGH); //on
    digitalWrite(B-IB, HIGH); //forward
    delay(10000); //10sec
    digitalWrite(B-IA, LOW); //off
    digitalWrite(B-IB, LOW);
    }

    void loop() {

    void plant2c(){
    digitalWrite(B-IA, HIGH); //on
    digitalWrite(B-IB, HIGH); //forward
    delay(10000); //10sec
    digitalWrite(B-IA, LOW); //off
    digitalWrite(B-IB, LOW);
    }

    }

  11. #8
    Yoruk

    Re : Code arduino

    Du code est inutile sans schéma !

    Et le prochain coup, sélectionne ton code, va dans l'éditeur avancé, et clique sur l’icône en forme de "#" pour mettre ton code entre balises, histoire qu'on puisse le lire...

    PS : empiler les fonctions dans le loop() est une très mauvaise idée...!
    PS2 : multiplier les fonctions loop() ne va pas marcher !
    Dernière modification par Yoruk ; 28/03/2015 à 10h03.
    La robotique, c'est fantastique !

  12. #9
    ktber

    Re : Code arduino

    Je m'excuse, voici mon schéma : schéma.jpg

    Le module en rouge est un "HG7881 (L9110) Dual Channel Motor Driver Module",
    Infos concernant les pin de ce module : (source : https://www.bananarobotics.com/shop/...-Driver-Module )

    A-IA et B-IA contrôlent respectivement la vitesse de chaque moteur (A et B)
    A-IB et B-IB contrôlent respectivement la direction de chaque moteur (A et B)

    Je remet mon code afin que vous puissiez le lire :
    Code:
    #include <Time.h>
    #include <TimeAlarms.h>
    
    #define A-IA 10 //pump 1 speed control
    #define A-IB 11 //pump 1 reverse / forward
    
    #define B-IA 10 //pump 2 speed control
    #define B-IB 11 //pump 2 reverse / forward
    
    
    void setup() 
    {
      pinMode(B-IA, OUTPUT);
      pinMode(B-IB, OUTPUT);
      digitalWrite(B-IA, LOW);                                 //motor off
      digitalWrite(B-IB, LOW);
      
    //Plant 1
      Alarm.alarmRepeat(12,00,0, plant1);                      //Aroser la plant1 chaque jour
      
    //Plant 2
        Alarm.alarmRepeat(dowMonday,8,30,30,plant2a);
        Alarm.alarmRepeat(dowWednesday,8,30,30,plant2b);       //Aroser la plant2 trois fois par semaine
        Alarm.alarmRepeat(dowFriday,8,30,30,plant2c);
    
    }
    
    void loop() {
    
      void plant1(){
      digitalWrite(A-IA, HIGH); //on
      digitalWrite(A-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(A-IA, LOW); //off
      digitalWrite(A-IB, LOW);  
    }
    
    void loop() {
    
      void plant2a(){
      digitalWrite(B-IA, HIGH); //on
      digitalWrite(B-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(B-IA, LOW); //off
      digitalWrite(B-IB, LOW);
    }
    
    void loop() {
    
      void plant2b(){
      digitalWrite(B-IA, HIGH); //on
      digitalWrite(B-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(B-IA, LOW); //off
      digitalWrite(B-IB, LOW);
    }
    
    void loop() {
    
      void plant2c(){
      digitalWrite(B-IA, HIGH); //on
      digitalWrite(B-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(B-IA, LOW); //off
      digitalWrite(B-IB, LOW);
    }
    
    }
    J'ai bien noté que multiplier les fonctions loop ne marchera pas, que doit-je donc faire alors ?

  13. #10
    ktber

    Re : Code arduino

    RECTIFICATION : sauf erreur de ma part, cela devrait marcher cette fois non ?
    Code:
    #include <Time.h>
    #include <TimeAlarms.h>
    
    #define A-IA 5 //pump 1 speed control
    #define A-IB 6 //pump 1 reverse / forward
    
    #define B-IA 10 //pump 2 speed control
    #define B-IB 11 //pump 2 reverse / forward
    
    
    void setup() 
    {
      pinMode(B-IA, OUTPUT);
      pinMode(B-IB, OUTPUT);
      digitalWrite(B-IA, LOW);                                 //motor off
      digitalWrite(B-IB, LOW);
      
    //Plant 1
      Alarm.alarmRepeat(12,00,0, plant1);                      //Aroser la plant1 chaque jour
      
    //Plant 2
        Alarm.alarmRepeat(dowMonday,8,30,30,plant2a);
        Alarm.alarmRepeat(dowWednesday,8,30,30,plant2b);       //Aroser la plant2 trois fois par semaine
        Alarm.alarmRepeat(dowFriday,8,30,30,plant2c);
    
    }
    
    void loop() {
    
    void plant1(){
      digitalWrite(A-IA, HIGH); //on
      digitalWrite(A-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(A-IA, LOW); //off
      digitalWrite(A-IB, LOW);    
    }
    
    void plant2a(){
      digitalWrite(B-IA, HIGH); //on
      digitalWrite(B-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(B-IA, LOW); //off
      digitalWrite(B-IB, LOW);
    }
    
    void plant2b(){
      digitalWrite(B-IA, HIGH); //on
      digitalWrite(B-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(B-IA, LOW); //off
      digitalWrite(B-IB, LOW);
    }
    
    void plant2c(){
      digitalWrite(B-IA, HIGH); //on
      digitalWrite(B-IB, HIGH); //forward  
      delay(10000);             //10sec
      digitalWrite(B-IA, LOW); //off
      digitalWrite(B-IB, LOW);
    }
    
    }
    Dernière modification par ktber ; 28/03/2015 à 10h48.

  14. #11
    Yoruk

    Re : Code arduino

    Citation Envoyé par ktber Voir le message
    J'ai bien noté que multiplier les fonctions loop ne marchera pas, que dois-je donc faire alors ?
    En mettre une seule !

    Commence par rédiger en français la liste d'opérations que doit effectuer la arduino. Son algorithme quoi. "Si bouton enfoncé, alors....", "Si tel moment, alors...". C'est de ceci qu'on en déduira la code arduino. Une seule boucle est nécessaire...

    Il vient d'où celui que tu as posté ?

    (Ton schéma n'est pas encore validé par les modos...)

    EDIT : Non, ton second code est toujours affreux... On ne peux pas empiler les déclarations de fonctions les unes dans les autres ! Tente de faire compiler ça par l'IDE arduino pour voir...!
    Il faudra aussi que tu expliques le fonctionnement des timers... Je ne connais pas cette librairie.
    Dernière modification par Yoruk ; 28/03/2015 à 10h51.
    La robotique, c'est fantastique !

  15. #12
    antek

    Re : Code arduino

    Faudra pas espérer faire débiter à la pile 9V beaucoup de courant
    Combien consomment tes moteurs ?

  16. Publicité
  17. #13
    jiherve

    Re : Code arduino

    Bonjour,
    les fonctions doivent être décrites en dehors de leur appel, mais comme elles ne sont utilisées qu'une fois on peut se passer de fonction et chainer tout le code, il faudra rajouter quelque chose pour assurer le timing long.
    Et effectivement la pile ne durera pas longtemps, mais vraiment pas du tout!!
    JR
    l'électronique c'est pas du vaudou!

  18. #14
    ktber

    Re : Code arduino

    Pour ce qui est de la pile 9v je compte surement la remplacer par un petit transformateur. En effet elle ne tiendra pas longtemps vu que chaque moteur utilise 800mAh.
    Pour ce qui est du code, j'ai réussit à en faire un qui marche. Je l'ai testé et tout fonctionne. Le voici :
    Code:
    /*
    Self watering plants : 2plants ---> planta one is watered daily
                                   ---> plantb  one is watered 3 times a week
       Connect:
         A-IA on pin 5
         A-IB on pin 6
         B-IA on pin 10
         B-IB on pin 11
    */
    
    
    #include <Time.h>
    #include <TimeAlarms.h>
    
    void setup()
    {
      Serial.begin(9600);
      setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011
      Alarm.alarmRepeat(8,30,0, planta);  // 8:30am every day
      Alarm.alarmRepeat(dowMonday,8,30,30, plantba);  // 8:30:30 every Monday
      Alarm.alarmRepeat(dowWednesday,8,30,30, plantbb); 
      Alarm.alarmRepeat(dowFriday,8,30,30, plantbc);
      
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      digitalWrite(5, LOW);   //motor off
      digitalWrite(6, LOW);
      digitalWrite(10, LOW);  //motor off
      digitalWrite(11, LOW);
    }
    
    void  loop(){  
      digitalClockDisplay();
      Alarm.delay(1000); // wait one second between clock display
    }
    
    void planta(){
    Serial.println("Watering PlantA");
      digitalWrite(5, HIGH); //on
      digitalWrite(6, HIGH); //forward  
      delay(10000);                                                                      
      digitalWrite(5, LOW);  //off
      digitalWrite(6, LOW);
      Serial.println("Stop Watering PlantA");}
    
    
    void plantba(){
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                       
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
    }
    
    void plantbb(){
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                         
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
    }
    
    void plantbc(){
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                     
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
    }
    
    
    
    void digitalClockDisplay()
    {
      // digital clock display of the time
      Serial.print(hour());
      printDigits(minute());
      printDigits(second());
      Serial.println(); 
    }
    
    void printDigits(int digits)
    {
      Serial.print(":");
      if(digits < 10)
        Serial.print('0');
      Serial.print(digits);
    }
    Je précise que je débute dans le domaine et mon code est peut-être "affreusement mal écrit".

    Je cherche maintenant à ajouter une fonction qui lancerait une moteur manuellement en appuyant sur un bouton. J'ai essayé d'incorporer le programme exemple "button" de l'arduino. Le code ne fonctionne alors plus, mais je ne sait pas pourquoi. Voici le code :
    Code:
    /*
    Self watering plants : 2plants ---> 1srt one is watered daily
                                   ---> 2nd  one is watered 3 times a week
       Connect:
         A-IA on pin 5
         A-IB on pin 6
         B-IA on pin 10
         B-IB on pin 11
    */
    
    
    #include <Time.h>
    #include <TimeAlarms.h>
    
      int buttonState = 0;         // variable for reading the pushbutton status
      int button2State = 0;
    
    void setup()
    {
      Serial.begin(9600);
      setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011
      Alarm.alarmRepeat(8,30,0, planta);  // 8:30am every day
      Alarm.alarmRepeat(dowMonday,8,30,30, plantba);  // 8:30:30 every Monday
      Alarm.alarmRepeat(dowWednesday,8,30,30, plantbb); 
      Alarm.alarmRepeat(dowFriday,8,30,30, plantbc);
      
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      digitalWrite(5, LOW);   //motor off
      digitalWrite(6, LOW);
      digitalWrite(10, LOW);  //motor off
      digitalWrite(11, LOW);
      
      pinMode(2, INPUT);
      pinMode(7, INPUT);
      
    }
    
    void  loop(){  
      digitalClockDisplay();
      Alarm.delay(1000); // wait one second between clock display
    }
    
    
      buttonState = digitalRead(2);
      if (buttonState == HIGH) {
    Serial.println("Watering PlantA");
      digitalWrite(5, HIGH); //on
      digitalWrite(6, HIGH); //forward  
      delay(10000);                                                          
      digitalWrite(5, LOW);  //off
      digitalWrite(6, LOW);
      Serial.println("Stop Watering PlantA");
      }
    
      button2State = digitalRead(7);
        if (button2State == HIGH) {
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                      
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
      }
      
      
    void planta(){
    Serial.println("Watering PlantA");
      digitalWrite(5, HIGH); //on
      digitalWrite(6, HIGH); //forward  
      delay(10000);                                                                     
      digitalWrite(5, LOW);  //off
      digitalWrite(6, LOW);
      Serial.println("Stop Watering PlantA");
    }
    
    
    void plantba(){
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                 
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
    }
    
    void plantbb(){
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
    }
    
    void plantbc(){
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                     
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
    }
    
    
    
    void digitalClockDisplay()
    {
      // digital clock display of the time
      Serial.print(hour());
      printDigits(minute());
      printDigits(second());
      Serial.println(); 
    }
    
    void printDigits(int digits)
    {
      Serial.print(":");
      if(digits < 10)
        Serial.print('0');
      Serial.print(digits);
    }

  19. #15
    Biname

    Re : Code arduino

    Salut,

    Un site permet de simuler en ligne un circuit comportant un Arduino, son code et son circuit ! Dans la version gratuite, seules quelques librairies sont disponibles.

    http://123d.circuits.io/
    Et mon test. Est-il accessible à tous ????
    http://123d.circuits.io/circuits/669...d-circuit/edit

    Biname

  20. #16
    Yoruk

    Re : Code arduino

    Citation Envoyé par ktber Voir le message
    Je cherche maintenant à ajouter une fonction qui lancerait une moteur manuellement en appuyant sur un bouton. J'ai essayé d'incorporer le programme exemple "button" de l'arduino. Le code ne fonctionne alors plus, mais je ne sait pas pourquoi.

    Erreur de syntaxe à première vue... Tente de corriger avec l'extrait de code suivant, et dis-nous comment tu as câblé ton bouton.

    Code:
    void  loop(){  
      digitalClockDisplay();
      Alarm.delay(1000); // wait one second between clock display
    
    // }
    
      buttonState = digitalRead(2);
      if (buttonState == HIGH) {
    Serial.println("Watering PlantA");
      digitalWrite(5, HIGH); //on
      digitalWrite(6, HIGH); //forward  
      delay(10000);                                                          
      digitalWrite(5, LOW);  //off
      digitalWrite(6, LOW);
      Serial.println("Stop Watering PlantA");
      }
    
      button2State = digitalRead(7);
        if (button2State == HIGH) {
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                      
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
      }
      
      
    }
    
    void planta(){
    Serial.println("Watering PlantA");
      digitalWrite(5, HIGH); //on
      digitalWrite(6, HIGH); //forward  
      delay(10000);                                                                     
      digitalWrite(5, LOW);  //off
      digitalWrite(6, LOW);
      Serial.println("Stop Watering PlantA");
    }
    
    
    void plantba(){
      Serial.println("Watering PlantB");
      digitalWrite(10, HIGH); //on
      digitalWrite(11, HIGH); //forward  
      delay(10000);                                                                 
      digitalWrite(10, LOW);  //off
      digitalWrite(11, LOW);
      Serial.println("Stop Watering PlantB");
    }
    La robotique, c'est fantastique !

  21. #17
    ktber

    Re : Code arduino

    En effet, cela était bien du à cet erreur de ma part. J'ai finalement achevé le code et tout fonctionne a merveille.
    Merci beaucoup de votre aide

Sur le même thème :

Discussions similaires

  1. ARDUINO, pont en H, code
    Par fooxxe dans le forum Électronique
    Réponses: 74
    Dernier message: 10/04/2015, 12h08
  2. Suiveur Solaire Arduino aide Code
    Par jouliojules dans le forum Électronique
    Réponses: 13
    Dernier message: 08/04/2015, 13h39
  3. Problème code arduino compteur de personnes
    Par savoyard74 dans le forum Électronique
    Réponses: 13
    Dernier message: 17/03/2015, 07h14
  4. Arduino: code pour un moteur DC !
    Par urtechnic dans le forum Électronique
    Réponses: 12
    Dernier message: 04/08/2014, 21h39
  5. Dé-compiler le code Arduino d'une Attiny85 .?
    Par qcastl32 dans le forum Électronique
    Réponses: 5
    Dernier message: 21/06/2013, 22h07