Demande d'aide pour projet STI2D SIN

Bonjour,

Je suis actuellement en Terminale STI2D option SIN cette année.

Comme certains peuvent le savoir, pour conclure sur notre formation de 2 ans, nous avons à réaliser une sorte de TPE (pour que ça puisse parler au plus grand nombre de vous) mais appliqué à la technologie. Ce projet est noté au baccalauréat coefficient 12, autant vous dire qu'il faut que je gagne un maximum de points.

Mon projet porte sur l'étude d'un kart électrique.

Je dois réaliser des mesures en temps réel sur différents paramètres du kart puis les afficher sur un écran LCD grâce à un Arduino.

Je dois mesurer :

  • la tension aux bornes du moteur
  • l'intensité aux bornes du moteur
  • la température du moteur
  • la vitesse du kart

Pour cela, nous devons utiliser un pont diviseur de tension (en ce qui concerne la mesure de tension), un shunt (pour l'intensité), un capteur (peu importe lequel pour la température du moteur) et enfin un capteur inductif (pour la vitesse du kart).

Étant une grosse quiche en ce qui concerne Arduino, je viens vous solliciter pour m'aider à développer mon programme.

Les programmes étant déjà fait pour la tension et la température du kart, je vous demanderai de l'aide uniquement pour les mesures d'intensité et de vitesse.

Pour l'intensité, je sais uniquement que nous devons utiliser un shunt (avec un gros ampérage puisque les batteries délivrent un fort ampérage) qui sera donc une entrée analogique et un capteur inductif (avec un contact à l'intérieur qui se déclenche en présence d'un aimant devant le capteur) qui sera une entrée TOR pour Arduino.

À ce stade-ci, je ne sais absolument pas comment développer mon programme pour ces mesures...

C'est pour cela que je viens solliciter votre aide..

Serait-il possible de me donner des pistes et ensuite échanger sur une "alpha" d'un programme.

Merci de votre aide d'avance,
Arthur CORRÉ

arthurcorre_:
...

Je suis actuellement en Terminale STI2D option SIN
...
Serait-il possible de me donner des pistes ...

la 1ere piste

D'une tu as ton projet depuis quand?? 3 jours ? 6mois?

que tu soit une quiche pour un coeficient 12, c'est pas au dernier moment qu'on s'investi...

Tu as dit que tu avais deja fait une partie pour la temperature et la tension c'est bien... montre ton programme

Pour connaitre l'amperage, c'est pas compliqué, un shunt delivre une tension ( en mV) donc c'est le meme principe que la tension que tu mesure, sauf qu'il faut amplifier ton signal avec un AOP pour qu'il fasse une mesure differentiel entre les deux bornes et amplifier

Tout depend de ton shunt, mais si tu as un shunt 100A 100mV( par exemple)
as tu deja mesurer avec un multimetre en millivolt metre?

Par exemple pour une mesure de 0.045/0.001=45, ca te donne le courant mesuré soir 45A...

Pour la vitesse, si tu as un aimant, il te faut un capteur effet hall, et compter le nombre de tour...
Sur internet tu as plein d'exemple avec un capteur effet hall...

Pour la température du moteur, il faudrait connaitre la page de température à mesurer pour choisir le capteur à utiliser. Un DHT22 mesure entre -40°C et 80°C, mais le moteur monte peut-être plus haut... Un LM35 sera plus adapté. Une sonde PT100 possède une plage de mesure bien plus large.

Tout dépend de ce dont tu disposes... Dans tous les cas, je te conseille (comme tu as peu de temps) de faire les choses une par une et de les faire marcher indépendamment. Ne pas se lancer dans une usine à gaz qui fera tout à la fois et qui sera très dure à débuguer ensuite.

Nooooon, je n'arrive pas à le croire !
Une orthographe impeccable, il y a même les accents circonflexes ! En terminale, on croit rêver ! :slight_smile:
Sincères félicitations Arthur, ça fait plaisir.

Bonjour,

Tout d'abord je suis agréablement surpris par votre réactivité sur ce forum !
Je ne pensais pas avoir aussi rapidement de réponses....

Pour répondre à chacun d'entre vous, je vais m'adresser personnellement à chacun d'entre vous par @XXXX (XXXX désignant votre pseudo bien-sûr).

@hazerty565

En effet, mon projet a commencé début décembre dernier, il est vrai que je me réveille au dernier moment.. Etant grand procrastinateur professionnel, j'ai tendance à tout remettre à plus tard, ce qui peut me porter préjudice très rapidement.. D'où le post.....

Alors voici mon programme pour l'acquisition de la température :

const int thermistance_capteur = A5; // Le capteur est branché sur l'entrée analogique A5
int valeur_thermistance_capteur = 0; // Déclaration puis initialisation de la variable pour récupérer la grandeur (tension proportionnelle) de sortie du module.
int valeur_température = 0; // Il faut peut être mettre un type float si nombre réel

// Test
int x=0;
int y=100;

void setup() {
  // put your setup code here, to run once:
pinMode (thermistance_capteur, INPUT);
Serial.begin(9600) // Déclaration du moniteur série et initialisation de sa vitesse de transfert à 9600 bits/s (ou Bauds).
}

void loop() {
  // put your main code here, to run repeatedly:
valeur_température = map(valeur_thermistance_capteur, 0, 1023, x, y) // x et y sont les extrémités de la plage de température du capteur
valeur_thermistance_capteur = analogRead (thermistance_capteur); // Lecture de la valeur du capteur (grandeur analogique, tension qui varie en fonction du temps, proportionnel à la température du moteur)
Serial.println("La valeur en sortie du module thermistance est de : ");
Serial.print(valeur_thermistance_capteur);
Serial.print(" Volts");
Serial.println("La valeur de la température est de : ");
Serial.print(valeur_température);
Serial.print(" °C");
}

Enfin, voici le programme pour l'acquisition de la tension aux bornes du moteur.
(il s'agit d'un pont diviseur de tension)

// Déclaration variables
int mot = 1;
float capacite_mot = 0;
float tension_mot = 0;

void setup() {
// Déclaration du pin A1 en entrée
pinMode (A1, INPUT);
Serial.begin(9600); // Déclaration d'un moniteur série avec un taux de transfert de 9600 bits/s (ou Bauds) 
}

void loop() {
// Boucle
capacite_mot = analogRead(A1); // Lecture de la valeur de la tension lue en entrée et affectation de cette valeur à la variable capacite_mot
tension_mot = capacite_mot*(12.0/980.0); // Calcul pour obtenir la tension du moteur
Serial.print("La valeur de la capacité du moteur est de : ");
Serial.println(capacite_mot); // println pour le retour à la ligne
Serial.print("La tension du moteur est de : ");
Serial.print(tension_mot);
Serial.println(" Volts "); // println pour le retour à la ligne
delay(1000);
}

Pouvez-vous vérifier si ces deux programmes collent à l'objectif du projet ?

Je vais tenter d'en savoir plus sur les informations techniques du shunt car, à vrai dire, mon professeur ne m'a jamais donné le capteur entre les mains, ni ses caractéristiques techniques... Je vais revenir vers vous dès que j'en saurai plus !

J'ai déjà effectué pas mal de mesures avec l'ampèremètre, pas de soucis pour ça...

En ce qui concerne la vitesse maintenant, comme vous l'avez dit, je vais me débrouiller avec que le forum propose à ce sujet. Cependant, une question subsiste, comment faire pour convertir des tr/min en km/h (plus exploitable) ?

Merci de ton aide.

@lesept

Il me semble que nous utilisons un LM35. Le capteur nous a été imposé, peux-tu vérifier si mon programme colle avec ce capteur ?

Merci de ton aide également !

@biggil

Bonjour, merci à toi de tes compliments.

L'orthographe a toujours été mon point fort à l'école ! :slight_smile:

Bonne journée à vous.

Pour passer de vitesse angulaire en vitesse linéaire, tu multiplies par le rayon de la roue

V = R . Omega

Pour ton code de température, il faut mettre le analogread avant le Map (les bœufs avant la charrue)

@lesept

Voici mon nouveau programme pour la mesure de la température avec un LM35.

// On déclare les variables
float volt;
float temperature; 

void setup()
// Fonction qui s'éxécute une seule fois au démarrage, ou après un reset
{
  Serial.begin(9600); // On initialise le moniteur série et sa vitesse de transfert à 9600 bits/s (ou Bauds)
}

void loop()
// Fonction qui s'éxécute en boucle, une fois la fonction void setup() éxécutée
{
   volt = analogRead(A0); // On lit les données du capteur sur le port analogique A0
   volt = 5*volt/1023; // On calcule le voltage
   temperature = volt/0.01; // On calcule la température à partir du voltage
   Serial.println(temperature); // On affiche la valeur
   delay(1000); // On crée un délai pour permettre la lisibilité des valeurs
}

Y a t’il des erreurs dans le code ?
Celui-ci doit marcher à 100% ?

Merci :slight_smile:

Hello
il est préférable de faire plusieurs mesures et d'en faire la moyenne après avoir jeté la première

Je dirais plutôt

byte volt;
float temperature;

...


   volt = analogRead(A0);             // On lit les données du capteur sur le port analogique A0
   temperature = 5.*volt/1023.0/0.01; // On calcule la température à partir du voltage

Voire même

   temperature = 500.*volt/1023.0; // On calcule la température à partir du voltage

Bonjour !

@lesept

Merci de votre aide, je vais dès à présent tenir compte des modifications !

@hazerty565

Je reviens vers vous car j'ai trouvé les caractéristiques du shunt !
Il s'agit d'un shunt 200A 50mV.

Pouvez-vous m'indiquer ce que je dois faire précisément dans mon code, car je ne sais absolument pas comment faire ?

Je sais que je dois faire une conversion (CAN) du signal d'entrée qui est une tension en mV en intensité qui sera en A.

Pour rappel, je dois relever l'intensité aux bornes du moteur grâce à un shunt, et ensuite l'afficher sur un écran LCD.

Je ne maîtrise pas du tout le C.....

Merci de votre aide, d'avance,

Bonne journée.

Rebonjour à tous,

Je me permets de renvoyer un message sur le forum, afin de vous demander si mon programme qui consiste à faire l'acquisition d'une tension à l'aide d'un pont diviseur de tension tient la route.

Je vous glisse le code ici :

// Déclaration variables
int mot = 1;
float capacite_mot = 0;
float tension_mot = 0;

void setup() {
pinMode (A1, INPUT); // Déclaration du pin A1 en entrée
Serial.begin(9600); // Déclaration d'un moniteur série avec un taux de transfert de 9600 bits/s (ou Bauds) 
}

void loop() {
// Boucle
capacite_mot = analogRead(A1); // Lecture de la valeur de la tension lue en entrée et affectation de cette valeur à la variable capacite_mot
tension_mot = capacite_mot*(12.0/980.0); // Calcul pour obtenir la tension du moteur
Serial.print("La valeur de la capacité du moteur est de : ");
Serial.println(capacite_mot); // println pour le retour à la ligne
Serial.print("La tension du moteur est de : ");
Serial.print(tension_mot);
Serial.println(" Volts "); // println pour le retour à la ligne
delay(1000);
}

Ce programme mérite-il d'être perfectionné ou ça devrait le faire ?

Qu'en pensez-vous ?

Bonne journée à nouveau.

il faut utiliser au borne de ton shunt un amplificateur differentiel entre les deux points
un gain x100 etant donné que tu va mesurer des millivolt et l'amener en 0/5V. qui sera une image de ton courant, 0V pour 0A et 5V pour 200A

PAr la suite, c'est juste une mesure de tension classique dans ton programme comme tu l'a fait

du style :

var_float= analogRead(Ax);

et pour convertir en courant, il faut reconvertir ton pont de mesure.

Des infos ici et pour une mesure précise ici