Show Posts
Pages: [1] 2 3
1  International / Français / Re: ordi de bord on: October 22, 2013, 09:24:23 pm
Alors c'était pas moi, je ne connais pas ce montage. Le moyen simple d'utiliser une CTN avec un arduino c'est de l'intégrer dans un diviseur de tension a résistances.  en gros tu mes un résistance en série avec ta sonde, le fil a la jonction des deux retourne a l'arduino. La tension sur ce fil changera avec la résistance de la sonde.
2  International / Français / Re: ordi de bord on: October 21, 2013, 09:59:15 pm
beau travail content de voir le projet fini, c'est plutôt rare de voir la fin.

j'avais posté des schémas de câblage??
3  International / Français / Re: Accelerometre MMA7361 on: September 30, 2013, 09:51:43 pm
J'ai fait un mix entre ton code et celui que j'utilise pour mon capteur, fait un essai et dit nous si ça fonctionne.

Code:
int x,y,z;
float vx, vy, vz, gx, gy, gz;
int Gx, Gy,Gz;

int LedD=7;
int LedG=6;
int LedA=5;
int LedB=4;
int LedM=3;

boolean Centre x= true;
boolean Centre y= true;

void setup()
{
  Serial.begin(9600);
  analogReference(EXTERNAL);
 
  pinMode (LedD, OUTPUT);
  digitalWrite(LedD, LOW);
 
  pinMode (LedG, OUTPUT);
  digitalWrite(LedG, LOW);
 
  pinMode (LedA, OUTPUT);
  digitalWrite(LedA, LOW);
 
  pinMode (LedB, OUTPUT);
  digitalWrite(LedB, LOW);
 
  pinMode (LedM, OUTPUT);
  digitalWrite(LedM, LOW);

}


void loop()
{
  // Read in accelerometer values
  x = analogRead(A0);
  y = analogRead(A1);
  z = analogRead(A2);
 
  vx = (x*3.3/1023)-1.65;
  gx = vx*10/8;
  Gx=gx*100;
  gx=Gx/100;
  vy = (y*3.3/1023)-1.65;
  gy = vy*10/8;
  Gy=gy*100;
  gy=Gy/100;
  vz = (z*3.3/1023)-1.65;
  gz = vz*10/8;
  Gz=gz*100;
  gz=Gz/100;
 
  Serial.print("vx=");
  Serial.print(gx,DEC);   
  Serial.print("  ");
  Serial.print("vy=");
  Serial.print(gy,DEC);   
  Serial.print("  ");
  Serial.print("vz=");
  Serial.println(vz,DEC); 
 //axe X
if(Gx>10)
   {digitalWrite(LedD, LOW);
     digitalWrite(LedG, HIGH);
    Centre x=false;
    }
 
else if(Gx<-10)
   {digitalWrite(LedG, LOW);
    digitalWrite(LedD, HIGH);
    Centre x=false;
    }
else{
     Centre x=true;
     digitalWrite(LedG, LOW);
     digitalWrite(LedD, LOW);
     } 

//AXE Y
if(Gy>10)
   {digitalWrite(LedB, LOW);
     digitalWrite(LedA, HIGH);
     Centre y=false;
     }
 
 else if(Gy<-10)
   {digitalWrite(LedA, LOW);
     digitalWrite(LedB, HIGH);
    Centre y=false;
    }
else{Centre y=true;
    digitalWrite(LedA, LOW);
    digitalWrite(LedB, LOW);
    }
 //CENTRE
if (Centre x ==true && Centre y==true)
    {digitalWrite(LedM, HIGH);}

  delay(200);
 
}
4  International / Français / Re: Accelerometre MMA7361 on: September 29, 2013, 10:09:37 pm
Merci pour le lien, je cherchais un Gyroscope + accéléromètres depuis un moment et j'ai trouvé mon bonheur.

Dans le programme que je vois en suivant le lien il se contente de lancer 3 analogRead, il ne fait pas la conversion en G.
Il y a 3 ou 4 étapes a suivre si tu n'utilise pas la librairie:
1- lire les valeurs d'input des signaux analogiques, l'arduino obtient une valeur entre 0 et 1023, (valeur 10bits).
2- convertir cette valeur en volt et y soustraire le voltage a 0G (donné dans la datasheet, 1,65v pour le mien).
3-convertir le voltage en G grâce a la résolution choisie, a savoir 800mV/G pour la résolution à 1,5G.
jusque la toutes ces étapes sont dans le code que j'ai posté au début.

