dimanche 23 août 2020

ARDUINO + ESP8266 : est-ce bien raisonnable ?

 

ARDUINO + ESP8266 :

est-ce bien raisonnable ?

 

En 2014 le premier ESP8266 dit ESP01 sortait. Ce microcontrôleur disposait de seulement 2 GPIOs. Il était utilisé principalement couplé à une carte ARDUINO, afin de bénéficier des nombreuses entrées / sorties de celle-ci.

Pour ce faire la majorité des cartes ESP01 étaient équipées d'un logiciel dit "FIRMWARE AT", permettant le dialogue avec l'ARDUINO.

Le FIRMWARE AT reçoit des commandes de la part de l'ARDUINO par la ligne série et lui renvoie un résultat :

  • AT+GMR : demande de la version
  • AT+CWMODE : fixe le mode (station, point d'accès)
  • AT+CWJAP : connexion à un point d'accès
  • etc.

Cette technologie est-elle encore viable à l'heure où de nombreuses cartes ESP8266 et ESP32, beaucoup plus riches qu'un ESP01, existent sur le marché ?

Que choisir ? un ARDUINO + ESP01, ou un ESP8266 / ESP32 tout seul ?

Nous allons essayer de mettre en œuvre les deux solutions, et nous aider de deux petits exemples de serveur WEB sur ESP32 afin de montrer les différences.

1. L'ESP01

1.1. ESP01 + convertisseur USB

Nous allons dans un premier temps utiliser l'ESP01 seul, en le reliant au PC  à l'aide d'un convertisseur USB / série.

Rappelons le brochage d'un ESP01 :

Il faut impérativement utiliser un convertisseur USB / série 3.3V ou possédant un switch ou un cavalier 5V / 3.3V. Je conseille plutôt un FT232R :


Seulement 4 fils sont nécessaires :

FT232R ESP01
VCC VCC
GND GND
TX RX
RX TX

Le premier point à vérifier est la présence du FIRMWARE AT.

On peut pour cela utiliser le moniteur série de l'IDE ARDUINO, avec les réglages suivants :

  • 115200 baud
  • fin de ligne NL + CR

Entrer la commande suivante :

AT

L'ESP01 doit répondre :

OK

Entrer la commande suivante :

AT+GMR

L'ESP01 doit répondre :

AT version:1.2.0.0(Jul  1 2016 20:04:45)
SDK version:1.5.4.1(39cb9a32)
v1.0.0
Mar 11 2018 18:27:31
OK

La version peut bien entendu être différente, en fonction de l'origine de la carte.

Si l'ESP01 ne répond pas, il est peut-être configuré avec un autre baudrate. Il faut essayer 9600 ou d'autres vitesses.

1.1.1. Recharger le FIRMWARE AT avec ESPTOOL

Si l'ESP01 ne répond toujours pas, il se peut que le FIRMWARE AT soit absent, soit il a été effacé par son propriétaire, soit remplacé par un autre sketch, soit il a été livré tel quel (ce qui est extrêmement rare).
Dans ce cas il faut le recharger. Il existe différents tutoriels sur le WEB dont la documentation "AT Instruction Set" d'ESPRESSIF :

https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf

Voir : 1.2. Downloading AT Firmware into the Flash

Avant de commencer il est impératif de connaître le type de mémoire FLASH implanté sur la carte, le petit circuit à 8 pattes. Il vaut mieux disposer d'une bonne loupe :

Par exemple : t25s80 ou pn25F08 = 8Mbits

Ici un tutoriel utilisant ESPTOOL, fonctionnant sur toutes plateformes :

https://robertoostenveld.nl/esp8266-at-firmware/ 

ATTENTION : l'auteur utilise un ESP01 équipé de 512K de mémoire FLASH (FLASH 4Mbits).

Pour un ESP01 équipé d'une FLASH 8Mbits les commandes sont légèrement différentes, en particulier l'emplacement des données "esp_init_data_default" : voir la doc ESPRESSIF : 1.2.4. 8 Mbit Flash

Voici les commandes à entrer pour recharger  le FIRMWARE AT sur une carte 8Mbits (les cartes les plus courantes actuellement) :

esptool.py --port /dev/ttyUSB1 erase_flash
esptool.py --port /dev/ttyUSB1 --baud 115200 write_flash --flash_mode dio 0x00000 boot_v1.2.bin
esptool.py --port /dev/ttyUSB1 --baud 115200 write_flash --flash_mode dio 0x01000 at/512+512/user1.1024.new.2.bin
esptool.py --port /dev/ttyUSB1 --baud 115200 write_flash --flash_mode dio 0xFE000 blank.bin
esptool.py --port /dev/ttyUSB1 --baud 115200 write_flash --flash_mode dio 0x7E000 blank.bin
esptool.py --port /dev/ttyUSB1 --baud 115200 write_flash --flash_mode dio 0xFC000 esp_init_data_default_v05.bin

J'ai essayé pour vous : cela fonctionne parfaitement.

Où se trouve ESPTOOL ?

ESPTOOL est installé par défaut dans le répertoire suivant :

arduino15/packages/esp8266/hardware/esp8266/2.5.2/tools/esptool/esptool.py

Le répertoire arduino15 se trouve ici :

Sous Linux : /home/username/.arduino15

Sous Windows : C:\Users\username\AppData\Local\Arduino15

Sur Mac : /Users/username/Library/Arduino15

Il y a deux solutions : modifier la variable d'environnement PATH pour lui ajouter le chemin où est installé ESPTOOL, ou utiliser le chemin complet.

1.1.2. Recharger le FIRMWARE AT avec FLASH DOWNLOAD TOOL

D'autre tutoriels utilisent FLASH DOWNLOAD TOOL, une application graphique (Windows uniquement) :

https://www.instructables.com/id/Flash-or-Upgrade-Firmware-on-ESP8266-ESP-01-Module/

Travaillant sous Linux, je n'ai pas essayé ce logiciel.

1.2. ESP01 + ARDUINO

Les ressources WEB (tutoriels, forums) sont en général plutôt simplistes et se contentent de présenter la manière de connecter un ARDUINO et un ESP01, et d'envoyer une page HTML "Hello World", rarement plus, d'où une certaine frustration des débutants, parfaitement compréhensible.

Ce tutoriel par contre, beaucoup plus complet, vous enseignera l'art et la manière de développer un serveur WEB à l'aide de commandes AT :

Tutoriel de J-M-L du forum ARDUINO

On constatera assez facilement que le code est assez conséquent (400 lignes) :

https://forum.arduino.cc/index.php?action=dlattach;topic=501923.0;attach=227323

La page WEB développée est simple, mais elle comporte néanmoins des boutons, ce qui n'est pas le cas de la majorité des tutoriels rencontrés sur le WEB :

Sincèrement je ne pense pas que ce genre de développement soit accessible à un débutant. A chacun donc de se faire sa propre idée en fonction de ses compétences et de sa compréhension de ce tutoriel.

1.3.1. Le matériel

L'ESP01 doit être alimenté en 3.3V / 500mA minimum. Il convient donc de se procurer un régulateur adéquat.

D'autre par l'entrée RX de l'ESP01 n'est pas censée supporter les 5V de la sortie TX d'un ARDUINO. Un pont diviseur sera nécessaire :

L'auteur du tutoriel ci-dessus utilise un adaptateur permettant d'assurer les fonctions alimentation et adaptation de niveau :

Certains tutoriels présentent l'ESP01 alimenté par la broche 3.3V d'une carte UNO.

Or le 3.3V d'une carte UNO est délivré par un régulateur LP2985 capable de fournir 150mA au maximum, ce qui sera insuffisant pour établir une connexion WIFI qui réclame plus de 400mA.

Avec une carte NANO, dont le 3.3V est fourni par le chip CH340, le courant sera également insuffisant.

Il faudra également alimenter l'ARDUINO en 5V par sa broche VCC ou en 7.5V ou plus par sa broche VIN ou JACK, à moins d'opter pour une carte ARDUINO 3.3V, une PRO MINI 8MHz par exemple.

On voit bien que cette solution est déjà complexe rien que pour la partie hardware.

1.3.2. La ligne série

La ligne série utilisée pour le dialogue entre l'ESP01 et l'ARDUINO est généralement la ligne série hardware de l'ARDUINO (broches RX TX) .

Cela supprime donc toute possibilité d'utiliser la sortie standard de l'ARDUINO pour afficher des informations sur le terminal, et complique te chargement du sketch (il faut libérer RX TX).

Il est possible d'utiliser deux GPIOs et un objet du type SoftwareSerial afin de libérer la ligne série matérielle.

Avec une ligne SoftwareSerial on utilisera de préférence un baudrate plus faible (9600 ou 19200 baud, peut-être plus ?). Le baudrate de l'ESP01 peut être configuré à l'aide du moniteur série ARDUINO et de la commande AT+UART_DEF :

AT+UART_DEF=9600,8,1,0,3

Enfin, les utilisateurs de cartes MEGA2560 pourront utiliser une autre liaison série hardware Serial1, Serial2 ou Serial3, afin de réserver la ligne Serial au chargement et au terminal.

1.3.3. Les ressources HTML

Il faut bien comprendre que le code HTML est envoyé à l'ESP01 par l'ARDUINO, en plusieurs morceaux si nécessaire, et que la mémoire RAM de l'ARDUINO est limitée : 2Ko (8Ko pour une MEGA). C'est peu.

Si l'on envisage de stocker des fichier ressources (HTML, JS, images), l'ARDUINO n'aura d'autre choix que d'embarquer une mémoire externe (µSD, FLASH SPI, etc.).

Le code devra assurer l'intégralité de la gestion de ces ressources et la taille mémoire de l'ARDUINO sera vite un handicap.

On comprend vite qu'un serveur WEB développé avec cette technique sera très limité.

1.3. ESP01 seul

L'ESP01 seul a des ressources limitées :

  • 2 GPIOs
  • I2C possible sur ces 2 GPIOs

Il sera difficile de raccorder plus d'un ou deux modules :

  • relais
  • LEDs
  • boutons
  • afficheur I2C, expander

Les possibilités matérielles sont assez limitées mais par contre l'ESP01 dispose de toutes les ressources d'un ESP8266 classique : capacité de calcul, mémoire RAM, FLASH, qu'un ARDUINO aura du mal à concurrencer.

Pour résumer si les deux GPIOs suffisent autant utiliser l'ESP01 seul, sans ARDUINO.

1.4. Carte UNO WIFI

Depuis quelques années des cartes toutes intégrées sont disponibles sur le marché :

Ces cartes UNO sont équipées d'un ESP01 et le connecteur USB permet de communiquer soit avec l'ATMEGA328 soit avec l'ESP01, en fonction de la position de DIP-SWITCHES. Les broches de l'ESP01 sont disponibles : voir en haut à droite.

Il est fortement conseillé de lire la documentation :

https://robotdyn.com/uno-wifi-r3-atmega328p-esp8266-32mb-flash-usb-ttl-ch340g-micro-usb.html

Cette carte a toutefois un inconvénient : il faut sans arrêt changer de configuration :

  • CH340 sur l'ATMEGA328 : chargement du sketch
  • ESP01 sur l'ATMEGA328 : exécution

Il faut donc basculer 4 switches à chaque fois. Galère ... 

On peut opter également pour une liaison SoftwareSerial en ajoutant deux fils, ce qui aura aussi un inconvénient : la vitesse réduite.

1.5. Firmware maison

Qu'il s'agisse d'un couple ARDUINO + ESP01 ou d'une carte ARDUINO WIFI rien n'empêche quiconque de développer pour ses propres besoins un firmware spécialisé afin de communiquer avec d'autres moyens qu'HTTP : MQTT par exemple, ou UDP.

Il est parfaitement possible également d'imaginer un FIRMWARE intelligent qui stockerait les pages HTML dans la mémoire FLASH de l'ESP01, et proposerait une interface permettant de les afficher en passant le nom de la page, avec une liste d'arguments variables, un peu comme on le ferait avec un écran NEXTION.

Mais dans ce cas on se demande quelle est la valeur ajoutée de l'ARDUINO ?
Un ESP8266 ou ESP32 ferait tout cela certainement mieux.

2. L'ESP8266 et l'ESP32

2.1. ESP8266

 
Une carte ESP8266 (D1 MINI par exemple) possède un certain nombre d'entrées sorties :
  • GPIOs (leur nombre dépend de la carte)
  • I2C
  • SPI
  • 1 entrée analogique

On peut examiner cette page afin de déterminer quelle carte sera capable de couvrir les besoins :

https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/ 

2.2. ESP32

 

Une carte ESP32 possède un plus grand nombre d'entrées sorties (16 sorties PWM), ainsi que 18 entrées analogiques, et deux sorties DAC !

De plus, 10 GPIOS peuvent être utilisées avec des touches capacitives.

Voir ici :

https://randomnerdtutorials.com/esp32-pinout-reference-gpios/ 

2.3. Des avantages incontestables

On voit rapidement que le manque d'entrées / sorties d'un ESP8266 ou d'un ESP32 par rapport à une carte ARDUINO est un argument qui ne tient pas.

Dans le pire des cas on pourra ajouter un module expander MCP23008 ou MCP23017 :

https://riton-duino.blogspot.com/2019/02/les-extensions-de-gpios-de-larduino.html

On constatera également que d'un point de vue prix de revient le coût d'une carte ESP32 est sensiblement équivalent à celui d'un couple ARDUINO UNO + ESP01.

L'encombrement du couple ARDUINO UNO + ESP01 est également en défaveur de cette solution, ainsi que les liaisons par fils DUPONT, sources de problèmes (faux contacts).

Une dernière chose : un serveur WEB développé à l'aide d'un ESP8266 ou ESP32 disposera de ressources largement supérieures à celles d'un ARDUINO :
  • puissance de calcul
  • espace mémoire FLASH, RAM
  • espace de stockage des pages WEB

Il faut aussi noter que pour les personnes qui désireraient une intégration maximale, un module seul, soudé sur PCB, peut apporter une solution ultra-compacte :

Module ESP32


2.1. Implémenter un serveur WEB

Il existe différentes possibilités de développer un serveur WEB avec un ESP8266 ou un ESP32.

Les ressources WEB (tutoriels, cours, forums) sont également très nombreuses, beaucoup plus nombreuses que celles liées aux solutions ARDUINO + ESP01, et d'un tout autre niveau.

Sur ce blog certains projets WEB utilisent un ESP8266 ou un ESP32 :

https://riton-duino.blogspot.com/2020/03/serveur-esp32-implementation-et-test.html

https://riton-duino.blogspot.com/2020/04/un-afficheur-tft-pour-domoticz-ou.html 

https://riton-duino.blogspot.com/2020/03/arduino-ethernet-esp32-comparons.html 

https://riton-duino.blogspot.com/2020/01/un-logger-analogique-et-digital-version.html

D'autres articles plus généralistes en parlent également :

https://riton-duino.blogspot.com/2019/02/esp8266-sur-batterie.html

Dans les paragraphes suivants j'évoque les différentes possibilités d'implémentation, sans entrer dans les détails, mis à part que je fournis deux petits exemples. Il est aussi du ressort de chacun d'apprendre à se documenter sans que le travail soit prémâché. Pourquoi réécrire ce qui l'est déjà ?

Je pense que l'effort de documentation et de formation aux techniques de développement ESP8266 ou ESP32 sera moins important que celui qui sera nécessaire pour mener à bien un développement complexe à base d'ARDUINO + ESP01, et que le résultat sera autrement moins tributaire des limitations, aussi bien en matière de performances qu'en matière de vitesse de développement.

2.1.1. SPIFFS ou LittleFS

Lorsque l'on développe un serveur WEB on en vient rapidement à ne plus générer de contenu HTML avec des lignes de code, mais à l'aide de fichiers HTML stockés dans un espace dit "système de fichiers", organisé comme un disque dur.

Un ESP8266 ou un ESP32 offrira un système de fichiers en FLASH permettant le stockage de ces fichiers, ainsi que des images ou des fichiers JavaScript, tout cela sans avoir à ajouter d'espace de stockage supplémentaire (carte µSD ou FLASH SPI).

L'IDE ARDUINO permet le chargement de ces ressources à l'aide de deux plugins :

https://github.com/me-no-dev/arduino-esp32fs-plugin
https://github.com/esp8266/arduino-esp8266fs-plugin

Ces deux plugins créeront deux choix disponibles dans le menu outils :
  • ESP32 Sketch Data Upload
  • ESP8266 Sketch Data Upload

Il sera donc facile de charger les ressources à partir de l'IDE. Les fichiers à charger seront simplement placés dans un sous-répertoire data du projet.

Ensuite dans le code il suffira de lire ces fichiers et de les envoyer sur la sortie standard du serveur.

Les exemples sont nombreux sur le WEB :

https://byfeel.info/utilisation-de-la-memoire-spiffs-sur-esp8266/

Il est à noter que la librairie EspAsyncWebServer propose une méthode qui permet d'éviter de faire cela manuellement :

class AsyncWebServerRequest {
    void send(FS &fs, const String& path, const String& contentType=String(), bool download=false, AwsTemplateProcessor callback=nullptr);

Exemple :

  request->send(SPIFFS, "/index.html", "text/html", false);

Le fichier index.html sera chargé à partir de la FLASH de l'ESP8266 / ESP32, sans que l'on aie à s'en préoccuper. Je parle plus loin de cette librairie.

2.1.2. WifiServer

Les librairies ESP8266WifiServer et WifiServer (ESP32) sont assez bas niveau :

https://randomnerdtutorials.com/esp32-web-server-arduino-ide/

Je déconseille leur usage sauf si c'est dans un but de formation, si l'on désire traiter une requête HTTP soi-même "from scratch" par exemple. C'est assez barbare et peu de gens l'utilisent.

2.1.3. WebServer

Les librairies ESP8266WebServer ou WebServer (ESP32) disposent d'APIs de plus haut niveau permettant de réaliser un développement en peu de temps. Elles permettent d'associer des fonctions à chaque URL à traiter :

https://tttapa.github.io/ESP8266/Chap10%20-%20Simple%20Web%20Server.html

Exemple :

Dans la fonction Setup :

  server.on("/", handleRoot);

Le handler :

void handleRoot(void)
{
  server.send(200, "text/html", message);     // message = texte HTML à afficher
}

Simplissime, n'est ce pas ?

2.1.4. AsyncWebServer

Enfin la librairie EspAsyncWebServer est capable de gérer des pages HTML à l'aide de templates. Les templates sont des fichiers HTML contenant des tags nommés permettant la substitution de variables (PLACEHOLDER).

Cette librairie est très largement documentée sur le WEB.

Ce projet l'utilise :

https://riton-duino.blogspot.com/2020/03/serveur-esp32-implementation-et-test.html

2.1.5. Petits exemples

ESP32 Web server

Ici se trouve un petit exemple ESP32 reproduisant la même page HTML que le tutoriel vu au paragraphe 1.3. ESP01 + ARDUINO :

esp32-simple-webserver

La librairie WebServer est utilisée. Sur un ESP8266 on utiliserait la librairie ESP8266WebServer, le code serait assez peu différent.

On peut remarquer :

  • 105 lignes de code seulement au lieu de 400
  • simplicité : je l'ai écrit en une vingtaine de minutes (la fonction Setup est en grande partie reprise d'un autre projet)
  • le fichier root.h contient la page HTML avec deux tags %TEMP% et %PRESSURE%, qui sont remplacées dans le code par leurs valeurs à l'aide de simples appels à String::replace()

Cet exemple montre que le code est beaucoup plus simple que la version ARDUINO+ESP01, et montre également que l'on peut bénéficier de ressources logicielles inutilisables sur un ARDUINO, en particulier la classe String, qui provoquerait une fragmentation de la mémoire de celui-ci :

https://riton-duino.blogspot.com/2020/02/arduino-la-fragmentation-memoire.html

Bien entendu, cette solution à base d'ESP8266 ou d'ESP32 sera incomparablement plus évolutive qu'une solution à base d'ARDUINO+ESP01, et permettra de développer un serveur beaucoup plus riche, tout en réduisant fortement la charge de travail.

ESP32 Access point

Ici on peut trouver également un petit exemple de serveur WEB fonctionnant en point d'accès WIFI :

esp32-simple-accesspoint

L'adresse IP de ce point d'accès est affiché sur le terminal au démarrage (normalement 192.168.4.1).

3. Conclusion

Est-il raisonnable à l'heure actuelle de s'orienter vers une solution à base d'ARDUINO + ESP01 ?

A moins d'avoir envie de se convaincre que c'est une piètre solution, j'ai bien peur que non.

En tous cas, cette technique ne permettra pas d'aller bien loin de par la pauvreté des ressources matérielles (CPU, mémoire) d'un ARDUINO.

Qu'en est-il du HTML, du JAVASCRIPT ?
Que ce soit avec une carte ARDUINO, un ESP8266 ou un ESP32, dans tous les cas la connaissance de ces deux langages est indispensable. Envisager un développement WEB sans connaissances dans ces domaines est tout bonnement impossible.

On trouve de nombreux tutoriels sur le WEB et on peut facilement tester une page HTML avec un simple navigateur, en chargeant simplement le fichier.


Cordialement
Henri

4. Mises à jour

24/08/2020 : 2.1.5. Petit exemple
                     1.1.2. Recharger le FIRMWARE AT avec FLASH DOWNLOAD TOOL


jeudi 13 août 2020

JLCPCB : mode d'emploi

 

JLCPCB : mode d'emploi

 

Lorsque je conçois une carte électronique (PCB) j'utilise principalement  deux méthodes :

  • plaquettes à pastilles
  • PCB maison gravé à l'acide

On peut également, pour ceux qui sont équipés, effectuer une gravure à l'aide d'une machine CNC.

Le résultat peut être tout à fait correct lorsque le circuit est réalisé en simple face, mais si l'on conçoit un PCB double face, l'opération est plus délicate.

Il arrive qu'il y ait de petits défauts :

  • court-circuit entre piste ou pads
  • piste coupée à cause d'une rayure de la surface photosensible

De plus ces méthodes artisanales ne permettent pas d'obtenir un produit fini, avec une grande finesse de gravure, verni et sérigraphié :

 

Dans mon dernier projet j'ai fait appel aux services de JLCPCB, un fabriquant de circuits imprimés.

On peut voir que ce PCB est composé de deux cartes que l'on peut séparer avec une scie ou une cisaille.

Les deux cartes ont une dimension totale de 92mm x 99mm afin de pouvoir bénéficier du tarif réduit réservé aux cartes 100mm * 100mm.

On peut remarquer que les cartes ont un aspect très professionnel :

  • elles sont vernies
  • elles sont percées
  • les trous sont métallisés
  • les pads sont étamés
  • elles sont sérigraphiées

Voilà de quoi obtenir un résultat final très soigné.

1. Tarif et livraison

La commande minimale est de 5 cartes, le tarif est de 8.04€ pour 5 circuits double couche 100mm x 100mm, port compris. Le délai de livraison est de 2 semaines.

Les frais de ports les moins élevés sont : FR Special Air Mail, à sélectionner lors de la commande.

Le tarif peut sembler extrêmement bas pour une carte électronique. Le secret réside dans le fait que les fabricants utilisent des chutes de PCB provenant de la fabrication de cartes beaucoup plus grandes. Cette offre à bas prix leur évite donc de jeter de grandes quantités de matière première.

2. Le routage

Ici je présenterai la manière de procéder uniquement pour KICAD.

Il faut savoir que soumettre un routage pour une commande entraîne un examen automatique des fichiers GERBER par JLCPCB. Un mail sera envoyé suivant que le routage soit accepté ou refusé.

2.1. Lignes de coupe

Le PCB doit comporter des lignes de coupe (edge cuts) sur les quatre côtés, sans cela le routage sera refusé.

2.2. Plan de masse

Il ne faut pas hésiter à ajouter un plan de masse à la carte. Voir menu KICAD Place / Zone. Ce plan de masse permettra de réduire grandement les résistances de pistes GND et également de réduire les effets des interférences électromagnétiques, et de la diaphonie.

2.3. Perçage

Lorsque l'on utilise les empreintes livrées avec le logiciel KICAD, ou celles disponibles sur github il y de très fortes chances pour que les pads soient correctement dimensionnés, en particulier le diamètre de perçage.

Par contre lorsqu'il s'agit d'empreintes personnelles, il faut être très vigilant et adopter un diamètre de perçage adéquat. Il faut donc consulter la datasheet du composant.

Une erreur de diamètre peut entraîner un reperçage de certains trous, avec pour première conséquence la disparition de la métallisation de ceux-ci. Dommage ...

3. Préparer les fichiers GERBER

Avant toutes choses il est impératif de créer un compte JLCPCB.

Le format de fichier GERBER est le standard utilisé pour transmettre des informations concernant la fabrication des circuits imprimés.

Chaque fabricant de PCB a ses propres exigences.

Cette page explique quelles options doivent être choisies pour la génération des fichiers GERBER dans KICAD :

https://support.jlcpcb.com/article/44-how-to-export-kicad-pcb-to-gerber-files

D'autres supports pour les principaux logiciels de routage sont proposés :

https://support.jlcpcb.com/category/23-technical-support

Ensuite il suffira de remplir le formulaire de commande et de joindre les fichiers GERBER, après les avoir compactés dans un fichier ZIP.

La commande passera dans un premier temps dans un état "Examen en cours".

Si un défaut est constaté un mail sera envoyé avec la liste des défauts. Dans le cas contraire la commande pourra être finalisée.

4. Liens utiles

Je vous renvoie à mon tutoriel KICAD :

https://riton-duino.blogspot.com/2018/11/concevoir-un-pcb.html

5. Conclusion

J'ai été pleinement satisfait par cette première commande. Le résultat est très professionnel.

Cela n'élimine pas pour autant les solutions à base de gravure maison ou de plaquette à pastilles lorsque je suis pressé.

Je seul bémol est la quantité minimale de commande (5 cartes). On peut éventuellement passer une commande groupée à plusieurs personnes.


Cordialement

Henri


mardi 4 août 2020

Juillet 2020 : Actualité des Blogs du Mois


Actualité des Blogs du Mois


Sur le blog d'Yves Pelletier :
Sur  Framboise 314 :
Sur  MCHobby :
Sur Les carnets de Byfeel :

Cordialement
Henri

lundi 3 août 2020

Un éclairage d'escalier à LEDs (nouvelle version)




 Un éclairage d'escalier à LEDs

(nouvelle version)


Dans cet article j'avais présenté un éclairage d'escalier progressif :

Ce projet avait plusieurs défauts :
  • utilisation d'une carte ARDUINO MEGA
  • limitation à 15 marches
Ce sujet était arrivé à un stade parfaitement fonctionnel, mais restait à l'état de prototype, en particulier à cause d'un PCB complexe, la carte MEGA CORE étant assez compacte.

J'ai donc décidé de faire plus simple en utilisant une carte ARDUINO PRO MINI couplé à un module spécialisé, que j'ai récemment découvert : le SX1509 :
Le SX1509 est un composant I2C capable de gérer 16 sorties en PWM, ce qui permettra d'utiliser une simple carte ATMEGA328P, ici une PRO MINI. Grâce à une carte d'extension équipée de 16 MOSFETs il sera capable de piloter 16 rubans de LEDs.

Cette nouvelle version apporte les améliorations suivantes :
  • un encodeur rotatif permet de régler la luminosité
  • une LDR optionnelle est utilisée pour n'éclairer l'escalier que si la luminosité est insuffisante
  • une connexion optionnelle à un serveur domotique est prévue
Beaucoup de paragraphes de l'ancien article restent valables dans le cadre de ce nouveau projet. Je ne vais pas les répéter. Il est donc nécessaire de le lire afin de bien comprendre les principes utilisés, en particulier les calculs liés aux rubans de LEDs et à l'alimentation.

1. Le schéma


Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  3. Téléchargements

Par rapport à l'ancien schéma seule la partie puissance n'est pas représentée. Le SX1509 commande une carte à 16 MOSFETs présentée ici :

La carte PRO MINI 8MHz a été choisie car le SX1509 doit être alimenté en 3.3V. Cela permet d'alimenter le tout à l'aide d'un seul régulateur LM78L33.

Le module NRF24L01 n'est utilisé que dans le cas où l'on désire connecter ce montage à un serveur DOMOTICZ afin de le commander à distance.

Comme dans la version précédentes deux PIRs sont utilisés pour la détection de personnes en haut et en bas de l'escalier.

La carte PRO MINI doit avoir les broches I2C A4 et A5 disposées comme ceci, à côté de A2 et A3 :
Celle-ci ne conviendra pas, à moins de modifier le routage de la carte de commande :
L'encodeur rotatif EC11 est un modèle chinois courant que l'on peut approvisionner chez n'importe quel revendeur :

Le module SX1509 est de ce type :

La LDR est une classique GL5528 :

Les capteurs PIR sont des MH-SR602, que l'on peut alimenter directement en 3.3V :
On peut également utiliser des HC-SR501, moyennant une petite modification :

2. Photos

Voici les photos des cartes utilisées. Il s'agit de cartes commandées chez JLCPCB. Le routage est fourni dans le projet, ainsi que les fichiers GERBER :



 
On voit à gauche la partie commande et à droite la partie puissance, que l'on peut séparer avec une scie ou une cisaille.
Les deux cartes ont une dimension totale de 92mm x 99mm afin de pouvoir bénéficier du tarif réservé aux cartes 100mm * 100mm.
La commande minimale est de 5 cartes, le tarif est de 9.14€ port compris. Le délai de livraison est de 2 semaines.

Ce projet est parfaitement réalisable sur une plaquette à pastilles, pour peu que l'on choisisse des MOSFETs en version traversante, des IRLZ44N (boîtier TO220) par exemple, ou des AOD409 (boîtier IPAK).

Voici la carte de commande toute équipée :


La carte de puissance est vissée en dessous de la carte de commande. Il s'agit d'un prototype réalisé par mes soins en PCB simple couche :


Les deux cartes sont reliées par un connecteur de commande à 17 points et un connecteur de puissance à 2 points.
Elles sont superposables, c'est à dire que l'on peut équiper une des deux cartes d'un connecteur 17 points mâle et l'autre carte d'un connecteur 17 points femelle et les embrocher l'une sur l'autre.
Sur ce prototype j'ai simplement relié les deux cartes à l'aide d'une nappe femelle-femelle DUPONT 17 points :


Les connecteurs d'alimentation 12V de la carte de commande sont des JST B2P-VH au pas de 3.96mm. Celui de la carte de puissance est un NS25 au pas de 2.54mm.

Le JST B2P-VH est capable de supporter 10A, le NS25 seulement 3A.
J'estime que 3A sont amplement suffisants. Cela fait tout de même 36W !

Dans le cas où la puissance nécessaire serait plus importante, on peut envisager de concevoir une autre carte de puissance, la carte de commande restant identique.
Cette carte à 8 MOSFETs IRLZ44N est capable de fournir 16A au total :


On peut bien entendu alimenter la carte de puissance directement à partir de l'alimentation 12V.

Voici une vidéo du montage :

Au démarrage les rubans de LEDs sont allumés progressivement, puis éteints. Cela permet un test rapide.

3. Téléchargements

Le projet est disponible ici : https://bitbucket.org/henri_bachetti/mysensors-led-stair-dimmer

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

Dans le projet KICAD il y a un répertoire jlcpcb contenant les fichiers GERBER requis pour une commande chez JLCPCB.
Il faut les zipper.

4. L'IDE ARDUINO

Deux librairies sont à prévoir :

https://github.com/thomasfredericks/Bounce2.git

Cette dernière librairie n'est utile que dans le cas où l'on connecte des boutons-poussoirs sur les entrées prévues pour les capteurs PIR, pour tester le montage.

La configuration est simple :

#define LDR                                                      // à commenter si la LDR n'est pas utilisée
// light level in LUX
#define LIGHT_MAX_LEVEL       5.0                // niveau de luminosité
// dimmer clock in microseconds
#define DIMMER_CLOCK          2000               // horloge du dimmer en millisecondes
// dimmer ON time in milliseconds
#define DIMMER_ON_TIME        15000           // durée d'allumage
en millisecondes
// MYSENSORS option (NRF24L01)
#define MYSENSORS                                       // option DOMOTICZ (à commenter si l'option n'est
                                                                            pas utile)

