Débutant: choix de l'Arduino et de capteurs

Bonjour à tous !

Je vous implore car j'ai besoin d'aide pour mon projet de SI. Je suis en terminale et cette année on réalise un projet (par groupe de 3) et mon projet est une poussette berceuse à assistance électrique.

Chargé de la partie informatique/programmation je suis un peu en galère car c'est tout nouveau pour moi :smiley:

J'aurais 2-3 questions à vous poser :

  • Ayant prévu d'utiliser 3 moteurs, 1 capteur d'inclinaison (ou accéléromètre) 1 capteur sonore 1 capteur de fin de course, plusieurs LEDS (5 au moins) et des boutons poussoirs, est-ce qu'une ARDUINO UNO permettrait la connection de tout ce matos ? (6 e/s analogiques et 14 e/s numériques) ou bien devrais me diriger vers une arduino MEGA ? (beaucoup plus d'e/s)

  • En mode automatique, la poussette devrait détecter un angle de 5° environ (où serais je trop optimiste?)J'ai lu qu'on pouvait le faire grâce à un accéléromètre mais si la poussette avance je me demande si les valeurs données par l'accéléromètre ne seront pas faussées... et donc la valeur de l'inclinaison fausse..

Les capteurs d'inclinaison bon marché ont un seuil de détection aux alentours des 15° ce qui est trop grand.. :frowning:

Help please...

Et merci beaucoup d'avance pour l'aide que vous pourrez éventuellement m'apporter :slight_smile:

faut prendre un MPU6050, il fait accelerometre + inclinometre, 16bit, donc je penses qu'il peut faire l'affaire.

J'ai lu qu'on pouvait le faire grâce à un accéléromètre mais si la poussette avance je me demande si les valeurs données par l'accéléromètre ne seront pas faussées... et donc la valeur de l'inclinaison fausse..

En faite, il faut mémoriser l'etat de ton inclinaison simplement et faire abstraction de l'acceleration,

Du coup, si tu fait de bon calculs, normalement il y aura aucune valeur fausse, quelque soit la vitesse, surtout qu'une pousette ne va pas a 20km/h non plus

hazerty565:
En faite, il faut mémoriser l'etat de ton inclinaison simplement et faire abstraction de l'acceleration,

Tu ne peux pas faire abstraction de l'accélération car l'inclinaison se mesure à partir de l'accélération. En gros, quand tu mesures une accélération, tu ne sais pas si c'est une inclinaison ou une accélération continue.
La seule chose qui permet de différencier les deux est un filtre "intelligent": la Rolls, c'est le filtre de Kalman, mais ensuite il est possible d'arriver à des choses intéressantes avec un "filtre complémentaire".

"Sigma" a raison, vous ne pouvez pas dissocier accélération et inclinaison. Le circuit "MPU6050" proposé par "hazerty565" est une solution, c'est-à-dire en terme technique "une centrale ce cap et de verticale" ou plus communément connu sous le nom de "plateforme de stabilisation", ce que vous allez trouver sur toutes les maquettes d'avion, hélicoptère ou drone qui se respecte. Ce capteur comporte des accéléros et gyros 3 axes qui, par un savant bouclage et grâce à un filtre type Kalman va vous donner votre "assiette", c'est-à-dire l'inclinaison du support en "roulis" et "tangage". Gros mots à part : l'inclinaison avant/arrière et latérale.

Je n'en ai jamais mis en œuvre, mais il semble que des bibliothèques font tous ces calculs.

Cordialement.

Pierre

oui les bibliothèques feront le calcul pour vous, donc pas trop de soucis côté Math.

Le MPU6050 se pilote sur le bus I2C donc prends les pins A4 et A5 de votre UNO - même si vous avez l'impression de les voir à côté du bouton reset d'un UNO R3, ce sont les même pins dupliquées.

à quoi servent les 3 moteurs? quels types de moteurs?

J-M-L:
oui les bibliothèques feront le calcul pour vous, donc pas trop de soucis côté Math.

S'il doit y avoir un filtre de Kalman dans le système, il faudra quand même l'écrire...

oui mais ça existe déjà et ici - Kalman filter library par exemple

