Outils pour utilisateurs

Outils du site


issue109:python

Last month, I suggested you get a number of parts and if you were able to get them, I hope that it didn’t cost you too much. If you haven’t gotten them, then follow along as best you can, and if there is a particular project you want to try, then get those components that are needed. I’m trying to do this on as little cash outlay for either you or me as possible. Frequently, you can recycle many of the items from older electronic items; many can be found at a local thrift store for pence on a pound. (Hopefully I got that one right. We say pennies on a dollar here, so at least give me an “F” for effort… ok?) As I was laying last week, waiting for some surgery, I was thinking that if someone were to come up to me and ask directly why I’m doing this, what my answer would be. Before the wonderful chemicals they pumped into my body to make the process less horrible, I realized that the REAL reason is multi-part. First, is to create excitement in “non-programmers” when doing things that seemingly could not be done without a ton of training. Secondly, is to show that the newer technology, like the Raspberry Pi and the Arduino, is not beyond the ken of the “general joe” out there, but that anyone can do things that have real world applications (hence the title of our series). That having been said, making LEDs blink is only the same kind of project for the hardware world as the “Hello World” program is in the programming realm. You have to take small steps before you move to the big race. Believe me, we will be doing some amazing things with all those little parts, whatsits and thingamabobs.

Le mois dernier, je vous suggérais de vous procurer un certain nombre de pièces et si vous avez été capable de les avoir, j'espère qu'elles ne vous ont pas coûté trop cher. Si vous n'en avez pas, suivez donc du mieux possible et si vous voulez essayer un projet particulier, alors procurez-vous les composants nécessaires. J'essaie de faire ceci avec une sortie minime de fonds, pour vous comme pour moi. Fréquemment, vous pouvez recycler de nombreux éléments issus de vieux matériels informatiques ; beaucoup peuvent être trouvés dans un magasin local d'occasion avec une bonne remise, quelques « pences » par livre sterling. (J'espère que je l'ai bien écrit. Par ici, on dit « pennies on a dollar » (des pennies par dollar) ; aussi, donnez-moi au moins un « AB » pour l'effort… d'accord ?)