5. Configuration

Ma configuration est la suivante :

  • 16 rubans de LEDs 5730 12V de 10cm
  • une alimentation 12V 20W
Bien entendu on peut facilement adapter n'importe quel type de ruban 12V. La carte de puissance peut supporter jusqu'à 16 rubans consommant au total 3A.
Il est facile de concevoir une carte de puissance permettant de fournir plus de puissance si nécessaire, avec 16 MOSFETs IRLZ44N par exemple :

L'utilisation d'un ruban 5V est possible. Ils sont plutôt peu courants.
La carte de commande pourra être alimentée en 5V également; on devra cependant remplacer le régulateur LM78L33 par un modèle ayant une tension de drop-out moins élevée. Un LM2936-3.3V ou un LP2950-3.3V conviendra, ils ont le même brochage, par contre les condensateurs C2 et C3 devront être remplacés :
  • LM2936 : C2 = 100nF polyester, C3 = 10µF 10V
  • LP2950 : C2 = 1µF 10V, C3 = 2.2µF 10V
Les condensateurs tantale ou MLCC conviennent.

Il conviendra de lire l'article précédent si l'on désire adapter d'autres rubans de LEDs, et dimensionner l'alimentation :

6. Intégration

Le projet précédent devait être intégré dans le tableau électrique en utilisant un boîtier 9U (160mm) sur rail DIN :

Cette nouvelle version permettra de réduire la taille de ce boîtier. Un 6U suffira (106mm).

Si le tableau électrique est éloigné on peut utiliser une boîte à encastrer permettant d'accueillir également l'alimentation :

Seule la ligne 230V sera donc à raccorder au tableau. Cette boîte peut être encastrée au plafond sous le palier par exemple.

7. Consommation

La consommation du montage au repos est de 1.5mA.

La consommation totale est de 1.2A lorsque la luminosité est maximale, c'est à dire une quinzaine de Watts.

8. Utilisation

L'encodeur permet de régler la luminosité maximale. Pendant le réglage toutes les LEDs sont allumées. Il faut appuyer sur le bouton pour valider.

Lorsqu'une personne passe à proximité de l'un des détecteurs l'escalier s'allume 15 secondes (réglable en modifiant la constante DIMMER_ON_TIME).

A part cela, il n'y a pas grande chose à dire, à part que lorsqu'une personne passe devant un détecteur alors que l'escalier est déjà allumé, le temps d'allumage de 15 secondes est réarmé.

9. liens utiles

La superbe réalisation de Nicolas en vidéo (mai 2021) :

10. Conclusion

Cette réalisation est nettement plus simple et plus compacte que la précédente, et donne un résultat équivalent.



Cordialement
Henri

11. Mises à jour

30/12/2020 : correction de bug.
                     Quand la luminosité est < 7 il y a un débordement de calcul

 

mercredi 22 juillet 2020

DOMOTICZ : installation



DOMOTICZ : installation


DOMOTICZ est un serveur domotique permettant de gérer divers dispositifs (capteurs, relais, prises connectées, etc.) d'une habitation.
Ce blog contient d'ailleurs pas mal de réalisations liées à DOMOTICZ, que j'utilise depuis quelques années.

J'ai récemment voulu mettre à jour mon installation DOMOTICZ. Malheureusement, la nouvelle version ne fonctionne pas avec ma veille RASPBIAN 8 JESSIE. J'ai donc essayé de faire une mise à jour vers la version BUSTER. Le système n'a pas redémarré, pas la moindre ligne n'apparaissait à l'écran.

Il faut donc tout reprendre à ZÉRO, et cela va être une bonne occasion d'écrire un petit tutoriel sur le sujet.

1. Prérequis

La carte sur laquelle va être installé DOMOTICZ est une RASPBERRY PI 3B sous RASPBERRY PI OS. Dans mon installation précédente cette carte donnait toute satisfaction. Il y a fort à parier que même un modèle 1 ou 2 soit suffisant.

Pour l'installation il faut disposer d'une carte µSD d'au minimum 4Go pour un système Lite et 16Go pour un système complet avec interface graphique et logiciels recommandés :

Personnellement j'utilise la version Lite, car la RASPBERRY PI n'est raccordée à aucun écran, donc je n'ai besoin d'aucune interface graphique, tout passe par le réseau.

Pour la mise en route de la RASPBERRY PI, par contre, l'installation requiert le matériel suivant :
  • clavier de PC
  • écran de PC + câble adaptateur HDMI / DVI
  • câble Ethernet
Le câble adaptateur HDMI est raccordé à la prise DVI de l'écran. Ce matériel n'est utilisé que pour le début de l'installation.

Je recommande l'utilisation d'une carte µSD de marque, si possible classe 3 ou 4.
Personnellement j'utilise depuis plusieurs années une Sandisk Extreme 16Go classe 3.

Il est également recommandé d'utiliser une carte d'alimentation UPS, afin d'éviter les problèmes liés aux coupure secteur. Personnellement j'ai installé une DFROBOT DFR0494.

2. Installation de RASPBERRY PI OS

Les distributions sont à télécharger ici :

Cette page donne les instructions d'installation en fonction de l'OS de votre PC :

2.1. Démarage

Après avoir connecté le clavier et l'écran, et inséré la carte µSD, il suffit de brancher l'alimentation 5V à la RASPBERRY PI et le système démarre.

A l'invite "raspberry login:" entrer l'identifiant et le mot de passe :
identifiant: pi
mot de passe: raspberry

2.2. Clavier et langue

Avant toute chose, configurer le clavier en français. Voici la marche à suivre :

On peut éventuellement aussi configurer le système en langue française :
Ce n'est pas vraiment utile car DOMOTICZ possède ses propres jeux de messages dans la majeure partie des langues.

2.3. Réseau

On peut, si ce n'est pas déjà fait, raccorder maintenant le câble réseau à un switch ou directement à la box Internet.
La commande ifconfig permet de visualiser les paramètres réseau :

pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.14  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::7363:f85e:8ee8:4dc6  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:9b:78:e9  txqueuelen 1000  (Ethernet)
        RX packets 205  bytes 14966 (14.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 109  bytes 13567 (13.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


La RASPBERRY PI a obtenu une adresse IP par DHCP. Cette adresse IP est susceptible de changer sans préavis. Il vaut mieux donc attribuer une adresse fixe à notre RASPBERRY PI.
Plutôt que de configurer une adresse fixe en modifiant l'interface Ethernet du système, je recommande plutôt de modifier les paramètres DHCP de la box Internet afin d'ajouter une adresse IP fixe pour notre RAPBERRY PI.
Il est assez facile de trouver le mode opératoire pour chaque box sur internet.
Pour une LiveBox voir ICI.

2.4. Heure locale

Il faut également configurer le fuseau horaire (TimeZone), afin d'avoir l'heure locale ainsi qu'un changement d'heure automatique été / hiver.
Le serveur DOMOTICZ fonctionnera ainsi en heure française, c'est important si un ou plusieurs dispositifs désirent récupérer l'heure.

2.5. SSH

Après l'installation de DOMOTICZ l'essentiel des opérations se fera depuis un navigateur, mais il se peut que l'on ait besoin d'accéder au système lui-même.
Afin de pouvoir accéder à notre système depuis un ordinateur distant il va falloir activer le login distant : SSH

Voici deux tutoriels :

Pendant que nous y sommes, changer le mot de passe n'est pas une mauvaise chose :

pi@raspberrypi:~ $ passwd
Changing password for pi.
Current password:
New password:
Retype new password:
passwd: password updated successfully

Ce nouveau mot de passe pourra être utilisé aussi bien en local qu'en accès par SSH.

3. DOMOTICZ

3.1. Installation

L'installation de DOMOTICZ est très simple :

pi@raspberrypi:~ $ curl -L https://install.domoticz.com | bash

Cette commande réalise l'ensemble des opérations :
  • téléchargement
  • configuration
  • installation
L'utilitaire de configuration pose quelques questions (choix du port, des interfaces HTTP, HTTPS, du répertoire d'installation, etc.) auxquelles on répondra par défaut OK.

Tous les détails ici :

Pour info on peut trouver le manuel complet de DOMOTICZ ici :

3.2. Lancement et configuration

Avant toutes choses, si l'on utilisait une ancienne version de DOMOTICZ, ce qui est mon cas, il est impératif de VIDER LE CACHE DU NAVIGATEUR.

Pour avoir accès à l'interface de DOMOTICZ il suffit d'entrer l'adresse suivante dans un navigateur :

http://192.168.1.134:8080

On remplacera 192.168.1.134 par l'adresse IP choisie pour la RASPBERRY PI.

L'écran d'accueil de DOMOTICZ apparaît, assez pauvre pour l'instant, mis à part la barre de menus :


On peut dès à présent modifier la configuration de base à l'aide du menu Setup / Settings :
  • langue française
  • thème
  • latitude
  • longitude
  • etc.
Pour la suite il faudra au minimum une passerelle :
  • passerelle MYSENSORS USB ou Ethernet
    • NRF24L01
    • RFM69 ou RFM95
  • passerelle RFLINK
  • etc.
Cette passerelle va permettre la communication par radio avec les dispositifs (capteurs, relais, etc.).

La passerelle USB est une simple carte (NANO par exemple) équipée d'un module radio. Voir ici : https://www.mysensors.org/build/serial_gateway

La passerelle RFLINK permet de communiquer avec des objets connectés 433MHz du commerce (Chacon, Blyss, etc.).

Pour mon cas il s'agit d'une passerelle MYSENSORS USB avec module radio NRF24L01.
La passerelle doit être ajoutée à l'aide du menu Configuration / Matériel :


Les dispositifs viendront s'identifier d'eux-même au serveur DOMOTICZ lorsqu'ils enverront des données ou qu'on les redémarrera.

Bien sûr si l'on ne possède aucun dispositif, il faudra en développer quelques-uns, ou acheter des dispositifs du commerce compatibles avec la passerelle RFLINK si l'on a choisi cette solution.

Pour les DIYers, le développement de dispositifs MYSENSORS et leur intégration à DOMOTICZ ont déjà été présentés ici :

4. Conclusion

Comme on le constate l'installation d'un serveur DOMOTICZ sur RASPBERRY PI est très rapide. On peut le rendre opérationnel en quelques dizaines de minutes.
Pour moi le travail n'est pas fini, il va falloir réintégrer tous les dispositifs en ma possession. Courage ...


Cordialement
Henri

mardi 14 juillet 2020

Un Module à 8 ou 16 Mosfets




Un Module à 8 ou 16 Mosfets



Cet article fait suite à celui-ci :

https://riton-duino.blogspot.com/2019/01/mosfets-de-puissance.html

Lorsque l'on veut alimenter une charge (un moteur, une pompe, une vanne, des rubans de LEDs, etc.) à l'aide d'une tension continue le premier réflexe du débutant est de penser à des relais.

Une carte à relais ressemble à un canon pour tuer une mouche quand on veut commuter une charge 5V 12V ou 24V, sans parler de l'encombrement, du bruit et de la fiabilité :

Cette carte a des dimensions imposantes : 180mm * 90mm * 20mm.

N'y a t'il pas d'autre alternative ? Heureusement, si.

Pour commuter une charge en basse tension continue un MOSFET est tout à fait à son aise.

1. Le relais

Le relais a de multiples inconvénients :

  • le bruit
  • la consommation
  • la résistance de contact

1.1. La puissance de commande

La bobine d'un relais courant 5V du type SRD-05VDC-SL-C, qui équipe la majeure partie des cartes du commerce, consomme 70mA, soit 350mW sous 5V.

Lorsque l'on a besoin de 8 ou 16 relais cela devient vite prohibitif.

1.2. La résistance de contact

La résistance de contact de ces relais est de 100mΩ, ce qui implique que pour une dizaine d'ampères qui le traversent, la dissipation thermique sera importante :

P = R * I² = 0.1 * 10² = 10W

10W est une puissance énorme au vu de la taille du relais et de sa capacité à dissiper cette puissance, difficile à dissiper d'ailleurs à travers un boîtier plastique.

L'élévation de température peut occasionner un blocage du relais.

On a souvent des retours négatifs sur la fiabilité de ces relais lorsqu'ils sont utilisés à leurs limites.

La première alternative qui vient à l'esprit est le relais statique (solid state) :


Module relais SSR 2A
Module 8 relais SSR 2A

Relais SSR 10A

Relais SSR 25A avec dissipateur

Si l'on a besoin de à 8 ou 16 relais pour un courant de 10A, cette solution occupe une place énorme et le prix sera conséquent.

2. Le MOSFET

2.1. La puissance de commande

La puissance nécessaire pour commander un MOSFET est tout simplement nulle. Cela élimine d'office toute consommation du côté commande.

2.2. La résistance à l'état passant

On trouve couramment des MOSFETs ayant une résistance interne en mode passant (RDSon) de quelques milliohms.

Le très courant IRLZ44N a une résistance de 25mΩ. Quant à l'excellent IRLB3034 sa résistance est de seulement 2mΩ.

Il va sans dire que la dissipation d'un tel transistor sera ridicule à 10A :

P = R * I² = 0.001 * 10² = 0.2W

Il ne nécessitera pas le moindre dissipateur.

2.3. La tension de commande

Il est impératif, lorsque l'on désire commander un MOSFET à l'aide d'une tension de 5V, de choisir un MOSFET "Logic Level", c'est à dire commutable à l'aide d'une tension de grille faible.

Ce critère est encore plus important si la tension de commande est de 3.3V.

Cet article présente une liste de MOSFETs utilisables dans le monde ARDUINO ou ESP8266, ESP32, etc. :

https://riton-duino.blogspot.com/2019/01/mosfets-de-puissance.html

Les MOSFETs "Logic Level" sont indiqués en vert.

2.4. Le contrôle PWM

Avec un MOSFET il est facile de contrôler la vitesse d'un moteur ou la luminosité d'un ruban de LEDs avec une sortie PWM d'un microcontrôleur, ce qui serait impossible avec un relais.

3. La disponibilité

S'il est facile de trouver des modules relais de toutes tailles, il n'en va pas de même quand il s'agit de modules à MOSFETs.

Tout d'abord un petit mot à propos des module équipés d'IRF520, IRF530 ou IRF540 : ils sont tout bonnement inutilisables avec une tension de commande de 5V si le courant à commuter est important. A éviter absolument.

Seulement quelques modèles "Logic Level" existent sur le marché :

IRLR7843

AOD4184

Ci-dessous quelques modules personnels :

IRLZ44N

AOI403

A ma connaissance aucun module à MOSFETs multiples n'existe.

Alors que faire ? Do It Yourself !

La carte que je vais présenter est équipée de 16 MOSFETs de puissance moyenne AO3400 (5A maximum).

On pourra facilement la personnaliser :

  • utiliser des MOSFETs plus puissants
  • utiliser des MOSFETs en boîtier traversant (TO220 ou IPAK)
  • etc.

4. Le schéma

Le schéma est réalisé avec KICAD.

Pour récupérer le projet voir plus bas :  7. Téléchargements.

L'AO3400 est un MOSFET canal N supportant 30V maxi et 5.6A. Sa faible tension VGSth de 1.45V maxi permet de le commander même avec un processeur 3.3V, un ESP8266 ou un ESP32 par exemple.

La carte est équipée d'un connecteur DUPONT 17 broches GND + 16 entrées.

Un connecteur DUPONT 32 broches est utilisé pour les 16 sorties.

Un connecteur 2 broches permet d'alimenter en 5V, 12V, ou 24V.

Cette carte est prévue pour de la puissance moyenne : 1A par sortie et 3A au total. Elle peut être utilisée par exemple pour piloter 16 rubans de LEDs 5630 12V de petite taille, jusqu'à une soixantaine de LEDs, soit 1m de ruban.

Sur chaque canal on trouve un MOSFET canal N et deux résistances :

Le transistor est piloté par une sortie du microcontrôleur à travers une résistance de 220Ω dont le but est de limiter le courant d'appel lors de la montée du signal sur la grille, ceci afin de protéger la sortie du microcontrôleur. Une résistance de pull-down de 100KΩ est câblée entre grille et source afin de ne pas laisser la grille en l'air dans le cas où la sortie du microcontrôleur est en haute impédance, au démarrage par exemple.

5. Pilotage

Piloter une carte carte à 8 canaux à l'aide de 8 sorties d'un ARDUINO, un ESP8266 ou un ESP32 est envisageable, bien que cela soit dommage de monopoliser autant de sorties pour si peu de choses.

A moins de disposer d'une carte ARDUINO MEGA une carte à 16 canaux pourra difficilement se passer d'un module expander :

Module MCP23017

Ce module I2C dispose de 16 sorties. On le reliera au bus I2C de l'ARDUINO et on pourra donc piloter 16 canaux avec simplement 2 sorties :

  • ARDUINO : A4 et A5
  • ESP8266 : GPIO4 et GPIO5
  • ESP32 : GPIO21 et GPIO22

Il existe d'autres versions :

  • MCP23008 : 8 sorties
  • PCF8577 : 8 sorties
  • PCF8575 : 16 sorties
  • SX1509 : 16 sorties PWM

D'autres choix sont proposés ici :

Les extensions de GPIOs de l'ARDUINO

Bien entendu il existe des librairies pour piloter ces modules :

  • MCP23008 : https://github.com/adafruit/Adafruit-MCP23008-library.git
  • MCP23SXX : https://github.com/sumotoy/gpio_MCP23SXX
  • MCP23017 : https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library.git
  • MCP23S17 : https://github.com/n0mjs710/MCP23S17.git 
  • PCF857X : https://github.com/skywodd/pcf8574_arduino_library
  • PCF8574 : https://github.com/RobTillaart/PCF8574

La plupart sont installables depuis le gestionnaire de bibliothèques de l'IDE ARDUINO.

Ici se trouve un article récent traitant du sujet :

Piloter des Relais ou des MOSFEts à l'aide d'un Module MCP23008 ou MCP23017

6. La charge inductive

Comme pour le pilotage d'un relais, si l'on veut piloter un moteur continu, ou une électrovanne, en fait toute charge inductive, il faut penser à mettre en place une diode de roue libre en parallèle sur la charge :

La diode protège le transistor des surtensions provoquées par le solénoïde lorsque celui-ci est coupé.

7. Photos


Tous les composants sont des modèles CMS.

La carte a des dimensions réduites : 100mm x 37mm, le quart de la surface d'un module à 16 relais. Chez JLCPCB on pourra commander 5 PCB de 100mm x 100mm pour 9€. Chaque PCB peut contenir 2 modules. Chaque module revient donc à 0.90€.

Le prix de revient de cette carte est ridicule :

  • un lot de 50 AO3400 à 1.30€ : 0.42€ les 16 pièces
  • 2 jeux de 100 résistances CMS à 0.50€ pièce : 0.32€ les 32 pièces
  • 2 connecteurs DUPONT 40 broches (à recouper) : 0.25€
  • le PCB : 0.90€

Au total chaque carte revient à 1.90€. En comparaison un module 16 relais coûte 9€.

Les connecteurs sont coudés, ce qui permet de les souder sur ce PCB maison simple face. Dans le cas d'un PCB double face à trous métallisés on pourra utiliser des connecteurs droits.

Cet autre modèle développé précédemment utilisait 8 MOSFETs IRLZ44NS et des résistances traversantes :

Mis à part le nombre et le type de MOSFETs utilisés le schéma électronique est strictement identique au précédent.

Elle est équipée d'un connecteur DUPONT 9 broches GND + 8 entrées. Elle est également équipée de borniers :

  • bornier 16A d'alimentation de puissance à gauche (maxi 55V pour l'IRLZ44N)
  • 8 borniers 7A pour 8 charges

Son prix de revient :

  • un lot de 10 IRLZ44N à 1.80€ : 1.44€ les 8 pièces
  • 2 jeux de 100 résistances 1/4W à 1.50€ pièce : 0.24€ les 16 pièces
  • 1 connecteurs DUPONT 40 broches (à recouper) : 0.12€
  • un lot de 30 borniers à 5€ : 1.50€ les 9 pièces
  • plaquette à pastilles 8x12 : 1€

Au total chaque carte revient à 4,30€. En comparaison un module 8 relais coûte 6€.

Le câblage de puissance de cette carte est réalisé avec du fil rigide :

  • liaisons entre borne d'entrée - et sources des MOSFETs (1.5mm²)
  • liaisons entre borne d'entrée + et bornes de sortie + (1.5mm²)
  • liaisons entre bornes de sortie - et drains des MOSFETs (0.5mm²)

Le câblage entre entrées et résistances de grille est fait en fil à wrapper.

Elle peut fournir environ 5A par sortie et 16A au total. On pourrait admettre plus d'ampérage en câblant à l'aide de fil de 2.5mm² et en utilisant d'autres borniers supportant un ampérage plus élevé.

Comme on le voit, même avec une plaquette à pastilles il est parfaitement possible de construire un module à MOSFETs digne de ce nom.

8. Téléchargement

Le projet est disponible ici :

https://bitbucket.org/henri_bachetti/arduino-prototyping/src/master/mosfet-module/sot23-16/

9. Conclusion

Un module 8 ou 16 MOSFETs est simple à concevoir et son prix de revient est ridicule.


Cordialement

Henri

10. Mises à jour

06/07/2021 : 5. Pilotage
08/02/2022 : 6. La charge inductive