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 :

Egreneur à poudre automatique de précision


Sujet :

Arduino

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Egreneur à poudre automatique de précision
    Bonjour à tous,


    Avant de commencer je doit avouer que je suis un total noob en Arduino. J’ai la fibre du bidouillage que ce soit en mécanique ou en temps que 3D maker mais Arduino pour moi c’est nouveau. J’ai seulement commencé à me documenter blog, vidéo…etc.

    Je suis tireur sportif et rechargeur (c’est à dire que je fabrique mes cartouches moi même pour des raisons de précision et de coût), l’étape de la pesée de poudre est fastidieuse, source de gaspillage en cas de mauvaise manipulation et surtout chronophage.
    - A la doseuse volumétrique, avoir une charge légèrement inférieure.
    - La mettre en balance à fléau.
    - Utiliser l'égreneur jusqu'a atteindre le poids.
    - Jeter le tout dans un entonnoir placé sur une douille.


    Mon projet est de remédier à cela, bien évidemment, il existe des machines qui font ça automatiquement, moyennant quelque 2 ou 300€ dont voici le principe (https://youtu.be/3nJRcIPCHqI?t=264). Comme tout radin doublé d’un bidouilleur, cette perspective m’est moralement insupportable, c’est du gâchis*!

    C’est là qu’Arduino entre en jeu…

    L’idée est donc*:
    -De fabriquer une balance de «*précision*» (avec fonction tare et écran).
    -De fixer un objectif de poids à atteindre.
    -De faire tourner avec un moteur stepper, la «*biroute*» d’un égreneur (qui est, en gros, un vase plein de poudre qui sort au bout d’un tube lorsque l’on fait tourner celui-ci). A différente vitesses de plus en plus faible jusqu’à atteindre précisément le poids souhaité en laissant des temps de stabilisation de la mesure et rotation inverse très courte tout à la fin (ce qui justifie le stepper je pense).
    - Bip sonore en fin de chargement.

    Machine qui sera en priorité adressée aux charges d’arme d’épaule qui sont les moins facile à doser à la doseuse volumétrique du fait du poids de poudre en trémie, différence de densité d’un lot de poudre à l’autre et du tassement (1,52g par ex).

    Matériel envisagé*:
    - carte Arduino UNO ou compatible.
    - capteur de force 100g +/-50mg (pour commencer, les balances 0,001g se trouvent à 20€, possibilité de cannibaliser*?).
    - ampli type HX711 pour le signal du capteur (utilise 2 broches digitales).
    - contrôleur moteur stepper type L293D ou L298N (utilise 4 broches digitales),
    - moteur électrique Stepper + multiplicateur d’origine ou fait maison en 3D print (puissance nécessaire?).
    - LCD 2x16 sur bus I2C (pour garder suffisamment de broches digitales disponibles).
    - Plaques 4 boutons (sur une entrée analogique, différentes résistances = différente valeurs de sortie, + et - pour le poids, tare, début/arrêt de pesée).
    - câbles de connexion.
    - breadboard
    - cable d’alimentation pile 9V.
    - Bouton on/off pour l’alim.
    - buzzer pour signaler le début et fin de pesée (utilise 1 broches digitale).
    - Reste du matos (égreneur, supports et boîtiers) seront modélisés ou téléchargés et imprimé en 3d.



    Codage*:
    C’est là que je crains le plus, mais avec de la patience je finirais bien par apprendre .



    -Votre avis sur la faisabilité, technique et de programmation pour un noob, sachant que je compte commencer doucement, d’abord réaliser la balance (ce sera déjà beau!)*?

    -Que pensez-vous du matériel que j’envisage, est-ce correct*?

    -Choisiriez vous un shield moteur directement (sachant que je n’ai qu’1 stepper à commander) ou une carte*comme ici?

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 185
    Points : 11 551
    Points
    11 551
    Par défaut
    Salut,
    Ton projet n'est pas si simple qu'il n'y parait surtout si tu veux atteindre une bonne précision.

    D'ailleurs qu'elle est la précision attendue ?
    La gamme complète, c'est à dire combien de gramme de poudre au total ?

    Le grand problème avec tout l'écosystème qui gravite autour de Arduino c'est que tout est bon marché et que la désillusion peut être grande dès qu'on attend une certaine performance. D'ailleurs c'est souvent à ce moment qu'on voit le mur que cache Arduino ; Tout le métier de l'électronique.

    Par exemple le fabricant du HX711 se garde bien de communiquer les défauts de non linéarité de son composant, ce qui se résume à une plaisanterie. Sans cette donnée, tu peux te retrouver avec une balance avec une précision de dingue pour des poids très faibles et avec une tolérance complètement pourrie, genre 25% d'imprécision, sur des poids plus grand. Et il y a tellement d'autres problème Idem pour la précision des moteurs pas à pas en fonction du couple dont tu as réellement besoin etc... Et la cerise sur le gâteau, une fois que tu as choisi tous des composants de qualité, tu es arrivé au prix de l’appareil que tu ne voulais pas acheter

    Ca dépend de ce que tu attends mais pas sur que tu atteignes une qualité supérieure à une balance du commerce.

    Ta liste de matériels me semble cohérent mais voilà c'est lorsque tout ça va être assemblés et exploités que le résultat ne sera peut être pas à la hauteur de tes attentes car j'imagine que pour du dosage de poudre il faut quand même de la précision.

    Par exemple, tu verras qu'un driver + un moteur pas à pas génèrent beaucoup de perturbation qui vont se répercuter dans l'électronique si on ne fait pas une étude sérieuse, mais qui n'est pas possible avec des shields, et dans une balance de précision si toutes les mesures font du yoyo lorsque le moteur tourne ça va pas le faire A ça si tu ajoutes toutes les imperfections et tolérances des composants bons marchés tu peux te rendre compte que tu n'es plus en phase avec la précision attendue

    Je n'essai pas de te décourager loin de là mais je t'invite à bien définir ton besoin en précision pour voir si vraiment une telle balance est faisable en DIY pas cher.

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Je comprend ta remarque, elle m'apparait pertinente et c'est le genre de réponse que j'attendais...

    Effectivement une perturbation de mesure pourrait donner des résultats abberants. Il va de soit qu'en tout les cas vu l'importance de la pesée en terme de sécurité (encore que ça dépend de la charge de poudre retenue et de sa position dans les tables de rechargement), il devrat y avoir un contrôle visuel permanent du niveau poudre dans les douilles et régulièrement un contrôle de la charge à la balance à fléau classique.

    J'estime pour une munition loisirs qu'il faut que la charge demeure à + ou - 0.05g de la charge prévue (sur 2,80g par ex), au delà, je ne presserais pas la détente (surtout si c'est au dessus!).

    Si réellement une telle précision n'est pas atteignable par balance électronique, j'avais envisagé le même système mais avec des capteurs pour repérer la position du bras de la balance à fléau (qui elle est redoutablement précise), cela dit, c'est tout de suite moins glamour...

  4. #4
    Membre habitué
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Points : 188
    Points
    188
    Par défaut
    Projet intéressant,

    Mais de là à faire ta balance toi-même c'est risqué. À mon sens, il faudrait partir
    sur deux balances du commerce. Une pour ton besoin de 100g et une autre de
    précision (genre 20 grammes max, classe 1 ou 2) que tu réserves exclusivement
    à la pesée de la charge, de la sorte, tu élimines les risques de déviations dans le
    temps. et le fait que ça constitue un ensemble parfaitement ajusté est un atout
    indéniable pour la fiabilité des mesures. Après l'égreneur tu l'as déjà et à priori il
    n'y a pas besoin de couple. Une transmission directe avec un moteur pas à pas
    approprié est envisageable.

    C'est tout. Du coup ça se résume à récupérer les infos de la balance et agir en
    conséquence. La pile 9v, il faut l'oublier aussi.

    Une recherche avec interfacing arduino scale ou interfacing arduino weighing scale
    donne ceci par exemple: https://www.avdweb.nl/arduino/measur...cale-interface

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    En effet ça serait dans ce cas plus facile de partir d'une balance du commerce, ton lien est très intéressant, par contre je ne sais pas trop dire si l'on peut retrouver un signal pwm sur la carte de la balance à tout les coups (apparemment ce n'est pas si évident que cela)...

  6. #6
    Membre habitué
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Points : 188
    Points
    188
    Par défaut
    Dans la mesure où c'est une balance numérique, il y a toujours une solution.
    Le lien donné n'est qu'un exemple (lu en diagonale) pour souligner la faisabilité.
    L'auteur avait fait le choix de travailler au niveau du convertisseur A/N (ADC).
    Il suffit d'identifier le composant, de récupérer son "datasheet" et le tour est joué.
    "PWM" ou pas, il y a forcément une sortie numérique exploitable.

    Après rien n'interdit de travailler encore plus en aval et de récupérer directement
    les données qui transitent vers l'afficheur. Là, nul besoin de calibrage, mais la
    mise en oeuvre est un peu plus ardu pour un néophyte.

    Enfin, dans le pire des cas et à défaut d'une petite interface de sortie dissimulée
    sur le pcb, ben tu auras une bonne carlingue avec ses capteurs.

    Edit:

    https://www.instructables.com/id/Dir...al-Purpose-IO/

    Attention, je ne préjuge pas de la pertinence des pages en liens, obtenues après
    une recherche sommaire, et que je n'ai fait que parcourir (visuellement).

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Re-bonjour à tous,

    Petit déterrage dans les règles^^
    J’ai reçu la majorité des composants, il manque le stepper et probablement quelques autres babioles.

    J’ai un peu galéré avec l’écran car l’adresse de celui-ci sur le bus i2c ne correspondait pas à celle de la library (0x3F, arrêtez moi si je raconte des foutaises). Mais maintenant tout va bien!

    A l’achat j’ai négligé de regarder le brochage du pad de 4 bouton que j’ai acheter, 4 boutons et seulement 4 broches…
    Nom : HTB1eyxJRpXXXXXTapXXq6xXFXXXg.jpg
Affichages : 1344
Taille : 20,2 Ko
    Les broches sont L1, L2, R1 et R2
    Bouton1 = L1+R1
    Bouton2 = L2+R1
    Bouton3 = L1+R2
    Bouton4 = L2+R2

    Autrement dit L1 alimente boutons 3&1
    L2 alimente boutons 2&4
    Donc bouton 1&2 ressortent sur la même broche, R1 et boutons 3&4 sur R2…

    Je n’ai pas encore trouvé le moyen d’utiliser les 4 boutons pour le moment j’alimente par L1 et j’essaie d’utiliser les boutons 3&1 comme plus et moins afin de changer la valeur du poids à atteindre (Pcible dans le code).
    Il se trouve que malgré mes efforts, je suis incapable de faire varier la valeur Pcible, si vous pouviez jeter un œil à mon code je vous en serais gré.

    Pour note*: Le moniteur série ne me sert qu’a vérifier la valeur Pcible et de etatboutonplus et etatboutonmoins.
    Ignorez tout ce que est relatif au LCD i2c, ça marche!

    Code : 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
     
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
     
    LiquidCrystal_I2C lcd(0x3F,16,2);
     
    const int alimboutonpin = 4; //alim des boutons pin4
    const int boutonpluspin = 2; //bouton plus pin2
    const int boutonmoinspin = 3; //bouton moins pin3
     
    int etatboutonplus;	//etatboutonplus sera la variable
    int etatboutonmoins;	//etatboutonmoins sera la variable
     
    void setup()
    {
    lcd.init();
    lcd.clear();
    lcd.backlight();
    lcd.setCursor(0, 0);
    lcd.display();
    lcd.print("P cible(G):");
    lcd.setCursor(0,1);        // place le curseur col0 rangée1
    lcd.print("P actuel(G):"); // texte centré sur la ligne 2
     
    pinMode(alimboutonpin, OUTPUT); //Initialisation de l'alim boutons en sortie
    pinMode(boutonpluspin, INPUT_PULLUP);      //bouton+ entrée
    pinMode(boutonmoinspin, INPUT_PULLUP);      //bouton- entrée
     
    Serial.begin(9600);// initialisation de la communication
    Serial.println("Communication initialisée");// envoi d'un message
     
    }
     
     
    void loop()
    {
    lcd.setCursor(12,0); //curseur colonne12 rangee1
    float Pcible; //Variable Pcible
    lcd.print(Pcible);  //affichage pcible
    lcd.setCursor(12,1); //curseur colonne12 rangee2
    float Pact;  //variable Pact temporaire
    lcd.print(Pact);    //affichage Pact
    delay(100);
     
    digitalWrite(boutonpluspin, LOW);
    digitalWrite(boutonmoinspin, LOW);
    digitalWrite(alimboutonpin, HIGH);   //On alimente les boutons
     
    int etatboutonplus = digitalRead(boutonpluspin);
    if (etatboutonplus == HIGH) {       //Si etatboutonplus est HIGH
    Pcible = Pcible + 0.01; //Pclibe augmente de 00.1
      }
      else {  } //sinon rien
     
    int etatboutonmoins = digitalRead(boutonmoinspin);
    if (etatboutonmoins == HIGH) {       //Si etatboutonmoins est HIGH
    Pcible = Pcible - 0.01; //Pclibe diminue de 0.01
      }
      else {  } //sinon rien
     
    delay(1000);
    Serial.println(Pcible);
    Serial.println(etatboutonplus);
    Serial.println(etatboutonmoins);
     
    }
    Je suis un gros noob donc j’ai merdé, mais où?


    Vous remerciant par avance pour vos lumières,
    Reloader

  8. #8
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 394
    Points : 591
    Points
    591
    Par défaut
    Salut,

    Citation Envoyé par Reloader Voir le message
    A l’achat j’ai négligé de regarder le brochage du pad de 4 bouton que j’ai acheter, 4 boutons et seulement 4 broches…
    Les broches sont L1, L2, R1 et R2
    Bouton1 = L1+R1
    Bouton2 = L2+R1
    Bouton3 = L1+R2
    Bouton4 = L2+R2

    Autrement dit L1 alimente boutons 3&1
    L2 alimente boutons 2&4
    Donc bouton 1&2 ressortent sur la même broche, R1 et boutons 3&4 sur R2…

    Je n’ai pas encore trouvé le moyen d’utiliser les 4 boutons...
    C'est tout simplement une matrice, c'est très classique et tu devrais trouver des exemples sur le net.

    Un exemple : http://playground.arduino.cc/Main/KeypadTutorial

    jm

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par jmv Voir le message
    Salut,
    C'est tout simplement une matrice, c'est très classique et tu devrais trouver des exemples sur le net.
    Un exemple : http://playground.arduino.cc/Main/KeypadTutorial
    jm
    Bonjour,

    @jmv Ce problème est désormais réglé grâce a ton tuyau, merci!
    J'ai donc un UNO avec un LCD i2c et un clavier 4 boutons fonctionnels, la variable Pcible (Poids à atteindre) se modifie aisément avec 2 boutons (+ et -), tout roule, mais je crois que c'était le plus facile...


    Maintenant je dois cannibaliser une balance de précision de ce type :
    Nom : yieryi-10g-20g-50g-100g-Electronic-Scales.jpg
Affichages : 1508
Taille : 183,3 Ko

    Le circuit imprimé porte les références:
    ZLS RoHS (ce dernier sigle est une norme européenne)
    8028-F V1.1

    L'écran est de type OLED (seulement 2fils).

    Je ne trouve pas de datasheet, peut-être que je m'y suis mal pris... vous avez des idées?
    A défaut de datasheet est-il possible de récupérer des données de l'écran sur mon UNO et si oui comment?


    L'autre solution, moins fiable, comme évoqué précédemment, un HX711 directement sur les câbles de la cellule de charge.



    Merci d'avance pour le coup de main!

  10. #10
    Membre habitué
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Points : 188
    Points
    188
    Par défaut
    Ton interface "oled" est à l'évidence de type "i2c". Comme tu ne disposes pas de
    matériel adéquat pour savoir ce qui se "trame" sur le bus, enfin, je suppose,
    tu peux malgré tout t'en sortir en faisant une recherche genre "arduino i2c sniffer".
    Ceci te permettra de récupérer le "buffer" qui transite entre l'unité de traitement
    et le module "oled". Avec plus d'une mesure, cela te donnera plusieurs chaines
    qui par comparaison t'aideront à repérer entre autres des données comme les
    adresses des deux acteurs dans le bus et surtout, les valeurs à afficher.

    Une fois ces informations clairement identifiables dans le processus de
    communication, tu pourras mettre en place une stratégie pour relever tes
    mesures de "poids", toujours à coup de "sniffing", ou si possible en "i2c", en
    tentant une "impersonation" à coup de "peeking", du moins pour ce que je vois
    de moins intrusif et abordable sur l'instant.

  11. #11
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 010
    Points : 2 331
    Points
    2 331
    Par défaut
    Bonjour Reloader

    Pourquoi ne pas faire ta propre balance avec des gauges de contrainte de type BF350
    assistées du circuit HX711, il y a une bibliothèque pour ça, une vidéo

    .

    Tu pourras avoir la sensibilité désirée, il ne "restera plus" qu'à l'étalonner.
    Le tout géré par un Arduino bien sûre!

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par CTJayce Voir le message
    Ton interface "oled" est à l'évidence de type "i2c".
    Bonjour,
    Merci pour ton aide le problème c'est que je me suis planté, les 2 fils alimentent l'éclairage uniquement! L'affichage en temps que tel transite par une quizaine de "broches plates" sur lesquelles se pose une espèce de bande caoutchouc (probablement avec des chemins conducteurs) sur laquelle se pose la dalle oled, le tout en pression par la fermeture du chassis de la balance (je n'ai pas réussi a remonté!).


    @jpbbricole
    En effet c'est ma solution de secours, en fait pour une précision a 2 ou 3 centigramme peut-être que le hx711 sera limite selon les intervenants précédents, c'est pour cela que je cherchais une autre solution.
    Maintenant comme je n'ai rien trouvé d'autre j'ai un hx711, je vais soudé les broche et tester tout ça.


    Autre souci a propos du stepper, voici mon code d'essai, l'appui sur le bouton S2 enclenche la fonction void stepper() (seulement pour faire marcher le stepper, je n'ai pas de pesée pour le moment) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void stepper()
    {
    moteur.step(-2048);
    delay(100);
    moteur.step(2048);
    delay(100);
    }
    Le truc c'est que la fonction step est bloquante, en conséquence je suppose que le poids sur la balance ne sera pas lu en même temps que le stepper tourne... ce qui pose un léger problème puisque c'est justement le poids (quand il approche de l'objectif) qui dois arrêter le stepper!

    Des idées? En fractionnant le code et en appelant la future fonction void pesee() régulièrement peut-être?


    Merci pour votre aide en tout les cas!

  13. #13
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 010
    Points : 2 331
    Points
    2 331
    Par défaut
    Citation Envoyé par Reloader Voir le message
    Bonjour,
    En effet c'est ma solution de secours, en fait pour une précision a 2 ou 3 centigramme peut-être que le hx711 sera limite selon les intervenants précédents, c'est pour cela que je cherchais une autre solution.
    Maintenant comme je n'ai rien trouvé d'autre j'ai un hx711, je vais soudé les broche et tester tout ça.
    Quand je disais faire sa propre balance, c'est y compris la lame qui flèchit équipée de jauges BF350, ainsi c'est la sensibilité à la flexion de la lame, beaucoups moins que la sensibilité du HX711 qui rentre en ligne de compte (c'est purement théorique, j'ai commandé des BF350 pour essayer).

    Pour le problème du programme, j'ai pas bien compris le va et vient de moteur.step(-2048); à moteur.step(2048);, mais si c'est pendant les pas vers -2048 que la "biroute" sort la poudre et qu'il faut peser, il faut fractionner les -2048.
    Code : 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
    void stepper(int poidsVoulu)
    {
    	for (int i=0; i > -2048; i -= 16)    // Par 16 pas
    	{
    		moteur.step(-16);
    		if (pesee() >= poidsVoulu)
    		{
    			break;                     // On sort de la boucle         
    		}
    	}
    }
     
    int pesee()
    {
    	int poids=0;
    	// ici lecture balance dans poids
    	return poids;
    }
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  14. #14
    Membre habitué
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Reloader Voir le message
    Bonjour,
    Merci pour ton aide le problème c'est que je me suis planté, les 2 fils alimentent l'éclairage uniquement! L'affichage en temps que tel transite par une quizaine de "broches plates" sur lesquelles se pose une espèce de bande caoutchouc (probablement avec des chemins conducteurs) sur laquelle se pose la dalle oled, le tout en pression par la fermeture du chassis de la balance
    Dans ce cas, c'est un afficheur "lcd", peut-être 6 "digits" 7 segments, avec
    une interface parallèle. Le lien 2 précédemment donné (message #6) traite
    de ce cas. Par contre, sauf s'il y a un petit "driver lcd" en amont, et j'en
    doute, ça va monopoliser pas mal de "pins" sur ton arduino. L'achat d'un
    registre à décalage (16 bits) te simplifiera grandement les choses.

    Pour ta recherche, "16 bit (sync/synchronous) parallel(-in) to serial(-out)
    shift register" ou "16 bit pi-so shift register" ou encore "16 bit parallel load
    shift registrer" devraient te donner pas mal de références de composants,
    et surtout ça va énormément te simplifier le code présent dans le lien 2
    précédemment cité.

    Pour ton "steeper", il existe d'autres "libs" arduino avec des "apis" non
    bloquantes, par exemple "AccelStepper".
    (http://www.airspayce.com/mikem/arduino/AccelStepper/).

    Pour en revenir à ta balance du commerce, plus un visu sur son afficheur,
    je maintiens que c'est une sécurité non négligeable compte tenu de la
    finalité de l'application.

    edit:

    En relisant le fil, je remarque que tu as déjà ou que tu envisages des
    "périphériques" "i2c" dans ton montage. Dans ce cas, un "port expander"
    peut aussi faire l'affaire. Une recherche avec "16 bit general purpose
    parallel i/o i2c" donne entre autres un joli composant au doux nom de
    MCP23017, ce qui te permettra encore une économie substantielle des
    ports de ton arduino et une relative simplification dans le code.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    @jpbbricole
    Mon stepper (le classique 28byj-48) à 32pas/tr et un réducteur /64 32*64=2048 pour que l'arbre de sortie face un tour, c'est juste une valeur prise au pif pour essayer...
    J'ai effectivement utilisé une boucle "for" en fractionnant par 200pas (la aussi arbitraire pour le moment), avec mise à jour du poids en balance (Pact dans mon code) à chaque boucle.
    Pour la pesée j'ai une carcasse de balance avec un peson donné pour 50g alimenté par 2 piles 1.5v... je ne me sent pas trop de bricolé une jauge, mais j'ai peut-être tort...

    Citation Envoyé par CTJayce Voir le message
    Dans ce cas, c'est un afficheur "lcd", peut-être 6 "digits" 7 segments, avec
    une interface parallèle. Le lien 2 précédemment donné (message #6) traite
    de ce cas. Par contre, sauf s'il y a un petit "driver lcd" en amont, et j'en
    doute, ça va monopoliser pas mal de "pins" sur ton arduino. L'achat d'un
    registre à décalage (16 bits) te simplifiera grandement les choses.

    Pour ta recherche, "16 bit (sync/synchronous) parallel(-in) to serial(-out)
    shift register" ou "16 bit pi-so shift register" ou encore "16 bit parallel load
    shift registrer" devraient te donner pas mal de références de composants,
    et surtout ça va énormément te simplifier le code présent dans le lien 2
    précédemment cité.

    Pour ton "steeper", il existe d'autres "libs" arduino avec des "apis" non
    bloquantes, par exemple "AccelStepper".
    (http://www.airspayce.com/mikem/arduino/AccelStepper/).

    Pour en revenir à ta balance du commerce, plus un visu sur son afficheur,
    je maintiens que c'est une sécurité non négligeable compte tenu de la
    finalité de l'application.

    edit:

    En relisant le fil, je remarque que tu as déjà ou que tu envisages des
    "périphériques" "i2c" dans ton montage. Dans ce cas, un "port expander"
    peut aussi faire l'affaire. Une recherche avec "16 bit general purpose
    parallel i/o i2c" donne entre autres un joli composant au doux nom de
    MCP23017, ce qui te permettra encore une économie substantielle des
    ports de ton arduino et une relative simplification dans le code.
    Autant pour moi, j'ai vu LED derrière le pcb j'en ai déduis écran oled, en fait c'est juste les led de l'éclairage.
    La solution que tu présente pour la pesée est de loin la plus intéressante, mais honnêtement je ne suis pas sur d'avoir les connaissances et la matériel pour, je vais essayer de trouvé un tuto pas à pas, surtout coté code... au pire ce sera HX711, le code est d'ailleurs en partie prêt.

    En effet mon LCD1602 est interfacé i2c, là encore ta méthode semble intéressante mais je ne suis pas sur d'avoir les capacités.

    Accelstepper est intéressante, le problème étant que les run() runspeed() et compagnie qui sont non bloquant n'ont pas l'air de vouloir prendre en compte le setSpeed(), du coup le mouvement est vraiment ultra lent, j'ai fini par laissé tomber, comme dit précédemment avec une boucle for, le code me semble ok de ce coté. A Pcible-0.5g je passe à des rotation plus courte avec temps d'attente et pesée dans la boucle.


    Pour résumer la situation, tout roule sauf la pesée, la méthode de CTjayce semble la bonne reste a trouver les moyens théoriques et techniques pour la mettre en œuvre.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Voici les nouvelles après les fêtes.

    J'en avait presque terminé coté software et hardware, malheureusement, comme je le craignait, le stepper 28byj48 est vraiment trop limite niveau couple, parfois ça tourne parfois non... sans charge...

    Heureusement j'ai en stock un stepper Nema17 et un driver L298N, sauf que je ne parvient pas à le faire fonctionner (un comble!).
    J'ai fait mes essais avec l'exemple présent dans arduino stepper_oneRevolution, le moteur vibre mais ne tourne pas...

    -Les connexions du moteur au driver semble correctes (A+ et A- passant ainsi que B+ et B-).
    -Coté Une les pins 13 12 11 10 sont branchés à In1 2 3 4 du L298N
    -Le L298N est alimenté par une vielle alimentation d'imprimante en 16V.
    -J'ai essayer dans l'exemple les 24 permutation possible des pins en cas ou j'aurais foiré mon branchement, sans résultat.

    Voici le code de l'exemple:
    Code : 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
     
    /* 
     Stepper Motor Control - one revolution
      
     */
     
    #include <Stepper.h>
     
    const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
                                         // for your motor
     
    // initialize the stepper library on pins 13 through 10:
    Stepper myStepper(stepsPerRevolution, 13,12,11,10);            
     
    void setup() {
      // set the speed at 60 rpm:
      myStepper.setSpeed(60);
      // initialize the serial port:
      Serial.begin(9600);
    }
     
    void loop() {
      // step one revolution  in one direction:
       Serial.println("clockwise");
      myStepper.step(stepsPerRevolution);
      delay(500);
     
       // step one revolution in the other direction:
      Serial.println("counterclockwise");
      myStepper.step(-stepsPerRevolution);
      delay(500); 
    }
    Des idées? Je sèche

  17. #17
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 010
    Points : 2 331
    Points
    2 331
    Par défaut
    Bonjour Reloader
    Citation Envoyé par Reloader Voir le message
    -J'ai essayer dans l'exemple les 24 permutation possible des pins en cas ou j'aurais foiré mon branchement, sans résultat.
    Je n'ai malheureusement pas de L298, je travaille essentiellement avec des A4988.

    Le code me paraît OK, sur quoi t'est tu basé pour le câblage? Il y a de nombreux exemples sur le Net.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Bonjour Reloader


    Je n'ai malheureusement pas de L298, je travaille essentiellement avec des A4988.

    Le code me paraît OK, sur quoi t'est tu basé pour le câblage? Il y a de nombreux exemples sur le Net.

    Cordialement
    jpbbricole
    Le code est très certainement OK, c'est exemple présent dans arduino même.
    Pour le branchement comme tu dit j'ai fouiné sur internet.
    L'alim est un transfo 16V 625ma, c'est certes un peu faible mais quand même, à vide! J'ai essayer en 32v 925ma, même problème sauf qu'il grogne plus fort.
    J'ai testé les câbles du stepper pour savoir quels enroulement étaient passant, sans résultat dans le sens ou tout semble correct. J'ai quand même permuté les câbles pour voir mais sans surprise rien n'y fait.

    Matériel chinois défectueux ce serait possible?
    Je doute quand même...

    [EDIT]
    Avec le code suivant, ça tourne, avec des saccades mais ça tourne!

    Code : 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
    void loop() {
     
     float delais=1;
     
       digitalWrite(13, HIGH);
       delay(delais);
       digitalWrite(13, LOW);
       delay(delais);
       digitalWrite(11, HIGH);
       delay(delais);
       digitalWrite(11, LOW);
       delay(delais);
        digitalWrite(12, HIGH);
       delay(delais);
       digitalWrite(12, LOW);
       delay(delais);
        digitalWrite(10, HIGH);
       delay(delais);
       digitalWrite(10, LOW); 
     
    }
    L'idée m'est venue ainsi, j'active le coté d'un enroulement, c'est ensuite forcément l'autre enroulement qui doit être activé (dans quel sens par contre c'est la loterie).

    In1 2 3 4 du L298N sont respectivement sur 13 12 11 10 de l'arduino.
    donc activation 13 11 12 10...
    Note que si j’intervertis un enroulement par exemple le 2eme soit les pin 11 et 10 ce qui donne la séquence 13 10 12 11, le moteur tourne en sens inverse (logique).

    Par contre le couple me semble faible, j'arrête l'arbre de sortie facilement à la main.

    J'avoue que j'ignore ce que je dois en conclure...

    C'est rageant de buter sur une connerie pareille alors que je devrait être en train de revoir le design 3D pour faire une support au stepper Nema17...

  19. #19
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 010
    Points : 2 331
    Points
    2 331
    Par défaut
    Salut Reloader

    J'ai commandé un driver L298 pour voire. Il y a des cavaliers sur cette carte, il sont OK?

    Citation Envoyé par Reloader Voir le message
    C'est rageant de buter sur une connerie pareille alors que je devrait être en train de revoir le design 3D pour faire une support au stepper Nema17...
    Avec quoi dessines-tu?, j'utilise Freecad.
    Imprimante 3d? j'ai une Creality CR-10S.

    Cordialement
    jppbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Bidouilleur di dimanche!
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Bidouilleur di dimanche!

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    3 cavaliers, deux pour envoyer de la tension sur les ENB et ENA (activation d'un moteur) le dernier pour envoyer le courant d'alimentation au transfo qui donne une sortie 5V.

    Freecad aussi!
    Anet A8.

    Voici le premier proto, mais comme je l'ai dit le couple du 28byj48 est finalement trop juste. Dommage sur le principe c'était bien parti...
    Nom : egreneur.jpg
Affichages : 1191
Taille : 93,3 Ko

    A bientot!

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/09/2019, 15h09
  2. Réponses: 3
    Dernier message: 25/11/2008, 16h52
  3. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 09h19
  4. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 17h35

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