Différences entre versions de « AdaFruit Motor Shield Utiliser »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(24 versions intermédiaires par le même utilisateur non affichées)
Ligne 29 : Ligne 29 :
 
Notez qu'une fois que le courant tend vers 1A vous aurez probablement besoin d'équiper le "motor driver" d'un dissipateur de chaleur, sinon vous subirez des défaillances thermiques, voir griller votre circuit intégré.
 
Notez qu'une fois que le courant tend vers 1A vous aurez probablement besoin d'équiper le "motor driver" d'un dissipateur de chaleur, sinon vous subirez des défaillances thermiques, voir griller votre circuit intégré.
  
=== On using the SN754410 ===
+
=== Utiliser un SN754410 ===
Some people use the [http://focus.ti.com/docs/prod/folders/print/sn754410.html SN754410] motor driver chip because it is pin-compatible, has output diodes and can provide 1A per motor, 2A peak. After careful reading of the datasheet and discussion with TI tech support and power engineers it appears that '''the output diodes were designed for ESD protection only''' and that using them as kickback-protection is a hack and not guaranteed for performance. For that reason the kit does not come with the SN754410 and instead uses the L293D with integrated kickback-protection diodes. If you're willing to risk it, and need the extra currrent, feel free to buy SN754410's and replace the provided chips.
+
Certaines personnes utilise un circuit intégré [http://focus.ti.com/docs/prod/folders/print/sn754410.html SN754410] pour contrôler les moteurs. Ils utilise le SN754410 à la place du L293D parce que le brochage est identique ("Pin Compatible" en anglais), dispose de diodes de protections en sortie et supporte 1A par moteur avec un pic à 2A.  
  
=== Need more power? ===  
+
Après une lecture attentive de la fiche technique et quelques discussions avec des techniciens, il apparait que '''ces diodes de protections sont conçues pour fournir uniquement un protection contre les décharges électrostatiques''' (ESD Protection). Les utiliser comme diodes de protections en roule-libre est du domaine du Hack et les performances ne sont absolument pas garantie... le risque pour le pont-H est bien réel.
Buy another set of [http://mchobby.be/PrestaShop/product.php?id_product=155 L293D] drivers and solder them right on top of the ones on the board (piggyback). Voila, double the current capability! You can solder 2 more chips on top before it probably isnt going to get you much benefit
+
 
 +
C'est pour cette raison que le kit n'est pas livré avec des SN754410 mais avec des L293D qui intègrent des vraie diodes de protection "en roue libre" ("''kickback-protection diodes''" en anglais). Si vous désirez quand même prendre le risque d'utiliser des SN754410 parce que vous avez besoin de plus de courant, vous pouvez maintenant acheter ces composants et remplacer mes L293D en connaissant les risques potentiels.
 +
 
 +
=== Besoin de plus de puissance? ===  
 +
Vous pouvez acheter d'autres {{pl|155|L293D}} et les souder pile au dessus des premiers déjà présent sur la carte ('piggyback' en anglais).
 +
 
 +
Voila, comment vous pouvez doubler la courant supporté par le L293D! Vous pouvez empiler plus de deux L293D mais cela ne devrait pas apporter beaucoup plus de bénéfice.
 +
 
 +
[[Fichier:PiggyBack-componant.jpg]]<br />
 +
Source: [http://blog.tinyenormous.com/2010/06/23/how-to-piggyback-driver-chips-on-ladyadas-arduino-motor-shield/ tinyenormous.com]
 +
 
 +
Restez néanmoins vigilant avec les courants mis en œuvre car si vous disposez de deux fois plus de courant, vous avez aussi besoin de dissiper au total plus de chaleur qu'avec un seul L293D.<br />
 +
Tout le monde sait qu'il fait beaucoup plus chaud à deux sous la couette que tout seul. Ce principe s'applique aussi au L293D empilés ;-) .
  
 
=== Les moteurs et les piles de 9v ===
 
=== Les moteurs et les piles de 9v ===
You can't run motors off of a 9V battery so don't even waste your time/batteries! Use a big Lead Acid or NiMH battery pack. Its also very much suggested that you set up two power supplies (split supply) one for the Arduino and one for the motors. 99% of
+
Vous ne pouvez pas faire fonctionner efficacement des moteurs avec des piles de 9 volts, ne gaspillez donc pas vos piles de 9v et votre temps!  
''' 'weird motor problems' ''' are due to noise on the power line from sharing power supplies and/or not having a powerful enough supply!
+
 
 +
Utilisez des piles de type Plomb Acide (Lead Acid) ou accumilateur NiMH.  
 +
{{tmbox | text = Il est également vivement conseillé d'utiliser deux sources d'alimentation (des alimentations vraiment distinctes).<br />Une alimentation pour Arduino et une autre pour les moteurs. }}
 +
 
 +
99% des ''' 'problèmes moteur incompréhensible' '''(bizarres) sont causés par des parasites (bruit) du circuit de puissance qui passe dans le circuit d'alimentation Arduino (1*) et/ou d'une alimentation pas suffisamment puissante!
 +
 
 +
1*: Cela signifie qu'une alimentation est partagée (commune) entre le circuit de commande (Arduino) et le circuit de puissance (les moteurs).
 +
 
 +
== Alimentation moteur: Comment configurer Arduino + Shield ==
 +
 
 +
'''Les Servos sont alimentés par le régulateur 5V de la carte Arduino'''. C'est parfait pour les moteurs hobbyistes suggérés. Si vous avez besoin de quelque-chose de plus costaud, sectionnez la piste qui va à la broche + des connecteurs servo et branchez votre propre alimentation 5-6V!
  
== How to set up the Arduino + Shield for powering motors ==
+
Les moteurs continu (DC) sont alimentés depuis 'de circuit d'alimentation haute tension' (high voltage supply) et NON depuis le régulateur 5V d'Arduino.
  
'''Servos are powered off of the same regulated 5V that the Arduino uses'''. This is OK for the small hobby servos suggested. If you want something beefier, cut the trace going to + on the servo connectors and wire up your own 5-6V supply!
+
{{Ambox
 +
| type      = delete
 +
| image      = [[File:StopHand.png|40px|alt=Stop]]
 +
| textstyle  = color: red; font-weight: bold; font-style: italic;
 +
| text      = Ne connectez pas l'alimentation des moteur sur la broche 5V d'Arduino. C'est une très très très mauvaise idée (à moins que vous sachiez exactement ce que vous faite)!
 +
}}
  
The DC motors are powered off of a 'high voltage supply' and NOT the regulated 5V. '''Don't connect the motor power supply to the 5V line'''. This is a very very very bad idea unless you are sure you know what you're doing!
+
Il y a deux endroits où vous pouvez obtenir votre 'alimentation haute tension' pour les moteurs. La première est la prise jack de votre Arduino (surlaquelle est raccordé votre bloc d'alimentation) et la deuxième est bornier à 2 vis sur le shield (celui portant le libellé '''EXT_PWR''' sur la carte).  
  
There are two places you can get your motor 'high voltage supply' from. One is the DC jack on the Arduino board and the other is the 2-terminal block on the shield that is labeled '''EXT_PWR'''. The DC Jack on the Arduino has a protection diode so you won't be able to mess things up too bad if you plug in the wrong kind of power. However the '''EXT_PWR terminals on the shield do not have a protection diode''' (for a fairly good reason). '''Be utterly careful not to plug it in backwards''' or you will destroy the motor shield and/or your Arduino!
+
La prise Jack de votre Arduino dispose d'une diode de protection, il n'est donc pas possible de faire une erreur fatale si vous utilisez un bloc d'alimentation mal polarisé. Cependant, le bornier '''EXT_PWR ne dispose pas de diode de protection''' (pour une vrai bonne raison). '''Soyez extrêmement prudent et n'inversez pas la polarité''' sinon vous allez détruire le shield moteur et/ou votre Arduino!
  
Here's how it works:
+
Voici comment cela fonctionne:
  
[[Fichier:ADF-MOTOR-SHIELD-USE-ALIM.jpg]]
+
{{ADFImage|ADF-MOTOR-SHIELD-USE-ALIM.jpg}}
 +
<small>Traduction par MCHobby]]</small>
  
If you would like to have a '''single DC power supply for the Arduino and motors''', simply plug it into the DC jack on the Arduino or the 2-pin PWR_EXT block on the shield. Place the power jumper on the motor shield.
+
=== Une seule alimentation ===
If you have a Diecimila Arduino, set the Arduino power source jumper to EXT.
+
Si vous désirez utiliser une '''seule alimentation pour Arduino et vos moteurs''', raccordez simplement la prise jack sur votre Arduino (ou sur le bornier PWR_EXT). Placez ensuite le cavalier sur le motor shield.
Note that you may have problems with Arduino resets if the battery supply is not able to provide constant power, and it is not a suggested way of powering your motor project
 
  
If you would like to have the '''Arduino powered off of USB''' and '''the motors powered off of a DC power supply''', plug in the USB cable. Then connect the motor supply to the PWR_EXT block on the shield. Do not place the jumper on the shield. This is a suggested method of powering your motor project
+
Si vous disposez encore d'un vielle Arduino Diecimila, vous devrez également placer le cavalier (jumper) sur la position EXT.
(If you have a Diecimila Arduino, don't forget to set the Arduino power jumper to USB. If you have a Diecimila, you can alternately do the following: plug the DC power supply into the Arduino, and place the jumper on the motor shield.)
 
  
If you would like to have '''2 seperate DC power supplies for the Arduino and motors'''. Plug in the supply for the Arduino into the DC jack, and connect the motor supply to the PWR_EXT block. Make sure the jumper is removed from the motor shield.
+
Notez que vous pourriez avoir des problèmes de "resets" (redémarrage) de votre Arduino si votre alimentation n'est pas capable de fournir une puissance constante. Cette méthode d'alimentation n'est pas celle qui est recommandée pour alimenter vos projets motorisés.
If you have a Diecimila Arduino, set the Arduino jumper to EXT. This is a suggested method of powering your motor project
 
  
Either way, if you want to use the DC motor/Stepper system the motor shield LED should be lit indicating good motor power
+
=== USB pour Arduino + alimentation moteur ===
 +
Si vous désirez '''alimenter votre Arduino par USB''' et '''les motors depuis une alimentation externe''', raccordez votre cable USB. Connectez ensuite l'alimentation moteur sur le bornier PWR_EXT du shield. NE PLACEZ PAS LE CAVALIER (jumper) sur le shield. C'est la méthode d'alimentation recommandée pour vos projets motorisés.
 +
(Si vous disposez encore d'un ancien Arduino Diecimila, n'oubliez pas de placer le cavalier d'alimentation sur USB. Si vous avez un Décimelia, vous pouvez exécuter la procédure suivante: raccorder l'alimentation sur votre Arduino, et placer le cavalier sur le motor shield)
 +
 
 +
=== Deux alimentations séparées ===
 +
Voici une méthode recommandée pour alimenter vos projets moteurs.
 +
 
 +
Si vous désirez avoir '''2 alimentations continu séparées pour alimenter votre Arduino et vos moteurs'''. Raccorder l'alimentation pour votre Arduino dans la prise Jack, et connectez l'alimentation des moteurs sur le bornier PWR_EXT. '''Le cavalier doit être retiré du moteur shield'''.
 +
 
 +
Si vous avez encore un ancien Arduino Diecimila, placer le cavalier de votre Arduino sur EXT.
 +
 
 +
Quoi qu'il en soit...
 +
{{tmbox | text = si vous désirez utiliser un système à base de moteur continu (CC ou 'DC' en anglais) et/ou pas-à-pas, la LED du shield doit être allumée, ce qui indique que les moteurs sont alimentés.}}
  
 
== Servo Moteur ==
 
== Servo Moteur ==
  
[[Fichier:ADF-MOTOR-SHIELD-USE-SERVO.jpg]]
+
{{ADFImage|ADF-MOTOR-SHIELD-USE-SERVO.jpg}}
 +
 
 +
Les servo moteurs pour Hobbyiste représentent certainement la façon la plus simple de mettre le shield moteur en oeuvre.
 +
 
 +
Le shield dispose de deux connecteurs (pinHeader) de 3 broches.
  
Hobby servos are the easiest way to get going with motor control. They have a 3-pin 0.1" female header connection with +5V, ground and signal inputs. The motor shield simply brings out the 16bit PWM output lines to 2 3-pin headers so that its easy to plug in and go. They can take a lot of power so a 9V battery wont last more than a few minutes!
+
Un servo moteur dispose d'un connecteur femelle à 3 broches avec un empattement de 2.54mm. Ces 3 connexion reprennent +5V, masse(GND) et le signal d'entrée
  
The nice thing about using the onboard PWM is that its very precise and goes about its business in the background. You can use the built in Servo library
+
Le shield moteur dispose de 2 sorties PWM (précision de 16 bits) raccordées sur 2 connecteurs de 3 broches mâles. Ces connecteurs permettent de raccorder facilement des servo moteurs et de démarrer rapidement. Ces servos nécessitent pas mal d'énergie, une pile de 9v ne résisterait donc pas plus que quelques minutes!
  
[http://www.arduino.cc/en/Reference/Servo Using the servos is easy, please read the official Arduino documentation for how to use them and see the example Servo sketches in the IDE]
+
Ce qu'il y a de sympa avec les contrôleurs PWM intégrés à la carte, c'est qu'il sont très précis et font la majorité de leurs tâches sans que l'on s'en rende compte. Vous pouvez utiliser la librairie Servo incluse dans l'environnement Arduino.
 +
 
 +
[http://www.arduino.cc/en/Reference/Servo Utiliser des servi est simple, vous pouvez lire le tutoriel Arduino officiel qui reprend la document nécessaire pour l'utilisation de Servo avec quelques exemples de sketchs pour Arduino IDE]
  
 
== Moteur Continu ==
 
== Moteur Continu ==
  
[[Fichier:ADF-MOTOR-SHIELD-USE-MOTEURCC.jpg]]
+
{{ADFImage|ADF-MOTOR-SHIELD-USE-MOTEURCC.jpg}}
  
DC motors are used for all sort of robotic projects. The motor shield can drive up to 4 DC motors bi-directionally. That means they can be driven forwards and backwards. The speed can also be varied at 0.5% increments using the high-quality built in PWM. This means the speed is very smooth and won't vary!
+
Les moteur à courant continu (CC ou "DC" en anglais) sont utilisés dans toutes sortes de projet robotique. Le shield moteur est capable de controler jusqu'à 4 moteurs bi-directionnels. Cela signifie qu'il peuvent fonctionner en marche avant et marche arrière. La vitesse peut également varier d'un incrément de 0.5% grace à l'utilisation d'un signal PWM de grande précision. Cela signifie que la vitesse reste constance et ne variera pas!
  
Note that the H-bridge chip is not really meant for driving loads over 0.6A or that peak over 1.2A so this is for small motors. Check the datasheet for information about the motor to verify its OK.
+
Notez que le circuit Pont-H n'est pas conçu pour contrôler un courant supérieur à 600 mA  (ou un pic supérieur à 1.2A), il convient donc pour les "petits" moteurs. Vérifiez la fiche technique de vos moteurs pour vous assurer qu'ils conviennent bien.
  
To connect a motor, simply solder two wires to the terminals and then connect them to either the '''M1, M2, M3,''' or '''M4'''. Then follow these steps in your sketch
+
Pour connecter un moteur, soudez simplement deux fils sur les bornes du moteur et connectez les ensuite sur l'un des borniers '''M1, M2, M3,''' ou '''M4''' (au choix).
  
 +
Exécutez ensuite les étapes suivantes dans votre sketch Arduino
  
# Make sure you include <AFMotor.h>
+
 
# Create the AF_DCMotor object with '''AF_DCMotor(motor#, frequency)''', to setup the motor H-bridge and latches. The constructor takes two arguments.<br />The first is which port the motor is connected to, '''1, 2, 3''' or '''4'''.<br />''' ''frequency''' '' is how fast the speed controlling signal is.<br />For motors 1 and 2 you can choose '''MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ''', or '''MOTOR12_1KHZ'''. A high speed like 64KHz wont be audible but a low speed like 1KHz will use less power. Motors 3 & 4 are only possible to run at 1KHz and will ignore any setting given
+
# Assurez vous d'avoir inclus <AFMotor.h>
# Then you can set the speed of the motor using '''setSpeed(speed)''' where the ''speed'' ranges from 0 (stopped) to 255 (full speed). You can set the speed whenever you want.
+
# Créez un objet AF_DCMotor avec '''AF_DCMotor(numéro_motor, fréquence)''', pour initialiser le pont-H et les latch. <br />Le constructeur accepte deux arguments.<br />Le premier est le port (bornier) sur lequel le moteur est connecté ('''1, 2, 3''' ou '''4''').<br />''' ''fréquence''' '' est la rapidité du signal contrôlant la vitesse.<br />Pour les moteurs 1 et 2 vous pouvez opter pour '''MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ''', ou '''MOTOR12_1KHZ'''. Un signal à haute vitesse comme 64KHz ne sera pas audible mais une signal basse vitesse tel que 1KHz nécessitera moins de puissance.<br />Les Moteurs 3 et 4 peuvent uniquement fonctionner avec un signal à 1KHz et ignorerons donc le paramètre fournit.
# To run the motor, call '''run(direction)''' where direction is '''FORWARD, BACKWARD''' or '''RELEASE'''. Of course, the Arduino doesn't actually know if the motor is 'forward' or 'backward', so if you want to change which way it thinks is forward, simply swap the two wires from the motor to the shield.
+
# Ensuite, vous pouvez sélectionner la vitesse du moteur en utilisant '''setSpeed(vitesse)''' ''vitesse'' est compris entre 0 (arrêt) et 255 (pleine vitesse). Vous pouvez modifier la vitesse à n'importe quel moment.
 +
# Pour mettre le moteur en route, appelez la fonction '''run(sens_rotation)''' où sens_rotation est '''FORWARD''' pour avant, '''BACKWARD''' pour arrière ou ''RELEASE''' (arrêt).<br />Notez que l'arrêt utilise le terme anglais 'RELEASE' qui à plutôt le sens de "relâché". C'est normal puisque le moteur n'est plus contrôlé sans pour autant être bloqué/verrouillé à l'arrêt... il peut en effet encore être entraîner à la main :-).<br />Pour le reste, gardez à l'esprit qu'Arduino ne sait pas si votre moteur est cablé dans un sens ou dans l'autre... et ne sait donc pas à quoi correspond la marche avant (forward) ou la marche arrière (backward) de votre montage. Si votre montage fonctionne en marche arrière avec l'instruction '''run(FORWARD)''', il suffit d'inverser les fils de raccordement du moteur sur le bornier du shield moteur.
  
 
  <nowiki>#include <AFMotor.h>
 
  <nowiki>#include <AFMotor.h>
  
AF_DCMotor motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
+
AF_DCMotor motor(2, MOTOR12_64KHZ); // Créer le moteur #2, PWM à 64KHz
  
 
void setup() {
 
void setup() {
   Serial.begin(9600);          // set up Serial library at 9600 bps
+
   Serial.begin(9600);          // Initialiser la communication série à 9600 bauds
   Serial.println("Motor test!");
+
   Serial.println("Test Moteur!");
 
    
 
    
   motor.setSpeed(200);    // set the speed to 200/255
+
   motor.setSpeed(200);    // Mettre la vitesse à 200 (max 255)
 
}
 
}
  
Ligne 103 : Ligne 148 :
 
   Serial.print("tick");
 
   Serial.print("tick");
 
    
 
    
   motor.run(FORWARD);      // turn it on going forward
+
   motor.run(FORWARD);      // mettre en marche avant (forward)
 
   delay(1000);
 
   delay(1000);
  
 
   Serial.print("tock");
 
   Serial.print("tock");
   motor.run(BACKWARD);    // the other way
+
   motor.run(BACKWARD);    // Dans l'autre sens
 
   delay(1000);
 
   delay(1000);
 
    
 
    
 
   Serial.print("tack");
 
   Serial.print("tack");
   motor.run(RELEASE);      // stopped
+
   motor.run(RELEASE);      // Arrêt
 
   delay(1000);
 
   delay(1000);
 
}</nowiki>
 
}</nowiki>
Ligne 119 : Ligne 164 :
 
Voici un exemple avec un moteur pas-à-pas bipolaire.
 
Voici un exemple avec un moteur pas-à-pas bipolaire.
  
[[Fichier:ADF-MOTOR-SHIELD-USE-BIPOLAR-STEPPER.jpg]]
+
{{ADFImage|ADF-MOTOR-SHIELD-USE-BIPOLAR-STEPPER.jpg}}
  
Stepper motors are great for (semi-)precise control, perfect for many robot and CNC projects. This motor shield supports up to 2 stepper motors. The library works identically for bi-polar and uni-polar motors
+
Un moteur pas-à-pas est genial pour un contrôle (semi-)précis, parfait pour beaucoup de robot projets CNC (commande numérique). Ce shield moteur est capable de supporter jusqu'à 2 moteurs pas-à-pas. La librairie fonctionne à l'identique avec les moteurs bipolaires et unipolaires.
  
For unipolar motors: to connect up the stepper, first figure out which pins connected to which coil, and which pins are the center taps. If its a 5-wire motor then there will be 1 that is the center tap for both coils. [http://www.ladyada.net/make/mshield/resources.html Theres plenty of tutorials online on how to reverse engineer the coils pinout]. The center taps should both be connected together to the GND terminal on the motor shield output block. then coil 1 should connect to one motor port (say M1 or M3) and coil 2 should connect to the other motor port (M2 or M4).
+
=== Moteurs unipolaires ===
 +
Pour les moteurs unipolaires: pour raccorder le moteur, vous devez d'abord savoir quel fil est connectée à quel bobine, et quelle fil se trouve au centre de la bobine. Si c'est un moteur à 5 fils alors il y a un seul fil qui est centre pour les deux bobinages. [http://www.ladyada.net/make/mshield/resources.html Il y a plein de tutoriels en ligne qui permet de déduire le brochage/raccordement des moteurs pas-à-pas]. Les milieux de bobines doivent tous les deux être raccordés à la masse (borne GND) du bloc de raccordement moteur. Ensuite, la bobine 1 doit être connectée sur un port moteur (disons M1 ou M3) et la deuxième bobine sur l'autre port moteur (M2 ou M4).
  
For bipolar motors: its just like unipolar motors except theres no 5th wire to connect to ground. The code is exactly the same.
+
=== Moteurs bipolaires ===
 +
Pour les moteurs bipolaires: C'est comme pour les moteurs unipolaires excepté qu'il n'y a pas de 5ieme fil à raccorder à la masse.
  
Running a stepper is a little more intricate than running a DC motor but its still very
+
Le code du programme restera exactement pareil.
easy
 
  
 +
=== Nbre de pas ===
 +
Une information importante sur un moteur pas à pas est le nombre de pas par révolution. C'est donc le nombre de pas nécessaire pour que moteur fasse un tour complet.
  
# Make sure you include <AFMotor.h>
+
Les fiches techniques ne fonctionnent pas cette information telle quel mais indique plutôt le nombre de degrés par pas.
# Create the stepper motor object with '''AF_Stepper(steps, stepper#)''' to setup the motor H-bridge and latches.'' '''Steps''' '' indicates how many steps per revolution the motor has. a 7.5degree/step motor has 360/7.5 = 48 steps.'' '''Stepper#''' '' is which port it is connected to. If you're using M1 and M2, its port 1. If you're using M3 and M4 its port 2
+
 
# Set the speed of the motor using '''setSpeed(rpm)''' where '' '''rpm''' '' is how many revolutions per minute you want the stepper to turn.
+
Sur un moteur à 7.5 degrés/pas, le moteur à 360/7.5 = 48 pas par révolution.
# Then every time you want the motor to move, call the '''step(#steps, direction, steptype)''' procedure. '' '''#steps''' '' is how many steps you'd like it to take. direction is either '''FORWARD''' or '''BACKWARD''' and the step type is '''SINGLE, DOUBLE. INTERLEAVE''' or '''MICROSTEP'''.<br />"Single" means single-coil activation, "double" means 2 coils are activated at once (for higher torque) and "interleave" means that it alternates between single and double to get twice the resolution (but of course its half the speed). "Microstepping" is a method where the coils are PWM'd to create smooth motion between steps. [http://www.ladyada.net/make/mshield/resources.html Theres tons of information about the pros and cons of these different stepping methods in the resources page].<br />You can use whichever stepping method you want, changing it "on the fly" to as you may want minimum power, more torque, or more precision.
+
 
# By default, the motor will 'hold' the position after its done stepping. If you want to release all the coils, so that it can spin freely, call '''release()'''
+
Sur un moteur à 1.8 degrés/pas, le moteur à 360/1.8 = 200 pas par révolution.
# The stepping commands are 'blocking' and will return once the steps have finished. If someone wants to be awesome and write a version of the library that does background stepping that would be cool! :)
+
 
 +
=== Le code ===
 +
Faire fonctionner un moteur pas-à-pas est juste un peu plus complexe d'un moteur continu mais cela reste encore simple.
 +
 
 +
# Assurez vous que vous avez inlus la librairie <AFMotor.h>
 +
# Créez un object pour moteur pas-à-pas avec '''AF_Stepper(nbre_pas, numéro_moteur)''' pour initialiser le pont-H et les latch.'' '''nbre_pas''' '' combien de pas sont nécessaire au moteur pour faire une tour.<br />.'' '''Numéro_moteur''' '' indique à quel port (bornier) le moteur est raccordé. Si vous utilisez les bornes M1 et M2, c'est le port 1. Si vous utilisez M3 et M4 c'est le port 2
 +
# Définissez la vitesse du moteur en utilisant '''setSpeed(rpm)''' where '' '''rpm''' '' est le nombre de tours/révolutions par minute auquel vous voulez que le moteur tourne.
 +
# Ensuite, à chaque fois que vous voulez mettre le moteur en mouvement, il suffit appeler la procédure '''step(nbre_de_pas, direction, type_de_pas)'''.<br />Vous pouvez modifier le type de pas à n'importe quel moment selon que vous avez besoin d'utiliser un minimum de puissance, un maximum de couple ou plus de précision.
 +
## '' '''nbre_de_pas''' '' est le nombre de pas dont vous voulez que le moteur tourne.
 +
## La '' '''direction''' '' est soit '''FORWARD''' (avant) ou '''BACKWARD''' (arrière)
 +
## '' '''Type_de_pas''' '' peut être soit '''SINGLE, DOUBLE. INTERLEAVE''' ou '''MICROSTEP'''.<br />"Single" signifie single-coil activation (activation d'un seul bobinage) et utilise un minimum de puissance,<br />"double" signifie que les deux bobinage sont activés à la fois (pour un couple plus important),<br /> "interleave" signifie que les bobinages sont activées en alternance entre simple et double ("single" et "double") pour obtenir le double de résolution (mais aussi la moitié de la vitesse).<br />Enfin, "Microstepping" est une méthode où les bobinage sont contrôlé en PWM pour créer un mouvement plus fluide entre les pas.<br />[http://www.ladyada.net/make/mshield/resources.html Il y a des tonnes d'information concernant les "pour" et "contre" des différents types de contrôle de pas dans les pages de ressources] (LadyAda, Anglais).
 +
# Par défaut, le moteur maintient sa position après la rotation (en pas). Si vous désirez désactiver les bobinages pour permettre au moteur de tourner librement, vous pouvez appeler la procédure '''release()'''
 +
# Les commandes de contrôle de pas sont 'bloquante' et rendrons la main au programme une fois tous les pas accomplis. Si quelqu'un désire être épatant, il peut écrire une librairie qui traite les opérations de pas-à-pas en tâche de fond... ca serait super cool! :)
  
 
  <nowiki>#include <AFMotor.h>
 
  <nowiki>#include <AFMotor.h>
Ligne 143 : Ligne 203 :
  
 
void setup() {
 
void setup() {
   Serial.begin(9600);          // set up Serial library at 9600 bps
+
   Serial.begin(9600);          // configure la connexion série a 9600 bauds
   Serial.println("Stepper test!");
+
   Serial.println("Test pas-a-pas!");
  
   motor.setSpeed(10);  // 10 rpm  
+
   motor.setSpeed(10);  // 10 rpm (rotation par minute) 
  
 
   motor.step(100, FORWARD, SINGLE);  
 
   motor.step(100, FORWARD, SINGLE);  
Ligne 167 : Ligne 227 :
 
}</nowiki>
 
}</nowiki>
  
If you want two stepper motors to step at once you'll need to write something like this:
+
Si vous voulez que les deux moteurs pas-à-pas fonctionnent en même pas, vous devez utiliser un comme comme ce qui suit:
  
 
  <nowiki>void doublestep (int steps, int direction, int style) {
 
  <nowiki>void doublestep (int steps, int direction, int style) {
Ligne 176 : Ligne 236 :
 
}</nowiki>
 
}</nowiki>
  
 +
== Ressources ==
 +
* [http://homepage.cs.uiowa.edu/~jones/step/types.html Types de moteurs pas-à-pas] et commande des bobine (anglais,  Douglas W. Jones, THE UNIVERSITY OF IOWA Department of Computer Science)
  
{{ADF-Accord}}
+
{{Motor-Shield-TRAILER}}
 
 
{{MCH-Accord}}
 

Version actuelle datée du 7 janvier 2014 à 19:47

Premièrement: Installer la librairie Arduino

avant de pouvoir utiliser le Shield Motor (Motor shield), vous devez installer la librairie AF_Motor pour Arduino - cette librairie indique à Arduino comment communiquer vec le motor shield. Ce n'est pas une option mais une nécessité!

  1. Premièrement, téléchargez la librairie depuis le GitHub d'AdaFruit
  2. Décompressez l'archive (fichier Zip) sur votre bureau
  3. Renommer le répertoire décompressé en "AFMotor"
  4. Assurez vous que le répertoire AFMotor contienne bien les fichier AFMotor.cpp et AFMotor.h . Sinon vérifiez les étapes précédentes.
  5. Déplacez le répertoire AFMotor folder dans le répertoire des librairies Arduino (répertoire_arduinos_ketch/libraries). Pour Windows, cela doit être quelque-chose comme "Mes Documents/Arduino/libraries", pour Mac quelque chose comme "Documents/arduino/libraries". Si c'est la première fois que vous installez une librairie, vous devrez certainement créer le répertoire "libraries". Assurez-vous de l'appeler exactement "libraries", pas de capitale, pas d'autre nom.
  6. A l'intérieur du répertorie "librairies", il doit y avoir le répertoire "AFMotor", et qu'à l'intérieur de "AFMotor" il y ait AFMotor.cpp, AFMotor.h et quelques autres fichiers
  7. Quittez Arduino IDE et redémarrez le. Vous devriez voir un sous-menu appelé File->Examples->AFMotor->MotorParty

Alimenter un moteur continu, exigences en tension et courant

Les moteurs ont besoin de beaucoup d'énergie, plus particulièrement les moteurs meilleurs marchés puisqu'ils sont moins performant. La première chose importante à connaître est la tension d'alimentation que le moteur va utiliser. Si vous avez de la chance, votre moteur dispose d'une fiche technique.
Certain moteurs hobbyistes (de jouet) ne sont prévus que pour une tension de 1.5V, mais il est courant pour un moteur continu ("DC Motor" en anglais) d'avoir une tension de fonctionnement 6 à 12V. Ce shield est conçu pour contrôler des moteurs de 4.5V à 25V.

Exigence en courant

La seconde chose à connaître est la quantité de courant dont votre moteur aura besoin. Le circuit intégré L293D contrôlant le moteur ("Motor driver" en anglais) sont conçu pour fournir 600mA per moteur avec un pic de courant à 1.2 Ampère.
Notez qu'une fois que le courant tend vers 1A vous aurez probablement besoin d'équiper le "motor driver" d'un dissipateur de chaleur, sinon vous subirez des défaillances thermiques, voir griller votre circuit intégré.

Utiliser un SN754410

Certaines personnes utilise un circuit intégré SN754410 pour contrôler les moteurs. Ils utilise le SN754410 à la place du L293D parce que le brochage est identique ("Pin Compatible" en anglais), dispose de diodes de protections en sortie et supporte 1A par moteur avec un pic à 2A.

Après une lecture attentive de la fiche technique et quelques discussions avec des techniciens, il apparait que ces diodes de protections sont conçues pour fournir uniquement un protection contre les décharges électrostatiques (ESD Protection). Les utiliser comme diodes de protections en roule-libre est du domaine du Hack et les performances ne sont absolument pas garantie... le risque pour le pont-H est bien réel.

C'est pour cette raison que le kit n'est pas livré avec des SN754410 mais avec des L293D qui intègrent des vraie diodes de protection "en roue libre" ("kickback-protection diodes" en anglais). Si vous désirez quand même prendre le risque d'utiliser des SN754410 parce que vous avez besoin de plus de courant, vous pouvez maintenant acheter ces composants et remplacer mes L293D en connaissant les risques potentiels.

Besoin de plus de puissance?

Vous pouvez acheter d'autres L293D et les souder pile au dessus des premiers déjà présent sur la carte ('piggyback' en anglais).

Voila, comment vous pouvez doubler la courant supporté par le L293D! Vous pouvez empiler plus de deux L293D mais cela ne devrait pas apporter beaucoup plus de bénéfice.

PiggyBack-componant.jpg
Source: tinyenormous.com

Restez néanmoins vigilant avec les courants mis en œuvre car si vous disposez de deux fois plus de courant, vous avez aussi besoin de dissiper au total plus de chaleur qu'avec un seul L293D.
Tout le monde sait qu'il fait beaucoup plus chaud à deux sous la couette que tout seul. Ce principe s'applique aussi au L293D empilés ;-) .

Les moteurs et les piles de 9v

Vous ne pouvez pas faire fonctionner efficacement des moteurs avec des piles de 9 volts, ne gaspillez donc pas vos piles de 9v et votre temps!

Utilisez des piles de type Plomb Acide (Lead Acid) ou accumilateur NiMH.

99% des 'problèmes moteur incompréhensible' (bizarres) sont causés par des parasites (bruit) du circuit de puissance qui passe dans le circuit d'alimentation Arduino (1*) et/ou d'une alimentation pas suffisamment puissante!

1*: Cela signifie qu'une alimentation est partagée (commune) entre le circuit de commande (Arduino) et le circuit de puissance (les moteurs).

Alimentation moteur: Comment configurer Arduino + Shield

Les Servos sont alimentés par le régulateur 5V de la carte Arduino. C'est parfait pour les moteurs hobbyistes suggérés. Si vous avez besoin de quelque-chose de plus costaud, sectionnez la piste qui va à la broche + des connecteurs servo et branchez votre propre alimentation 5-6V!

Les moteurs continu (DC) sont alimentés depuis 'de circuit d'alimentation haute tension' (high voltage supply) et NON depuis le régulateur 5V d'Arduino.

Il y a deux endroits où vous pouvez obtenir votre 'alimentation haute tension' pour les moteurs. La première est la prise jack de votre Arduino (surlaquelle est raccordé votre bloc d'alimentation) et la deuxième est bornier à 2 vis sur le shield (celui portant le libellé EXT_PWR sur la carte).

La prise Jack de votre Arduino dispose d'une diode de protection, il n'est donc pas possible de faire une erreur fatale si vous utilisez un bloc d'alimentation mal polarisé. Cependant, le bornier EXT_PWR ne dispose pas de diode de protection (pour une vrai bonne raison). Soyez extrêmement prudent et n'inversez pas la polarité sinon vous allez détruire le shield moteur et/ou votre Arduino!

Voici comment cela fonctionne:

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com Traduction par MCHobby]]

Une seule alimentation

Si vous désirez utiliser une seule alimentation pour Arduino et vos moteurs, raccordez simplement la prise jack sur votre Arduino (ou sur le bornier PWR_EXT). Placez ensuite le cavalier sur le motor shield.

Si vous disposez encore d'un vielle Arduino Diecimila, vous devrez également placer le cavalier (jumper) sur la position EXT.

Notez que vous pourriez avoir des problèmes de "resets" (redémarrage) de votre Arduino si votre alimentation n'est pas capable de fournir une puissance constante. Cette méthode d'alimentation n'est pas celle qui est recommandée pour alimenter vos projets motorisés.

USB pour Arduino + alimentation moteur

Si vous désirez alimenter votre Arduino par USB et les motors depuis une alimentation externe, raccordez votre cable USB. Connectez ensuite l'alimentation moteur sur le bornier PWR_EXT du shield. NE PLACEZ PAS LE CAVALIER (jumper) sur le shield. C'est la méthode d'alimentation recommandée pour vos projets motorisés. (Si vous disposez encore d'un ancien Arduino Diecimila, n'oubliez pas de placer le cavalier d'alimentation sur USB. Si vous avez un Décimelia, vous pouvez exécuter la procédure suivante: raccorder l'alimentation sur votre Arduino, et placer le cavalier sur le motor shield)

Deux alimentations séparées

Voici une méthode recommandée pour alimenter vos projets moteurs.

Si vous désirez avoir 2 alimentations continu séparées pour alimenter votre Arduino et vos moteurs. Raccorder l'alimentation pour votre Arduino dans la prise Jack, et connectez l'alimentation des moteurs sur le bornier PWR_EXT. Le cavalier doit être retiré du moteur shield.

Si vous avez encore un ancien Arduino Diecimila, placer le cavalier de votre Arduino sur EXT.

Quoi qu'il en soit...

Servo Moteur

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Les servo moteurs pour Hobbyiste représentent certainement la façon la plus simple de mettre le shield moteur en oeuvre.

Le shield dispose de deux connecteurs (pinHeader) de 3 broches.

Un servo moteur dispose d'un connecteur femelle à 3 broches avec un empattement de 2.54mm. Ces 3 connexion reprennent +5V, masse(GND) et le signal d'entrée

Le shield moteur dispose de 2 sorties PWM (précision de 16 bits) raccordées sur 2 connecteurs de 3 broches mâles. Ces connecteurs permettent de raccorder facilement des servo moteurs et de démarrer rapidement. Ces servos nécessitent pas mal d'énergie, une pile de 9v ne résisterait donc pas plus que quelques minutes!

Ce qu'il y a de sympa avec les contrôleurs PWM intégrés à la carte, c'est qu'il sont très précis et font la majorité de leurs tâches sans que l'on s'en rende compte. Vous pouvez utiliser la librairie Servo incluse dans l'environnement Arduino.

Utiliser des servi est simple, vous pouvez lire le tutoriel Arduino officiel qui reprend la document nécessaire pour l'utilisation de Servo avec quelques exemples de sketchs pour Arduino IDE

Moteur Continu

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Les moteur à courant continu (CC ou "DC" en anglais) sont utilisés dans toutes sortes de projet robotique. Le shield moteur est capable de controler jusqu'à 4 moteurs bi-directionnels. Cela signifie qu'il peuvent fonctionner en marche avant et marche arrière. La vitesse peut également varier d'un incrément de 0.5% grace à l'utilisation d'un signal PWM de grande précision. Cela signifie que la vitesse reste constance et ne variera pas!

Notez que le circuit Pont-H n'est pas conçu pour contrôler un courant supérieur à 600 mA (ou un pic supérieur à 1.2A), il convient donc pour les "petits" moteurs. Vérifiez la fiche technique de vos moteurs pour vous assurer qu'ils conviennent bien.

Pour connecter un moteur, soudez simplement deux fils sur les bornes du moteur et connectez les ensuite sur l'un des borniers M1, M2, M3, ou M4 (au choix).

Exécutez ensuite les étapes suivantes dans votre sketch Arduino


  1. Assurez vous d'avoir inclus <AFMotor.h>
  2. Créez un objet AF_DCMotor avec AF_DCMotor(numéro_motor, fréquence), pour initialiser le pont-H et les latch.
    Le constructeur accepte deux arguments.
    Le premier est le port (bornier) sur lequel le moteur est connecté (1, 2, 3 ou 4).
    fréquence est la rapidité du signal contrôlant la vitesse.
    Pour les moteurs 1 et 2 vous pouvez opter pour MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, ou MOTOR12_1KHZ. Un signal à haute vitesse comme 64KHz ne sera pas audible mais une signal basse vitesse tel que 1KHz nécessitera moins de puissance.
    Les Moteurs 3 et 4 peuvent uniquement fonctionner avec un signal à 1KHz et ignorerons donc le paramètre fournit.
  3. Ensuite, vous pouvez sélectionner la vitesse du moteur en utilisant setSpeed(vitesse)vitesse est compris entre 0 (arrêt) et 255 (pleine vitesse). Vous pouvez modifier la vitesse à n'importe quel moment.
  4. Pour mettre le moteur en route, appelez la fonction run(sens_rotation)' où sens_rotation est FORWARD pour avant, BACKWARD pour arrière ou RELEASE (arrêt).
    Notez que l'arrêt utilise le terme anglais 'RELEASE' qui à plutôt le sens de "relâché". C'est normal puisque le moteur n'est plus contrôlé sans pour autant être bloqué/verrouillé à l'arrêt... il peut en effet encore être entraîner à la main :-).
    Pour le reste, gardez à l'esprit qu'Arduino ne sait pas si votre moteur est cablé dans un sens ou dans l'autre... et ne sait donc pas à quoi correspond la marche avant (forward) ou la marche arrière (backward) de votre montage. Si votre montage fonctionne en marche arrière avec l'instruction run(FORWARD), il suffit d'inverser les fils de raccordement du moteur sur le bornier du shield moteur.
#include <AFMotor.h>

AF_DCMotor motor(2, MOTOR12_64KHZ); // Créer le moteur #2, PWM à 64KHz

void setup() {
  Serial.begin(9600);           // Initialiser la communication série à 9600 bauds
  Serial.println("Test Moteur!");
  
  motor.setSpeed(200);     // Mettre la vitesse à 200 (max 255)
}

void loop() {
  Serial.print("tick");
  
  motor.run(FORWARD);      // mettre en marche avant (forward)
  delay(1000);

  Serial.print("tock");
  motor.run(BACKWARD);     // Dans l'autre sens
  delay(1000);
  
  Serial.print("tack");
  motor.run(RELEASE);      // Arrêt
  delay(1000);
}

Moteur pas-à-pas

Voici un exemple avec un moteur pas-à-pas bipolaire.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Un moteur pas-à-pas est genial pour un contrôle (semi-)précis, parfait pour beaucoup de robot projets CNC (commande numérique). Ce shield moteur est capable de supporter jusqu'à 2 moteurs pas-à-pas. La librairie fonctionne à l'identique avec les moteurs bipolaires et unipolaires.

Moteurs unipolaires

Pour les moteurs unipolaires: pour raccorder le moteur, vous devez d'abord savoir quel fil est connectée à quel bobine, et quelle fil se trouve au centre de la bobine. Si c'est un moteur à 5 fils alors il y a un seul fil qui est centre pour les deux bobinages. Il y a plein de tutoriels en ligne qui permet de déduire le brochage/raccordement des moteurs pas-à-pas. Les milieux de bobines doivent tous les deux être raccordés à la masse (borne GND) du bloc de raccordement moteur. Ensuite, la bobine 1 doit être connectée sur un port moteur (disons M1 ou M3) et la deuxième bobine sur l'autre port moteur (M2 ou M4).

Moteurs bipolaires

Pour les moteurs bipolaires: C'est comme pour les moteurs unipolaires excepté qu'il n'y a pas de 5ieme fil à raccorder à la masse.

Le code du programme restera exactement pareil.

Nbre de pas

Une information importante sur un moteur pas à pas est le nombre de pas par révolution. C'est donc le nombre de pas nécessaire pour que moteur fasse un tour complet.

Les fiches techniques ne fonctionnent pas cette information telle quel mais indique plutôt le nombre de degrés par pas.

Sur un moteur à 7.5 degrés/pas, le moteur à 360/7.5 = 48 pas par révolution.

Sur un moteur à 1.8 degrés/pas, le moteur à 360/1.8 = 200 pas par révolution.

Le code

Faire fonctionner un moteur pas-à-pas est juste un peu plus complexe d'un moteur continu mais cela reste encore simple.

  1. Assurez vous que vous avez inlus la librairie <AFMotor.h>
  2. Créez un object pour moteur pas-à-pas avec AF_Stepper(nbre_pas, numéro_moteur) pour initialiser le pont-H et les latch. nbre_pas combien de pas sont nécessaire au moteur pour faire une tour.
    . Numéro_moteur indique à quel port (bornier) le moteur est raccordé. Si vous utilisez les bornes M1 et M2, c'est le port 1. Si vous utilisez M3 et M4 c'est le port 2
  3. Définissez la vitesse du moteur en utilisant setSpeed(rpm) where rpm est le nombre de tours/révolutions par minute auquel vous voulez que le moteur tourne.
  4. Ensuite, à chaque fois que vous voulez mettre le moteur en mouvement, il suffit appeler la procédure step(nbre_de_pas, direction, type_de_pas).
    Vous pouvez modifier le type de pas à n'importe quel moment selon que vous avez besoin d'utiliser un minimum de puissance, un maximum de couple ou plus de précision.
    1. nbre_de_pas est le nombre de pas dont vous voulez que le moteur tourne.
    2. La direction est soit FORWARD (avant) ou BACKWARD (arrière)
    3. Type_de_pas peut être soit SINGLE, DOUBLE. INTERLEAVE ou MICROSTEP.
      "Single" signifie single-coil activation (activation d'un seul bobinage) et utilise un minimum de puissance,
      "double" signifie que les deux bobinage sont activés à la fois (pour un couple plus important),
      "interleave" signifie que les bobinages sont activées en alternance entre simple et double ("single" et "double") pour obtenir le double de résolution (mais aussi la moitié de la vitesse).
      Enfin, "Microstepping" est une méthode où les bobinage sont contrôlé en PWM pour créer un mouvement plus fluide entre les pas.
      Il y a des tonnes d'information concernant les "pour" et "contre" des différents types de contrôle de pas dans les pages de ressources (LadyAda, Anglais).
  5. Par défaut, le moteur maintient sa position après la rotation (en pas). Si vous désirez désactiver les bobinages pour permettre au moteur de tourner librement, vous pouvez appeler la procédure release()
  6. Les commandes de contrôle de pas sont 'bloquante' et rendrons la main au programme une fois tous les pas accomplis. Si quelqu'un désire être épatant, il peut écrire une librairie qui traite les opérations de pas-à-pas en tâche de fond... ca serait super cool! :)
#include <AFMotor.h>

AF_Stepper motor(48, 2);

void setup() {
  Serial.begin(9600);           // configure la connexion série a 9600 bauds
  Serial.println("Test pas-a-pas!");

  motor.setSpeed(10);  // 10 rpm (rotation par minute)  

  motor.step(100, FORWARD, SINGLE); 
  motor.release();
  delay(1000);
}

void loop() {
  motor.step(100, FORWARD, SINGLE); 
  motor.step(100, BACKWARD, SINGLE); 

  motor.step(100, FORWARD, DOUBLE); 
  motor.step(100, BACKWARD, DOUBLE);

  motor.step(100, FORWARD, INTERLEAVE); 
  motor.step(100, BACKWARD, INTERLEAVE); 

  motor.step(100, FORWARD, MICROSTEP); 
  motor.step(100, BACKWARD, MICROSTEP); 
}

Si vous voulez que les deux moteurs pas-à-pas fonctionnent en même pas, vous devez utiliser un comme comme ce qui suit:

void doublestep (int steps, int direction, int style) {
  while (steps--) {
    motor1.step(1, direction, style); 
    motor2.step(1, direction, style); 
  }
}

Ressources


Source: Motor Shield créé par LadyAda pour AdaFruit Industries. Crédit [www.adafruit.com AdaFruit Industries]

Traduit par Meurisse D. pour MCHobby.be]

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.