1 Dernière modification par benoit (07-11-2012 22:05)

Sujet : Levitation électromagnétique

Bonjour,
   Je suis en prépa et ai demandé à la rentrée l'aide de Pobot, qui m'a depuis bien aidé smile; J'ai proposé en réunion de créer un topic pour présenter mon projet et me permettre de poser des questions le concernant, chose due chose faite wink

   Voilà, j'ai pour projet d'école de recréer un de ces petits systèmes que l'on voit un peu partout: le globe flottant, ou plutot lévitant, qu'on trouve dans le commerce.
Pour cela, la solution génerale requiert de se servir de l'électromagnetisme et surtout de l'électronique.

     Sur le principe:  on fait traverser un courant dans un électro-aimant afin de créer un champ magnétique et d'attirer un petit objet (à priori un fer doux) sous celui-ci. Ensuite, on module le courant afin que tantot, l'él-aimant attire le métal, tantot il le répulse (ou le laisse tomber) afin de garder la distance él-aimant==>objet constante.  Comme une photo vaut mieux que de longs discours:
(rien compris à l'insertion d'image, je joins la photo par lien web):
http://www.instructables.com/id/Electromagnetic-Floater

     Je joins en plus de ce site quelques autres sites où ce projet a déjà été réalisé, en numérique ou en analogique:

http://zeltom.com/products/magneticlevitation
http://coilgun.info/levitation/
http://uzzors2k.4hv.org/index.php?page= … levitation

      Voulant suivre une démarche progressive, expérimentale et enrichissante, j'ai choisi, avec l'aide de très bon conseils,  de réélaborer le système dans son intégralité et d'éviter au plus possible un large copier-coller de la toile.

      Et pour cela, je compte bien sur ce forum pour obtenir une aide bienvenue sur tous les probèmes que je vais rencontrer! (et qui me permettront d'arreter de flooder la boite mail de Julien wink )

       Pour le moment,  le materiel que m'a prêté pobot, à savoir un arduino (que je découvre), un capteur sharp et un servomoteur me donnent plutot matière à réflexion.  L'exercice conseillé étant dans un premier temps d'élaborer un programme sur l'arduino,  qui permettrait de modifier l'angle de position du servomoteur en fonction de la distance au capteur.
       Plus tard, j'éspere étendre le concept à un matériel plus spécifique, comme un électroaimant à la place du servo, un capteur de lumiere, voir un capteur hall (mesure le chp magnétique) pour le capteur sharp, etc.  (et donc de modifier le courant en fct de la position de l'objet lévitant)

       J’espère avoir été suffisamment clair! Maintenent,  je risque de ne pas tarder avant de poser mes premieres questions smile  Dès que je sais comment joindre des photos, j'en profiterai pour décrire l'évolution de mon projet.

merci !

benoît

2

Re : Levitation électromagnétique

bonjour,
voici mon premier programme arduino censé faire tourner le servomoteur en fonction de la luminosité lue par le capteur sharp, élaboré sans connaitre toutes les fonctions du logiciel. Le moteur tourne effectivement mais... on comprend pas trop ce qu'il fait ! Si quelqu'un a le courage de reprendre ce programme et de m'expliquer quelles parties sont stup*** ou simplifiables, il est le bienvenu! merci de votre aide

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include <Servo.h>
#define INCR  1

Servo servo1;


int capteursharp =0 ;                //on initialise le capteur à 0
int led1=13;
int lum1=0;
int angle = 0; 
int sens = 0;


void setup() {                       
  servo1.attach(8);
Serial.begin(9600);
  pinMode(led1,OUTPUT);
}

void loop () {                                        //on voulait faire tourner le servomoteur en fction de la luminosité et observer les valeurs sur le port série

  int sensorValue = analogRead(A0);                     
   float voltage = sensorValue * (5.0 / 1023.0);           // Ces 3 lignes sont là pour afficher les valeur de la tension sur le port série
   Serial.println(voltage);
 
  lum1 = analogRead(capteursharp);                           
  digitalWrite(led1,HIGH);                                     // on utilise la LED juste pour comparer et observer un résultat en cas de problème
  analogWrite(8,600);                                          // le servo, relié à la pin 8, est stable à la valeur 600
  delay(lum1);
  digitalWrite(led1,LOW);
  delay(lum1);
 
}"
+++++++++++++++++++++++++++++++++++++++++

