Non tu ne peux pas utiliser 2 sorties pwm pour 2 trucs différents. Au pire, il faut que tu essaies de créer un signal pwm à partir d'une sortie classique (avec des tempos).alors je me demandais si je pouvais brancher des servos même sur les broche PWM, 3,5, 10 même si elle sont utilisé car sinon je ne pourrais brancher que 3 servomoteur! ce qui est idiot puisque j'ai 8 servomoteur!

Robot tête humanoid arduino
#21
Posté 18 mai 2012 - 01:25
- Keganmi aime ceci
#22
Posté 18 mai 2012 - 03:53
D'accord mais je ne comprend pas ce que tu m'as dit avant, sur internet il n'y aurait pas un tuto ou un site qui traite de se sujet?Non tu ne peux pas utiliser 2 sorties pwm pour 2 trucs différents. Au pire, il faut que tu essaies de créer un signal pwm à partir d'une sortie classique (avec des tempos).
#23
Posté 18 mai 2012 - 04:07
Je vais essayer d'être un peu plus clair. Un signal PWM (ou MLI) est un signal carré périodique. Il a un temps pendant lequel il est à l'état haut (ton) et un temps pendant lequel il est à l'état bas (toff). La somme de ces deux temps constituent la période T. Tu peux calculer ce que l'on appelle le rapport cyclique alpha.D'accord mais je ne comprend pas ce que tu m'as dit avant, sur internet il n'y aurait pas un tuto ou un site qui traite de se sujet?
alpha = ton / (ton+toff) = ton /T
Tu peux donc créer ce type de signaux à partir d'une sortie classique de ton arduino.
Après des cours tu peux en trouver des tas sur internet. Par contre désolé je n'ai pas une unique référence.
#25
Posté 18 mai 2012 - 04:40
OuiD'accord mais je ne comprend pas ce que tu m'as dit avant, sur internet il n'y aurait pas un tuto ou un site qui traite de se sujet?
Te décourages pas ! C'est le métier qui rentredéjà que je débute....

Surtout que pour une sortie pwm classique il faut aussi coder ^^ Et puis, pour ce que je te dis de faire, le code n'est pas très compliqué. Il suffit de faire :
sortie à 1
tempo ( = ton)
sortie à 0
tempo (= toff)
on répète tant qu'on en a envie (par exemple en se référant à la valeur d'une variable).
#26
Posté 18 mai 2012 - 05:03

et si Ton et Toff sont des variables quel sont leurs valeurs? j'imagine que toff est à 0?
AH oui est combien de temps doit il y avoir entre ton et toff?

et comment choisir la broche?
#27
Posté 18 mai 2012 - 05:59
Pour qu'il ait la durée que tu souhaites.heu... pourquoi le répéter?
Tout dépend du rapport cyclique que tu souhaites et de la période à laquelle tu souhaites travailler. Ces valeurs dépendront des modules que tu souhaites gérer. Un exemple concret : imaginons qu'un servomoteur ait besoin d'une impulsion haute pendant 10ms avec une fréquence de 20hz (je dis n'importe quoi alors ne reprends pas ces valeurs !). Dans ce cas, tu auras : ton = 10ms ; T = 1/f = 0.05s. D'où toff = T - ton = 50 - 10 = 40 ms. Et tu auras un rapport cyclique alpha = 0.2.et si Ton et Toff sont des variables quel sont leurs valeurs?
Tout dépend de alpha. Par exemple, si tu souhaites gérer la vitesse d'un moteur à courant continu avec un L293D (en appliquant sur l'entrée du L293D ta PWM) et que tu souhaites avoir la vitesse maximale, tu voudras alpha = 1. Dans ce cas, tu prendras toff = 0.j'imagine que toff est à 0?
Aucune importance, il faut juste qu'elle puisse être configurée en sortie (après je ne sais pas s'il y a des pattes avec des limites différentes de fréquence sur aduino ou pas).et comment choisir la broche?
#28
Posté 18 mai 2012 - 06:01
et heu donc est ce que je peux mettre
dans une bouche infini?sortie à 1
tempo ( = ton)
sortie à 0
tempo (= toff)
Merci à tous ce qui m'aide, c'est super!
#29
Posté 19 mai 2012 - 10:11
Le rapport cyclique sert à faire les calculs. Avec la méthode que je t'ai donné il ne rentre pas dans le code. Par contre, je me demande si ça n'intervient pas dans le programme pour les sorties PWM (à vérifier).en Fait c'est quoi le rapport cyclique, doit on le mettre dans notre programme?
Tu peux mais je vois pas trop l'intérêt... Mets le plutôt dans une boucle du type if else.et heu donc est ce que je peux mettre
Citation
sortie à 1
tempo ( = ton)
sortie à 0
tempo (= toff)
dans une bouche infini?
#30
Posté 19 mai 2012 - 10:50
d'accord donc pour résumé dans mon programme, il y aura:Le rapport cyclique sert à faire les calculs. Avec la méthode que je t'ai donné il ne rentre pas dans le code. Par contre, je me demande si ça n'intervient pas dans le programme pour les sorties PWM (à vérifier).
Tu peux mais je vois pas trop l'intérêt... Mets le plutôt dans une boucle du type if else.
des variables
ton, toff, et un tempo.
une boucle if else qui fera tourner en continue cette opération:
sortie à 1
tempo ( = ton)
sortie à 0
tempo (= toff)
est ce bien cela?
Merci beaucoup Francky tu m'aide vraiment beaucoup

#31
Posté 19 mai 2012 - 12:57
ton et toff sont des temporisations.ton, toff, et un tempo.
Pas en continue ou alors utilises une boucle infinie, ça dépend de ce que tu veux faire. Je te disais de mettre une if else pour dire : fais tourner le moteur jusqu'à tel évènement.une boucle if else qui fera tourner en continue cette opération:
Attends de voir si ce que je te dis fonctionne avant de me remercier xDMerci beaucoup Francky tu m'aide vraiment beaucoup
#33
Posté 19 mai 2012 - 05:02

Disons qu'on commence généralement pas par ça.
Je ne l'ai jamais fait (j'ai une arduino Mega...) mais si j'avais à le faire, je pense que je créerais une fonction qui s'en occupe.
Il faudra déclarer une broche digitale en sortie.
/*Déclaration de la broche digitale numéro X en sortie*/ int nomBroche = 12; void setup() { /*La broche est une sortie*/ pinMode(nomBroche, OUTPUT); } void loop() { /*Utilisation de la fonction PWM software*/ pwm(10); //génère un signal carré avec une période de 20ms, ton = 10ms et toff = 10ms } /*Fonction PWM software*/ void pwm(int ton) { if(ton < 1000) /*Rajout pour éviter de dépasser les temps admissibles pour ton */ ton = 1000; else if(ton > 2000) ton = 2000; for(short i=0, i<5, i++) { digitalWrite(nomBroche, HIGH); delayMicroseconds(ton); /*Pour augmenter la précision*/ digitalWrite(nomBroche, LOW); delay(20); } }
C'est un exemple vite fait, que je n'ai pas le temps de tester pour le moment. Mais ça me plairait d'essayer ça un peu plus tard tient, juste pour le fun.

Un peu de lecture sur le pwm : (si tu ne connais pas du tout l'anglais, mets-toi y au plus vite, c'est important dans le monde technique.

Arduino - PWM (anglais)
t-o-f - PWM (français)
Autre chose. Ton montage fait un peu peur...

Tu ne devrais pas utiliser des câbles multi-brins sur une arduino, en les entourant autour d'un fil mono-brin comme tu le fais... C'est pas terrible et tu risque d'avoir des court-circuits assez rapidemment. Tu ferais mieux d'essayer de te procurer des câbles dans ce genre là : Jumper Cables. C'est encore mieux si tu sais avoir des câbles avec des bouts "carrés" comme ceux-ci sur ebay.
Et aussi, si tu veux alimenter 8 servomoteurs en même temps, ton arduino risque d'avoir un peu de mal. Tu peux les faire bouger un par un (et ça ira), ou alors ajouter une alimentation externe.
Bon courage et bonne continuation!
Modifié par Esprit, 20 mai 2012 - 01:52 .
Esprit
*Rêve d'en caser un dans un robot*
#34
Posté 19 mai 2012 - 05:50

Ah et heu, dans mon code je met ce que tu as mis, puis le code normal pour faire tourner un servomoteur?
#35
Posté 20 mai 2012 - 07:42
Tu peux par exemple ouvrir un câble de téléphone et récupérer tout le câble dont tu as besoin. (Photo) Sinon, n'hésite pas à récupérer tous les appareils que tu trouves. Il y a du câble dans tout et on trouve très souvent des petits moteurs qui peuvent être utiles (dans les lecteurs CD, lecteurs disquettes, imprimantes, scanners, ...). Et sinon, acheter sur ebay permet d'être livré chez sois. (Mais faut 18 ans pour y acheter...)
Pour le code... Fais une copie de ton code ici et je te montrerai où l'insérer.
Mais je ne pourrais que te conseiller de lire et d'essayer d'appliquer un maximum de tutoriels sur l'arduino.
-Arduino.cc/fr/
-T-o-f wiki - Arduino (et aussi T-o-f wiki - Électronique)
-Mon Club Elec
C'est comme tout, pour bien comprendre ce qu'on fait il faut quand même passer par une phase d'apprentissage et de lecture.

Esprit
*Rêve d'en caser un dans un robot*
#36
Posté 20 mai 2012 - 08:44
Je ne pense pas que ce soit la chose qui soit la plus compliquée à faire. De toutes manières c'était soit lui dire de faire ça, soit de lui dire d'abandonner son projet pour en avoir un avec moins de servomoteurs...Ils sont comiques les gens qui t'orientent vers du PWM software dès le départ...
Et sinon, oui je suis comique !

#37
Posté 20 mai 2012 - 08:50
Mon code:
#include ≤Servo.h> int pos = 0; Servo myservos[4]; void setup() { myservos[1].attach(9); myservos[2].attach(10); myservos[3].attach(11); myservos[4].attach(12);// broche non PWM. } void loop() { for(pos= 60; pos ≤120; pos++) { myservos[1].write(pos); delay(15); } for(pos= 120; pos >= 60; pos--) { myservo[1].write(pos); delay(15); } for(pos= 60; pos ≤120; pos++) { myservos[2].write(pos); delay(15); } for(pos= 120; pos >= 60; pos--) { myservos[2].write(pos); delay(15); } for(pos= 60; pos ≤120; pos++) { myservos[3].write(pos); delay(15); } for(pos= 120; pos >= 60; pos--) { myservos[3].write(pos); delay(15); } for(pos= 60; pos ≤120; pos++) { myservos[4].write(pos); delay(15); } for(pos= 120; pos >= 60; pos--) { myservos[4].write(pos); delay(15); } }
voilà pour le code, par contre il se peut qu'il y est des erreur de je n'ai pas le code devant les yeux...

Merci à ceux qui m'ont aidés!

#39
Posté 20 mai 2012 - 09:26
Je ne pense pas que ce soit la chose qui soit la plus compliquée à faire. De toutes manières c'était soit lui dire de faire ça, soit de lui dire d'abandonner son projet pour en avoir un avec moins de servomoteurs...
Et sinon, oui je suis comique !
Ce n'est sans doute pas la chose la plus compliquée à faire si on n'a pas besoin de beaucoup de précision. La méthode que j'ai vaguement expliquée génèrera un signal carré. Mais je ne suis pas certain que la période fera précisément 20ms, ni que Ton et Toff seront respectés. (Simplement car il faut un certain temps à l'arduino pour gérer les instructions) Après, si on veut faire plus précis, il faut utiliser les interruptions timers et là, ça commence à devenir plus compliqué pour un débutant.
Donc oui, je trouve ça comique d'orienter un jeune de 13 ans qui débute vers cette solution. Maintenant, c'est clair qu'il n'y a pas mille autres solutions. C'est soit ça, soit l'achat d'une arduino Mega (ou autre...). Au niveau simplicité il y a pas photo, c'est plus facile de travailler avec du matériel adapté.
Mais j'espère que tu ne le prends pas mal, ce n'était pas le but.

Esprit
*Rêve d'en caser un dans un robot*
#40
Posté 20 mai 2012 - 09:38
Ce n'est sans doute pas la chose la plus compliquée à faire si on n'a pas besoin de beaucoup de précision. La méthode que j'ai vaguement expliquée génèrera un signal carré. Mais je ne suis pas certain que la période fera précisément 20ms, ni que Ton et Toff seront respectés. (Simplement car il faut un certain temps à l'arduino pour gérer les instructions) Après, si on veut faire plus précis, il faut utiliser les interruptions timers et là, ça commence à devenir plus compliqué pour un débutant.
Donc oui, je trouve ça comique d'orienter un jeune de 13 ans qui débute vers cette solution. Maintenant, c'est clair qu'il n'y a pas mille autres solutions. C'est soit ça, soit l'achat d'une arduino Mega (ou autre...). Au niveau simplicité il y a pas photo, c'est plus facile de travailler avec du matériel adapté.
Mais j'espère que tu ne le prends pas mal, ce n'était pas le but.
ok c'est cool bon vous arrêtez de vous lancer des pics ou je ce pas quoi!
Non plus sérieusement mon code est il bon? et où faut il mettre ton code, Esprit?

Répondre à ce sujet

0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users