Un filtre de Kalman générique, ça n'existe pas. Tes liens pointent vers un Kalman qui fonctionne sur le MPU6050 seul et qui fonctionnera aussi sur un truc qui a peu d'accélération. D'ailleurs, un simple filtre complémentaire donne déjà des résultats corrects sur un gyropode. Pas étonnant donc que ce "Kalman" fonctionne sur le gyropode du gars qui l'a développé puisque son Kalman est plus perfectionné qu'un filtre complémentaire.

Mais un vrai filtre de Kalman ressort la combinaison optimale de mesures effectuées sur un système donné et de la simulation de ce même système. Pour faire les choses correctement, il faut donc écrire un modèle du système pour l'intégrer dans le filtre.

Après, toute la question est de savoir s'il est nécessaire de faire les choses dans les règles de l'art ou pas. Vu les contraintes de discrimination de 5° sur l'angle, il sera peut-être nécessaire de faire un "vrai" Kalman (intégrant le modèle de la poussette). Faut voir.

Bon j'ai proposé un MP6050, car c'est un composant classique, ou il y a les deux, ce qui fait un gain de place.
Mais rien n’empêche d'avoir 2 composants différents, étant donner que c'est un lycée, il ne vont pas trop avoir le choix.

Bref, oui dans tous les cas il faut un filtrage pour récupérer les valeurs, mais ça, ca vient après réflexion.
Mais pourquoi faire et refaire la même chose alors que cela existe deja. C'est vrai qu'il existe plein de filtre existant, mais avant de récupérer un programme, il faut essayer de le comprendre et l'adapter a leur projet plus précisément. Et la ça sera sans doute leur prof de math/physique/electronique qui pourront les aider.

est-ce que la poussette "berce" par une inclinaison avant arrière?

comment est géré ce mouvement? est-ce que l'axe de rotation est simplement lié physiquement à des servos? dans ce cas si vous avez de bon servos, vous avez aussi une mesure de l'angle puisque c'est vous qui le contrôlez...

Un filtre de Kalman générique, ça n'existe pas. Tes liens pointent vers un Kalman qui fonctionne sur le MPU6050 seul et qui fonctionnera aussi sur un truc qui a peu d'accélération

oui j'espère que la poussette aura peu d'accélération pour bercer bébé :slight_smile:

J-M-L:
oui j'espère que la poussette aura peu d'accélération pour bercer bébé :slight_smile:

Il y aura peut-être un mode "Vendée Globe" pour habituer le bébé au mal de mer :wink:

J-M-L:
à quoi servent les 3 moteurs? quels types de moteurs?

-> Sûrement 2 moteurs pour l'assistance au roulement de la poussette et 1 pour le bercement

J-M-L:
est-ce que la poussette "berce" par une inclinaison avant arrière?

comment est géré ce mouvement? est-ce que l'axe de rotation est simplement lié physiquement à des servos? dans ce cas si vous avez de bon servos, vous avez aussi une mesure de l'angle puisque c'est vous qui le contrôlez...

-> La valeur de l'inclinaison dont j'ai besoin est purement pour le mode automatique de l'assistance au roulement de la poussette, je ne m'occupe pas du bercement et je n'ai pas besoin de capteurs pour cela. On laisse de côté le bercement pour ce topic ci ^^

Merci à tous pour vos éléments de réponse !

Faut-il "absolument" que j'utilise un MPU6050 qui fait gyro+accelero ? Ou bien un accéléromètre 3 axes basique (tel que le MMA7455 Électronique en amateur: Accéléromètre MMA7455 (et Arduino)) ne suffirait-il pas ?

Et donc à ce que j'ai compris un filtre Kardan à télécharger serait suffisant? Si non comme le dit "3sigma" que faudrait-il que je rajoute ?
Je n'ai vraiment aucune connaissance en programmation arduino (je connais un petit peu Flowcode mais ça s'arrête là) et donc j'ai peur de ne pas réussir à vrai dire... snif

Au fait, l'accélération de la poussette sera assez faible voire quasi nulle car l'activation de l'assistance se fera lors d'une détection de pente donc la poussette était déjà en déplacement auparavant en réalité...à une vitesse de 1m/s environ...

