Bonjour a tous, je sollicite l'aide de la communauté Arduino afin de m'aider pour la parti code pour la réalisation d'un projet de générateur de Shumann.
Son fonctionnement est assez simple, il me faut un signal analogique sinusoïdale le plus pure possible(sans micro coupure entre chaque période, forme sinusoïdale parfaite, maximum de définition/dynamique (dans la limite des 5v de sortie arduino et des 1024 position du 10bit qu'il offre si je ne me trompe pas) avec :
- 6 preset de temps de fonctionnement(le 6eme étant infini)
- 6 preset de fréquence fixe(le 6eme en modulation de fréquence)
- 6 preset d'amplitude fixe(le 6eme en modulation d'amplitude)
et donc si c'est pas trop compliqué la possibilité de modulation sur la fréquence et l'amplitude
(le 6eme preset des lignes Fréquence et Amplitude).
Le tout paramétrable avec un seul bouton pour simplifié et facilité son utilisation et un afficheur OLED 128x64 sur 4 lignes pour affiché le temps de fonctionnement défini,la fréquence défini, l'amplitude défini et le temps restant de fonctionnement sous forme de compte a rebours.
Niveau matériel ca sera donc un Arduino nano,un afficheur OLED 128x64 et un seul bouton poussoir pour la programmation des différentes variables.
Un potentiomètre 10 ou 100k en sortie d'arduino pour ajuster le gain(et calibré la puissance maxi) car la partie puissance serra assuré par un module d'ampli audi BTL qui a un gain fixe, le tout alimentera une charge sous forme de bobine spiral en PCB.Très simple.
Pas vraiment l'envie d'utiliser le mode PWM avec un filtrage RC en sortie pour générer ce signal sinusoïdal(signal pas assez propre,trop d'harmonique,pas assez « lisse »),j'ai trouver un code d'un vrai générateur sinusoïdal avec la fonction sin arduino qui pourra j'imagine facilité le début du code de ce projet:
Par contre il est en 8bit donc 256 valeurs ,il faudrait le passer en 10bit 1024 valeurs pour avoir le maximum de résolution.
Je devrais m'en sortir pour inclure les librairies d'afficheur Oled 128x64 SSD1306 et GFX de Adafruit, dans l’IDE Arduino par contre je n'en sais pas plus pour la suite...
A défaut de savoir codé,j'ai fait la description de son fonctionnement en français pour facilité sa compréhension et son codage en langage arduino:
Les 4 lignes de données qui s'affiche en continu sur l’écran sont:
Temps :
Fréquence :
Puissance : (qui est l'amplitude du signal, voir 'variables dans le code et a l'afficheur' plus bas)
et une 4eme ligne qui affiche le compte a rebours en temps réel
donc réglage de taille de font size sur 2 dans le code pour 4 lignes sur écran OLED 128x64
Les 6 preset par paramètres(valeurs par défaut a l'allumage => premier preset) sont:
Temps : 5min / 10min / 15min / 20min / 30min / inf (pour infini)
Fréquence : 7,83Hz / 14,1Hz / 20,6Hz / 26Hz / 32,4 / MOD (pour modulation ,aller retour infini 20-40hz en T1 secondes)
Puissance : 0,5w / 1w / 3w / 5w / 10w / MOD (pour modulation,aller retour infini 3w-7w en T2 secondes
Toutes les valeurs de preset devront etre editable dans le code.
Il n'y a q'un preset de modulation de fréquence et un preset de modulation d'amplitude.
on a 2 variables de temps, T1 et T2 et 4 limites associés(20-40hz et 3-7w) qui sont paramétrable uniquement dans le code (voir explication « variables dans le code » plus bas)
L'affichage se présente comme ceci:
Temps: ** min _______________ (** deviens «inf» pour le 6eme preset)
Fréquence: ** , ** Hz _______ (** , ** deviens «MOD» pour le 6eme preset)
Puissance: * , * Watt_________ (* , * deviens «MOD» pour le 6eme preset)
Temps restant : ** : ** _______(minute : seconde)
A l'allumage :
Une image (drawBitmap ) de démarrage s'affiche en continu (si la taille du code le permet).Je l' intégrais au format approprié dans le code...si on me dit ou et comment
Un appuis bref sur le bouton :
- Coup l'affichage de l'image de démarrage et affiche l'interface principal sur les 4 lignes avec les paramètres et leurs variables par défaut(première valeur de preset) comme ceci:
Temps: 05 min _______________ (05 deviens «inf» pour le 6eme preset)
Fréquence: 07,83 Hz _______ (07,83 deviens «MOD» pour le 6eme preset)
Puissance: 0,5 Watt_________ (0,5 deviens «MOD» pour le 6eme preset)
Temps restant : 05:00 _______(minute : seconde)
- active la sortie analogique sinusoïdal avec les paramètres par défaut(première valeur de chaque preset)
- le compte a rebours de la 4eme ligne commence a décompter
Mode programmation et fonctionnement:
L'affichage est fixe et le compte a rebours décompte(on a déjà appuyer une fois sur le bouton pour lancé l'affichage (des valeurs par défaut),le générateur est en route le Temps restant décompte):
1-un appuis bref sur le bouton relance le compte a rebours a sa valeur défini(=>reset compte a rebours) sans interruption de la sortie analogique=>permet de relancer le timer par un simple appuis pour prolonger l'utilisation
2-Un appuis de 3s fait entré en mode programmation(sans interruption de la sortie analogique)
-
la variable du 1er paramètre/ligne «Temps:» clignote et est éditable (par appuis bref et successif du bouton)
-
chaque appuis bref sur le bouton fait passer a la valeur preset suivante de la variable (les 6 preset défilent a chaque appuis avec un bouclage infini)
3-Un nouvelle appuis de 3s (=>validation et changement de paramètre/ligne)
-
Valide/implémente instantanément la valeur de la variable en cour dans le code(sans interruption de la sortie analogique)
-
Stop le clignotement de la variable en cour (qui passe en fixe)
-
Passe a la variable du paramètre/ligne suivant qui se met a clignoté(bouclage infini des 3 paramètres/lignes=> quand on arrive au paramètre «Puissance», un appuis de 3s fait repasser au paramètre «Temps» ainsi de suite)
-
le compte a rebours démarre/est relancé (a chaque appuis de 3s) a sa valeur défini en ligne1.
4-Quand une des variables clignote(mode programmation) et après 5s sans action du bouton(=>validation automatique et sortie du mode programmation):
-
Valide/implémente instantanément la valeur de la variable en cour dans le code(sans interruption de la sortie analogique)
-
Stop le clignotement de la variable en cour(qui passe en fixe)
-
le compte a rebours démarre/est relancé a sa valeur défini en ligne1.
Les variables programmées son stockées même si on arrête l'arduino(c'est possible?) si non re démarrage avec les valeurs par défaut(1er preset de chaque paramètre)
En mode programmation, chaque validation de paramètre(soit après un appuis de 3s ou après 5s sans action du bouton) relance le compte a rebours a sa valeur défini en ligne1.
L'afficheur reste actif tout le temps du décompte du compte a rebours.
A la fin du compte a rebours la sortie analogique s’arrête, l'afficheur affiche l'image de démarage, le compteur se réinitialise a sa valeur défini(reset compteur), les variables programmées son stockées même si on arrête l'appareille, le système attends un appuis bref sur le bouton pour relancé un cycle=>retour a l'état d'allumage.
Matos:
-Arduino nano
-Afficheur OLED 128x64
-1 bouton poussoir
Sortie analogique : (laquelle choisir?)
Uniquement un signal sinusoïdal analogique(le plus simple avec la fonction «sin» arduino?)
d'amplitude 0-5v
avec un offset de 2,5v pour centré la sinusoïde entre 0 et 5v(je métrerait un condo en série a la sortie pour supprimer la composante continue)
variables dans le code et a l'afficheur:
1-le temps est exprimé en seconde dans le code
en minute sur la 1er ligne de l'afficheur
en minute et seconde pour le compte a rebours
chaque valeur des 6 preset doit pouvoir être changer dans le code(en seconde ca me parait plus simple).
2-les fréquences sont exprimées en hertz avec 2 chiffres après la virgule (soit xx,xxHertz ) dans le code et a l'afficheur
chaque valeur des 6 preset doit pouvoir être changer dans le code.
3-les amplitudes sont exprimées en watt sur l'afficheur
en valeur numérique dans le code(0=>0v, 1024=>5v ?) ou en % d'amplitude ou en volt si c'est plus simple
il y aura donc un coefficient entre valeur numérique du code et watt affiché a l’écran ( coefficient paramétrable et ajustable depuis le code que je déterminerais par des mesures direct )
chaque valeur numérique des 6 preset doit pouvoir être changer dans le code.
4-Pour les 2 preset(les 6eme) de modulation de fréquence et d'amplitude, on a :
-
2 variables de temps exprimés en seconde (ces variations doivent être très lentes donc plusieurs secondes )
T1 pour la modulation de la fréquence, temps pour passer de 20 a 40hz
T2 pour la modulation d'amplitude, temps pour passer de 3 a 7w
ces variables doivent être modifiable dans le code -
4 variables de limites de modulation(début et fin) associés a T1 et T2
ces variables doivent être modifiable dans le code
20-40hz(par défaut) pour la modulation de fréquence(noté startHZ et endHZ dans le code)
3-7w(par défaut) pour la modulation d'amplitude mais ca sera des valeurs numérique ou % ou tension dans le code comme vu précédemment(noté startAMP et endAMP dans le code).
Les modulations se passent comme suite:
-
pour la modulation de fréquence=>de 20hz( valeur de startHZ) vers 40hz( valeur de endHZ) dans un temps T1 puis de 40hz(endHZ) vers 20hz(startHZ) toujours en un temps T1 et ainsi de suite(mode bounce ou aller/retour infini)
-
pour la modulation d'amplitude=>de 3w(startAMP) a 7w(endAMP) dans un temps T2 puis de 7w(endAMP) a 3w(startAMP) toujours en un temps T2 et ainsi de suite(mode bounce ou aller/retour infini)
si la partie modulation de fréquence et amplitude sont trop compliqué a codé,on peut se limité a un fonctionnement avec seulement 6 preset fixe pour chaque paramètres.
mais ca serrait vraiment un plus de l'avoir...
j'ai un oscilo pour contrôler le bon fonctionnement et faire l'étalonnage de puissance/amplitude.
je crois que tout est la....merci d'avance