[RESOLU] Besoin d'aide pour un simulateur d'hysteresis sous Arduino

Bonjour à tous,

Tout d’abord je suis nouveau sur le forum et c’est mon premier post donc désolé pour les erreurs que je pourrais faire.

Je suis actuellement au Texas dans le cadre d’un stage ingénieur et mon projet est de réaliser un simulateur d’hysteresis sous Arduino.

Le montage est fait, tout marchait bien sur la phase prototype, mais depuis la soudure des composants, les problèmes s’enchaînent et même si j’ai réussi à en résoudre certains, je n’arrive pas à en régler un et je souhaiterais avoir votre aide.

Pour faire court sur le fonctionnement du système, un petit moteur équipé d’un encodeur fait bouger un piston qui pousse un chariot horizontalement dans les deux sens. La position du chariot est donnée par des capteurs à ultrasons envoyée par Bluetooth et la position du moteur est déterminée grâce à l’encodeur. On utilise les deux positions sur un écran LCD pour tracer la figure en temps réel (fonctionnalité que je n’ai pas pu encore implémenter vu mon problème).

Voici des images du système pour ceux qui veulent regarder :



Les capteurs sont sous Arduino UNO et le moteur et l’écran LCD sont contrôlés par une Arduino MEGA 2560 avec un Arduino motor SHIELD

Mon problème est que pendant le fonctionnement du système, il y a une transmission très lente de la position du chariot via Bluetooth et la valeur de la position du piston donnée par l’encodeur prend des valeurs complètement aberrantes, le système fonctionnant entre 5 et 25, la position prend des valeurs complètement folles et ce en plein milieu du trajet parfois, voici l’image :

Je pense qu’il y a un souci respectivement pour les problèmes avec sûrement le bluetooth et l’encodeur, mais sinon je ne sais pas comment régler le problème, j’attache les codes des deux contrôleurs à mon message.

Pour ceux aussi qui auraient une idée pour que j’arrive à tracer la figure complète en affichant tous les points progressivement, je suis preneur.

Merci d’avance pour ceux qui répondront et apporteront leur aide :slight_smile:

Motor.ino (4.74 KB)

Sensors.ino (1.9 KB)

J'ai pas lu tout le code, mais ce n'est pas un problème de dépassement de capacité de tableau ?

int cart_pos[200];
int pist_pos[200];

lesept:
J’ai pas lu tout le code, mais ce n’est pas un problème de dépassement de capacité de tableau ?

int cart_pos[200];

int pist_pos[200];

Merci lesept pour la réponse, et oui c’était bien ça, j’ai mis sous commentaire toutes les lignes de code utilisant les tableaux et le système fonctionne normalement.

Mais si c’est des soucis de tableau, auriez-vous une autre solution ou un moyen pour que je puisse tracer la position en temps réel sur le LCD tout en traçant les points précédents ?

Si c'est un tracé temps réel, tu n'as peut-être pas besoin de garder en mémoire l'ensemble des points précédents : il te suffit de conserver les coordonnées du point juste avant ta mesure actuelle pour tracer le segment qui les relie. Puis tu écrases les précédentes coordonnées par les coordonnées courantes.

En gros en pseudocode :

Tracer_segment (xprev,yprex,xcourant,ycourant);
xprev = xcourant;
yprev = ycourant;

lesept:
Si c'est un tracé temps réel, tu n'as peut-être pas besoin de garder en mémoire l'ensemble des points précédents : il te suffit de conserver les coordonnées du point juste avant ta mesure actuelle pour tracer le segment qui les relie. Puis tu écrases les précédentes coordonnées par les coordonnées courantes.

En gros en pseudocode :

Tracer_segment (xprev,yprex,xcourant,ycourant);

xprev = xcourant;
yprev = ycourant;

D'accord j'essaierai, merci pour les conseils :slight_smile:

Bonjour à tous,

J’ai corrigé le problème des valeurs aberrantes par l’enlèvement des tableaux et pour l’écran LCD j’ai utilisé une matrice faisant la taille de l’écran et chaque élément aurait une valeur “true” pour la figure à tracer, et le tout marche très bien en temps réel.

Le dernier soucis que j’ai viens de la valeur de la position du chariot donnée par les capteurs qui donne des valeurs assez étranges, la valeur augmente ou diminue selon son trajet mais par moments cette valeur passe de 20 à 60 par exemple en l’espace d’une itération et ça fausse toutes les mesures. Et tout ce la arrive après la soudure

Je ne sais pas si c’est un problème matériel ou de programme.

Je vous mets les codes actuels, récemment modifiés.

Auriez-vous une idée de ce qu’il se passe ?

Merci d’avance

Sensors.ino (2.31 KB)

Motor.ino (3.07 KB)