Logiquement, ce petit programme devrait se trouver dans le chapitre 21) Les petits projets. Sa place juste après « Le JEU DE LA VIE » aurait également été judicieuse les deux petits amusements relevant de « la biologie ». Comme il ne relève pas spécialement de l’Intelligence Artificielle, au final j’ai préféré lui accorder un chapitre à part.
Théorie des Biorythmes.
Extrêmement nombreux sont les phénomènes biologiques qui régissent le « fonctionnement » de notre corps sans que nous en ayons forcément conscience, le plus autoritaire étant le cycle circadien. Certaines de ces « alternances » physiologiques peuvent être relativement courtes comme la respiration, le battement des paupières, la salivation, le rythme cardiaque … la liste est bien trop longues pour tous les énumérer. D’autres sont plus lents comme le cycle menstruel qui se conjugue au féminin et qui varie en général entre 24 et 38 jours. (À comparer en longueur avec les trois autres cycles.) Nous serions également soumis, et tant au masculin qu’au féminin, à trois autres cycles très discrets dont les effets ne sont perceptibles que par notre forme physique, mentale ou émotionnelle. Autant dire que ce ne sont pas des preuves aussi mesurables que notre poids ou notre hauteur.
• Le cycle Physique fait 23 jours.
• Le cycle Emotionnel s’étend sur 28 jours
• Le cycle Intellectuel présente une période de 33 jours.
Comme présenté sur la Fig.311 ces cycles se déclenchent tous à leur valeur moyenne de zéro au moment de notre premier cri à notre naissance et évoluent ensuite entre un minimum est un maximum sous la forme d’une sinusoïde. Du coup ils se décalent les uns par rapport aux autres tout au long de notre vie et il faut 23 x 28 x 33 jours, soit légèrement plus de 58 ans pour qu’ils se resynchronisent à zéro. Puis les variations sinusoïdales reprennent leurs vies indépendantes.
Naturellement il est légitime d’y croire où d’en douter. Cette théorie a culminé dans les années 70 à tel point que lorsqu’un important groupe chinois devait à cette époque négocier un contrat avec une entreprise partenaire, ils se procuraient la date de naissance de leurs protagonistes preneur de décisions pour imposer le jour de la négociation lorsque leur interlocuteur principal passait par le minimum des trois cycles !
>>>>> Mise en garde : Il ne faut surtout pas prendre cette théorie trop au sérieux, car on peut « se brûler les ailes » … et je sais de quoi je parle. Prenez ce programme comme un simple dérivatif. Par exemple dimanche vous allez faire la course avec votre meilleur(e) ami. Faites vos biorythmes et déterminer à l’avance qui va gagner. C’est amusant, ça met du sel dans la compétition amicales, justifie les efforts à consentir … mais ça ne doit surtout pas dépasser ce stade.
Détermination des années bissextiles.
Tracer des sinusoïdes sur un écran graphique n’est pas particulièrement délicat. La difficulté consiste à calculer le nombre exact de jours qui se sont écoulés entre votre naissance et le jour à partir duquel vous désirez faire tracer à l’écran les courbes représentatives de votre forme Physique, Emotionnelle et Mentale. Il faut en particulier tenir compte du ou des mois qui ne sont pas entiers, des années bissextiles etc. La deuxième pierre d’achoppement consiste à déterminer la phase dans laquelle se trouvent les trois cycles lors du tracé de leur origine sur le graphe. Bref, si la théorie est aussi claire que de l’eau de roches, l’application est nettement plus indigeste.
Première étape du développement : Etre capable de calculer le nombre d’années bissextiles entre le jour de la naissance et celui où l’on démarre le tracé des graphes. Cette information est vitale car elle conditionne le nombre de jours écoulés. En effet, chaque année bissextile ajoute un jour si le mois de Février est compris dans la fourchette des deux dates. En particulier, si de surcroit on désire en déduire quel était le jour de votre naissance dans la semaine, comme précisé sur la page-écran de la Fig.312, il faut que le compte du nombre entre 1900 qui était un Lundi et celui de votre naissance soit strictement rigoureux. Nous sommes donc ramenés à déterminer si une année comprise entre 1900 et 2099 est bissextile ou non. Pour traiter cette procédure il suffit de savoir que :
Le parallèle entre la définition officielle donnée dans la liste de la Fig.313 et le listage de la procédure Tester_bissextile(int ANNEE) est pratiquement évident. Sachant que le caractère % représente l’opérateur Modulo dans le langage C++, c’est à dire qu’il retourne le reste de la division d’un entier par un autre entier. Donc ANNEE % 4 retournera la valeur zéro si ANNEE est divisible par quatre. S’il y a un reste, ANNEE % 4 retournera la valeur des décimales. En (1) la variable Bissextile est un booléen qui sera égal à true si l’année est divisible par 4. Dans l’instruction qui suit en (2) on réitère cette action mais avec le diviseur 100. Si l’année est divisible par 100 alors le booléen Bissextile est forcé à faux. Enfin, « tris répetita » en (3). Si l’année est divisible par 400 alors on rétablit à true la valeur de Bissextile. Grâce à l’opérateur Modulo nous avons traité dans l’ordre les trois impératifs définissant la nature de l’année passée en paramètre dans Tester_bissextile().
Valider de façon rigoureuse cette procédure est absolument vital pour assurer le fonctionnement correct du programme. La détermination de la nature des années se fait à plusieurs reprises dans le logiciel. Il importe-donc d’effectuer une vérification incontestable. Pour procéder à cette vérification, le démonstrateur Experience_155.ino réalise dans la séquence des initialisations le listage en « aveugle » de toutes les années bissextiles comprises entre 1900 et 3033. Cette limite a été choisie pour limiter le listage de la Fig.314 en hauteur et se terminer sur une ligne complète. On peut facilement constater sur cette liste que tous les multiples de 4 sont listés sauf dans les intervalles repérés par I où l’année est divisible par 100. Enfin les années divisibles par 100 mais également par 400 sont rétablies comme bissextiles et repérées en vert sur le listage. Si vous regardez l’incidence de l’ajout de cette fonction dans le logiciel, elle est assez considérable. C’est qu’il faut ajouter les routines de gestion de la ligne série ainsi que les textes. Comme il reste largement assez de place pour l’intégralité du programme, il n’y a aucune raison de purger Experience_155.ino de cette fonction. Pour celles et ceux qui n’ont aucune intention d’investir dans un codeur rotatif et un afficheur OLED, vous pouvez téléverser P155 sans que ces périphériques ne soient branchés. Le démonstrateur procèdera de toute façon au listage en question. Rien n’interdit dans l’instruction qui délimite les bornes for (int ANNEE = 1900; ANNEE < 3034; ANNEE++) de remplacer 3034 par 5000 ou 32000 si cela vous chante, mais je n’en vois pas vraiment l’utilité.
Détermination du nombre d’années bissextiles entre DEBUT et FIN.
Deuxième étape du développement incontournable : Etre capable de calculer le nombre d’années entre la date de votre naissance et celle du jour ou débute le tracé des graphes. Ce calcul n’est pas du tout évident à « tortiller » car il faut procéder, comme le schématise la Fig.315 en trois phases, et ajouter à la valeur trouvée le nombre d’années bissextiles qui chacune ajoute un jour en février si ce dernier est compris entre les limites. Dans cette étude, l’identificateur DEBUT correspond à l’année de Naissance et FIN à la date où l’on commence à tracer les graphes biologiques. Fondamentalement, le calcul est assez élémentaire. Le nombre total de jours écoulés entre DEBUT et FIN est égal au nombre de jour de la première année P qui n’est pas forcément complète sauf si la naissance a lieu le premier Janvier. Puis autant de fois 365 jours qu’il y a d’années entières en AE. Enfin il faut aussi ajouter le nombre de jours dans la dernière année D qui elle non plus n’est pas forcément complète sauf si on calcule un 31 Décembre. En multipliant par 365 dans AE on ne tient pas compte des années bissextiles qui chacune ajoute un jour, pas plus du reste dans les périodes P et D. Il faut maintenant corriger cette valeur initiale en tenant compte de toutes les années bissextiles. Pour AE c’est assez facile, on balaye toute la période en comptabilisant chaque année bissextile. Par contre, pour P et D c’est un peu plus subtil. Pour P, si l’année est bissextile, il faut de plus que la naissance soit avant la fin de Février en 1. Si la naissance commence en Mars en 2, même si l’année est bissextile le 29 Février n’est pas à prendre en compte. Détermination analogue en FIN. La dernière année commence forcément le premier Janvier. Même si l’année est bissextile, si le jour du début des graphes est après le 29 Février en 4 il faut tenir compte du 29, par contre s’il est avant en 3 il faut l’exclure. Vous avez tous les éléments pour analyser les deux démonstrateurs.
Détermination du jour de votre naissance.
Encore un calcul qui sans se montrer difficile relève d’une petite recherche stratégique. L’idée de base est très simple. Sachant que le premier Janvier 1900 était un Lundi, il suffit comme montré sur la Fig.316 de faire tourner un compteur par sept partant de 1 jusqu’à la date de la naissance. Les jours alternent alors en permutations circulaires. On applique cette « rotation » sur une période correspondant exactement au nombre de jours entre les deux limites jour de naissance compris. Il serait tout à fait possible de reprendre l’algorithme de détermination du nombre de jours compris entre DEBUT et FIN en remplaçant DEBUT par 1900 et FIN par l’année de naissance. Effectivement ça fonctionne. Mais « pour varier le plaisir », je vous propose dans les deux démonstrateur une approche différente qui se ramène également à du calcul simple. On se doute que cette approche ne fait que formuler autrement les calculs et n’échappe pas au fait qu’il faut encore tenir compte des années bissextiles avec toutefois une petite différence dans cette approche : Dans cet algorithme il n’est plus nécessaire de tenir compte des points 1, 2, 3 et 4.
Déterminer la phase de tracé des sinusoïdes.
Étape indispensable pour tracer les courbes sur le graphe, on peut envisager au moins deux calculs. Le premier présenté en Fig.319 consiste à déterminer le nombre de jours dans la période PH. Ensuite par le deuxième calcul on pourra commencer le tracé des courbes de la période B. Le déphasage PH se mesure depuis l’origine O de
la sinusoïde et se termine à l’instant FIN. Sur le schéma, la période A correspond à la durée qui s’écoule entre la naissance DEBUT et le jour J où commencent les tracés, soit le point FIN. La zone B correspond à la durée durant laquelle on trace les courbes représentatives jusqu’à l’instant T. Au jour de la naissance en DEBUT, toutes les courbes par la théorie des biorythmes commencent par l’alternance « croissante ». Puis, les périodes de chaque thème étant différentes, elles se décalent progressivement dans le temps.
Le deuxième calcul à effectuer imagé en Fig.320 consiste à faire appel à la notion de vecteur en rotation. Considérons un vecteur V qui se trouve dans l’orientation de départ D. Ce dernier tourne autour du point P, son extrémité se déplaçant sur le cercle C. Si l’on mesure la grandeur G de la flèche orange, cette dernière est égale à la longueur L du vecteur V multipliée par le sinus de l’angle α représenté par la flèche courbe bleue clair. On peut donc directement lier la rotation d’un rayon vecteur au cours du temps au développement simultané d’une sinusoïde. Comme les biorythmes sont supposés évoluer sous forme de sinusoïde, c’est la stratégie que nous allons adopter. La vitesse de rotation du vecteur correspond à la fréquence d’évolution du biorythme.
Des logiciels de BIORYTHMES disponibles sur Internet sont très bien faits, mais ils exigent d’avoir un ordinateur de bureau ou un ordinateur cellulaire avec un accès « au WEB ». Certains en plus des trois courbes proposent une quatrième qui présente pour chaque jour la moyenne des trois pourcentages. Bien que pour P155 il reste largement de la place de programme non utilisée, j’ai exclus cette possibilité, car je considère que les trois cycles représentent des éléments très différents les uns des autres qui n’ont rien à voir. La forme physique est « mesurable ». On ressent une fatigue physique bien réelle. L’Intellectuel et l’émotionnel sont purement virtuels. Aussi, faire la moyenne de ces trois entités ne signifie rien de concret. Prenons un autre exemple pour exprimer mon point de vue : Supposons que pour caractériser une personne, on va utiliser sa taille soit 1,72m et sa pointure. Cette personne chausse du 42. La moyenne peut facilement se calculer : 1,72 + 42 / 2 = 21,86. Que représente ce nombre ? C’est donc la raison pour laquelle j’ai écarté cette possibilité.
Experience_154 : Le programme élémentaire.
Élémentaire au point de vue du matériel à investir, car le logiciel reste un peu compliqué. En effet, il suffit de téléverser le démonstrateur Experience_154.ino dans une quelconque carte Arduino et vous pouvez vous amuser à faire afficher l’état global de votre forme. Le seul inconvénient, c’est que le « logiciel » n’est pas autonome, il faut le relier à un quelconque ordinateur. Par ailleurs, les graphiques sont moins immédiats à interpréter que des courbes sur un écran graphique. C’est la raison pour laquelle P155 comble cette lacune et propose une « version de luxe ». Sur RESET, comme souvent sur les démonstrateurs qui précèdent, le programme commence par se présenter en Fig.321 dans la zone coloriée en jaune. Puis, il en est question avec expérimentation dans le dernier chapitre, simple précaution de programmeur on fait afficher dans la zone violette la place disponible pour les données dynamiques. Ensuite, petit rappel dans la zone bleue clair des durées des trois cycles. Enfin, le programme commence par demander la date de naissance suivi de la date du début du tracé du
graphe. La saisie se fait dans la ligne spécifique en haut du Moniteur. Chaque texte frappé au clavier est affiché entre crochets puis s’il n’y a pas d’incohérences détectée, les graphes sont alors tracés à l’écran précédés du résumé des données. Sur la Fig.322 lors de la saisie de la date pour commencer à tracer les graphes on s’est trompé. Pour le jour on propose le 30 alors que le mois de Février ne comporte au mieux que 29 jours. D’une façon analogue, le programme cherche à parer tous les illogismes. Pour faciliter la saisie des dates, dans le format à la place de l’espace on peut frapper ‘/‘. Par contre pour les années, il faut obligatoirement quatre chiffres. Si les dates indiquées sont correctes, le programme résume les données dans l’encadré rose de la Fig.323 puis le tracé des graphes est exécuté. Au lieu de proposer des symboles comme ‘o‘, ‘*‘ et ‘+‘ par exemple, j’ai préféré placer une lettre majuscule pour chaque point figuratif avec : ‘P‘ pour Physique, ‘E‘ pour Émotionnel et ‘I‘ pour Intellectuel. C’est plus immédiat à observer qu’avoir à se référer pour chaque journée à un tableau de correspondance. Si deux « points » se superposent, l’ordre de priorité décroissante est P, E et I. Comme on peut l’observer sur la Fig.323 dans l’encadré bleu le logiciel détermine quel est le jour de la naissance. De plus, dans l’encadré rouge mis en évidence en jaune, le premier jour
du tracé des graphiques est également évalué. Puis, à l’extrémité la plus à droite du graphe chaque jour est précisé. Sur ces tracés le temps s’écoule du haut vers le bas, chaque ligne tracée correspond à un jour. J’ai estimé qu’une durée de prévision de cinq semaines complètes était largement suffisante. Si vous le désirez, il est très facile de modifier le nombre de jours tracés en modifiant le paramètre NB_MAX_J en tête de programme. Sur le graphe l’écoulement du temps est jalonné tous les 7 jours et repéré pour chaque semaine le Lundi. Rien n’interdit de fournir comme date pour le début des tracés un Lundi qui précède la journée courante et avoir ainsi un graphe mieux cadré comme celui de la Fig.324 sur laquelle la copie d’écran est surchargée par le tracé des courbes en couleur pour mettre en évidence les sinusoïdes. PAINT.EXE est largement suffisant pour produire un tel document.
Experience_155 : Déterminer les biorythmes sur un petit système autonome.
C’est un avantage indéniable de pouvoir réaliser une petite unité autonome dans son coffret que l’on peut emporter facilement partout. Le prix à payer réside dans l’achat d’un afficheur, d’un codeur rotatif et d’un un micro-Switch pour déporter le RESET sur la façade du coffret. Il faut aussi ajouter un accumulateur 9V rechargeable, ou une pile 9v alcaline de type 6LR61 avec on s’en doute également un inverseur Marche / Arrêt. C’est l’objet d’Experience_155.ino qui reprend toutes les routines de traitement de son prédécesseur. La seule chose qui change c’est la façon d’établir le dialogue Homme/Machine. (Et le listage des années bissextiles ajouté dans la procédure d’initialisation.) De plus, si lors du RESET le bouton central du codeur incrémental est maintenu cliqué, on ouvre une petite fonction qui permet « en direct » de déterminer si une année est bissextile ou non. C’est un petit plus collatéral. Il s’agit d’un projet relativement sophistiqué dont le prototype est montré sur la Fig.325 qui impose pas mal de documentation. Tout ce qui concerne son développement est fourni dans le sous-dossier <Les programmes Arduino\! Petits PROJETS\BIORYTHMES>. Commencer par ouvrir le document Présentation de l’appareil.pdf qui décrit la liste et l’utilité des divers documents présents dans <BIORYTHMES>. Outre un programme outil pour Arduino (Utilisé pour initialiser des données en EEPROM.) on y trouve <IMAGES> qui contient pas moins de quarante-cinq photographies toutes largement commentées qui ont été saisies durant la réalisation.
La suite est ici.