Bonjour, je souhaite faire fonctionner un vérin électrique, donc un moteur pas a pas NEMA 23 dans mon cas, afin de pouvoir contrôler plusieurs pièce en mettant en butée le vérin, donc faire un aller retour précis et à vitesse modulable au vérin donc au moteur. Le tout devra s'actionner grâce à une douchette qui scannera un code barre correspondant à une pièce à contrôler , donc avec une vitesse précise et une course précise aussi qui changera en fonction des pièces donc des codes barre. Car chaque pièce à son code barre. Je possède tout le système j'ai la douchette qui est une Lecteur de code à barres Datalogic QuickScan I Lite | Logiscenter. Je possède tout le système électronique dont une carte arduino méga , un host usb pour la douchette, un driver microstepper DM556 pour le moteur NEMA 23 et une alimentation 220V to 24V. Le câblage et fait j'arrive à faire tourner mon moteur grâce à ce code:
J’aimerais maintenant pouvoir utiliser le programme qui permet à la douchette de scanner un code barre, afin de relier les deux et d’obtenir un programme qui lorsqu’on scan le code barre sur la pièce à tester, lance le programme correspondant à la pièce en question, donc avec une vitesse et une course prédéfinie. En quelque sorte faire un « si le scan donne 01, ex écuyer le programme qui correspond à 01 , sinon , ex écuyer le programme 02. Je ne suis pas un expert du C++ bien au contraire c’est pourquoi je demande votre aide , je vous remercie.
Je vous remercie , c’est celui que j’avais déjà utilisé qui fonctionne , il envoie beaucoup d’informations qui ressemble à du ascii mais qui ne correspond pas au code que l’on scanne , notre code barre est 01 et on obtient 59 perdu au milieu de plein d’autres lignes en résultat du scan.
Je précise que tout le câblage est fait que le moteur tourne et que la scannette est réglée et fonctionne avec le programme example de la bibliothèque USB host shield library 2.0 -> HID-> USBHID desc
Venir en butée, par exemple pour mesurer une pièce, avec un moteur pas à pas est délicat. Il n'y a rien de plus facile que de coincer l'axe et de ne pas pouvoir repartir en arrière. Pour ce type d'application, un moteur à courant continu est préférable.
L'axe ne viendrai pas réellement en butée mais il y aurait maximum une résistance de 80N sur cet axe, la puissance du moteur pas a pas est suffisante pour que ce système fonctionne
Partant du code qui fonctionne (USB host shield library 2.0 -> HID-> USBHID desc), tu lis un code barre et en fonction du code retourné tu appelles telle ou telle action.
Cette architecture te permet de tester les actions séparément et de pouvoir en ajouter autant que tu voudras.
Merci pour votre réponse mais c'est ce que je pensais, c'est ce que j'ai voulu représenter sur mon schéma posté plus haut, mais le problème est que je sais pas comment le faire.
Il y a des vérins électriques qui fonctionnent avec des moteurs cc, ou autosynchrones dits "sans balais". Cela dit, avec un vérin à moteur pas à pas, vous ne pouvez pas venir sur une butée mécanique et espérer en sortir toujours sans aide externe. Rien de plus facile que de coincer l'axe. Mais si votre principe de mesure exclut la butée mécanique alors pas de problème.
notre but est ici de faire tourner un moteur. Pouvons nous le faire tourner en scannant un code barre. relier un code barre au lignes du programme correspondant au moteur.
Bonjour je suis le collègue de froche et voici le programme qui nous permet de faire fonctionner le moteur. La seule difficulté est expliquée en commentaire du programme. En effet au delà de 32501, le while ne s'applique plus et le programme ne se poursuit pas donc le moteur tourne en continu. Maintenant nous devons réussir à faire en sorte de collecter les info de la douchette afin d'appliquer les lignes de programme correspondantes au code lu. Pour se faire nous pensions mettre les info du code lu dans un string et le comparer à une base de donnée sous forme de string. Si le code lu correspond au code n°1, on ferait passer une variable à vrai ce qui appliquerai par l'intermédiaire d'un if les lignes correspondants au contrôle du moteur ex: If codeLu == True; on applique le programme qui suit.
//Programme de contrôle du moteur nema23 par un microstep driver DM556.
//Contexte: Nous appliquer un programme de test sur une pièce à partir du scan d'un code barre corespondant à cette pièce.
//Ce programme n'est pas relié à la scanette.
//Nous voulons que le moteur fasse sortir la tige du vérin pour venir en butée sur la pièce puis faire revenir la tige du vérin.
//Déclaration des variables
int temps = 0; //Variable utilisée pour définir le temps de sortie de la tige. Nous effectuerons les calculs nescessaires afin de savoir le temps de à utiliser pour avoir la course de la tige voulue.
boolean premiereFois = false; //Variable permettant d'exécuter le programme qu'une seule fois.
void setup() {
pinMode(2, OUTPUT); //Pin 2 pour contrôler le sens de rotation du moteur.
pinMode(3, OUTPUT); //Pin 3 pour contrôler la vitesse du moteur.
}
void loop() {
if (!premiereFois){ //If permettant d'exécuter le programme qu'une seule fois.
while (temps<10000) { //Sortie de tige vitesse lente car si vitesse rapide le moteur patine.
digitalWrite(2, HIGH); //Sens aiguille d'une montre.
digitalWrite(3, LOW);
digitalWrite(3, HIGH);
delayMicroseconds(50); //Vitesse lente.
temps++;} //Incrémentation variable temps.
while(temps<32501) { //Sortie de tige vitesse rapide.
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(3, HIGH);
delayMicroseconds(10); //Vitesse rapide.
temps++;
}
temps = 0; //Reset de la variable temps car au dela de 32501 dans la fonction while, le moteur tourne en continu ce qui est un problème.
while (temps<10000) { //Approche de la pièce à tester en vitesse lente
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(3, HIGH);
delayMicroseconds(50); //Vitesse lente.
temps++;
}
delay(1000); //Delai de 1s afin de rester un peu en butée.
while(temps>0){ //Rentrée de tige en vitesse lente car on doit sortir de la pièce à tester.
digitalWrite(2, LOW); //Sens inverse aiguille d'une montre.
digitalWrite(3, LOW);
digitalWrite(3, HIGH);
delayMicroseconds(50); //Vitesse lente.
temps=temps-1;
}
temps = 32501; //On passe la variable temps à 32501 pour avoir la même course de retour que lors de la sortie.
while(temps>0){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(3, HIGH);
delayMicroseconds(10); //Vitesse rapide.
temps=temps-1;
premiereFois = true; //On passe la variable à True afin de stopper le programme
}
}
}
Nous aimerions donc votre avis sur:
-Le programme du moteur
-Le problème de la valeur 32501 dans le while
-La faisabilité ou non de relier le code lu au programme du moteur
C'est exactement ce genre de boût de code que nous voudrions faire. Pour le moment nous obtenons ceci lors du scan d'un code barre voulant dire cp (pour contre palier). Malheureusement les valeurs en hexadécimal obtenu ne correspondent en rien à ceux de cp. Ce n'est pas forcement un problème car nous obtenons des valeurs en hexa différentes pour chaque code barre mais toujours les mêmes pour un même code barre donc si on sait les valeurs à obtenir, on peut créer les string de notre base de donnée en conséquence. Mais nous ne ne savons pas comment faire passer ces informations sous forme de string.