Outils pour utilisateurs

Outils du site


issue107:arduino

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
issue107:arduino [2016/04/08 11:49] andre_domenechissue107:arduino [2016/04/08 14:49] (Version actuelle) auntiee
Ligne 1: Ligne 1:
 **WARNING: This month we’re heading into the big league with controlling household voltage devices. It should go without saying, but I’ll say it anyway, you must make sure your 110/240V devices are unplugged before chopping cables, and double-check your wiring before you do put that plug back into the wall outlet.** **WARNING: This month we’re heading into the big league with controlling household voltage devices. It should go without saying, but I’ll say it anyway, you must make sure your 110/240V devices are unplugged before chopping cables, and double-check your wiring before you do put that plug back into the wall outlet.**
  
-ATTENTION : ce mois-ci, nous passons en première division en pilotant des appareils sous tension domestique. Il va sans dire, mais je le dis quand même, que vous devez vous assurer que vos appareils sont débranchés avant de couper des câbleset vérifier deux fois votre câblage avant de remettre la fiche dans la prise murale.+ATTENTION : ce mois-ci, nous passons en première division en pilotant des appareils sous tension domestique. Il va sans dire, mais je le dis quand même, que vous devez vous assurer que vos appareils sont débranchés avant de couper des câbles et vérifier deux fois votre câblage avant de remettre la fiche dans la prise murale.
  
 **In previous articles, I used an LCD screen which, while it worked, would need about a dozen wires and a potentiometer to control the screen brightness (see photo, top board). This time, I’ve managed to get some much simpler LCD screens that require only four wires (same photo, bottom board). The wires are VCC, GND, SDA and SCL. These should be marked on your Arduino, but on UNO boards, I believe it’s A4 and A5. On my MEGA, it’s 20 and 21 and they’re marked as such. But you need to put both those lines through a 4.7K resistor from 5V. **In previous articles, I used an LCD screen which, while it worked, would need about a dozen wires and a potentiometer to control the screen brightness (see photo, top board). This time, I’ve managed to get some much simpler LCD screens that require only four wires (same photo, bottom board). The wires are VCC, GND, SDA and SCL. These should be marked on your Arduino, but on UNO boards, I believe it’s A4 and A5. On my MEGA, it’s 20 and 21 and they’re marked as such. But you need to put both those lines through a 4.7K resistor from 5V.
Ligne 9: Ligne 9:
 Before adding LCD code, we need to do a scan of the LCD screen to get its I2C address. Different models have different addresses. So, grab the code from: http://arduino.cc/playground/Main/I2cScanner and run it to see your LCD I2C address in the serial monitor. Mine is 0x3F.** Before adding LCD code, we need to do a scan of the LCD screen to get its I2C address. Different models have different addresses. So, grab the code from: http://arduino.cc/playground/Main/I2cScanner and run it to see your LCD I2C address in the serial monitor. Mine is 0x3F.**
  
-Dans les articles précédents, j'ai utilisé un écran LCD qui, quand il était en marche, nécessitait une douzaine de fils et un potentiomètre pour contrôler la luminosité (voir sur la photo, en haut de la carte). Cette fois, je me suis arrangé pour trouver des écrans LCD plus simples, qui n'utilisent que 4 fils (même photo, en bas de la carte). Les fils sont VCC, GND, SDA et SCL. Ces derniers devraient être marqués sur votre Arduino ; sur les cartes UNO, je crois que c'est A4 et A5. Sur mon MEGA, c'est 20 et 21 et ils sont aussi marqués. Mais vous devez raccorder ces deux lignes au 5V à travers une résistance de 4,7 k.+Dans les articles précédents, j'ai utilisé un écran LCD qui, quand il était en marche, nécessitait une douzaine de fils et un potentiomètre pour contrôler la luminosité (voir la carte en haut sur la photo). Cette fois, je me suis arrangé pour trouver des écrans LCD plus simples, qui n'utilisent que 4 fils (même photo, la carte du bas). Les fils sont VCC, GND, SDA et SCL. Ces derniers devraient être identifiés sur votre Arduino ; mais, sur les cartes UNO, je crois que c'est A4 et A5. Sur mon MEGA, c'est 20 et 21 et ils sont marqués ainsi. Mais vous devez raccorder ces deux lignes au 5V à travers une résistance de 4,7 k.
  
-Ces nouveaux écrans LCD sont I2C ce qui signifie qu'ils ont une petite carte de pilotage au dos. Cela signifie aussi qu'ils besoin d'une nouvelle bibliothèque (https://bitbucket.org/fmalpartida/new-liquidcrystal) dans le code.+Ces nouveaux écrans LCD sont I2C ce qui signifie qu'ils ont une petite carte de pilotage au dos. Cela signifie aussi qu'ils ont besoin d'une nouvelle bibliothèque (https://bitbucket.org/fmalpartida/new-liquidcrystal) dans le code.
  
 Avant d'ajouter le code du LCD, nous devons faire un scan de l'écran LCD pour acquérir son adresse I2C. Des modèles différents ont des adresses différentes. Aussi, récupérez le code depuis : http://arduino.cc/playground/Main/I2cScanner et lancez-le pour voir l'adresse I2C de votre LCD sur le moniteur série. La mienne est 0x3F. Avant d'ajouter le code du LCD, nous devons faire un scan de l'écran LCD pour acquérir son adresse I2C. Des modèles différents ont des adresses différentes. Aussi, récupérez le code depuis : http://arduino.cc/playground/Main/I2cScanner et lancez-le pour voir l'adresse I2C de votre LCD sur le moniteur série. La mienne est 0x3F.
Ligne 61: Ligne 61:
 LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
  
-Dans mon paramétrage, j'initialise l'écran en 16x2, allume le rétro-éclairage, affiche un message et mets une tempo pour qu'on ait le temps de le lire.+Dans mon paramétrage, j'initialise l'écran en 16x2, allume le rétro-éclairage, affiche un message et mets un tempo pour qu'on ait le temps de le lire.
  
 **lcd.begin (16,2);   **lcd.begin (16,2);  
Ligne 89: Ligne 89:
 delay(2000); delay(2000);
  
-La plupart de ces commandes se comprennent facilement d'elles-mêmes.+La plupart de ces commandes sont explicites.
  
 Maintenant, j'ai la température, l'humidité et quelques-unes des sorties de mon moniteur série qui vont vers l'écran LCD en utilisant la commande lcd.print(). Maintenant, j'ai la température, l'humidité et quelques-unes des sorties de mon moniteur série qui vont vers l'écran LCD en utilisant la commande lcd.print().
Ligne 123: Ligne 123:
 Avant de couper le câble de ma chère couverture chauffante, je veux être sûr que le circuit fonctionne. Aussi, à la place, je vais sacrifier une lampe de bureau inutilisée. Avant de couper le câble de ma chère couverture chauffante, je veux être sûr que le circuit fonctionne. Aussi, à la place, je vais sacrifier une lampe de bureau inutilisée.
  
-Après l'avoir débranchée, je coupe le câble et je sépare les deux conducteurs internes (phase et neutre). Puis, je relie les deux phases ensemble et je laisse les deux neutres séparés. Je met aussi un peu de ruban isolant autour de l'épissure pour la couvrir et la mettre en sécurité.+Après l'avoir débranchée, je coupe le câble et je sépare les deux conducteurs internes (phase et neutre). Puis, je relie les deux phases ensemble et je laisse les deux neutres séparés. Je met aussi un peu de ruban isolant autour de l'épissure pour la couvrir et la mettre en sécurité (plus ou moins).
  
 **The solid state relay (SSR for short) has two DC inputs (in the photo, at the bottom left, is the red +5v and blue ground). It also has (depending on your SSR) one or more channels. My SSR has two channels. This is where your Arduino (yellow wire in the photo) will tell the SSR to go HIGH or LOW. The final two inputs are for the cable you wish to open/close. In this case the live (top wires in the photo) from my lamp. Now, it didn’t help that my inputs are labelled wrongly. The one marked ‘Ch1’ is actually for SSR channel two. So if you try this and it doesn’t work, try switching your wire from Ch1 to Ch2. You should see a light come on on the SSR to show which channel is HIGH/LOW. **The solid state relay (SSR for short) has two DC inputs (in the photo, at the bottom left, is the red +5v and blue ground). It also has (depending on your SSR) one or more channels. My SSR has two channels. This is where your Arduino (yellow wire in the photo) will tell the SSR to go HIGH or LOW. The final two inputs are for the cable you wish to open/close. In this case the live (top wires in the photo) from my lamp. Now, it didn’t help that my inputs are labelled wrongly. The one marked ‘Ch1’ is actually for SSR channel two. So if you try this and it doesn’t work, try switching your wire from Ch1 to Ch2. You should see a light come on on the SSR to show which channel is HIGH/LOW.
Ligne 141: Ligne 141:
 Le relais statique (RS pour faire court) a deux entrées en courant continu (sur la photo, en bas à gauche, le +5V est rouge et la masse bleue). Il comporte aussi (suivant votre RS) un ou plusieurs canaux. Le mien en a deux. C'est par ici que votre Arduino (fil jaune sur la photo) alimentera ou non votre RS. Les deux dernières entrées sont pour le câble que vous souhaitez ouvrir/fermer. Dans ce cas, la phase (les fils du haut sur la photo) vient de la lampe. Là, ça n'a pas aidé que mes entrées soient mal étiquetées. Celle marquée « Ch1 » est en fait le canal 2 du RS. Aussi, si vous essayez le montage et que ça ne marche pas, tentez d'inverser les canaux 1 et 2. Vous devriez voir une lampe s'allumer pour vous montrer quel canal est alimenté ou non. Le relais statique (RS pour faire court) a deux entrées en courant continu (sur la photo, en bas à gauche, le +5V est rouge et la masse bleue). Il comporte aussi (suivant votre RS) un ou plusieurs canaux. Le mien en a deux. C'est par ici que votre Arduino (fil jaune sur la photo) alimentera ou non votre RS. Les deux dernières entrées sont pour le câble que vous souhaitez ouvrir/fermer. Dans ce cas, la phase (les fils du haut sur la photo) vient de la lampe. Là, ça n'a pas aidé que mes entrées soient mal étiquetées. Celle marquée « Ch1 » est en fait le canal 2 du RS. Aussi, si vous essayez le montage et que ça ne marche pas, tentez d'inverser les canaux 1 et 2. Vous devriez voir une lampe s'allumer pour vous montrer quel canal est alimenté ou non.
  
-Une fois tout ceci en place, c'est le moment d'écrire un peu de code.+Une fois tout ceci en place, le moment est venu d'écrire un peu de code.
  
 Pour tester le RS, je vais faire clignoter la lampe. Les premières nouvelles lignes de code sont : Pour tester le RS, je vais faire clignoter la lampe. Les premières nouvelles lignes de code sont :
Ligne 167: Ligne 167:
 as this will be used in the if/then to switch on/off the lamp.** as this will be used in the if/then to switch on/off the lamp.**
  
-Ceci définit le picot 53 de l'Arduino comme le picot de commande du RS. Le « state » sert à conserver une trace de la lampe actuellement allumée/éteinte. « PreviousMillis » et « interval » sont pour le clignotement. J'essaie et utilise millis plutôt que delays parce que millis est meilleur pour la commande de tenue d'une tempo dans le programme.+Ceci définit le picot 53 de l'Arduino comme le picot de commande du RS. Le « state » sert à conserver une trace de la lampe actuellement allumée/éteinte. « PreviousMillis » et « interval » sont pour le clignotement. J'essaie  d'utiliser millis plutôt que delays parce que millis est meilleur pour la commande de tenue d'un tempo dans le programme.
  
 Je commence avec l'habituel pinMode, puis place le relais à l'état BAS, c'est-à-dire, éteint. Ce RS est de type « à ouverture », ce qui signifie que le contact est fermé hors tension et ouvert sous tension. Je commence avec l'habituel pinMode, puis place le relais à l'état BAS, c'est-à-dire, éteint. Ce RS est de type « à ouverture », ce qui signifie que le contact est fermé hors tension et ouvert sous tension.
Ligne 191: Ligne 191:
 With the interval set at 1000 this means the lamp will turn on/off every second.** With the interval set at 1000 this means the lamp will turn on/off every second.**
  
-La seule addition notable de code est la commutation (en haut à droite). CurrentMillis et PreviousMillis conservent les durées en millisecondes de parcours de la boucle. Quand « interval » est atteint (fixé au début), alors la boucle s'arrête. Notez que ça signifie que le code ne comporte aucun arrêt, comme ce serait le cas avec un delay. Je peux encore ajouter des choses à faire à l'intérieur de cette boucle Allumé/éteint, s'il y a besoin.+La seule addition notable de code est la commutation (en haut à droite). CurrentMillis et PreviousMillis conservent les durées en millisecondes de parcours de la boucle. Quand « interval » est atteint (fixé au début),  la boucle s'arrête. Notez que ça signifie que le code ne comporte aucun arrêt, comme ce serait le cas avec un delay. Je peux encore ajouter des choses à faire à l'intérieur de cette boucle Allumé/éteint, si besoin est.
  
 Le if/else intérieur contrôle juste l'exécution suivante : Le if/else intérieur contrôle juste l'exécution suivante :
Ligne 245: Ligne 245:
 Notes de Mike K., ingénieur qualifié en électricité (vrai !) et dont un oncle a été électrocuté : Notes de Mike K., ingénieur qualifié en électricité (vrai !) et dont un oncle a été électrocuté :
  
-Ronnie écrit : écoutez ce gars. Il en connaît beaucoup plus que moi.+Ronnie écrit : écoutez ce gars. Il en connaît beaucoup plus que moi !
  
 Dépassement de la temporisation : dans le monde réel, vous ne devriez pas avoir besoin de déterminer la valeur maximale de la variable « currentMillis » parce que, tôt ou tard, elle sera remise à zéro.  Elle est définie ici comme un « entier long non signé », mais je ne sais pas combien de bits lui sont attribués (2/4/8/?) et je ne sais pas si chaque unité de cette variable est une vraie milliseconde ou un de ses multiples (par exemple, chaque unité vaudrait une microseconde ?). Dépassement de la temporisation : dans le monde réel, vous ne devriez pas avoir besoin de déterminer la valeur maximale de la variable « currentMillis » parce que, tôt ou tard, elle sera remise à zéro.  Elle est définie ici comme un « entier long non signé », mais je ne sais pas combien de bits lui sont attribués (2/4/8/?) et je ne sais pas si chaque unité de cette variable est une vraie milliseconde ou un de ses multiples (par exemple, chaque unité vaudrait une microseconde ?).
  
-Vous pourriez avoir besoin de prévoir cet événement de votre code ; autrement, votre code s'arrêtera de fonctionner si ça se produit. Par exemple : si un « entier long » est sur 4 bits, et si le temps est en vraies millisecondes, alors le code sera en défaut après 49 jours de fonctionnement (au mieux !).+Vous pourriez avoir besoin de prévoir cet événement dans votre code ; autrement, votre code s'arrêtera de fonctionner si ça se produit. Par exemple : si un « entier long » est sur 4 bits, et si le temps est en vraies millisecondes, ce le code sera en défaut après 49 jours de fonctionnement (au mieux !).
  
 **Temperature triggers: In the real world, your temp sensor might be “noisy”, and, in your case, when the temp is “around 24”, the reading might be hovering around 23/24/25, but changing a lot. If that happens, the code might get into a frenzy - switching the device on/off rapidly. To avoid that, one would use two thresholds just outside this frenzy-range, maybe 22-degrees, and 26-degrees. Then, the general approach would be: **Temperature triggers: In the real world, your temp sensor might be “noisy”, and, in your case, when the temp is “around 24”, the reading might be hovering around 23/24/25, but changing a lot. If that happens, the code might get into a frenzy - switching the device on/off rapidly. To avoid that, one would use two thresholds just outside this frenzy-range, maybe 22-degrees, and 26-degrees. Then, the general approach would be:
Ligne 257: Ligne 257:
 • If we can read the current state of the device, then the above “Device_State” variable is not needed. And, reverse the above references to ON/OFF, if appropriate.** • If we can read the current state of the device, then the above “Device_State” variable is not needed. And, reverse the above references to ON/OFF, if appropriate.**
  
-Seuils de température : dans le monde réel, votre détecteur de température pourrait être « bruité » et, dans ce cas, quand la température est « autour de 24 », la lecture pourrait tourner autour de 23/24/25, avec de nombreux changements. Si ça arrive, le code pourrait entrer en transes, commutant le relais à toute vitesse. Pour éviter cela, on peut utiliser deux seuils, juste en dehors de cette zone perturbée ; peut-être 22 et 26 degrés. L'approche générale deviendrait alors : +Seuils de température : dans le monde réel, votre détecteur de température pourrait être « bruité » et, dans ce cas, quand la température est « autour de 24 », la lecture pourrait tourner autour de 23/24/25, avec de nombreux changements. Si ça arrive, le code pourrait devenir fou, commutant le relais à toute vitesse. Pour éviter cela, on peut utiliser deux seuils, juste en dehors de cette zone perturbée ; peut-être 22 et 26 degrés. L'approche générale deviendrait alors : 
-• Dans le code d'initialisation, mettre l'appareil à Éteint ainsi que le «l'état de l'appareil » (par simplicité).+• Dans le code d'initialisation, mettre l'appareil à Éteint ainsi que «l'état de l'appareil » (par simplicité).
 • Si la nouvelle température est à la valeur basse (ou en-dessous), et que l'état de l'appareil est actuellement Éteint, alors l'allumer et mettre l'état de l'appareil à Allumé. • Si la nouvelle température est à la valeur basse (ou en-dessous), et que l'état de l'appareil est actuellement Éteint, alors l'allumer et mettre l'état de l'appareil à Allumé.
 • Si la nouvelle température est à la valeur haute (ou au-dessus), et que l'état de l'appareil est actuellement Allumé, alors l'éteindre et mettre l'état de l'appareil à Éteint. • Si la nouvelle température est à la valeur haute (ou au-dessus), et que l'état de l'appareil est actuellement Allumé, alors l'éteindre et mettre l'état de l'appareil à Éteint.
Ligne 267: Ligne 267:
 For safety, the SSR circuit must be enclosed in a suitable protective box. If the relays get hot when being used, then ensure there is adequate ventilation in the box, and ensure the box is not placed on soft surfaces such as carpets, duvets, etc - which would inhibit ventilation.** For safety, the SSR circuit must be enclosed in a suitable protective box. If the relays get hot when being used, then ensure there is adequate ventilation in the box, and ensure the box is not placed on soft surfaces such as carpets, duvets, etc - which would inhibit ventilation.**
  
-Câblage : Quand vous coupez les câbles d'alimentation, retirez l'isolation extérieure lentement et avec précaution, et ne détériorez pas, ou ne coupez pas, les fils qui ne sont pas utilisés par le circuit du relais. S'il y a un câble de terre, et s'il y a une borne de terre sur le circuit du RS, ne coupez pas le câble de terre, mais dénudez-le sur environ 1 à 2 cm, pliez-le et insérez-le dans le connecteur de terre.+Câblage : Quand vous coupez les câbles d'alimentation, retirez l'isolation extérieure lentement et avec précaution, et ne détériorez ni coupez les fils qui ne sont pas utilisés par le circuit du relais. S'il y a un câble de terre, et s'il y a une borne de terre sur le circuit du RS, ne coupez pas le câble de terre, mais dénudez-le sur environ 1 à 2 cm, pliez-le et insérez-le dans le connecteur de terre.
  
 Par sécurité, le circuit du RS doit être placé dans une enveloppe protectrice adaptée. Si les relais deviennent chauds à l'utilisation, assurez-vous qu'il y a une ventilation adaptée dans le boîtier, et vérifiez que le boîtier n'est pas placé sur des surfaces molles telles que des tapis, duvets, etc., qui pourraient gêner la ventilation. Par sécurité, le circuit du RS doit être placé dans une enveloppe protectrice adaptée. Si les relais deviennent chauds à l'utilisation, assurez-vous qu'il y a une ventilation adaptée dans le boîtier, et vérifiez que le boîtier n'est pas placé sur des surfaces molles telles que des tapis, duvets, etc., qui pourraient gêner la ventilation.
Ligne 279: Ligne 279:
 L'utilisateur peut installer deux relais, un sur la phase, un autre sur le neutre. Si un seul relais est utilisé - comme dans mon projet - il doit être connecté sur la PHASE, de sorte que, quand l'appareil (lampe ou autre) est éteint, aucune tension secteur n'atteint cet appareil. L'utilisateur peut installer deux relais, un sur la phase, un autre sur le neutre. Si un seul relais est utilisé - comme dans mon projet - il doit être connecté sur la PHASE, de sorte que, quand l'appareil (lampe ou autre) est éteint, aucune tension secteur n'atteint cet appareil.
  
-Caractéristiques du relais : Assurez-vous que le relais peut facilement supporter la tension secteur (110 V AC ou 240 V AC), ainsi que la courant maximal absorbé par les appareils. Par exemple, une lampe à incandescence pourrait absorber 1 A, alors qu'un radiateur électrique pourrait utiliser 20 A.+Caractéristiques du relais : Assurez-vous que le relais peut facilement supporter la tension secteur (110 V AC ou 240 V AC), ainsi que la courant maximal absorbé par les appareils. Par exemple, une lampe à incandescence pourrait absorber 1 A, alors qu'un radiateur électrique pourrait utiliser 20 A ou plus.
  
-Par dessus tout, vous pouvez vous attendre à ce que des fans d'Arduino puissent avoir des kits dans leurs chambres et puissent décider de piloter le chauffage, l'éclairage, la ventilation, etc. avec l'Arduino. Dans ce cas, ils sont à proximité immédiate d'appareils très dangereux, qui peuvent conduire facilement à un incendie, des blessures ou à la mort.+En général, vous pouvez vous attendre à ce que des fans d'Arduino puissent avoir des kits dans leurs chambres et puissent décider de piloter le chauffage, l'éclairage, la ventilation, etc. avec l'Arduino. Dans ce cas, ils tripatouillent des appareils très dangereux, qui peuvent conduire facilement à un incendie, des blessures ou à la mort.
issue107/arduino.1460108949.txt.gz · Dernière modification : 2016/04/08 11:49 de andre_domenech