Show Posts
Pages: 1 2 [3] 4 5 ... 10
31  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: February 28, 2007, 12:42:46 pm
Bonsoir,

Dans ce qui circule dans la console Arduino, la valeur semble effectivement varier quand j'approche mon doigt.
Au pasage, si tu es sous Windows, utilise la console HyperTerminal.

Par contre, dans le patch PureData, impossible de la récupérer, il m'affiche une valeur presque constante, aux alentours de 50, quoi que je fasse
Je ne sais que te dire, jamais utilisé PureData avec l'Arduino. Qu'attends le patch PureData comme format de transmission. Quel protocole utilise t'il ?

Cela dit, une remarque sur le programme que tu as posté : chez moi, la LED n'est pas allumée constamment : elle clignote.

Oui, c'est bien là le but smiley. Ce n'est qu'un démonstrateur. Dans les faits, en simplifiant : quand on allume la LED, on charge sa capacité qui existe du fait de sa construction. Comme toutes les diodes, les lED sont sensibles à la lumière et il se trouve que l'éclairement décharge la capacité précédement chargée. Plus la LED est éclairée, plus sa capa se décharge vite. Le programme mesure le temps de décharge de la capa en attendant que la tension aux bornes de la LED soit celle du seuil de basculement l'entrée de l'Arduino. Une fois la LED déchargée, on la recherge un temps constant.
Dans ce cas, si l'éclairement est faible, la LED clignote très lentement car la capa se décharge lentement car elle mets lontemps à arriver au seuil de basculment.

Et bizarrement, la fréquence du clignotement augmente avec la luminosité
rien de bizarre voir explication ci-dessus.

- elle diminue quand j'approche mon doigt,
oui, jusqu'a un certain point, car tu crées une ombre. Si vraiment tu approche ton doigt, au contraire elle clignotera plus vite.

et à l'inverse la diode s'allume en continu si je l'éclaire...
Oui, et d'ailleurs elle n'est pas allumée en continu, mais elle clignote trop vite pour que nos yeux humains percoive le cligotement. C'est la persistence rétinienne qui fait que tu la allumée fixement.
32  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: February 28, 2007, 03:43:31 am
Bonjour,

   dans l'exemple de la première vidéo, une autre LED "L" allumée pendant la mesure, à côté de la LED qui mesure "M". La lumière émise par la LED L est réfléchie sur le doigt et atteint la LED M. remarquez que toutes les vidéos sont sombres... De plus quand le doigt s'approche, il modifie la décharge de la capacité crée dans la LED M. C'est aussi un détecteur d'aproche capacitif. On mesure l'approche en mesurant le temps de décharge pour connaitre la distance. Ce temps est directement lié à la distance, plus il est court, plus le doigt est proche. Je ne pense pas que le rapport entre temps et distance soit linéaire, mais c'est à vérifier.
33  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: February 27, 2007, 11:43:00 am
Bonjour,
   A priori non !
   Quelle carte Arduino avec quelle µP utilisez-vous ?
34  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: December 07, 2006, 06:10:19 am
Bonjour,

   L'état des registres n'est pas sauvegardé donc les modifs ne sont pas conservées pour les pulls-up.
35  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: September 28, 2006, 07:08:07 am
 Re,


La corespondance des broches Arduino/uP est définie dans le fichier [ \lib\targets\arduino\pins_arduino.c ] avec un dessin en prime dans le code.

Code:
// On the Arduino board, digital pins are also used
// for the analog output (software PWM).  Analog input
// pins are a separate set.

// ATMEL ATMEGA8 / ARDUINO
//
//             +-\/-+
//       PC6  1|    |28  PC5 (AI 0)
// (D 0) PD0  2|    |27  PC4 (AI 1)
// (D 1) PD1  3|    |26  PC3 (AI 2)
// (D 2) PD2  4|    |25  PC2 (AI 3)
// (D 3) PD3  5|    |24  PC1 (AI 4)
// (D 4) PD4  6|    |23  PC0 (AI 5)
//       VCC  7|    |22  GND
//       GND  8|    |21  AREF
//       PB6  9|    |20  AVCC
//       PB7 10|    |19  PB5 (D 13)
// (D 5) PD5 11|    |18  PB4 (D 12)
// (D 6) PD6 12|    |17  PB3 (D 11) PWM
// (D 7) PD7 13|    |16  PB2 (D 10) PWM
// (D 8) PB0 14|    |15  PB1 (D 9) PWM
//             +----+
36  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: September 28, 2006, 04:35:29 am
Salut Woo,

  La grande réponse : c'est mon métier  smiley-wink

  Après avoir trouvé la solution dans la datasheet, pour trouver la bonn syntaxe, j'ai regardé les sources de la librairie utilisée par Arduino. Tous les fichiers sont dispos en clair dans les sous-répertoires, donc pas de soucis.