Du coup sauriez-vous combien on peut brancher de capteurs et/ou moteurs (indirectement à l’aide d'interfaces de puissance bien sûr) sur une Arduino UNO ? Me sera-t-elle suffisante ?
Merci encore !

mettez un bouton pour démarrer l'assistance par l'utilisateur/trice... c'est plus simple...

J-M-L:
mettez un bouton pour démarrer l'assistance par l'utilisateur/trice... c'est plus simple...

Je voulais faire un mode automatique et un mode manuel justement pour avoir un peu de quoi faire... mais il est vrai que c'est se compliquer la vie que de mettre un accéléromètre pour connaître l'inclinaison etc... bien que ça soir intéressant...

Vous pourriez mettre juste un petit détécteur inclinaison à bille ça se comporte comme un interrupteur. En Le plaçant comme il faut (plus ou moins incliné) ça peut suffire peut être

Du coup sauriez-vous combien on peut brancher de capteurs et/ou moteurs (indirectement à l'aide d'interfaces de puissance bien sûr) sur une Arduino UNO ?

Contrairement à ce qu'annonce de manière erronée la société Arduino une carte UNO ce n'est pas 14 E/S numériques et 6 entrées analogiques.

C'est :
20 E/S numériques dont 6 d'entre elles ont la particularité de pouvoir aussi faire des mesures analogiques.
C'est quelque peu différent.

Ces 6 E/S particulières sont par défaut en mode numérique. C'est le fait d'appeller la fonction analogRead() qui les fait passer en mode analogique.

Attention les deux premières E/S repérée D0 et D1 sont le plus souvent inutilisables car elles servent à la programmation du micro.

J-M-L:
Vous pourriez mettre juste un petit détécteur inclinaison à bille ça se comporte comme un interrupteur. En Le plaçant comme il faut (plus ou moins incliné) ça peut suffire peut être

Du coup je pourrais prendre un détecteur d'inclinaison de 15°, l'incliner à -12° dans mon montage pour qu'il passe à l'état HAUT à 3° ? C'est possible ça ?

Merci "68tjs" pour cette information, j'espère que la UNO me suffira... sinon une Leonardo peut être mais l'Atmega n'est pas changeable en cas de casse :confused:

NicoSSI:
Du coup je pourrais prendre un détecteur d'inclinaison de 15°, l'incliner à -12° dans mon montage pour qu'il passe à l'état HAUT à 3° ? C'est possible ça ?

Oui mais si tu as une accélération parasite, le détecteur d'inclinaison sera également perturbé: il ne fait pas plus la différence entre l'accélération de la pesanteur et une autre accélération que l'accéléromètre. En revanche, ce sera sans doute plus facile de traiter ce signal parasite: comme l'inclinomètre sort du tout ou rien, il suffit peut-être d'éliminer les impulsions trop courtes.

Maintenant, il y a un moyen de séparer les accélérations des inclinaisons :

  • Les accélérations sont dues à des mouvements parasites ou des mises en mouvement de la poussette. Ces accélérations sont relativement transitoires et de durées très limitées à forte amplitude : sûrement inférieure à la seconde.
  • Les inclinaisons, dues à une pente sont un phénomène plus statique et plus durable.
    Il est donc facile de séparer les deux par un simple filtrage "passe-bas" sur l'information délivrée par les accéléromètres. La constante de temps de filtrage étant à optimiser.

Cordialement.

Pierre

3Sigma:
comme l'inclinomètre sort du tout ou rien, il suffit peut-être d'éliminer les impulsions trop courtes.

ChPr:

  • Les accélérations sont dues à des mouvements parasites ou des mises en mouvement de la poussette. Ces accélérations sont relativement transitoires et de durées très limitées à forte amplitude : sûrement inférieure à la seconde.
  • Les inclinaisons, dues à une pente sont un phénomène plus statique et plus durable.
    Il est donc facile de séparer les deux par un simple filtrage "passe-bas" sur l'information délivrée par les accéléromètres. La constante de temps de filtrage étant à optimiser.

En réalité je pensais à faire une sorte d'acquisition sur un certain laps de temps 4-5s pour éviter que l'assistance se mette en route lorsqu'on incline la poussette pour passer un trottoir par exemple.. est-ce que c'est ce que vous voulez dire par "éliminer les impulsions courtes" en utilisant "un filtrage passe bas" ?

Du coup la meilleur solution serait de prendre un capteur d'inclinaison banal plutôt qu'un accéléromètre non ?

Merci en tout cas vous m'aidez à fond j'en apprends beaucoup :slight_smile: