Aller au contenu

Filament ABS

sandra3d

Codage arduino pour enrouleur d'extrudeur de filament

Messages recommandés

L’extrudeuse est fonctionnelle, pas encore ultra précise, mais ca le deviendra si l'enrouleur étire le filament produit vers la bobine, , l'enrouleur fonctionne avec capteur a effet hall, mais galère pour faire un code sous arduino pour faire fonctionner le servo moteur  qui déplacerait le filament pour un enroulement propre. Si vous avez des idées, des propositions pour faire un code sous arduino fonctionnel ca serait top. Le code change a chaque fois car on obtient de résultats probants. Toute idée est bonne à prendre. Merci d'avance pour vos réflexions.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, un peu vaste comme question, un petit résumé de ton projet et ce que tu attends précisément serait un plus pour t'aider....avec aussi un descriptif du matos utilisé....

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @sandra3d,

 

Pour enrouler proprement ton filament, tu compte y mettre un guide qui va de gauche à droite en plus du moteur de l'enrouleur ?

 

🙂

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est une reprise du principe de l'enrouleur du Filawinder, avec bobinage avec effet hall, le fil passe dans une barrette qui est sur le servo moteur qui doit passer d'un angle a l'autre pour obtenir un enroulement propre. Mais après de nombreux essais de codage sur arduino, ca ne fonctionne pas correctement. 

Donc pour répondre a Yo' c'est effectivement un guide , mais c'est dans le codage ou il y a un angle max et un angle min qu'une erreur ou un manque fait que ca ne fonctionne pas.

Je vous mettrais une photo et le code 

Partager ce message


Lien à poster
Partager sur d’autres sites

 Voici la partie enrouleur, sachant que le système de mesure est fait mais mais complexe a mettre sur la plaque . Mais le soucis n'est pas là, c'est le code du guide a mettre en syncro avec l'enrouleur.

IMG_20180823_125110.jpg

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as déjà 'du code' quelque part....?

Avec la librairie servo + une fonction sinus, ou plus simplement un compteur qui incrémente puis décrémente à chaque loop, ça doit pas être insurmontable 😉

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour AleX pour ce qui est de l'enrouleur, a effet hall , j'ai un prog ou il y a 000000 jusqu'au néodyme et 1111, alors que je ne devrait  avoir que 0 et 1 devant le passage du néodyme.

Partager ce message


Lien à poster
Partager sur d’autres sites

Euh... ouais, mais euh.. on peut pas le deviner ton code 😛  

 

Fait comme si tu devait donner les indications à quelqu'un qui veut refaire la même chose, fait nous tout voir ! (enfin, le code et les broches raccordées surtout)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai fait une machine à état, qui utilise 2 paramètres le 1 quand il est initial c'est la valeur min, et le sevo moteur sera a la valeur min , on utilise la fonction qui détecte l'état haut et l'état bas et dès que le capteur a effet hall détecte un tour le sevo moteur fait 1 degré de plus  et cela en boucle jusqu'a arriver en valeur max . et on déf le paramètre var angle pour entrer dans  la 2 eme partie de la machine à état. Puis la même chose dans l'autre sens. 

Problème Au niveau de la fonction il faudrait avoir juste soit un 0 soit 1 alors qu'il y a une infinité de 0 ou de 1, ca pose des problèmes sur l'incrémentation des angles. 

Mais si vous voyez d'autres problèmes , ne vous gênez pas.

Merci de votre aide.

 

suite_enrouleuse_version_2.ino

Partager ce message


Lien à poster
Partager sur d’autres sites
int fonctioncompteur(void){
  int captHall=12;
  int etatpresent,etatfinal,etatprec=0;

  etatpresent=digitalRead(captHall);
  if(etatpresent==1 && etatprec==0){
    etatfinal=1;
    etatprec=1;
  }
  else if(etatpresent==0 && etatprec==1){
    etatfinal=0;
    etatprec=0;
  }
  return etatfinal;

En déclarant la variable etatprec dans la fonctions toutes les conditions sont faites avec etatprec =0.

  • Tant que l'aimant est devant le capteur, la première condition fera que etatfinal =1 tout le temps.
  • Lorsque le capteur n'est plus devant l'aimant, la seconde condition sera toujours ignorée puisque etatprec (étant déclaré =0 ) ne vaudra jamais 1. La fonction renvoie la valeur assignée lors de la déclaration de etatfinal, c-à-d par défaut 0, et ce tant que l'aimant n'est plus devant le capteur.

 

Dans ce cas il faut faire un attachInterrupt( pinCaptHall, function_qui_increment_le_servo, RISING ); et choisir un pin compatible (voir la doc Arduino).

Cette fonction est asynchrone de fait le passage de l'aimant sera toujours détecté même si le microcontrôleur est monopolisé par une autre tâche. Avec une fonction comme ci-dessus, donc non asynchrone, si le code est en pause (delay) ou monopolizé par une tâche il n’appellera pas la fonction et peut ne pas voir l'aimant passer.

 

Et une bonne pratique: il vaut mieux déclarer les variables en début de code.

 

J'ai fais un dérouleur, mesureur, enrouleur de bobine. J'ai galéré. Ça a fonctionné à moitié (mauvaise distance mesurée, j'ai corrigé en pesant avant/après), mais je sais pourquoi. Mon code n'est pas transposable puisque j'ai utilisé deux moteurs pas-à-pas, un pour la bobine, l'autre pour caler le filament via un chariot + courroies. Soit dit en passant, c'est une solution bien plus pérenne qu'un servomoteur. Bonne chance.

Modifié (le) par Tircown

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • Sur cette page :   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×