Outils pour utilisateurs

Outils du site


wiki:projets:matrice-ferofluide

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
wiki:projets:matrice-ferofluide [2014/10/17 21:33]
karang créée
wiki:projets:matrice-ferofluide [2020/10/05 14:37] (Version actuelle)
Ligne 2: Ligne 2:
  
 Nous avons commencé à réparer une matrice d'électroaimants amenées par Vincent. Le but est de l'automatiser avec un arduino et de s'en servir pour contrôler un fluide magnétique. Nous avons commencé à réparer une matrice d'électroaimants amenées par Vincent. Le but est de l'automatiser avec un arduino et de s'en servir pour contrôler un fluide magnétique.
 +
 +=== Test d'un aimant ===
 +
 +Afin de ne pas risquer d'endommager les bobines, qui ont un certain age, nous avons commencé par déterminer la tension maximale d'alimentation.
 +
 +Nous avons mesuré la résistance d'une des bobine et trouvé 23 ohm. Nous souhaitons limiter la puissance à 1Watt. Grâce à la formule P=U²/R, nous déduisons la tension max : 4V.
 +
 +=== Circuit de commande ===
  
 Le circuit est basé sur un driver de leds 7-segments : le [[http://tronixstuff.com/wp-content/uploads/2011/07/nxp-saa1064.pdf|SAA1064]]. Le circuit est basé sur un driver de leds 7-segments : le [[http://tronixstuff.com/wp-content/uploads/2011/07/nxp-saa1064.pdf|SAA1064]].
 +
 +{{ :wiki:projets:saa1064.jpg?300 |}}
  
 Le driver communique en i2c. La première étape est de suivre les pistes pour savoir où connecter l'arduino. Les physiciens de l'UPMC qui ont conçu ce circuit, nous ont simplifié la vie : on trouve sur le bord de la carte, 4 connecteurs femelles correspondant à SCL, SDA, +5V, GND. Le driver communique en i2c. La première étape est de suivre les pistes pour savoir où connecter l'arduino. Les physiciens de l'UPMC qui ont conçu ce circuit, nous ont simplifié la vie : on trouve sur le bord de la carte, 4 connecteurs femelles correspondant à SCL, SDA, +5V, GND.
Ligne 15: Ligne 25:
  
 Là encore les concepteurs du circuit ont rendus cela paramétrable grâce à 3 cavaliers qui réalisent des combinaisons de 3 résistances (10kOhm, 22kohm, 18kohm). On peut déterminer quel cavalier sélectionne quelle adresse avec la formule du diviseur de tension : R2/(R1+R2). Là encore les concepteurs du circuit ont rendus cela paramétrable grâce à 3 cavaliers qui réalisent des combinaisons de 3 résistances (10kOhm, 22kohm, 18kohm). On peut déterminer quel cavalier sélectionne quelle adresse avec la formule du diviseur de tension : R2/(R1+R2).
 +
 +  * 0x70 -> Cavalier 2
 +  * 0x72 -> Aucun cavalier
 +  * 0x74 -> Cavalier 1
 +  * 0x76 -> Cavalier 3
 +
 +Avant de tester sur le circuit de la matrice, nous testons le driver sur un circuit trouvé dans la boîte (surement le circuit d'origine du driver), qui possède 4 afficheurs 7 segments.
 +
 +Nous utilisons le code Arduino suivant:
 +
 +<code=cpp>
 +/*
 +  * Programme de Test pour le projet
 +  * matrice d'electroaimants
 +  */
 +
 +#include "Wire.h" // Bibliothèque I2C pour Arduino
 +
 +byte saa1064 = 0x70 >> 1; // Adresse I2C du driver (le décallage est important)
 +
 +// Codes pour les chiffres de 0 à 9 et les caractères de A à F
 +int digits[16] = {63, 6, 91, 79, 102, 109, 125,7, 127, 111, 119, 124, 57, 94, 121, 113};
 +
 +void setup() {
 +  Wire.begin(); // On lance le bus
 +  delay(500);
 +  initDisplay();
 +}
 +void initDisplay() {
 +  Wire.beginTransmission(saa1064);
 +  Wire.write(B00000000); // Le prochain byte est le byte de contrôle
 +  Wire.write(B01000111);
 +  Wire.endTransmission();
 +}
 +void displayDigits() {
 +  // Affiche les chiffre de 0 à 9 plus les caractères A à F
 +  for (int z=0; z<16; z++) {
 +    Wire.beginTransmission(saa1064);
 +    Wire.write(1); // On envoi des données
 +    Wire.write(digits[z]); // digit 1 (RHS)
 +    Wire.write(digits[z]); // digit 2
 +    Wire.write(digits[z]); // digit 3
 +    Wire.write(digits[z]); // digit 4 (LHS)
 +    Wire.endTransmission();
 +    delay(500);
 +  }
 +  // Affiche les chiffre de 0 à 9 plus les caractères A à F, avec un point
 +  for (int z=0; z<16; z++) {
 +    Wire.beginTransmission(saa1064);
 +    Wire.write(1); // On envoi des données
 +    Wire.write(digits[z]+128); // digit 1 (RHS)
 +    Wire.write(digits[z]+128); // digit 2
 +    Wire.write(digits[z]+128); // digit 3
 +    Wire.write(digits[z]+128); // digit 4 (LHS)
 +    Wire.endTransmission();
 +    delay(500);
 +  }
 +}
 +void clearDisplay() {
 +  Wire.beginTransmission(saa1064);
 +  Wire.write(1); // On envoi des données
 +  Wire.write(0); // digit 1 (RHS)
 +  Wire.write(0); // digit 2
 +  Wire.write(0); // digit 3
 +  Wire.write(0); // digit 4 (LHS)
 +  Wire.endTransmission();
 +}
 +
 +void loop() {
 +  displayDigits();
 +  clearDisplay();
 +  delay(1000);
 +}
 +</code>
 +
wiki/projets/matrice-ferofluide.1413581605.txt.gz · Dernière modification: 2016/09/11 10:50 (modification externe)