3

Re : Levitation électromagnétique

a cela, Julien, sur le même sujet à crée ce programme (qui marche du feu de dieu, en 3 lignes):

++++++++++++++++++++++++++++
#include <Servo.h>
Servo servo;

void setup()
{
  Serial.begin(9600);
   analogReference(EXTERNAL);
   servo.attach(9);
}

void loop()
{
  Serial.println(analogRead(0));  //valeur lue sur le port analogique 0 (pas A0?), affiché sur le lecteur 1023 bits
 
   servo.write(map(analogRead(0),0,900,0,180));
   
   digitalWrite(13,HIGH);
   delay(200);
   digitalWrite(13,LOW);
   delay(200);
}
++++++++++++++++++++++++++++++++++

quelques incertitudes lexicales, cependant :
*y'a pas de variable? celles ci sont inutiles ici? même pas un petit "int sensorvalue(analogread)" ou "int capteurSharp=...(0)"??

*la commande map: elle fixe la valeur 0 degré du servo pour une position a 0 sur le port série, et une à 180 degré pour le max (ou 900 par ex). Pourrais-je aussi fixer un courant ou une tension en fonction de cette entrée?

*confirmation? la led clignote bien toutes les 200ms, ce qui permet de lancer une nouvelle acquisition toutes les 4OOms? Y a t-il un temps limite interboucle avant de voire l'arduino émettre un léger fumet peu alléchant?

re merci!!

4

Re : Levitation électromagnétique

Y a t-il un temps limite interboucle avant de voire l'arduino émettre un léger fumet peu alléchant?

Pas de risque. Même en tournant "à vide" (ie boucle vide), ça ne fumera pas.

Il y avait dans les temps reculés des cas de machine qui ont fumé par surcharge, mais ils s'agissait de calculatrices scientifiques HP  qui ne supportaient pas qu'on les chargent trop, notamment avec une boucle très rapide. En ces temps reculés (je te parle là de la fin des années 70) il y avait effectivement un petit pgm qui permettait à ceux qui avaient de quoi s'en racheter une autre (quand on sait qu'à l'époque cela correspondait à quelque chose dans nos 500 Euros actuels pour une calculatrice) de faire griller leur HP.

5

Re : Levitation électromagnétique

Tu peux aller voir un projet de lévitation avec un contrôle analogique via un capteur a effet hall.
http://www.supermagnete.fr/project398

6

Re : Levitation électromagnétique

Wahou! C'est le premier systeme anologique aussi simple que je rencontre sur la toile, merci pour le lien!
3 questions tout de même (deux de bon sens et une de cours^^) :

- pourquoi l'objet qui lévite est forcément un aimant? avec l'électroaimaint placé au dessus, un simple morceau de fer devrait aussi leviter non?

- Pourquoi le gars qui a fait ce systeme a ajouté un aimant au dessus de l'electroaimant?

- sur le schéma électronique, quel est le montage de l'AO?

ce gars là a l'air de s'être regalé avec son montage smile

7

Re : Levitation électromagnétique

benoit0 a écrit:

- pourquoi l'objet qui lévite est forcément un aimant? avec l'électroaimaint placé au dessus, un simple morceau de fer devrait aussi leviter non?

Pour l'avoir fait quand j'étais ado (soit dans les années 70...) il n'y a aucune obligation d'utiliser un aimant, et un simple taille-crayon globe terrestre en métal flotte tout aussi bien wink

En fait l'utilisation d'un aimant permet d'utiliser un capteur à effet Hall comme capteur de position de l'objet en lévitation. Lorsque l'aimant se rapproche du capteur, le signal généré par celui-ci se modifie et donc on peut exploiter cette variation pour l'asservissement

benoit0 a écrit:

- Pourquoi le gars qui a fait ce systeme a ajouté un aimant au dessus de l'electroaimant?

Bonne question. Je me le demande aussi.

benoit0 a écrit:

- sur le schéma électronique, quel est le montage de l'AO?

Il a l'air d'être monté en comparateur.

Par contre il y a un truc qui m'intrigue : vu que le capteur à effet Hall est sensible au champ magnétique créé par la bille, comment est pris en compte le champ magnétique généré par la bobine, sachant que celui-ci varie en permanence ? La réponse serait-elle au niveau de la liaison (via condensateur) du point chaud de la bobine avec l'entrée négative de l'AOP ?

8 Dernière modification par denis (21-12-2012 17:23)

Re : Levitation électromagnétique

Bonjour,
Comme benoit, je suis en deuxième année de prépa, et je travaille en parallèle avec lui sur le même projet!
Donc, voila, juste je présente le résultat de mon boulot sur le capteur hall prêté par le club :

Le programme utilisé :

const int hall = 0;
const int led= 9;
int magn = 0;   

void setup ()  {
  pinMode(hall,INPUT);     // le capteur est en entrée
  pinMode(led,OUTPUT);
  Serial.begin(9600);
}
void loop() {
magn = analogRead(hall);   // on récupère la valeur du capteur en analogique (0->1023)
     if (magn<=250, magn>=200) digitalWrite(led,HIGH);
     else  digitalWrite(led,LOW);     //boucle 'if' de condition : le moteur tourne/la led s'allume si 'magn' est compris entre 200 et 250
  Serial.println (magn);   // on lit la valeur sur le moniteur

}

Ce programme marche aussi en digital, avec donc juste "0" ou "1", il est fait pour ça je crois au départ!
Ce que j'obtiens, c'est au départ, des résultats assez précis, bien sensibles à la présence de l'aimant, mais dans une seconde partie des dérèglements. Deux possibilités : soit les branchements du capteur étaient trop fragiles, ils tenaient mal et pouvaient se décoller, soit le capteur est trop sensible aux phénomènes magnétiques extérieurs... Avez-vous une idée de cette sensibilité?
Au vu de mes résultats, le capteur hall tel quel n'est pas la meilleure solution, et il sera intéressant de comparer avec d'autres types de capteurs!

Merci!

9

Re : Levitation électromagnétique

Bonjour et merci de partager ce résultat.

Guy nous a fait une démonstration en réunion que le champ magnétique variait rapidement au cours du temps.
L'autre piste est que le capteur Hall soit perturbé après plusieurs aller/retour : n'y a-t-il pas une notice technique (datasheet) de ce composant ou d'un autre similaire qui expliquerait ce qu'il faut faire ? Mettre la patte en sortie à niveau bas de temps en temps (toutes les secondes par exemple) avant de la remettre en entrée ? Pour une "mise à la masse" qui fasse reset. Il y a peut être des manières plus académiques de le faire... ou alors ça sert à rien et je me trompe smile

++
Julien.

10

Re : Levitation électromagnétique

Le capteur se trouve baigné dans une soupe magnétique résultant de la superposition de deux champs : celui de l'électro-aimant et celui de l'aimant en lévitation. Comme de plus la topologie et la distribution du second champ est instable par nature car l'aimant en lévitation se balade de manière plus ou moins non contrôlée dans un certain volume, ça ne doit pas être évident d'arriver à trouver un modèle de tout cela qui permette de définir un asservissement stable.

Une suggestion concernant une cause éventuelle de la divergence du dispositif : n'y aurait-il pas dans le dispositif des éléments qui finiraient par se magnétiser, qui viendraient modifier le champ magnétique résultant et donc perturber l'asservissement ?

D'ailleurs, pourquoi tout le monde utilise un capteur Hall ? Pourquoi pas une barrière lumineuse par exemple ? J'ai l'impression que le capteur Hall est utilisé de la même manière, puisque dans les exemples de codes cités, on travaille au bout du compte en tout ou rien. Si encore on avait utilisé une loi de contrôle analogique, en modulant le champ magnétique en fonction du signal analogique de sortie du capteur par exemple j'aurais pu comprendre, mais là je ne vois pas ce qu'il apporte.

L'utilisation du capteur Hall n'est-il pas une conséquence de l'effet Amonbofis (1), aka "on a toujours fait comme ça", ou "tout le monde fait comme ça" ?

Eric

(1) pour ceux qui ne savent pas qui est Amonbofis et ce que signifie mon allusion, (re)lire Astérix et Cléopâtre wink

11

Re : Levitation électromagnétique