4-réduir la valeur en G a 2 chiffres significatif, si le reste n'est pas utile.
5  International / Français / Re: Accelerometre MMA7361 on: September 29, 2013, 01:04:58 pm
visiblement on a pas le même circuit pour le MMA, celui que j'ai, vient de la boutique Semageek. il a un régulateur 3.3v embarqué qui fourni du 3.3v sur une des pin du mma. Je suppose que tu a celui qui a six pin de chaque coté du circuit?

Donc pour commencer, vérifie dans la datasheet qu'il y a bien une pin qui fournie du 3.3v. Ensuite la pin AREF ne sert pas a alimenter le mma, mais permet a l'arduino de savoir a quel est la tension de fonctionnement du capteur. Ça permet d'améliorer la précision. Si tu n'a pas de sortie 3.3v sur le mma utilise celle de l'arduino.

Edit: si tu as bien le mma avec 6pin de chaque coté, je viens de voir que certain n'ont pas la sortie 3.3v donc il faut prendre celui de l'arduino.


Les condensateurs ne sont pas nécessaire pour faire marcher le capteur. Ils permettent seulement de filtrer un peu le signal de chaque axe, et d'avoir une valeur en G plus stable.  
6  International / Français / Re: Accelerometre MMA7361 on: September 29, 2013, 11:07:19 am
Jolie timing, j'ai u des difficulté avec le même accéléromètre il y a une semaine,  smiley-lol . Alors le MMA7361 renvoi un signal analogique pour chaque axes x y z, avec une valeur 1.65V à 0G. Il faut ajouter un condensateur sur chaque sortie x y z pour réduire les fluctuations du signal, pour ma part un 1uf. Ensuite il faut brancher la sortie 3.3v du MMA au AREF du UNO via une résistance 10K ohms au moins.
voila le code de base que j'ai utilisé, il affiche les valeur de G dans le moniteur série.

Code:
int x,y,z;
float vx, vy, vz, gx, gy, gz;


void setup()
{
  Serial.begin(9600);
  analogReference(EXTERNAL);    //set aref to 3.3v, if you use built in 3.3v for value, use a 15K resistor to limit current
}


void loop()
{
  // Read in accelerometer values
  x = analogRead(A0);
  y = analogRead(A1);
  z = analogRead(A2);
  
  // Convert ADC values to voltages and G values
  // The formula for voltage conversion is v = (ADCREAD*VREF/1023)-ZGV, where ZGV is "Zero-G voltage" (voltage at 0G)
  // ZGV is found in the spec sheet and happens to be 1.5 in our case.  Warning: you need to make the variable signed!
  // The formula for G conversion is g = v/SENSITIVITY.  The sensitvity is also found in the spec sheet and happens to be 800 mV/g here.
  // Remember to make your units consistent! (g = v[V]*1000 / SEN [mV] )
  vx = (x*3.3/1023)-1.65;
  gx = vx*10/8;
  vy = (y*3.3/1023)-1.65;
  gy = vy*10/8;
  vz = (z*3.3/1023)-1.65;
  gz = vz*10/8;
 
  Serial.print("vx=");
  Serial.print(gx,DEC);   // delet the dec?
  Serial.print("  ");
  Serial.print("vy=");
  Serial.print(gy,DEC);   //delete the dec?
  Serial.print("  ");
  Serial.print("vz=");
  Serial.println(vz,DEC);   //delete the dec?
  
  delay(500);
  
}


Ou alors regarde cette librairie MMA7361 pour Arduino :
https://code.google.com/p/mma7361-library/
7  International / Français / Re: Mesure de fréquence avec Arduino (timers ?) on: September 19, 2013, 10:05:14 pm
Tu peux aussi utiliser un convertisseur fréquence tension comme le LM331, le montage est relativement simple et détaillé ici.
8  International / Français / Re: Télémetrie sur un karting on: September 10, 2013, 10:24:46 pm
salut, encore un projet intéressant, as tu une idée des composants que vas utiliser?
9  International / Français / Re: Bande LED 12V on: August 25, 2013, 12:41:23 am
salut, tu peux nous en dire plus sur tes bandes a led, ce que tu veux faire et quel est ton problème. normalement le tlc5940 est fait pour piloter des leds donc je vois pas ce qui t’inquiète.
10  International / Français / Re: ordi de bord on: August 25, 2013, 12:31:47 am

mais dans l'absolu, tu ne gagneras que qqs µs, c'est surtout utile quand tu dois gérer des phénomènes rapides, ou savoir réagir vite à une capture, or les t° ne varient pas si vite, il y a une certaine inertie thermique dans un moteur, pas comme dans un proc qui peut passer de 45 à 60°C en qqs s (ce qui est déjà lent pour l'électronique même si c'est rapide pour nous)

bye

En faite c'est pas pour le capteur de température qu'il faut gagner des µs mais pour la boucle complète, il faut vraiment optimiser le code de chaque sonde et le traitement de son signal. C'est toujours dans le but de pouvoir rafraichir les tr/min le plus souvent possible, et avoir un affichage plus fluide sans perdre d'informations.     
11  International / Français / Re: ordi de bord on: August 24, 2013, 12:03:58 pm
je ne suis plus totalement sure, mais il me semble que, si tu utilise des else if quand tu détermine les valeurs de quadran, ça peut éviter la lecture des else if suivant celui où la condition est validée. ça peut faire gagner du temps d’exécution, si tu place les conditions correspondants à la température de fonctionnement du moteur au début de la liste. Vue que le moteur chauffe en quelques minutes pas la peine que les lignes de code pour les températures en dessous de 70 degrés soit lue en premier.


si tu copie colle le code, pense a retirer la fonction map dans int quadran= map(temp_in,220,756,0,4);  elle ne sert plus a rien.
12  International / Français / Re: ordi de bord on: August 24, 2013, 08:51:06 am
Tu donnes 7 valeurs a quadran mais tu n'utilise que 5 case. Du coup, les valeurs de temps_in sont en dehors de celle que tu cibles dans les map de tes case.
13  International / Français / Re: ordi de bord on: August 24, 2013, 06:25:20 am
Salut, je vois que vous avez bien bossé pendant que je roupillais.

Vous êtes sur la bonne voie ... mais vous oubliez un détail : vous disposez d'une table avec des valeurs ... utilisez-la !

Je n'ai jamais utilisé les tables, tu peux m'en dire un peu plus?


super beau boulot, tu n'a plus qu'a faire chauffé la friteuse pour les dernières mesures.
14  International / Français / Re: ordi de bord on: August 24, 2013, 03:21:36 am
en fait non c'est pas ça, enfin peu etre qu'on pense pas a la même chose. Dans le code que j'ai mis, disons que tu découpes la courbe de la ctn en 10 portions. La fonction map, effectuée pour trouver quadrant, sert a savoir dans quels portions ce trouve la valeur lue dans l'analogRead. Et une fois que l'on sait ça, on peut appliquer la formule pour passer de la tension lue a la valeur en degré, mais avec une modification pour ce rapprocher de la valeur réel. Dans ce cas la il y aurai 10 case.
15  International / Français / Re: ordi de bord on: August 24, 2013, 02:47:58 am
a oui effectivement ça pourrai marcher. En associant une Switch case avec un map il y peut etre moyen de fractionner la courbe de la ctn et d'appliquer une formule ou une autre map a la valeur lue avec l'analogRead. Par exemple dans le code en dessous la courbe est fractionnée en 4 mais plus tu ajoute de case plus tu affines le résultat.

Code:
void loop() {
 int sonde;
 int temp_val=0;
 int temp_in=analogRead(sonde);
 int quadran= map(temp_in,0,1023,1,4);// donne la portion de courbe ou ce trouve la valeur
 
 switch(quadran)
 {
  case 1:
  temp_val=10;//metre la formule ajuster a la portion de courbe
    break;
 
 case 2:
 temp_val=20;//metre la formule ajuster a la portion de courbe
    break;
   
    case 3:
    temp_val=30;//metre la formule ajuster a la portion de courbe
    break;
   
    case 4:
    temp_val=40;//metre la formule ajuster a la portion de courbe
    break;
 
}
 
}
Pages: [1] 2 3