IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Projet Arduino pour Noël, une bouteille à la mer


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Par défaut Projet Arduino pour Noël, une bouteille à la mer
    Bonjour
    j'ai un projet d'ascenseur de maison de poupée pour Noël et malheureusement la première version de l’électronique de gestion pour l'ascenseur c'est révélée décevante. Voilà plus de 15 jours que l’essai de la faire fonctionner sans résultat stable.
    Comme j'ai un shield type adafruit pour moteur et un arduino Mega 2560 je me suis dis que je pourrais remplacer mon module par l'arduino.
    Malheureusement faute de temps, je n'ai pas encore bûcher sur la programmation de l'arduino autrement qu'avec les exemples des livres et encore juste pour montrer à mon neveu.
    Noël approche et je n'ai toujours pas d'ascenseur voilà pourquoi je sollicite une bonne âme pour m'aider a programmer l'arduino.

    Cahier des charges:
    Moteur au choix j'ai un DC en 5V a engrenage ou un Servo en 5V a rotation continue type MG995
    j'ai trois boutons 0 1 2 et trois interrupteur de fin de course pour les étages 0 1 2
    plus un afficheur 7 segments anode commune j'ai aussi un CD4543 au besoins (l'afficheur peut être optionnel si trop peu de temps)
    un shield adafruit china
    un arduino Mega 2560
    Alimentation 5v pour le tout

    le programme doit:
    vérifier à quel étage il est au démarrage et l'afficher
    vérifier si il n'est pas entre 2 étage sinon redescendre au rez de chaussé
    monter et ou descendre en fonction de l'étage qu'il est et de l'appui sur le bouton puis afficher le tout sur l'afficheur

    en somme comme un vrai ascenseur !

    voilà je sais c'est beaucoup demander mais je suis coincé.
    ne m'envoyez pas vers la page qui présente un projet en ardublock car rien ne fonctionne entre ardublock et l'aduino ide.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    Pour résumer :
    - je prendrais le moteur DC et le un pont en H. Le shield Adafruit China est donc là.
    - pour les 6 interrupteurs as-tu prévu une résistance de pull-up ou de pull-down ?


    Voici un point de départ. Ce n'est pas complet, loin de là (il manque toute la gestion du moteur et de l'afficheur) . Pour les boutons, j'ai pris les entrées à partir de la sortie 40 pour ne pas utiliser les sorties PWM nécessaires au pilotage du moteur. S'il n'y a pas de résistance sur les interrupteurs, il faudra configurer les entrées en INPUT_PULLUP et modifier le code en conséquence.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    // Entrées sélection étage
    const btEtage0 = 40;
    const btEtage1 = 41;
    const btEtage2 = 42;
     
    // Entrées fin de course étage
    const finEtage0 = 43;
    const finEtage1 = 44;
    const finEtage2 = 45;
     
     
    void setup() 
    {
      pinMode(btEtage0, INPUT);
      pinMode(btEtage1, INPUT);
      pinMode(btEtage2, INPUT);
     
      pinMode(finEtage0, INPUT);
      pinMode(finEtage1, INPUT);
      pinMode(finEtage2, INPUT);
     
      versEtage(0);
    }
     
    void loop() 
    {
     
      if (digitalRead(btEtage0) == HIGH)
      {
        versEtage(0);
      }
      if (digitalRead(btEtage1) == HIGH)
      {
        versEtage(1);
      }
      if (digitalRead(btEtage2) == HIGH)
      {
        versEtage(2);
      }
      delay(200); // antirebond interrupteur
     
    }
     
     
    void versEtage(int etage)
    {
      switch(etage)
      {
        case 0:
          // démarrer moteur en descente car forcément en 1 ou 2
          while (digitalRead(finEtage0) == LOW) // tant que l'ascenseur n'est pas à l'étage 0
          {  }
          // arret moteur
          break;
        case 1:
          // où est l'ascenseur ?
          // démarrer moteur en montée si 0 ou en descente si 2eme
          while (digitalRead(finEtage1) == LOW) // n'est pas à l'étage 1
          {  }
           // arret moteur
          break;
        case 2:
          // démarrer moteur en montée (car forcément en 0 ou 1)
          while (digitalRead(finEtage2) == LOW) // n'est pas à l'étage 2
          {  }
           // arret moteur
          break;
      }
      delay(200);
     
    }

    J'ai un doute sur ce que j'ai fait quand même.... Tu démarres ton moteur avant la boucle, dans la boucle tu vérifies à quel étage tu te trouves pour l'afficheur et dès que tu es à l'étage voulu, tu sors de la boucle pour arrêter le moteur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 18
    Par défaut merci pour cette réponse
    Alors oui j'ai prévu une petite carte avec un connecteur ou je compte brancher tous les contacteurs et boutons et sur cette carte j'y ai mis des résistances de pull up

    " Tu démarres ton moteur avant la boucle"
    Oui pour être certain que l'ascenseur sera toujours en bas au départ et aussi si les filles tire sur l'ascenseur elles pourraient le mettre en deux étage ce qui pourrait poser problème donc il faut un contrôle de ce cotés

    "dans la boucle tu vérifies à quel étage tu te trouves pour l'afficheur et dès que tu es à l'étage voulu, tu sors de la boucle pour arrêter le moteur. "
    Oui l'idéal serait de modifier l'affichage quand ont passe sur un étage et une fois arrivé j'affiche l'étage et je coupe le moteur qui n'a pas vraiment besoins d'être alimenté car il y a un contre poids

    Pour l'afficheur pense tu qu'il soit possible de l'utiliser directement sur les sortie de l'arduino ou il vaut mieux utiliser le CD4543 ? c'est un afficheur 7 segments qui fait moins de la moitié en taille par rapport à un afficheur standard.

    Merci car je n'avais pas pensé au switch et mois j'avais un gros problème entre la gestion des boutons et des contacteurs.

    j'ai alimenté le tout avec une alimentation 5v mais comme toute l'électronique et la motorisation sont sur la cage d’ascenseur, j'ai fait passer les 5v dans les rails qui sont des tubes en aluminium sur lesquels
    glisse des roulements je n'avais pas de problème de ce cotés mais si je devais assuré l'alimentation correcte ne faudrait-il pas un tampon genre condensateur ou autre ?

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 252
    Par défaut
    Salut,
    Citation Envoyé par clucky Voir le message
    Merci car je n'avais pas pensé au switch et mois j'avais un gros problème entre la gestion des boutons et des contacteurs.
    Penses à faire attention aux rebonds dans les interrupteurs/switchs. On peut le faire en soft (moi j'évite toujours car c'est du boulot qu'on peut régler facilement en hard) ou en hard avec juste un condo en parallèle du switch :

    Nom : forum001.png
Affichages : 442
Taille : 8,2 Ko

    R1 est la résistance de pull-up

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonjour à tous

    Des anti-rebonds de manière systématique. T'es sérieux Vincent? Même les cartes de développement (STKx00) n'en n'ont pas! C'est bien de connaître ce phénomène, mais dans la plupart des cas, il n'est pas gênant. L’interrupteur entre la masse et l'entrée, le pull-up interne activé et roule ma poule.

    Les rails en alu pour l'alimentation c'est pas une bonne idée. L'alu comme tout les métaux s’oxyde (non oxydé l'alu est bleu, mais l’apparition de la couche d'oxyde est quasi instantanée en atmosphère normale), sauf que contrairement à la rouille, l’oxyde d'alu est plus costaux (il offre une protection de surface qui empêche la propagation de l’oxydation vers l'intérieur du matériau) et est isolant électriquement parlant. Pour cette raison, les contacts sur de l'alu ne sont pas bon.
    (Cuivre), laiton, maillechort, ou même acier sont bien mieux. Sinon tu le fais par fil.

    Le CD4543, c'est juste un circuit pour passer de la représentation binaire d'un chiffre à sa "représentation" 7 segments. Si tu as 7 sorties libre sur l'Arduino, c'est proprement inutile. Après son utilisation permet de ne pas devoir convertir le nombre en "représentation 7 segment" par le code, mais c'est pas difficile. En plus si tu n'a que trois chiffres à afficher tu peux simplifier le schéma et brancher quelques segments sur la même sortie.

    Bonne journée

    Delias

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par Delias Voir le message
    Des anti-rebonds de manière systématique. T'es sérieux Vincent? Même les cartes de développement (STKx00) n'en n'ont pas! C'est bien de connaître ce phénomène, mais dans la plupart des cas, il n'est pas gênant. L’interrupteur entre la masse et l'entrée, le pull-up interne activé et roule ma poule
    euh, si c'est important les rebonds. Le basculement d'un interrupteur n'est pas franc, il "rebondit" ce qui créée un signal plus ou moins carré sur ton entrée. Si tu as un système avec une fréquence d'acquisition de 10kHz par exemple, les rebonds tu les vois ! Et si ton entrée est un compteur d'impulsions ben ça fait mal

    Citation Envoyé par clucky
    j'y ai mis des résistances de pull up
    dans ce cas, il faut transformer les
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (digitalRead(btEtage0) == HIGH){}
    if (digitalRead(btEtage1) == HIGH){}
    if (digitalRead(btEtage2) == HIGH){}
    en
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (digitalRead(btEtage0) == LOW){}
    if (digitalRead(btEtage1) == LOW){}
    if (digitalRead(btEtage2) == LOW){}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Etude de marché pour projet de création d'une entreprise
    Par melcom_dev dans le forum Société
    Réponses: 27
    Dernier message: 27/01/2014, 10h42
  2. Une bouteille à la mer ?
    Par mvvvv dans le forum Emploi
    Réponses: 1
    Dernier message: 26/10/2009, 13h22
  3. Réponses: 3
    Dernier message: 26/03/2008, 16h17
  4. [2D] Mini-projet : question pour une interface graphique
    Par kitsune dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 10/03/2006, 14h59
  5. [langage] Une bouteille a la mer
    Par shinux2004 dans le forum Langage
    Réponses: 6
    Dernier message: 30/03/2005, 03h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo