NegaZap: le négativeur/zapper sur Arduino Micro Pro

Le négativeur et le zapper sont électroniquement très proches:
- ils ont deux électrodes: dans le négativeur Laville on branche l'électrode positive à la Terre l'autre à la main ou sur le corps,
dans le zapper on tient deux électrodes en main ou sur le corps.
- ils diffèrent seulement par la tension et la fréquence des signaux et leur protocole d'activation
- le zapper limite le courant à quelques mA pour ne pas lèser la peau (en fait quasiment aucun courant ne circule avec le négativeur: sauf si le corps est aussi à la Terre).

Comme je voulais passer du PIC au processeur ATMEL ATMEGA32U4 (cela évite d'utiliser un programmateur de pic ou une interface ICSP sur la carte, tout en ayant plus de mémoire flash interne), c'est l'occasion de faire un appareil hybride dont la fonction peut être choisie entre Zapper ou Négativeur: c'est le NegaZap.
L'intérêt du ATMEGA32U4 est qu'il offre 32Ko de  programme flash , 2.5Koctets de RAM, 1Koctets d'eeprom et une interface USB gérée par un bootloader intégré permettant la programmation juste en le connectant sur le pc.
Il n'existe qu'en boitier cms, mais le module Arduino Pro Micro (développé par Sparkfun et copié...) résoud ce problème:

Ce petit module est vu comme un composant intégré avec son quartz et un régulateur de tension 5V (acceptant 12V dans le cas du module violet sur AliE sinon 6V).  On le trouve sur Amazon  ou AliE.
Beaucoup d'infos se trouvent sur le net: github
Pour l'utiliser dans l'IDE Arduino, il faut:
- installer un hardware Pro Micro (celui de Sparkfun) dans l'IDE Arduino
- installer un driver pour que le pc le reconnaisse comme port COMn  (en fait il y a un port special qui apparait pendant 8 sec quand on fait deux RST proches): un port sert pour programmer avec AVRDUDE, l'autre pour communiquer avec le Serial Monitor).
J'utilise plutôt AVRDUDESS qui a une interface graphique  (choisir le port de prog qui monte après un RST du module) et AVR109 comme programmateur.
C'est parfois un peu capricieux (sur mon WIN7 notamment), il peut notamment arriver de ne plus voir de port COM (ou alors il apparaît puis disparaît): dans ce cas il suffit de compiler/charger un sketch vide, et appuyer brièvement sur RST (un fil au GND) quand avrdude  démarre: avrdude trouve le port de configuration et cela remet d'aplomb le bootloader. On peut aussi redémarrer le pc pour réinitialiser les périphériques USB. L'IDE Arduino effectue un open/close à 1200bauds du port USB de base pour permettre l'accès au port de programmation du bootloader, il lui reste 8 secondes dans ce cas pour activer AVRDUDE qui verra le port de programmation.
La procédure d'installation est bien décrite sur le site SparkFun.
Il faut utiliser le module 5V/16MHz pour être précis sur les fréquences (le module 3.3V/8MHz existe aussi mais pas assez rapide).

Les objectifs du NegaZap:
- avoir un seul appareil pouvant fonctionner en Négativeur ou Zapper
- avoir un affichage compact OLED 0.96" ou 1.3"
- pouvoir régler la tension de 10 à 30V (cela peut piquer !!!) et l'afficher en la mesurant
- limiter le courant à quelques mA configurables
- choisir la forme du signal (son rapport cyclique)
-
caler la fréquence précisément à 2 décimales voire mieux (pour les basses fréquences) grâce au quartz du module
- disposer de programmes utilisateur (USER) configurables en durée et fréquences pour tester diverses fréquences et autres usages comme générateur
- configurer la façon dont les électrodes sont activées: totempole (rappel au +),  limitation de courant ou non.

Le schéma: en pdf

A part les quelques transistors de pilotage des électrodes, il y a peu de composants. Les circuits de pilotage des électrodes à base de transistor ont été testés sur une plaque à trous en injectant un signal carré de commande depuis un générateur TTL 0 à 5V. Le reste est trivial et concerne surtout la mise au point du logiciel.
Le BC557 peut être remplacé par un mosfet canal-P (dans ce cas R13 peut être remplacée par un strap pour gagner de la vitesse de commutation).

L'afficheur est un module OLED 0.96"  (voire 0.91" mais c'est un peu petit) ou 1.3"  préféré en I2C (attention entre 0.96 et 1.3" Vcc  et Gnd sont inversés, d'où les straps sur le pcb, même si le module 1.3" comporte aussi des straps pour inverser Vcc  et Gnd). L'adresse I2C attendue par le logiciel est 0x3C (souvent celle câblée par défaut). La photo du 0.96" montre 0x78/0x7A mais c'est équivalent à 0x3C/3D suivant que c'est exprimé sur 8 bits ou 7bits.

La tension variable de 10 à 30V est faite par un module StepUp tout fait XL6009  (il y a de marge en courant !!) dont on démonte le trimmer de réglage de 10Kohms pour le renvoyer sur le potar de 10K en face avant. Ce modèle courant se monte directement sur le pcb du Negazap avec quelques fils soudés (les pads sont en face). Un autre modèle plus petit peut aussi faire l'affaire vu le très faible courant nécessaire, dans la mesure où le trimmer de réglage 10K peut être facilement dessoudé (certains modules utilisent un trimmer 100K dans ce ca un potar 100K sera à utiliser). Ce petit modèle a aussi une faible épaisseur ce qui laissera de la place pour une batterie lipo de 10mm dans le boitier tout fait (profondeur interne utilisable 40mm).
ou

Le Negazap tient sur un PCB 100x50mm: le zip pour le fabriquer (en 5 ex pour qqs euros) chez JLCPCB NEGAZAP.ZIP
La marque JLCJLC fixe l'endroit où sera mis le code commande (si on le demande sinon JLCPCB choisit).
- le potar, l'encodeur , le bouton PB13, le buzzer et l'afficheur sont montés coté bottom, le reste coté top.
- attention pour les transistors mosfets BS170 ,  BC557 et LM234: certaines sources sont contrefaites sur AliE (= poubelle):
prendre RS-Particuliers (pas de frais de port si commande le WE) ou autre Pro.        
  

La place pour  le stepup a été réservée pour le modèle XL6009, mais le peit modèle se montera avec des fils de liaison.
Le LM7805 peut être monté coté  boutons pour gagner de l'épaisseur. Idem pour le buzzer.
Le montage des composants:

Le prototype réalisé avec le gros StepUp:
  
Le boitier peut être réalisé en impression 3D:

Mais un boitier tout fait fait aussi l'affaire  ( RS:229-1644): la face avant (le couvercle) sera découpée à la cnc. decoupe.dxf
La sérigraphie correspondante à coller sur le boitier: serigraphie.pdf


L'alimentation:
Il est préférable d'avoir un appareil non relié au secteur par sécurité.
 Pour cela on monte un accu composé d'une cellule Li-Ion 3.7V de capacité 3000mAh.
ou moins épaisse:  
Noter que le délai de livraison AliE pour ces batteries est très long (2 mois) car elles ne peuvent être transportées par avion. La commander sur Amazon si pressé.
Il est indispensable de protéger cette batterie contre la décharge profonde (cela les tue) et la surcharge (peut prendre feu).
Un petit module de protection est monté en parallèle sur la batterie si celle-ci ne l'a pas déjà intégré:



Et la charge se fera avec un module de charge dont la prise USB-C sera accessible de l'extérieur sans démontage:


Ce module contient déjà le système de protection décharge/surcharge (pas de problème si la batterie l'a déjà). Par contre il est calibré pour un courant de charge de 1A, ce qui ne va pas pour un port USB de PC qui est limité à 500mA. Il faut changer la résistance R3 de 1.2K par une résistance de 4K environ pour limiter le courant à 300mA environ.
La tension 3.7V n'est pas suffisante pour alimenter le negazap, il faut rajouter un module stepup pour monter la tension à 7V environ.

Une prise externe et un inverseur permettent d'alimenter le negazap par une alimentation externe (attention à sa qualité car électrodes en contact avec le corps)
de 5V à 9V environ (12V aussi fait l'affaire mais peut faire chauffer le LM7805 de la carte).
Le circuit d'alimentation:

Des connecteurs JST au pas de 2.54mm permettent de connecter facilement la partie alim et la carte.
Le module chargeur est retourné et deux trous sont forés sur le boitier pour voir les deux leds rouge et bleue indiquant la charge en cours ou sa fin.
L'appareil final:



Le logiciel:
Le logiciel a été écrit en C avec  l'IDE Arduino V1.8.19.
L'interface I2C a été reprogrammée directement par logiciel, ainsi que le contrôle de l'afficheur Oled.
Cela permet de s'affranchir des bibliothèques Arduino, pas toujours simples ou lentes.

Programmation du µP:
On peut le programmer directement avec AVRDUDE ou AVRDUDESS (gratuit et beaucoup plus facile avec son interface graphique) ou autre programmateur à partir des fichiers compilés .HEX: le zip comporte  une  version incluant le bootloader pour MicroPro. Si l'IDE Arduino est déjà installé, AVRDUDE est aussi installé, il suffit de compiler/charger un sketch vide (ou avec un message sur Serial), en activant l'affichage des commandes dans les paramètres. L'IDE Arduino, après avoir fait un Reset du module MicroPro grâce à un Open/close à 1200bauds, lance AVRDUDE sur le port USB de programmation après la compilation et affiche la commande , il suffit de la copier dans un fichier .BAT (Wordpad)  en le modifiant pour désigner où le fichier .HEX a été décompressé: l'IDE utilise /TEMP pour stocker les résultats de la compilation. Il suffit ensuite d'exécuter ce .bat dans une fenêtre CMD. Il se peut que Avrdude ne voit pas le port de programmation, il faut dans ce cas faire un RST DOUBLE du module (un fil entre RST et GND) et lancer le .bat juste après (il y a un délai de 8 secondss mis par le bootloader de Sparkfun) avant que le module repasse au port de communication. Il vaut mieux programmer le module seul avant de le monter sur la carte, ce qui permet de faire un RST double avec un bout de fil vers Gnd: un petit switch aurait été pratique sur la carte.
Les fichiers HEX à programmer : sketch_negazap.zip
Le zip contient deux fichiers hex dont un incluant le bootloader pour un MicroPro nu.

Utilisation:
Le poussoir ou l'encodeur peuvent avoir 2 actions différentes:
- soit par une courte pression: le poussoir démarre ou stoppe une séance
- soit par une pression plus longue (plus de 1sec)
Le logiciel affiche la version au démarrage puis les infos du mode courant choisi.
Il y a 2 modes de fonctionnement:
- un mode Zapper : dans ce mode la fréquence peut être choisie entre 1.5KHz, 15KHz ou 30KHz. Le nombre de cycles 7mn On/ 10mn Off peut être choisi (défaut = 3). A tout moment la fréquence peut être modifiée par l'encodeur, avec un incrément qui peut changer en appuyant sur l'encodeur. En cours de sénace, le courant peut aussi être changé entre 1, 2, 4 et 8 mA. La tension est modifiable à tout moment par le potentiomètre associé au stepup, mais elle est affichée.
Un menu de configuration adapté au mode zapper peut être lancé par appui long sur l'encodeur. Certains paramètres sont communs aux deux modes. La configuration  peut être sauvegardéeen eeprom.

- un mode Négativeur: ce mode permet de choisir une fréquence quelconque, et propose un mode MANUEL et 4 programmes USER1,USER2,USER3,USER4 que l'on peut construire dans le menu de configuration, activé par appui long sur l'encodeur. Ces programmes sont sauvegardables en eeprom. Ils permettent notamment de récréer une séquence de type zapper du mode précédent. Cela permet de tester diverses fréquences telles que celles proposées par  Van Gelder. Ce mode permet de choisir d'activer ou pas le transistor BC557 de l'électrode +. On peut aussi activer la limitation de courant comme pour le zapper (moins critique car une seule électrode est utilisée sur le corps).

Si le poussoir Start/Stop est maintenu appuyé pendant la mise sous tension, le logiciel propose de choisir le mode de fonctionnement et le sauvegarde avec la configuration courante.

La documentation: doc_negazap.pdf