Aller au contenu


Photo
- - - - -

arduino


26 réponses à ce sujet

#1 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 08 mai 2020 - 08:26

Bonjour à tous
je voulais savoir si quelqu'un pouvait m'aider pour le programme de ma carte arduino
j'ai besoin de faire tourner un moteur pas a pas dans un sens
étant étrangers de ans ce domaine j'ai copier un programme pour essayer .
ça fonctionne mais il fait 1 tour dans un sens et un tour dans l'autre et ainsi de suite .
Mais je veux juste le faire tourner dans un sens
quelqu'un peu m'aider ?

#2 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 08 mai 2020 - 09:16

Bonsoir,

 

Quand tu dis que tu veux juste faire tourner le moteur dans un sens, est-ce là seule chose que doit faire l'arduino?

Si oui, est-ce que ça t'intéresse ou pas d’apprendre à utiliser un Arduino?

 

Si la seule et unique chose que tu veux faire, c'est faire tourner ce moteur à vitesse constante dans un sens constant, alors je peux t'écrire le programme et c'est réglé.

Si en revanche tu veux apprendre à utiliser l'arduino, ou que ton projet est plus complexe, alors il vas falloir apprendre la programmation arduino.

 

Pour apprendre à utiliser l'arduino, tu as deux cours sur le site :

- partie 1 : https://www.robot-ma...s/tuto-arduino/

- partie 2 : https://www.robot-ma...rcuits-arduino/

 

Je te suggère au moins de lire la partie 1.

 

Ensuite, regarde si tu comprends assez bien le code que tu as copié pour le modifier comme tu veux. Si tu bloques, tu peux poster le code et ton problème sur le forum, et on t'aidera.

Bonne soirée

Sandro



#3 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 08 mai 2020 - 10:34

En fait je vais prendre les deux options
je veux bien que tu m'écrire le programme ci tu veux bien
je vais regarder les deux lien sur la programmation .
Et plus le programme que j'ai copier
ça me ferra des comparatifs pour comprendre .

#4 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 08 mai 2020 - 10:54

Du coup, si ça te va, je vais te guider sur comment obtenir le programme que tu veux.

 

Est-ce que tu peux commencer par poster le programme que tu as utilisé pour l'instant? Comme ça, on va partir de ça.

Et si tu y arrives, essaye d'expliquer à quoi sert chaque ligne (je compléterais/corrigerais si nécessaire).

 

Je pense qu'une fois que tu auras compris le programme d'exemple que tu as testé, ça devrait être très facile de ne tourner que dans un sens (je pense qu'il y aura juste des lignes à supprimer, mais à confirmer une fois que j'aurais vu le programme de départ)



#5 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 691 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 09 mai 2020 - 01:07

Je laisse Sandro te guider tu es entre de bonnes mains ;) 
Je donne juste un petit lien : " Apprendre à programmer c'est facile! " qui j'espère pourra te motiver à apprendre =)  


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#6 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 09 mai 2020 - 10:03

ok alors voila le programme que j'ai copier

int tempo=1; // Cette valeur détermine la vitesse du moteur, 1 = rapide, 100 = lent

void setup() {
    pinMode(4, OUTPUT); // On initialise les broches D4 et D5 en sorties
    pinMode(5, OUTPUT);
}