aaaa j'ai enfin retrouvé mon code (je sais, c'est tjrs à cause d'une excuse minable qu'on s'absente longtemps...^^).entre temps d'autre deviennent celebre et passent à la télé!!! =)Vis à vis des capteurs, on avait choisi le capteur hall, car c'est

12

Re : Levitation électromagnétique

Argh !! Tu as été victime du bug du double quote (guillemet ") qui est toujours très gênant. Ton message a été tronqué.

Désolé, il n'a jamais été résolu et cela peut être décourageant. Je t'invite à reprendre ton message.

13

Re : Levitation électromagnétique

haha!! oui j'ai vu, et je suis plutot deg^^
il manque une vingtaine de ligne, ca m'apprendra. Toujours sauvegarder ses saisies en cours!!
dans mon empressement, j'ai oublié cette règle d'or.
désolé si je m'étend moins :

La capteur hall est aux premiers abords moins chers. Et comme on l'a étudié en classe, c'était l'occasion de montrer qu'on connaissait le cours. Mais en prépa, la théorie est reine, et on est bien loin de la vraie vie smile. Bref, c'était peut etre pas la bonne voie, mais il fallait bien qu'on en choisisse une si on voulait avancer. Pobot nous a preté un capteur hall TOR semble t-il. voilà pourquoi denis l'a utilisé en TOR. Ce qui veut dire qu'il en existe probablement d'autre, comme par exemple ceux qu'on trouve dans un teslametre. Dans une visée pédagogique, j'éspere tester d'autres capteur, hall ou non.

Par ailleurs, pour entrer dans la dialectique, et trouver quelques réponses,  j'avais quelques à priori sur la "barriere lumineuse". En terminale, j'avais essayé de fabriquer un capteur IR à l'aide d'un schéma trouvé sur pobot. Il y avait non seulement un emetteur IR et un recepteur, mais aussi, de souvenir: un quartz, un ne555, des trucs, des bidules... Autant dire qu'il n'a jamais marché. Il y avait trop d'éceuils pour un charlot comme moi. Bref. comment faire une barriere lumineuse? google aime pas trop la recherche : capteur lumineux TOR;  De plus, je vois pas trop comment çà marche. En analogique 2 solutions sont possibles: soit l'aimant coupe le faisceau, soit l'aimant renvoie le faisceau. Or les emetteurs ont plutot l'air d'envoyer des signaux dans tous les sens, bien loin des rayons laser qui protegent les coffres forts de mission impossible.
La premiere solution impose que je fabrique un emetteur-recepteur, or moi je prefererais s'il y en avait des tous fait. ca reduirait le pourcentage de risque d'echec de pres de 98% lol. Je crois en avoir trouvé, au delà de la dizaine d'euros cela va sans dire, et encore je ne suis pas sur qu'ils remplissent la fonction attendue.
Par ailleur, pobot m'a preté un capteur sharp pour me familiariser avec l'arduino. Avec un programme particulier, serait-il possible de le transformer en tor?
J'ai tout confondu? Des pistes pour me rediriger ou des idées de capteurs? Je manque certainement de recul.


A vrai dire je me suis dernierement bien plus interéssé à la bobine. Avec de jolies erreurs: ma bobinette de cuivre+noyau n'a pas vraiment aimé les 3-4amperes pendant 5-10mn que je lui ai imposé. J'ai peur d'avoir fait fondre l'émail autour des fils, comment le savoir (sachant que le scotch, le plastique, les pinces, j'ai tout fait cramer)? Pour ma défense, c'était l'idée de ma prof. Elle voulait que je fasse la carte de champ de ma bobine avec un teslametre scolaire, qu'on utilise avec des courants de plus de 2A, pour la confronter à celle de l'aimant et trouver la position d'équilibre. Perso je definissai la distance, et faisait varier le courant jusqu'à ce que l'aimant décolle de ma main, mais on a pas fait l'ENS pour rien^^'.

Derniere question (pas de soucis, j'en ai pleins d'autres): Je souhaite relier la bobine à l'arduino afin que celui ci serve de simple interrupteur. Dans mon cahier des charges, je vais imposer un courant max d'environ 1A. Comment dois-je proceder? Je pense utiliser une alimentation externe, un transistor (npn, pnp je sais plus), et une diode de roue libre. je connecterai donc juste le transistor à l'arduino. Mais les schémas internet sont tous bien differents. Est-ce bien là tout ce qu'il me faut? Quels parametres faut il que je prenne en compte? Obtiendrais-je un temps de réponse correcte? (autant çà c'est peut etre secondaire, mais avec un Tr pourri, rien marchera jamais^^)

merci! (ouf j'espere que là c'est bon, pas de 3eme fois par pitié^^, notons que je n'ai plus utilisé un seul guillement lol)
A+

ps: pas mal l'effet amonbofis smile

14

Re : Levitation électromagnétique

Bonjour Benoit, j'avoue ne pas comprendre cette notion de TOR : il s'agit de "tout ou rien", c'est ça ?

Concernant la barrière optique, il s'agirait plutôt d'une mesure analogique de l'intensité lumineuse (plus c'est proche, plus c'est brillant), donc avec un capteur Sharp de type IS471F par exemple.

Il faut commencer avec le gros Sharp GP2X pour voir comment vous faites l'asservissement.

Pour la bobine, oui il faut la piloter avec un driver de moteur par exemple, et y aller molo. Je vais voir ce que j'ai pour vendredi.

15

Re : Levitation électromagnétique

Bonjour!
oui pardon, c'est mon prof de SI au lycé qui utilisait l'écriture TOR, je voulais bien dire Tout Ou Rien!

Pourrais tu me réexpliquer un peu plus concretement ce que tu entend par asservissement? Vous avez abordé ce sujet avec denis, qui m'a completement embobiné l'esprit. Peut-etre est-ce plus compliqué que ce que moi j'entend, à savoir corriger (ici interrompre) le courant en fonction de la valeur du capteur recue? Une simple fonction de transfert en boucle fermée?

D'apres pobot, un driver, c'est un pont en H. Si je veux juste couper le courant regulierement, j'en ai vraiment besoin?

Ca ca marcherai pas par exemple : http://sebarduino.blogspot.fr/2011/04/relais.html

merci julien!

16

Re : Levitation électromagnétique

Hello Benoit,

L'asservissement, c'est simplement le contrôle continu d'une action en fonction d'un capteur. Donc oui rien de complexe dans la définition.

En fait, quand tu coupes le courant d'une lampe, elle arrête de consommer et tout va bien. Mais quand tu coupes le courant d'une bobine, il peut y avoir un retour dangereux pour le circuit. C'est vrai pour les moteurs qui sont en "roue libre" donc leur mouvement va créer un courant dans le champ magnétique de la bobine et ce courant va remonter : c'est pour ça qu'on mets des diodes spéciales (dites "de roue libre").

Oui, de simples relais peuvent fonctionner.

17

Re : Levitation électromagnétique

L'asservissement, c'est simplement le contrôle continu d'une action en fonction d'un capteur.

Disons pour être plus rigoureux qu'un asservissement est un dispositif de rétro-action qui a pour rôle de moduler la commande qui est donnée à un système de manière à chercher à annuler l'erreur constatée entre la consigne et sa réalisation.

Illustrée plus prosaïquement, si on prend l'exemple d'une voiture qu'on veut faire rouler à une vitesse donnée (la consigne), l'asservissement que réalise le conducteur consiste à modifier la pression qu'il exerce sur la pédale d'accélérateur (la commande) pour que la vitesse indiquée au tableau de bord (la réalisation) soit celle recherchée.

18

Re : Levitation électromagnétique

Bonjour!
J'ai un souci avec l'arduino duemilanove que Pobot m'a prêté;
Pas trop dur à résoudre à priori:

Je n'arrive pas à lire de valeurs numériques sur le moniteur série, mais plutot quelque chose du genre :

‚‚šÊÂjT$ªª‚‚šÊ²jR$ªª‚‚¢‚²j¤$ªª‚‚¢Š‚jd$ªª‚‚¢‚²j¤$ªª‚‚¢‚ªj¤$ªª‚‚¢    En 9600 bauds
¬aqЬapЬapЬapЬapЬa`Ó¬aaѬáqÒ¬á     En 28800 bauds

J'avais raison! L'electronique, c'est pire que du grec wink
Alors est-ce que c'est une histoire de reglages, sachant que je n'ai pas essayé toutes les valeurs de bits/s?
Un problème de code? d'ordi?

Une idée? merci

19

Re : Levitation électromagnétique

Que dit le code source ? A mon avis, je n'utilise jamais 28800 donc essaie plutôt 38400 ou 115200

Autre hypothèse : le code est destiné à l'oscilloscope Processing donc n'est pas lisible par un humain.

20 Dernière modification par benoit (30-05-2013 19:22)

Re : Levitation électromagnétique

Cool! çà marche en 38400. j'ai pu tester les programmes:
- Arduinoscope: nickel
- Le capteur GP2D en tout ou rien : nickel

- L'intégration du signal selon le code de l'article pobot   "Transformer-un-capteur-tout-ou" (rien) pour obtenir le temps de détection sur l'arduinoscope : presque génial ! ^^

Ce programme marche très bien,
  Mais:   - l'infomation délivrée corerspond à moitié , càd qu'elle est trop lente (1sec mesurée à l'écran pour au moins 2s de détection). Me serais-je trompé dans le code arduino? Une idée de l'origine du problème?
              - Je voudrais rajouter un signal lumineux sur l'arduino dès dépassement du seuil (histoire de savoir visuellement si je détecte). Apres pleins d'essais, je n'ai pas trouvé la solution. Des que je rajoute une ligne, je modifie les boucles de mémoire. Si je met deux boucles, l'une s'implémente dans l'autre.
quelqu'un sait peut être ou je dois placer les deux lignes de cette boucle (if...else), ou comment les modifier:

#define ANALOG_IN O
int analogPin = 0;  int led=13;  int seuil=500;
void setup( )
{pinMode(analogPin,INPUT);   pinMode(led, OUTPUT);  Serial.begin(115200);}

void loop() 
{int val =0;   val = analogRead(analogPin);
  if (analogRead(analogPin) > seuil) 
  { digitalWrite( 13, HIGH);}
  else 
{digitalWrite(13,LOW); }
}

Le code:

#define ANALOG_IN O

int seuil=500;
       // la valeur précédente de la détection
int memoire = LOW; // LOW = inactif pour le GP2D
       // nombre de ms au début de la détection
unsigned long compte = 0;


void setup()
{
  int analogPin = 0;     // a priori aucun pull up requis pour une entrée analogique
  pinMode(12, OUTPUT);
  Serial.begin(115200); // communiquer avec le PC
}

void loop()
{
        // ce qui va être envoyé à l'oscillo
  int val = 0;
        // la valeur courante du capteur
  int courant = analogRead(0);
        // agir au début de la détection (front montant) !!
  if (memoire < seuil && courant > seuil)
  {
       // remise à zéro du compteur
    compte = millis();
  } 
  else
       // agir pendant la détection
    if (memoire > seuil && courant > seuil)
    {
        // on va envoyer la valeur du compteur (ms courantes - ms mémorisées)
      val = (int) millis()-compte;
    } 
    else
        // agir à la fin de la détection
      if (memoire > seuil && courant < seuil)
      {
        val = (int) millis()-compte;
          // s'agissant de la fin, on pourrait ici lancer un traitement particulier
      }

         // préparer l'étape suivante en transférant l'état courant dans la mémoire
  memoire = courant;

  Serial.write(0xff);
  Serial.write( (val >> 8) & 0xff);
  Serial.write( val & 0xff);
delay(20);
}

Merci beaucoup!





Edit:
La solution (simple finalement smile) :

#define ANALOG_IN O
int seuil=500;
int capteur = 0;
int led=13;
int val2=0;

// la valeur précédente de la détection
int memoire = seuil; // LOW = inactif pour le GP2D
// nombre de ms au début de la détection
unsigned long compte = 0;


void setup()
{  
  int capteur = 0; // a priori aucun pull up requis pour une entrée analogique
  pinMode(led, OUTPUT);
  pinMode(capteur,INPUT);
  Serial.begin(38400); // communiquer avec le PC
}

void loop()
{

  {
    val2 = analogRead(capteur);

    if (analogRead(capteur) > seuil) //  on detecte l'aimant, on stoppe le courant
    {
      digitalWrite( led, HIGH);
    }

    else {
      digitalWrite(led,LOW); // on ne détecte pas l'aimant, on fait passer le courant dans la bobine
    }
  }
  // ce qui va être envoyé à l'oscillo
  int val = 0;
  // la valeur courante du capteur
  int courant = analogRead(0);
  // agir au début de la détection (front montant) !!
  if (memoire < seuil && courant > seuil)
  {
    // remise à zéro du compteur
    compte = millis();
  } 
  else
    // agir pendant la détection
    if (memoire > seuil && courant > seuil)
    {
      // on va envoyer la valeur du compteur (ms courantes - ms mémorisées)
      val = (int) millis()-compte;
    } 
    else
      // agir à la fin de la détection
      if (memoire > seuil && courant < seuil)
      {
        val = (int) millis()-compte;
        // s'agissant de la fin, on pourrait ici lancer un traitement particulier


      }
  // préparer l'étape suivante en transférant l'état courant dans la mémoire
  memoire = courant;

  Serial.println(val); 
  Serial.write(0xff);
  Serial.write( (val >> 8) & 0xff);
  Serial.write( val & 0xff);
  delay(20);

}

21

Re : Levitation électromagnétique

Pour la fréquence, passe la vitesse à 115200 dans le setup et côté Arduinoscope, ça rafraichira plus vite (peut être trop, attention aux effets de buffer). On peut mettre un delay(20); après le dernier Serial.write() pour définir la fréquence d'échantillonnage (ici, 50 Hz).

Pour la led, essaie de copier ton code entre balises "code" (avec les chevrons) pour qu'on puisse le reprendre et le compléter. Et puis indente le correctement (CTRL+T sous logiciel Arduino...) qu'on le lise mieux.

attention, après le else derrière le digitalWrite(13,LOW) il manquait une accolade fermante } , c'était peut être ça ?

22 Dernière modification par benoit (28-03-2013 22:53)

Re : Levitation électromagnétique

bonjour,

Voilà c'est fait.
En 115200 je fais ramer mon ordi, le logiciel plante. J'essaierai avec un ordi plus puissant.
Merci pour le CTRL+T, je savais pas qu'il y avait une commande qui existait;
Pour le }, c'etait juste une faute de copier coller, désolé

Une idée de la facon ou de l'endroit qui permettrait de rajouter la commande de la led 13 (ou d'une bobine...) svp?
merci!

23 Dernière modification par benoit (30-05-2013 19:18)

Re : Levitation électromagnétique

bonjour,

Me voilà confronté à de nouveaux problèmes et je fais (encore) appel à la pobot-group's intelligence.
Denis ma donné la carte roméo que pobot nous a preté. Je peux donc enfin m'interesser à la commande de ma bobine.

Tout d'abord sur le code que Julien nous avait préparé:

}
void v_gauche(int vitesse)
{
  (vitesse < 0) ? digitalWrite(7,LOW) : digitalWrite(7,HIGH);
  analogWrite(6,abs(vitesse));
 }

void v_droite(int vitesse)
{
  (vitesse < 0) ? digitalWrite(4,HIGH) : digitalWrite(4,LOW);
  analogWrite(5,abs(vitesse));
}

void vitesse(int g, int d)
{
  v_gauche(g);
  v_droite(d); 
}

Questions :
Si ma bobine est branchée aux bornes du moteur 1 (soit les commandes 4 et 5), pourquoi je me servirai des commandes du moteur 2 (6 et 7). Bon, comme le code marche, c'est que le code est bon, mais pourquoi!?

De plus, à quoi servent les 3 dernieres lignes? A la suite de ce code, il y a la commande sur le sens d'alimentation et il n'est plus fait reference de ces 3 lignes. Une idée d'à quoi elles pourraient servir?

Et pourquoi Void tout court? Je n'ai pas non plus trouvé la réponse.


Et pour finir, sans le code de julien, je peux faire l'analogie avec un moteur pour la commande de l'electroaimant. Il y a de nombreux codes sur le net. Vitesse et acceleration. Seulement, est-ce reellement pareil? Aurais-je besoin d'imposer plusieurs tension croissantes au démarrage? Une accélération? Ce n'est qu'un fil de cuivre, on peut peut etre supposer que le courant s'établit quasi instantanément et qu'une simple commande "digitalwrite()" suffise?

Enfin, comme les moteurs, dois-je (devrais-je) m'interesser à la commande en pwm dans mon cas?

merci beaucoup!

24

Re : Levitation électromagnétique

Questions traitées en atelier.