Outils pour utilisateurs

Outils du site


issue113:python

Table des matières

1

This month, we will be using the RPi to control a simple DC Hobby motor. This can be obtained from most hobby stores, electronics suppliers, and even some big box hardware stores. Here is a “shopping list” of what we will be needing. • DC Hobby Motor • L293D Dual H-Bridge Motor Driver Chip • 4 AA (or AAA) Battery Holder and batteries • Breadboard • Male to Male jumpers • RPi (of course) Before we start wiring and coding, we need to talk about a couple of things. First, NEVER EVER connect a motor of any kind directly to the RPi. You are asking for disaster. The current requirements can cause the RPi to “melt down”. The driver chip is less than $5.00 US and is a lot cheaper than a $39.00 RPi. Second, we will discuss the L293D H-bridge motor driver for a few moments so you understand how this device works.

Ce mois-ci, nous allons utiliser le RPi pour contrôler un simple moteur de loisirs à courant continu (DC). On peut se procurer celui-ci dans la plupart des boutiques de loisirs, des fournisseurs d'électronique et même dans certaines grandes chaînes de quincaillerie. Voici une « liste de courses » énumérant ce dont nous aurons besoin :

• Moteur de loisirs DC. • Puce de contrôle moteur à double pont en H L293D. • 4 piles AA (ou AAA) et un support pour piles. • Planche à essai. • Des cavaliers mâle-mâle. • Le RPi (bien entendu).

Avant de commencer le câblage et le codage, nous devons parler de deux ou trois choses.

Tout d'abord, ne JAMAIS, JAMAIS, connecter un moteur de n'importe quel type directement au RPi. C'est une catastrophe assurée. Les besoins en courant peuvent carrément faire « fondre » le RPi. La puce de contrôle ne coûte même pas 5 $ US, ce qui est beaucoup moins cher qu'un RPi à 39 $.

Ensuite, nous discuterons du pilote de moteur L293D à pont en H pendant quelques instants pour que vous puissiez comprendre le fonctionnement de ce dispositif.

2

According to wikipedia, “An H bridge is an electronic circuit that enables a voltage to be applied across a load in either direction. These circuits are often used in robotics and other applications to allow DC motors to run forwards and backwards.” Here is a pinout of the driver chip (“borrowed” from hardwarefun.com)… Pins 1 and 9 are enable pins. Think of these pins as an On/Off switch. A low state on the enable pin means the motor is off. A high state means that the motor CAN BE on. Let’s look at it as a logic table or truth table. Pins 1A and 2A are one side of the chip and are control lines like the enable pins. The same logic applies to 3A and 4A (the other half of the chip) as well. Pins 1Y and 2Y are the outputs to the motor. The bottom line of the crazy table above is this. If you want the motor to turn on you MUST… • Have the Enable pin HIGH (pin 1 and/or pin 9) • AND EITHER 1A OR 2A HIGH BUT NOT BOTH (chip pin 2 and pin 7 respectively) Now that we have decoded the logic of the magic chip, we can start to wire our breadboard and RPi.

Selon Wikipedia, « Un pont en H est un circuit électronique qui permet l'application d'une tension sur une charge dans les deux sens. Ces circuits sont souvent utilisés dans la robotique et d'autres applications pour permettre aux moteurs DC de tourner en avant et en arrière. »

Voici le brochage de la puce de pilotage (« emprunté » auprès de hardwarefun.com)…

Les broches 1 et 9 sont des broches enable (activation). Considérez-les comme des interrupteurs On/Off. Un état bas de la broche enable signifie que le moteur est éteint. Un état haut signifie que le moteur PEUT ÊTRE allumé. Regardons cela comme un tableau logique ou une table de vérité. Les broches 1A et 2A sont sur un côté de la puce et sont des lignes de contrôle comme les broches enable. La même logique s'applique aussi à 3A et 4A (l'autre moitié de la puce). Les broches 1Y et 2Y sont les sorties vers le moteur.

Le résultat du tableau dément ci-dessus est celui-ci : Si vous voulez que le moteur s'allume : • l'état de la broche enable DOIT être HAUT (la broche 1 et/ou la broche 9), • ET L'ÉTAT DE, SOIT 1A, SOIT 2A, MAIS PAS LES DEUX, DOIT être HAUT (la broche 2 et la broche 7 respectivement).

Ayant décodé la logique de la puce magique, nous pouvons commencer le câblage de la plaque d'essai et du RPi.

3