void loop() {
    delay(1000);

    digitalWrite(4, HIGH); // On met la broche DIR à l'état haut
    for (int i=0; i <= 200; i++){
        digitalWrite(5, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur de 200 pas dans un sens
        digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);
    }

    delay(1000);

    digitalWrite(4, LOW); // On met la broche DIR à l'état bas pour changer de sens
    for (int i=0; i <= 200; i++){
        digitalWrite(5, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur dans l'autre sens
        digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);
    }

les pins step et dir on bien été relier a l'Arduino en d4 et d5 

dir en d4

step en d5 

j'arrive a modifier la vitesse en changent les valeur int tempo (dans la première ligne ) mais enssuite on a cette ligne digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms .

ces bien une valeur de vitesse ? on en aurait deux ?

j'ais essayer de supprimer des lignes pour que le moteur tourne que dans un sens mais quand je le vérifie ,des messages d'erreurs aparesse  . Je doit en supprimer un peu trop .



#7 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 09 mai 2020 - 10:46

j'arrive a modifier la vitesse en changent les valeur int tempo (dans la première ligne ) mais enssuite on a cette ligne digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms .

ces bien une valeur de vitesse ? on en aurait deux ?

digitalWrite(5, HIGH);

Signifie simplement qu'on met le pin 5 à l'état haut (ie 5V). En soit, il n'y à là aucune info de vitesse.

Il faut regarder le code de manière un peu plus large :

digitalWrite(5, LOW);
delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur dans l'autre sens
digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
delay(tempo);

On met le pin 5 à LOW (ie 0V),

puis on attend un temps "tempo" en millisecondes

puis on met le pin 5 à HIGH (ie 5V)

puis en attend un temps "tempo" en millisecondes

 

A chaque fois que le pin 5 passe de low à high, ton moteur vas faire un (micro)pas.

Du coup, plus "tempo" est grand, plus tu attends entre deux pas (contrairement au commentaire, tu peux mettre un "tempo" plus grand que 100 pour attendre plus que 2*100=200ms entre chaque pas, de manière à aller encore moins vite.

 

Du coup, ces 4 lignes de codes sont celles qui permettent de faire un (micro) pas, avec un delay 2*tempo entre.

 

digitalWrite(4, HIGH); // On met la broche DIR à l'état haut

...

digitalWrite(4, LOW); // On met la broche DIR à l'état bas pour changer de sens

la pin 4 sert à indiquer le sens de rotation

for (int i=0; i <= 200; i++){
   ...
}

Permet de répéter le code contenu entre les accolades 201 fois (avec une variable i, qui a chaque tour change de valeur : on commence à 0, on s'arrête quand on a dépassé 200, et on augmente de 1 (i++ signifie i=i+1)). A noter que dans notre cas, on n'utilise pas la variable i, on veut juste exécuter 201 fois le code.

delay(1000);

permet d'attendre 1000ms=1s

void loop(){
...
}

Le code contenu dans loop est exécuté en boucle

 

 

 

Est-ce qu'avec ça tu arrives à comprendre le code?

 

 

3 petits "exercices" : explique moi ce que font les bouts de codes suivants :
1)

    digitalWrite(4, HIGH); // On met la broche DIR à l'état haut
    for (int i=0; i <= 200; i++){
        digitalWrite(5, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur de 200 pas dans un sens
        digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);

2)

    digitalWrite(4, LOW); // On met la broche DIR à l'état bas pour changer de sens
    for (int i=0; i <= 200; i++){
        digitalWrite(5, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur dans l'autre sens
        digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);

3)

    delay(1000);

    digitalWrite(4, HIGH); // On met la broche DIR à l'état haut
    for (int i=0; i <= 200; i++){
        digitalWrite(5, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur de 200 pas dans un sens
        digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);
    }

    delay(1000);

    digitalWrite(4, LOW); // On met la broche DIR à l'état bas pour changer de sens
    for (int i=0; i <= 200; i++){
        digitalWrite(5, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur dans l'autre sens
        digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);

Maintenant, est-ce que tu sais ce qu'il faut supprimer pour obtenir le résultat que tu veux?

 

 

 

 

PS : pour poster du code, utilise la balise code (bouton "<>" ) sans spécifier le type ou avec le type "PHP/Générique/Détection auto" : je sais pas comment tu as posté ton code, mais c'est quasi illisible (toutes les accolades, parenthèses et points virgules sont invisibles si on ne sélectionne pas le texte)

 

 

 



#8 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 09 mai 2020 - 01:26

en parten sur un moteur 200 pas

ex 1

on fait tourner le moteur de 1 tours dans un sens 

ex 2 

on fait tourner de 1 tour mais dans l'autre sens 

ex 3

on attend une seconde on fait tourner 1 tour on attend 1 seconde on fait tourner 1 tour dans l'autre sens 



#9 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 09 mai 2020 - 01:33

pour que le moteur tourne comme je veu il faudrais enlever cette partie

delay(1000);

    digitalWrite(4, LOW); // On met la broche DIR à l'état bas pour changer de sens
    for (int i=0; i <= 200; i++){
        digitalWrite(5, LOW);
        delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur dans l'autre sens
        digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
        delay(tempo);



#10 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 09 mai 2020 - 01:56

teste!

Tu me diras si ça fait ce que tu veux ou pas

 

EDIT : et pour les 3 questions de compréhension du code, tu as tout bon



#11 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 09 mai 2020 - 05:51

Ça fonctionne
yessssss
ça tourne dans un sens à vitesse constante
impeccable .

#12 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 09 mai 2020 - 06:37

A vitesse constante?

Tu n'as pas un tour à vitesse constante, puis une seconde de pause, puis de nouveau un tour à vitesse constante, puis une seconde de pause ...   ?

 

Si c'est ce que tu veux, alors tant mieux, sinon, il suffit de supprimer une ligne de plus



#13 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 09 mai 2020 - 06:51

Au niveau delay(1000); je l'ai remplacer par delay(0);
et il ne faut pas qu'il s'arrête
c'est pour motorisé un telescope

et juste par curiosité .on peut metre 2 driver sur une arduino avec chacun ça fonction ?

#14 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 09 mai 2020 - 09:15

Au niveau delay(1000); je l'ai remplacer par delay(0);

ça me vas.

Mais tu aurais carrément pu supprimer la ligne (attendre un temps 0 n'est pas très utile).

 

D'ailleurs, est-ce que tu pourrais me dire ce que ferait le code si on remplaçait le loop par :

void loop() {
    digitalWrite(4, LOW); // On met la broche DIR à l'état bas pour changer de sens
    digitalWrite(5, LOW);
    delay(tempo); // On envoie 200 impulsions pour faire tourner le moteur dans l'autre sens
    digitalWrite(5, HIGH); // La valeur de tempo determine le temps entre 2 impulsions en ms
    delay(tempo);
}

et juste par curiosité .on peut metre 2 driver sur une arduino avec chacun ça fonction ?

Oui, tu peux en mettre autant que tu veux (dans la limite des pins disponibles).

Après, si tu veux que les deux moteurs tournent en même temps et à des vitesses différentes, alors ça complique un peu le code, mais rien d'insurmontable : si c'est ce que tu désire, on pourra te guider

 

 



#15 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 10 mai 2020 - 09:41

Pour le code
on change juste de sens ?
Et pour le deuxième driver ce cerra un futur projet , je vais déjà finir le projet actuel correctement
encore merci pour ton aide

#16 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 10 mai 2020 - 09:55

Pour le code
on change juste de sens ?

Tu avais gardé la partie avec

    digitalWrite(4, HIGH); 

?

 

En tout cas, ma question était plutôt ce que ça changeait de supprimer la boucle for?
 



#17 Victorien

Victorien

    Nouveau membre

  • Membres
  • 24 messages

Posté 22 mai 2020 - 11:22

Bonjour
je reviens sur ce post pour une autre question .
Dans le programme arduino au niveau de la vitesse on a
0=rapide
100=lent
mais ma bonne vitesse ce citus entre 2 et 3
jais essayer de m'être des virgule mais ça ne marche pas
par exemple
j'obtiens un tour de roue dentées en 3,37 seconde avec le tempo 1
et 3,37 seconde avec tempo 1.5
pareille avec tempo 1,500
et 6,52 seconde avec tempo à 2
quel est le moyen d'être entre le tempo 2 et 3

je pressise que le moteur est en micro pas .

#18 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 691 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 22 mai 2020 - 12:31

delay prend des entiers en millisecondes. 

Tu as la fonction delay_us qui prend des entiers en microscondes si tu veux ... Par contre sur une uno / mega la résolution est à 4 microsecondes, mais cela ira pour ton 3,37 ms ... = 3370 us ... 

Par contre je suis pas un grand fan de l'utilisation des ces fonctions bloquantes ...  il y a d'autres façon de faire, mais déjà si ça te permet de valider un fonctionnement facilement c'est bien =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#19 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 5 046 messages
  • Gender:Male

Posté 22 mai 2020 - 01:07

Tu as la fonction delay_us qui prend des entiers en microscondes 

Sur Arduino !?



#20 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 623 messages
  • Gender:Male

Posté 22 mai 2020 - 01:52

Apparement, ce serait delayMicroseconds()

Source : https://www.arduino....aymicroseconds/

 

Nb : il ne faut pas dépasser environ 16 ms (16383µs) avec cette fonction d'après la doc





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users