Alors que j'étais allongé la semaine dernière, dans l'attente d'une intervention chirurgicale, je me demandais quelle pourrait être ma réponse, si je rencontrais quelqu'un qui me demandais pourquoi je fais tout ça. Avant les merveilleux produits chimiques qui m'ont été injectés pour rendre le processus moins terrible, je réalisais que la VRAIE raison est multiple. Premièrement, c'est pour créer un intérêt chez les « non-programmeurs » en faisant des choses qui, apparemment, ne pourraient pas être réalisées sans une tonne de formation. Deuxièmement, il est démontré que la dernière technologie, comme le Raspberry Pi et l'Arduino, n'est pas incompréhensible au « mec ordinaire » du coin, mais que tout un chacun peut faire des choses qui ont des applications dans la vraie vie (d'où le titre de cette série). Cela étant dit, faire clignoter une LED n'est que le même genre de projet pour le monde physique que le programme « Hello World » pour l'univers de la programmation. Vous devez faire des petits pas avant de passer au marathon. Croyez-moi, nous ferons des choses étonnantes avec toutes ces petites pièces, bidules et trucs-machins.

This month, we will be using the DHT11 Basic Temperature/ Humidity Sensor with our Raspberry Pi. Next month, we will be doing the same sort of thing using the Dallas DS18B20 temperature sensor, and if there is time and/or space, we’ll also talk about the 16×2 LCD display. In a few months, we’ll switch from the Raspberry Pi to using the Arduino. Don’t worry, none of the things we are using now will go unused after a single project. For example, once we have a grasp of some of the Arduino basics (which WILL involve learning a small amount of ‘C’ like programming (sorry about that)), we’ll be writing programs in Python on the RPi (or your local computer) to control the Arduino. The sensors we have learned about in our RPi experiments will be re-used when we learn about the Arduino, and many will be incorporated into some larger projects. Very shortly, we will be using DC Motors, Solenoids and Stepper Motors in some really basic projects, but we’ll use them in larger projects, including building a Computer Controlled (RPi) Laser Engraver using a Laser Diode recovered from an old DVD Burner. Enough about the future. Let’s start with this month's project.

Ce mois-ci, nous utiliserons le capteur de température/humidité simple DHT11 avec notre Raspbery Pi. Le mois prochain, nous ferons quelque chose de similaire en utilisant le capteur de température Dallas DS18B20 et, s'il y a du temps et/ou de l'espace, nous parlerons aussi de l'afficheur LCD 16×2. Dans quelques mois, nous passerons du Raspberry Pi à l'Arduino. Ne vous inquiétez pas, aucune des choses que nous utilisons maintenant ne sera utilisée pour un seul projet. Par exemple, une fois que nous aurons compris les bases de l'Arduino (qui inclura l'apprentissage d'un peu de « C » (désolé pour ça)), nous écrirons des programmes en Python sur le RPi (ou votre ordinateur personnel) pour piloter l'Arduino. Les capteurs que vous avez appris à connaître dans nos expériences avec le RPi seront réutilisés quand nous nous formerons à l'Arduino, et beaucoup seront incorporés dans de plus grands projets. Très prochainement, nous utiliserons des moteurs à courant continu, des solénoïdes et des moteurs pas-à-pas dans quelques projets vraiment élémentaires, mais nous les utiliserons dans des projets plus grands, y compris dans la construction d'un graveur laser piloté par ordinateur (RPi) en utilisant une diode laser récupérée dans un vieux graveur de DVD.

C'est assez pour le futur. Commençons notre projet du mois.

The DHT11 is the least expensive sibling of a series of temperature and humidity sensor sets. The DHT11 has a temperature range from 0⁰ to 50⁰ C with ±2⁰ C accuracy (32⁰ to 122⁰ F, ±3.6⁰F) and a humidity range from 20-90%RH ±5%. You can see that it’s not the most accurate sensor on the market; there is a DHT22 that is more accurate and has a wider range (-40⁰ to 80⁰ C temp range) but about twice as expensive. It’s a bit of a funny looking thing. A blue rectangular plastic box with holes in it and something shiny inside it. It might come just as a single sensor with 4 pins, or already on a mini-circuit board with 3 or 4 pins. Either way, they are basically the same. For now, we’ll use the discrete component (the one without the circuit board) for the sake of the discussion, and I’ll address the differences as we go along. Whenever you want to work with a new sensor, you should get a spec sheet (data sheet). A simple web search should turn up a number of results. Try to get something directly from the manufacturer if at all possible. For the DHT11, a good place to get one of the various data sheets available is http://www.micropik.com/PDF/dht11.pdf. While this isn’t directly from the manufacturer, it is from a company that sells it, and has “translated” the manufacturer’s data into a 9-page PDF file.

Le DHT11 est l'élément le moins cher d'une famille de capteurs de température et d'humidité. Le DHT11 a une plage de température de 0 à 50 °C avec une précision de ± 2 ° (32 à 122 ⁰F, ± 3.6 ⁰F) et une plage d'humidité de 20-90 %RH ± 5 %. Vous pouvez voir que ce n'est pas le capteur le plus précis du marché ; le DHT22 est plus précis et a une gamme plus étendue (gamme de température de -40 à 80 ⁰C) mais coûte deux fois plus cher.

C'est une drôle de pièce. Un boîtier plastique rectangulaire bleu avec des trous et quelque chose de brillant à l'intérieur. Il peut être livré, soit seul avec quatre picots, soit sur un petit circuit imprimé avec 3 ou 4 picots. Quel que soit le format, c'est la même chose à la base. Pour le moment, nous utiliserons le composant discret (seul, sans le circuit imprimé), pour faciliter la présentation et je traiterai les différences au fur et à mesure.

Chaque fois que vous voulez travailler avec un nouveau capteur, vous devrez prendre la feuille de spécifications (la « data sheet »). Une simple recherche sur le Web devrait retourner un bon nom de résultats. Essayez de trouver quelque chose venant directement du fabricant si c'est possible. Pour le DHT11, un bon endroit pour se procurer une des nombreuses data sheets disponibles est http://www.micropik.com/PDF/dht11.pdf. Bien qu'elle ne soit pas du fabricant lui-même, elle est fournie par une société qui le vend et qui a « traduit » les données du fabricant en un fichier PDF de 9 pages.

You might already be asking, why do I need this? There’s a bunch of information that, unless you have a PhD in Physics or something, you’ll never need. Well, that is true, but there is a lot of information that IS relevant and can potentially keep you from blowing up either the sensor, the controller, or your work bench. In this case, we find that the DC operating voltage is between 3 to 5 volts and it pulls about 0.5mA during “normal” conditions (section 6). We also find that this is a rather slow device and that we should not try to pull data more than once per second. Basically we’ll keep it around once every five seconds in our testing program, which is way more than we’ll need in reality. Another thing: if the cable that sends the data from the sensor to the microcontroller (our RPi) is less than 20 meters, we should have about a 5K ohm resistor between the data line and the local power supply (at the sensor) as a pull-up. One last thing (I’m going to stop here, but there’s much more): Pin 1 is positive voltage, Pin 2 is the data pin, and Pin 4 is the ground pin. This gives us pretty much everything we need to know to safely connect this to our RPi. Below is the wiring diagram for a “raw” DHT11 sensor WITHOUT a breakout board. If you have a sensor with a breakout board, see my discussion below the diagram.

Vous devrez déjà vous demander : pourquoi en ai-je besoin ? C'est un ensemble d'informations dont vous n'aurez jamais besoin, sauf si vous avez un doctorat en physique ou quelque chose comme ça. Oui, c'est vrai, mais il y a beaucoup d'informations qui sont pertinentes et qui peuvent potentiellement vous éviter de faire exploser, soit le capteur, soit le contrôleur, soit votre banc d'essai. Dans notre cas, nous trouvons que la tension d'alimentation continue doit être entre 3 et 5 volts et qu'il consomme environ 0,5 mA dans des conditions « normales » (voir section 6). Nous trouvons aussi que ce capteur est plutôt lent et qu'il ne faudra pas essayer de recueillir plus d'une valeur par seconde. Essentiellement, nous en prendrons une toutes le cinq secondes environ dans notre programme de test, ce qui est bien plus que ce dont nous aurons réellement besoin. Autre chose : si le câble qui transmet les données du capteur vers le microcontrôleur (notre RPi) est inférieur à 20 mètres, nous devons mettre une résistance de tirage de 5 kΩ entre la ligne de données et l'alimentation du capteur. Une dernière chose (je m'arrête ici, mais il y en a d'autres) : la tension positive va sur le picot 1, les données sont sur le picot 2 et la masse sur le picot 4. Avec ceci, nous avons à peu près tout le nécessaire pour savoir le connecter à notre RPi en toute sécurité. Ci-dessous, voici le schéma de câblage pour un capteur DHT11 « seul » SANS circuit support. Si votre capteur est monté sur circuit, lisez mes explications à droite du schéma.

Notice that I said earlier that a 5K resistor was needed as a pull-up. If you are going to use 3.3 VDC as a power source (RPi pin 1), then a 5K resistor works pretty well. If, however, you are going to use 5 VDC as shown in the diagram, use a 10K resistor. You can see that it’s fairly simple, just three wires and a resistor. For our simple project, don’t try to make the wiring the entire 20 meters though. If you have a DHT11 on a breakout board, you will likely have only 3 output pins on it. I have two sensors from different vendors, and (go figure) both have a different pinout. One is laid out [Data] [Positive Voltage] [Ground] and is marked “S -”. The other is [Ground] [Data] [Positive Voltage] and is marked as such. Hopefully, yours has some sort of pinout definition printed on it. If not, you can use a multimeter to trace the ground pin and voltage pin directly from the sensor to the breakout pin. You can usually guess that if there are three output pins on the breakout board and you know ground and positive voltage, then the other SHOULD be the data pin.

Notez que j'ai dit avant qu'il y avait besoin d'une résistance de tirage de 5kΩ. Si vous utilisez une alimentation de 3,3 V DC (le picot 1 du RPi), alors la résistance de 5kΩ marche bien. Cependant, si vous choisissez 5 V DC, comme sur le schéma, utilisez une résistance de 10kΩ.

Vous pouvez voir que c'est plutôt simple, juste trois fils et une résistance. Pour notre projet simpliste, cependant, n'essayez pas avec tous les 20 mètres du fil.

Si votre DHT11 est sur circuit, vous devriez avoir au moins 3 picots. J'ai deux capteurs de marchands différents et (allez savoir pourquoi) ils ont une disposition des picots différente. Sur l'un je trouve [Data] (données) [Positive Voltage] (alim +) [Ground] (alim -) et c'est marqué « S - ». Pour l'autre, [Ground] [Data] [Positive Voltage], marqué ainsi. J'espère que, pour le vôtre, la définition de la disposition des picots est plus ou moins imprimée dessus. Si non, vous pouvez essayer avec un multimètre de suivre la piste entre la masse du capteur et le picot du circuit ; de même pour le +. Vous pouvez en général deviner que, s'il y a trois picots de sortie sur le circuit et que vous connaissez déjà la masse et l'alim, le dernier DEVRAIT ÊTRE celui des données.

Now our program code. For the sake of getting things up and running quickly, we will be using some code provided by the kind people at Adafruit.com – they provide the library for working with the DHT11. (They found that trying to run straight Python code for the library causes some timing issues, so the library is actually written in ‘C’.) There are a number of steps involved, so follow the instructions carefully. I’ve paraphrased them so if something doesn’t work, you can also find the instructions at the Adafruit website at https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/software-install-updated . Once everything is done, you can run my modified Python example presented at the end of the instructions. In your “/home/pi” directory, run the following commands: git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo apt-get update sudo apt-get install build-essential python-dev python-openssl Ignore any errors that state a package is already installed.

Maintenant, notre code de programme.

Pour une mise en route rapide, nous utiliserons du code fourni par des gens sur Adafruit.com - ils fournissent une bibliothèque fonctionnant avec le DHT11. (Ils trouvent que d'essayer de faire tourner la bibliothèque directement en code Python entraîne certains problèmes ; aussi, la bibliothèque est écrite en « C ».) Il y a un certain nombre d'étapes et il faut donc suivre les instructions avec beaucoup d'attention. Je les ai paraphrasées ; ainsi, si quelque chose ne fonctionne pas, vous pouvez trouver aussi les instructions sur le site Web d'Adafruit à : https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/software-install-updated . Quand tout est fait, vous pouvez faire tourner mon exemple modifié en Python présenté à la fin des instructions.

Dans votre répertoire « /home/pi », lancez les commandes suivantes :

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

cd Adafruit_Python_DHT

sudo apt-get update

sudo apt-get install build-essential python-dev python-openssl

Ignorez toutes les erreurs qui font état d'un paquet déjà installé.

Next, install the library by running: sudo python setup.py install Once all that is done, you can move on to our sample code. Above is my modified sample code “borrowed” from the Adafruit sample code. All of the above can basically be boiled down to three lines of code. The two import statements and the assignment of the variable ‘sensor’ to the class code. pin = 4 sleep(3) Here we define that the sensor is connected to GPIO pin 4 and then we wait 3 seconds for things to settle and be ready to work.

Ensuite, installez la bibliothèque en lançant :

sudo python setup.py install

Une fois que tout est fait, vous pouvez passer à notre code exemple.

Ci-dessus, voici mon échantillon de code modifié, « emprunté » au code exemple d'Adafruit.

Tout ce qui est au-dessus pourrait être réduit à trois lignes de code. Les deux déclarations d'import et l'assignation de la variable « sensor » (capteur) au code de la classe.

pin = 4 sleep(3)

Ici, nous définissons que le capteur est connecté au picot 4 du GPIO et que nous attendons 3 secondes pour que tout s'établisse et soit prêt à fonctionner.

We use a simple loop (next page, top right) to grab the values for humidity and temp over and over. I never got the knack of relating Celsius to “real” temperatures, so I convert it so that I can understand it. If you want Celsius, just comment out the conversion line. Now (next page, bottom right) we check to see if we got realistic values for both humidity and temperature, then we display them and sleep for 5 seconds. I must admit, when I run the program with one sensor, it gives some rather wacky results for the first two or three minutes, then settles down to values that I can trust. The other sensor seems to “lock in” faster, so I’m just writing it off to something in the first sensor. Well, that’s it for this month. Remember, we’ll be using the Dallas temp sensor next time, so be ready. Have a good time and I’ll see you next month.

Nous utilisons une simple boucle (page suivante, en haut à droite) pour récupérer les valeurs d'humidité et de température en permanence. Je n'ai jamais trouvé le truc reliant les Celsius à la température « réelle » ; aussi, je la convertis de telle sorte que je la comprends. Si vous voulez des Celsius, commentez simplement la ligne de conversion.

Maintenant (page suivante, en bas à droite), nous vérifions que les valeurs de température et d'humidité sont réalistes, puis nous les affichons et attendons 5 secondes.

Je dois admettre que, quand je lance le programme avec un certain capteur, j'obtiens des résultats plutôt délirants pendant les deux ou trois premières minutes, puis des valeurs crédibles s'établissent. L'autre capteur semble se « positionner » plus rapidement ; aussi, je pense que le premier capteur doit avoir un petit problème.

Bon, c'est tout pour ce mois-ci. Souvenez-vous que, la prochaine fois, nous utiliserons le capteur de température de Dallas ; soyez prêt.

Amusez-vous bien et au mois prochain.

issue109/python.txt · Dernière modification : 2016/06/15 14:45 de auntiee