Wiring The Fritzing drawing (next page, top right) shows our wiring diagram for this month. Notice that we are only using one half of the chip, so we could actually control two small DC motors instead of just one. That, however, will be up to you to experiment with. As always, make the wiring connections to the RPi BEFORE you power the RPi on. Also double check your wiring, especially since we have an external power source. You might not be happy if something is on the wrong pin. This first Fritzing image shows the connections to the RPi and to the breadboard/chip. Basically it breaks down like that shown in the table bottom right The next Fritzing diagram (below) shows the battery and motor hook-ups. We are using the +5 VDC power from the RPi to power the motor driver chip (RPi pin 2 to L293D pin 16). While the above diagram shows AAA batteries, you can use a battery pack that uses AA batteries as well. We are also providing Ground from the RPi (pin 6) to the chip (pins 4,5,12,13). The motor is driven on chip pin 3 (1A) and pin 5 (2A). The battery connects to chip pin 8 to provide the voltage for the motor.

Câblage

Le dessin Fritzing (en haut à droite de la page suivante) montre le diagramme de câblage pour ce mois-ci. Remarquez que nous n'utilisons qu'une moitié de la puce, ce qui veut dire que nous pourrions, en fait, contrôler deux petits moteurs DC et pas seulement un. C'est à vous d'expérimenter cela !

Comme toujours, connectez les câbles au RPi AVANT de l'allumer. En outre, il faut vérifier et revérifier le câblage, surtout à cause de l'alimentation externe. Vous pourriez le regretter vivement si quelque chose est sur la mauvaise broche.

Cette première image Fritzing montre les connexions au RPi et à la plaque d'essai/la puce. C'est distribué comme le montre le tableau en bas à droite.

Le diagramme Fritzing suivant (ci-dessous) montre les connexions entre la batterie et le moteur.

Nous utilisons l'alimentation +5 VDC du RPi pour faire tourner la puce de contrôle du moteur (RPi broche 2 vers L293D broche 16). Le diagramme ci-dessus montre des piles AAA, mais vous pouvez aussi vous servir d'un bloc piles qui utilise des piles AA. Nous fournissons la masse du RPi (broche 6) vers la puce (broches 4,5,12,13). Ce sont les broches 3 (1A) et 5 (2A) de la puce qui font tourner le moteur. La pile se connecte à la broche 8 de la puce afin de fournir la tension au moteur.

4

Code We will deal with code in two programs. The first simply turns on the motor, runs for a few seconds then stops it. The second is a modified version of the first that shows how to reverse the motor. Dcmotor1.py This program (below) will simply turn on the motor in forward (clockwise) mode and let it run, then stop it. Basically it just proves that everything is working correctly. Dcmotor2.py In this program (next page), we set up the GPIO pins just as we did before, but we are now using PWM to modulate the speed of the motor. If you don’t remember PWM, please refer to Part 64 back in FCM 107. In the forward mode, the longer the duty cycle (closer to 100) means the motor will go faster. In the reverse mode, the SHORTER the duty cycle (closer to 0) means the motor will go faster. We speed up the motor by setting the duty cycle to a LOWER percentage, let it run for 5 seconds, then stop it, do a GPIO.cleanup(), then end the program. Well, that’s it for this month. Next month, we will be working with servos. All you need is a small inexpensive one with three wires. We will not be using parts from this month’s project, but keep them for future projects. Until then, have fun.

Code

Nous allons traiter le code dans deux programmes. Le premier allume le moteur, le laisse tourner pendant quelques secondes, puis l'arrête. Le deuxième est une version modifiée du premier qui démontre comment inverser le sens du moteur.

Dcmotor1.py

Ce programme (ci-dessous) allumera tout simplement le moteur en marche avant (dans le sens des aiguilles d'une montre), le laissera tourner, puis l'arrêtera. Essentiellement, il démontrera que tout fonctionne comme il faut.

Dcmotor2.py

Dans ce programme (page suivante), nous réglons les broches GPIO comme nous l'avons fait auparavant, mais maintenant, nous utilisons PWM pour moduler la vitesse du moteur. Si vous ne vous souvenez pas de PWM, veuillez revoir la partie 64, dans le FCM n° 107.

En marche avant, plus le rapport cyclique est long (plus près de 100), plus le moteur tournera vite.

En marche arrière, plus le rapport cyclique est COURT (plus près de 0), plus vite tournera le moteur.

Nous accélérons le moteur en réglant le rapport cyclique sur un FAIBLE pourcentage, nous le laissons tourner pendant 5 secondes, puis nous l'arrêtons, faisons un GPIO.cleanup(), et terminons le programme.

C'est tout pour ce mois-ci. Le mois prochain, nous allons travailler avec des servos. Tout ce dont vous aurez besoin est un petit servo peu cher avec trois fils. Nous n'utiliserons pas de pièces du projet actuel, mais gardez-les pour des projets futurs.

Jusque-là, amusez-vous bien.

issue113/python.txt · Dernière modification : 2016/10/10 19:11 de d52fr