NegaZap: le négativeur/zapper sur Arduino Micro Pro
9/11/24: correction de bugs du logiciel et version V1.2 permettant de configurer la durée de chaque étape d'un prog User
12/11/24: description d'une version "pro"
20/11/24: taille du boitier final
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
1981388
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.
27/10/24:
version V1.1:
- correction de bugs
- ajout d'une fréquence réglable VAR_FREQ en plus des 3 fréquences de base pour la configuration du mode zapper.
- un beep (configurable) au lancement du zapper et 2 beeps à l'arrêt
Les fichiers HEX à programmer V1.1 : sketch_negazap.zip
Le zip contient deux fichiers hex dont un incluant le bootloader pour un MicroPro nu.
9/11/24 :
version V1.2
Cette version permet de programmer la durée individuelle de chaque étape d'un prog User.
Le fichier HEX V1.2
La doc V1.2.
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 (+ VAR FREQ en V1.1). 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 V1.1: doc_negazap.pdf
La version "NEGAZAP PRO":
La version intégrée dans un petit boitier est bien adaptée pour un usage portable, mais elle est très remplie.
Si on veut l'alimenter sur secteur pour un usage de longue durée, il faut rajouter un bloc alimentation externe 5 à 9V.
Il est assez simple d'utiliser un boitier plus gros "sur table" pour un usage par un thérapeute par exemple.
Ceci permet d'intégrer l'alimentation secteur et la batterie (qui reste optionnelle).
Le boitier RS:1981388 a une taille 190x140x70mm suffisante pour monter les composants à l'aise,
il est en ABS et ses faces avant/arrière sont planes et démontables pour faciliter leur découpe CNC.
D'autres boitiers similaires sont utilisables en adaptant les découpes des faces.
Le schéma interne:
La batterie est optionnelle. Les deux diodes permettent de fonctionner
sur secteur,sans tirer sur la batterie, ce qui chargera la batterie en
même temps.
Le chargeur est configuré par défaut pour un courant de charge de 1A,
ce qui demande une alim 5V/2A. Sa détection de fin de charge n'est pas
perturbée car la diode isole la batterie quand le secteur est actif.
Une led rouge indique que le secteur est actif (le switch secteur est
en face arrière dans la bloc IEC320).
Le bloc alim
doit être de bonne qualité et sécurisé pour éviter tout choc électrique
sur les électrodes. L'isolation électrique doit être soignée.
Le switch de mise à la Terre permet de connecter la Terre de la prise
secteur (qui doit être de bonne qualité) sur l'électrode E+ dans
le cas du mode négativeur, auquel cas un seul cable est nécessaire sur
l'électrode E-.
Note: si on monte le switch de mise à la Terre à l'arrière, on ne le voit pas en face avant et on peut l'oublier.
Pour rémédier à cela, on peut:
- soit monter le switch en face avant
- soit utiliser un switch double et une led de rappel en face avant
(moins de place) branchée en sortie du switch On/Off avec une
résistance sériede 470ohms.
L'ensemble des composants nécessaires revient à 110E environ si on utilise RS (boitier et transistors) et AliE (modules).
En fait le boitier RS1981388 est plus large que ci-dessus, ce qui donne de la place en face avant pour toutes les commandes
(sauf le switch secteur qui est sur le bloc de prise IEC320 avec le fusible).