arduino
#1
Posté 08 mai 2020 - 08:26
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
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
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#4
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)
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#5
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 !
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 !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#6
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
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)
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#9
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
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
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#12
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
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#14
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
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#16
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?
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
#17
Posté 22 mai 2020 - 11:22
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
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 !
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 !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#19
Posté 22 mai 2020 - 01:07
Tu as la fonction delay_us qui prend des entiers en microscondes
Sur Arduino !?
Ma chaine YouTube : https://www.youtube..../oracid1/videos
#20
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
- Oracid aime ceci
Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...
Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.
Répondre à ce sujet
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users