37  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: September 27, 2006, 09:58:15 am
bonjour,

 Dans la datasheet de l'Atmega8 page 58 :

• Bit 2 – PUD: Pull-up Disable
When this bit is written to one, the pull-ups in the I/O ports are disabled even if the DDxn
and PORTxn Registers are configured to enable the pull-ups ({DDxn, PORTxn} = 0b01).
See “Configuring the Pin” on page 52 for more details about this feature.


Ce bit désactive toutes les pull-up.
38  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: September 13, 2006, 11:36:45 am
Bonjour Auguste,

  Oui, cela fonctionne bien. Reste que ce qui est réellement mesuré c'est la décharge de la capacité de la LED et qu'en approchant la main la capa se décharge même sans éclairement. C'est donc à la fois un détecteur d'éclairement et de proximité.

Voilà
39  Forum 2005-2010 (read only) / Français / Une LED qui mesure l'éclairement et qui éclaire ! on: May 03, 2006, 01:05:35 pm
Bonjour à tous,

Peut être avez-vous déjà visité ces liens :
http://mrl.nyu.edu/~jhan/ledtouch/ledtouch.mpg (vidéo)
http://www.merl.com/publications/TR2003-035/
http://projects.dimension-x.net/technology-and-projects/ledsensors/

Impressionnant !

J'ai voulu en faire autant avec la carte arduino. En particulier ce qui se trouve ici http://www.merl.com/publications/TR2003-035/, c'est-à-dire la version la plus minimaliste, sans convertisseurs analogique/numérique, juste avec deux entrées/sorties numériques, une résistance et une led ordinaire.

Facile ? Oui et non.

Le problème avec la carte arduino pour réaliser l'application, c'est que les résistance "pull-up" des sorties sont actives par défaut, donc, une entrée avec "pull-up" active ne permet pas de décharger la capacité de la LED par éclairement.

Solution, mettre ceci dans la fonction setup() pour désactiver les "pull-up" : _SFR_IO8(0x30) |= 4;

Pour expérimenter, voici mon code qui envoie les valeurs d'éclairement sur la sortie série tout en allumant la LED. Oh bien sur, la LED "clignote" un peu et ne semble pas allumée de manière permanente. C'est un code "pour voir" mais qui fonctionne. Pour essayer, il vous faudra connecter une LED en série avec une résistance d'environ 560Ohms sur les sorties numériques 2 et 3 de la carte arduino. l'anode (+, patte la plus longue) sur la sortie 2, l'autre la cathode sur la sortie 3.



Le code d'expérimentation est celui-ci :
Code:
int pinA = 2; // + Anode de la LED
int pinB = 3; // - Cathode de la LED
int val = 0;  // valeur de l'éclairement

void setup()
{
  // désactivation des résistances pull-up
  _SFR_IO8(0x30) |= 4;
  
  // Les deux broches connectées à la LED en sorties
  pinMode(pinA, OUTPUT);
  pinMode(pinB, OUTPUT);

  // On allume la LED
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, LOW);
  
  beginSerial(9600);        // connect to the serial port
}

void loop()
{
// RAZ valeur d'éclairement
   val = 0;

// phase a - led allumée durant 80 ms
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, LOW);
  delay (80);

// phase b - mise a niveau
  digitalWrite(pinA, LOW);
  digitalWrite(pinB, HIGH);

// phase c - décharge & mesure
  pinMode(pinB, INPUT);
  while (digitalRead (pinB) != 0)
    val++;
  pinMode(pinB, OUTPUT); // on repasse la sortie B en sortie

// on réallume la LED le temps de la transmisssion plus bouclage, mais rien d'obligatoire
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, LOW);

// transmission valeur
  printInteger (val);
  printByte (13);
}


40  Forum 2005-2010 (read only) / Français / Re: Un livret d'initiation à l'arduino en Français on: April 16, 2007, 05:04:28 pm
Super ! C'est un travail titanesque, merci pour tous.
41  Forum 2005-2010 (read only) / Français / Re: [APL] Un émetteur infrarouge SIRCS on: December 11, 2006, 12:38:53 pm
Bonjour,

Merci smiley pour votre intérêt à mon modeste post.

OUI, bien sûr, il est possible d'envoyer n'importe quel code SIRCS via ce programme charger dans Ardduino. Pour cela, vous devez modifier dans les parties : --> envoieTrameSIRCS12Bits (irID, 26); // lecture <-- la valeur du code IR (ici 26 pour lecture). Pour chaque code vous avez une fonction définie par Sony. Notez aussi la variable irID dont vous devrez modifier la valeur pour que l'émetteur s'adresse à votre lecteur DVD et non pas à un téléviseur ou un magnétoscope.

Où trouver ses valeurs me direz vous ? Et bien votre moteur de recherche favoris est votre ami... Et il vous donnera par exemple cette adresse : http://www.boehmel.de/sircs.htm qui vous donnera tous les codes. Il est possible que vous ayez à modifier le programme pour qu'il envoie plus de 12 bits si les lecteurs de DVDs le nécessite.

Pour ce qui est d'utiliser un câble en place de la liaison infrarouge, pas de pb particulier étant donné qu'il suffit de remplacer la LED IR par un câble pour que cela fonctionne. Enfin presque, une petite adaptation de niveau sera sûrement nécessaire. Je ne me souviens plus des niveaux d'entrée d'une prise télécommande SRCS mais vous trouverez sur Internet via votre moteur de recherche.

Je ne peux malheureusement pas allez plus loin car je n'ai pas de lecteur DVD Sony pour tester. Il m'est donc difficile de vous donner du code prêt à l'emploi.




42  Forum 2005-2010 (read only) / Français / Re: [APL] Un émetteur infrarouge SIRCS on: July 15, 2006, 05:16:53 am
Le programme

Bon, je ne vais pas m'éterniser en descriptions de lignes de code. Ce qui est à personnaliser si nécessaire un indiquer par un "[#PERSO]" sur la même ligne.

Notez que la boucle en commentaire dans la fonction setup() m'a servie à déterminer la vitesse d'execution de l'instruction digitalWrite() pour calibrer les attentes afin d'obtenir un signal de modulation à 40kHz. Sachez donc pour information qu'une instruction digitalWrite prend 10us pour s'executer. Se n'est absolument pas négligeable !

Code:
/* Exemple Emetteur SIRCS      */
/* Benoît ROUSSEAU 14/07/2006  */

#define brocheLED 13    // n° broche numérique du témoin de réception (LED)
#define brocheLED_IR 3  // [#PERSO] n° broche numérique de l'anode de la LED infrarouge

#define IR_PERIPH_ID_DEFAUT 7  // [#PERSO] n° d'ID du péripherique par défaut 7

#ifndef sbi
  #define sbi(sfr, bit) ((sfr) |= (1 << (bit)))
#endif

int trame = 0;           // contient les bits IR de la trame a envoyer hors start bit
int indexBitTrame;       // index sur les bits de la trame envoyée
unsigned int tempsTrame; // contient le temps total de la trame "utile" à savoir temps du bit de départ + bits à 1 + bits à 0 + pauses

int DMS40KHZ = 2;        // délai en microsecondes à après et entre 2 digitalWrite pour obtenir un signal à 40kHz
                         // ce délai à été obtenu par mesure avec la boucle "MESURE" en commentaires dans setup()

int irID = IR_PERIPH_ID_DEFAUT; // contient l'identifiant de l'appareil visé

/*-------------------------------------------*/
// 96 = Bit de départ
// 48 = 1
// 24 = 0
/*-------------------------------------------*/

void envoieBitSIRCS (byte nbcreneaux)
{
  for (int itmp=0; itmp < nbcreneaux; itmp++)
  {
    digitalWrite(brocheLED_IR, HIGH);
    delayMicroseconds (DMS40KHZ+1);
    digitalWrite(brocheLED_IR, LOW);
    delayMicroseconds (DMS40KHZ);
  }
  tempsTrame += (nbcreneaux >> 2); // nbcreneaux / 4 en us * 10
}

void envoiePauseSIRCS()
{
  delayMicroseconds (600);
  tempsTrame += 6;
}

void envoieTrameSIRCS12Bits (int ID, int code)
{
  // préparation de la trame

  trame = 0;
  
  for (indexBitTrame=0; indexBitTrame<5; indexBitTrame++)
    if (ID & (1 << (4-indexBitTrame)))
      sbi (trame, indexBitTrame);

  for (; indexBitTrame<12; indexBitTrame++)
    if (code & (1 << (11-indexBitTrame)))
      sbi (trame, indexBitTrame);
 
  digitalWrite (brocheLED, HIGH); // témoin lunineux visible allumé
    
  // envoyer 4 trames à la suite
  for (int noTrame=0; noTrame < 4; noTrame++)
  {
    tempsTrame = 0;
    
    envoieBitSIRCS(96); // bit dep.
    envoiePauseSIRCS();
    for (indexBitTrame = 11; indexBitTrame >= 0; indexBitTrame--)
    {
      if (trame & (1 << (indexBitTrame)))
        envoieBitSIRCS(48); // 1
      else
        envoieBitSIRCS(24); // 0
      envoiePauseSIRCS();
    }

    // délai de fin de trame, la trame doit durée 45ms au total    
    tempsTrame /= 10;
    delay (45 - tempsTrame);
  }
  
    digitalWrite (brocheLED, LOW); // témoin lunineux visible éteint
}

// FONCTIONS ARDUINO

void setup ()
{
  Serial.begin (9600);
  pinMode (brocheLED_IR, OUTPUT);
  pinMode (brocheLED, OUTPUT);

/*
  // boucle de mesure
  unsigned long ta, tb;
  ta = millis();
  for (itmp=0; itmp<1000; itmp++)
  {
    digitalWrite(brocheLED_IR, LOW);
    delayMicroseconds (DMS40KHZ+1);
    digitalWrite(brocheLED_IR, LOW);
    delayMicroseconds (DMS40KHZ);
  }
  tb = millis();
  Serial.print (tb-ta);  // après essai, retoune 25
*/
}

void loop ()
{
    while (Serial.available())
    {
      switch (Serial.read())
      {
        case 'l' : envoieTrameSIRCS12Bits (irID, 26); // lecture
                   Serial.print ("[Lecture]");
                   break;
        case 's' : envoieTrameSIRCS12Bits (irID, 24); // stop
                   Serial.print ("[Stop]");
                   break;
        case 'p' : envoieTrameSIRCS12Bits (irID, 25); // pause
                   Serial.print ("[Pause]");
                   break;
      }
      Serial.print (13, BYTE); // à la ligne
    }
}

Que fait ce programme ?

Connectée à l'ordinateur, moniteur série ouvert (hyperTerminal par exemple), la carte envoie des ordres infrarouge lecture, pause ou stop quand vous taper respectivement dans votre moniteur série les lettres l, p, s. Ca vous permet donc de piloter un magnétoscope Sony à partir de votre moniteur série. Ca donne quelque chose comme ceci sur l'écran du moniteur série :



Notez que par défaut l'identifiant de l'appareil visé est 7 soit un camescope mini-DV en mode "Play/Edit". C'est le seul appareil SONY que l'on ai pu me prêter smiley.

Je reste à votre diposition si vous avez des questions.
43  Forum 2005-2010 (read only) / Français / Re: [APL] Un émetteur infrarouge SIRCS on: July 15, 2006, 05:04:44 am
Le câblage

Trés simple !

L'anode de la LED dans la broche numérique n°4 d'Arduino, sa cathode connectée, par un fil, à une des broches GND.

44  Forum 2005-2010 (read only) / Français / Re: [APL] Un émetteur infrarouge SIRCS on: July 15, 2006, 05:01:53 am
La LED infrarouge

Hum, je viens de voir que j'écris toujours LED alors qu'en français c'est DEL. Bon ca passe...

Comment récupérer une LED infrarouge ? dans l'article sur le récepteur infrarouge je vous dis qu'il est trés facile de récupérer un appareil équipé d'un récepteur infrarouge. Avec un peu de chanche, vous aurez aussi la télécommande qui va avec, sinon, demandez à vos amis, ils ont tous une vielle télécommande dans un tiroir dont les touches encrassées ne fonctionnent plus. Mais comme c'est la télécommande d'origine, ils la conserve sans vraiment savoir pourquoi. Sinon, une LED infrarouge ce n'est pas cher, un achat au détail ou lors d'une commande autre ne vous mettera pas sur la paille.

Dans le cas ou vous récupereriez une vielle télécommande :



C'est une illustration, essayez de couper ou déssouder la LED infrarouge en conservant des pattes plus longues pour pouvoir insérer directement une des pattes de la LED dans une broche d'Arduino.

Remarquez que le boitier est transparent et laisse apparaître l'interieur de la LED. La cathode (-) c'est la patte reliée à la partie interne qui dessine un "r" et l'anode (+) c'est la patte reliée à la partie qui dessine un 't' en mirroir. Vous pouvez aussi repérer la cathode grâce au méplat (un petit plat) tailleé sur le bord du boitier ou même du fait que cette patte est un peu plus large à la jonction avec le boitier.
45  Forum 2005-2010 (read only) / Français / [APL] Un émetteur infrarouge SIRCS on: July 15, 2006, 04:51:01 am
Un émetteur infrarouge SIRCS



Après le récepteur, j'ai voulu faire un émetteur infrarouge SIRCS... Pour piloter n'importe quel matérie SONY équipé d'un récepteur infrarouge et acceptant des commandes sur 12 bits. Et, ca fonctionne...

Pages: 1 2 [3] 4 5 ... 10