Show Posts
Pages: 1 [2] 3 4 ... 10
16  Forum 2005-2010 (read only) / Français / Re: [APL] Voir au travers d'une souris on: August 05, 2006, 05:41:12 pm
Le programme

Ouf, enfin...

Bon, le dialogue avec l'A2051 utilise une simple liaison SPI. Pour plus d'infos sur les registres, ... voir la datasheet, google est mon ami : "A2051 datasheet".

Le programme est relativement simple, il envoie sur la liason série deux types d'informations :
1 - une trame >ID-ID-DéplacementX-DéplacementY à chaque déplacement de la souris ;
2 - l'image vue par le capteur (caméra 16x16 pixels) à chaque caractère que vous enverez sur la liaison série.

Ca donne quelque chose comme ceci :



Bon l'image est en hexadécimal, deux caractères par valeur de gris d'un pixel, 256 pixels. Les déplacements sont donnés en complément à 2, en relatif depuis la dernière lecture.

Mais ca aide d'avoir un code qui fonctionne, à vous de l'adapter... bien sûr ce code est crade, pas optimisé, ... c'est un test de faisabilité !

Code:
/*******************************/
/* OptiMouse, Benoît ROUSSEAU  */
/* - dialoguer avec un ADS2051 */
/* récupérer sur une souris    */
/* optique                     */
/*******************************/

#define BROCHE_HORLOGE 2
#define BROCHE_DONNEES 3
#define _BV(bit) (1 << (bit))

byte LectureRegistre (byte adresse)
{
  int i = 7;
  byte retour = 0;
  
  pinMode (BROCHE_DONNEES, OUTPUT);
  for (; i>=0; i--)
  {

     digitalWrite (BROCHE_HORLOGE, LOW);
     digitalWrite (BROCHE_DONNEES, adresse & (1 << i));
     digitalWrite (BROCHE_HORLOGE, HIGH);
  }
  
  pinMode (BROCHE_DONNEES, INPUT);
  delayMicroseconds(100);
 
  for (i=7; i>=0; i--)
  {
    digitalWrite (BROCHE_HORLOGE, LOW);
    digitalWrite (BROCHE_HORLOGE, HIGH);
    retour |= (digitalRead (BROCHE_DONNEES) << i);
  }
  delayMicroseconds(100);
  
  return retour;
}

void EcritureRegistre (byte adresse, byte donnee)
{
  int i = 7;
  
  adresse |= 0x80;
  
  pinMode (BROCHE_DONNEES, OUTPUT);
  for (; i>=0; i--)
  {

     digitalWrite (BROCHE_HORLOGE, LOW);
     digitalWrite (BROCHE_DONNEES, adresse & (1 << i));
     digitalWrite (BROCHE_HORLOGE, HIGH);
  }
 
  for (i=7; i>=0; i--)
  {
    digitalWrite (BROCHE_HORLOGE, LOW);
     digitalWrite (BROCHE_DONNEES, donnee & (1 << i));
     digitalWrite (BROCHE_HORLOGE, HIGH);
  }

}

void EnvoiImage()
{
  byte val;
  byte adr;
  Serial.print (">IMG:");
  
  EcritureRegistre (0x0a, 0x09);
  for (int i=0; i<256; i++)
  {
    do {
      adr = LectureRegistre (0x0d);
      val = LectureRegistre (0x0c);
    } while (val & 0x80);
//    Serial.print (adr, HEX);
//    Serial.print ('>', BYTE);
    Serial.print (val, HEX);
//    Serial.print (13, BYTE);
  }
  
  Serial.println ();
  EcritureRegistre (0x0a, 0x00);
}

void setup()
{
  pinMode (BROCHE_HORLOGE, OUTPUT);
  pinMode (BROCHE_DONNEES, INPUT);
  Serial.begin(19200);
}

void loop ()
{
  if (LectureRegistre (0x02))
  {
    Serial.print ('>');
    Serial.print (LectureRegistre (0x00), DEC);
    Serial.print ('-');
    Serial.print (LectureRegistre (0x01), DEC);
    Serial.print ('-');
    Serial.print (LectureRegistre (0x03), DEC);
    Serial.print ('-');
    Serial.print (LectureRegistre (0x04), DEC);
    Serial.println ();
  }
  if (Serial.available())
  {
    Serial.read();
    EnvoiImage();
  }
}

Bonne bourre !
17  Forum 2005-2010 (read only) / Français / Re: [APL] Voir au travers d'une souris on: August 05, 2006, 05:31:33 pm
Le câblage

Un peu de dextérité, un fer à souder correct pour souder directement sur les pattes du composant optique au milieu des bouts de plastique et roulez jeunesse.

Le brochage de l'A2051 est ici :


et, il faut relier le GND de l'A2051 au GND de l'Arduino, la broche Vdd à la 5V, la broche SCLK à la 2 et la SDIO à la 3. Pour le câble, utilisez le câble d'origine...

Cela donne ceci :



18  Forum 2005-2010 (read only) / Français / Re: [APL] Voir au travers d'une souris on: August 05, 2006, 05:23:50 pm
Le matériel

Le matos, c'est simple, une souris optique Logitech tout ce qu'il y a de plus simple. Mais il faut quel contienne un composant optique Agilent A2051 ou compatible.

La souris que j'ai récupéré ressemblait à ceci :


19  Forum 2005-2010 (read only) / Français / [APL] Voir au travers d'une souris on: August 05, 2006, 05:14:59 pm
Voir au travers d'une souris

Aujourdhui je vous propose de connecter la puce optique d'une souris optique sur votre carte Arduino ! Et, de voir ce que voit le capteur. Mais aussi, de récupérer l'information des déplacement de la souris !

Non ?

Si !

Hier, dans la poubelle d'un de mes clients, gisait une souris optique ; mort noyée dans une flaque de soda ! Je l'attrape par la queue, je demande à ces messieurs, je la mets dans la ma culotte et ca fait...

20  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: November 10, 2006, 03:30:29 am
Bonjour,

   Ce n'est absolument pas le bon endroit pour des questions sur la famille Microchip ou le langage JAl ! Je comprends mieux tes questions suite à mes réponses...

   Trouve un forum sur lrs microcontrolleurs PIc et le langage JAL se sera plus simple et efficace. Je dev. bien sur PIC aussi mais en assembleur.
21  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: November 08, 2006, 03:37:02 pm
Bonjour,

J'ai entendu parlé de JAL, mais je ne connais absolument rien sur ce language !
Par ailleurs, quel rapport avec JAL ?
22  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: November 04, 2006, 03:24:31 pm
Bonjour Frédéric,

  La fonction qui  récupère la valeur numérique de la position du curseur du potentiomètre est "analogRead". Que la position du potetiometre change de manière "automatisée" ou en manuel, c'est la même fonction qui renvoie la valeur numérique de la position.

  Pour plus d'information sur la fonction AnalogRead, consulte le manuel de référence Arduino ou ma traduction à l'adresse http://perso.orange.fr/rousseau-benoit/referencearduino/sommaire.xhtml
23  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: August 05, 2006, 03:58:30 pm
Le programme

C'est un programme de test, il n'est pas optimisé, ... c'est donc à adapter.

Le principe est simple : on envoie avec un terminal série un nombre entre 0 et 1023 inclus et le curseur du potetiometre se déplace jusqu'a cette valeur puis renvoie sur l'écran du terminal la valeur atteinte.

Si vous avez des soucis lors de la mise en route c'est peut être qu'il vous faut inverser les deux fils d'alimentation du moteur.

Code:
/***************************************/
// MotPot Arduino
// Benoît ROUSSEAU 27 juillet 2006
// - Pilotage d'un potentiomètre
// motorisé (étude de faisabilité)
/***************************************/

#define PILOT_A 7     // entrée A du pont en H
#define PILOT_B 8     // entrée B du pont en H
#define PILOT_PWM 9   // entrée "Enable" du pont en H
#define PILOT_REF 0   // entrée analogique reliée au commun de la piste du potentiomètre

#define ECRART_V_DIV2 150 // rapport PWM min pour déplacement moteur potentiomètre

int cmdValeur;
int cmdChar;

/***************************************/

void direction (byte dir)
{
  if (dir == 0)
  {
    digitalWrite (PILOT_A, HIGH);
    digitalWrite (PILOT_B, LOW);
  }
  else
  {
    digitalWrite (PILOT_A, LOW);
    digitalWrite (PILOT_B, HIGH);
  }
}

void allerA (int consigne)
{
  int positionlue = analogRead (PILOT_REF);
  int vitesse = 0;
  
  analogWrite (PILOT_PWM, 0);
  
  if (consigne == positionlue) return;
  if (consigne > 1023) return;
  if (consigne < 0) return;

  if (consigne > positionlue)
  {
    direction(1);
    if (positionlue < (consigne-ECRART_V_DIV2))
      analogWrite (PILOT_PWM, 255);
      
    while (positionlue < (consigne-ECRART_V_DIV2))
      positionlue = analogRead (PILOT_REF);
      
    analogWrite (PILOT_PWM, 140);
    while (positionlue < consigne)
      positionlue = analogRead (PILOT_REF);
      
    digitalWrite (PILOT_B, LOW);
  }
  else
  {
    direction(0);
    if (positionlue > (consigne+ECRART_V_DIV2))
      analogWrite (PILOT_PWM, 255);
      
    while (positionlue > (consigne+ECRART_V_DIV2))
      positionlue = analogRead (PILOT_REF);
    
    analogWrite (PILOT_PWM, 140);
    while (positionlue > consigne)
      positionlue = analogRead (PILOT_REF);
    
    digitalWrite (PILOT_A, LOW);
  }
  
  analogWrite (PILOT_PWM, 0);
  
};

/***************************************/
void setup()
{
  pinMode(PILOT_A, OUTPUT);
  pinMode(PILOT_B, OUTPUT);
  pinMode(PILOT_PWM, OUTPUT);
  Serial.begin(9600);
};

void loop ()
{
    while (serialAvailable())
    {
      cmdChar = serialRead ();
      printByte (cmdChar);
      switch (cmdChar)
      {
        case 13 : // retour chariot commande
            allerA (cmdValeur);
            cmdValeur = 0;
        case '?' :
            Serial.print (analogRead(PILOT_REF));
          break;
        case '0' :
        case '1' :
        case '2' :
        case '3' :
        case '4' :
        case '5' :
        case '6' :
        case '7' :
        case '8' :
        case '9' : cmdValeur = cmdValeur * 10 + (cmdChar-48); break;

      }
    }
};

Si vous avez des questions ou si vous réalisez quelque chose à partir de cela, dites le moi  smiley-grin !

Le prochain post, encore plus fort, un peu de patience...
24  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: August 05, 2006, 03:52:00 pm
Le câblage

Là, y a un poil de boulot !

Le schéma de câblage est celui-ci :



Le principe est le suivant :
- une entrée analogique est chargée de mesurer la position absolue du curseur du potentiomètre ;
- deux broches numériques sont configurées en sorties pour piloter le moteur, à savoir les commandes moteur dans un sens, moteur dans l'autre sens et stop rapide ;
- une sortie PWM est utilisée de manière à pouvoir faire varier la puissance envoyée au moteur pour le faire tourner plus ou moins vite ;
- la carte arduino ne pouvant pas commander directement le petit moteur, un étage de puissance configuré en "pont en H" est assuré par le L293B ;
- Le L293B n'a pas de diodes de protection intégrée, d'où la présence des quatres diodes cablées "volantes".

(1) Remarque : sur le schéma, des pointillés rouges et de petits (1) vous indiquent comment câbler l'alimentation du moteur directement sur la carte... mais ATTENTION ! Prenez garde, il faut ABSOLUMENT changer la position du cavalier d'alimentation sur la carte Arduino pour qu'il soit en position alimentation externe et branchez un petit bloc d'alimentation secteur sur la prise d'alimentation de la carte. N'ALIMENTEZ PAS LE MOTEUR A PARTIR DU 5V de la carte !. Pour ma part, j'ai choisi d'alimenter le moteur avec une pile 9V.



25  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: July 27, 2006, 05:40:36 pm
Re,

   Concernant les achats de potars motorisés, j'ai trouvé ceci :

Disponibilités Des Faders Motorisés
PANASONIC #EVANMKP08B14 chez All Electronics Corp./USA pour environ 7$ US
ALPS Fader #RSAON11M9 chez albs ALLTRONIC/Germany pour environ 20 EUR
ALPS Fader #RSAON11M9 chez Deltron Roxburgh/UK pour environ 10£
ALPS Fader RSAON11M9, numéro de commande #442081-07 chez Conrad pour environ 23 EUR


sur la page : http://www.ucapps.de/index.html?page=midibox64_fr.html
26  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: July 27, 2006, 05:06:41 pm
Salut gll,

1 - oui, le potentiomètre est absolu. C'est un potentiomètre "ordinaire". Le convertisseur ana/num de la carte étant sur 10 bits, la valeur retournée varie de 0 à 1023.

2 - Oui, les potar motorisés sont chers et difficiles à trouver. Je peux t'en envoyer 2 ou 3 si tu veux mais pour l'instant mes finances sont à sec ! Donc il faudra attendre un peu avant que je t'envoie ça au Canada.

Ensuite, je n'ai pas terminé l'article, le code, ... car je n'ai pas eut le temps ce soir, je terminerai demain soir ou lundi.
27  Forum 2005-2010 (read only) / Français / Re: [APL] Piloter un potentiomètre motorisé on: July 27, 2006, 10:59:54 am
Le matériel

Il vous faudra pour 4 personnes :
- un potar motorisé ;
- un pont en H genre L293B ;
- 4 diodes genre 1N4007 si votre "pont en H" ne contient pas de diodes de roue libre ;
- des dominos (3 suffisent) ;
- du fil de cablable ;
- étain ;
- fer à souder ;
- ...

Où récupérer ceci ?

Pour le potentiomètre motorisé, on me l'a donné mais vous pouvez en trouver sur des tables de mixage automatisées mises au rebus, ou surement sur ebay, ...

Pour le "pont en H", vus pouvez le réaliser avec des composants classques transistors, ... ou en trouver un tout fait. Il existe plein de références mais j'ai pour ma part récupéré un L293B sur un platine de vieux magnétoscope.





28  Forum 2005-2010 (read only) / Français / [APL] Piloter un potentiomètre motorisé on: July 27, 2006, 10:43:14 am
Piloter un potentiomètre motorisé

L'objet de ce bilet, c'est un démonstrateur pour le pilotage d'un potentiomètre motorisé que l'on trouve sur les tables de mixage automatisées. Il vous faudra adapter le code à votre utilisation, ce code est un code d'essai, où j'ai voulu tester la réponse et la précision de la commande de ce genre de jouets.



Si vous voulez voir le machin bouger, une vidéo médiocre ici : http://perso.orange.fr/rousseau-benoit/images/arduino/potmot/DSCF0001.AVI
29  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: April 16, 2007, 05:14:50 pm
Sorry for my too late response,

 It's normal that when take your LED in your hand you have 0. The LEd is used like a capacitive sensor wich could be discharge by light or a proximitive (is that word exist ?) of a human body part.

(pff c'est dur l'anglais smiley)

Désolé pour ma réponse tradive

Il est normal que ta LED se comporte dans ta main comme en pleine lumière. La LED est utilisé en capteur capacitif qui peut être déchargé par la lumière où par la proximité d'une partie de corp humain.
30  Forum 2005-2010 (read only) / Français / Re: Une LED qui mesure l'éclairement et qui éclair on: March 11, 2007, 06:47:47 pm
Hello,

I don't have a solution ! smiley-sad I will try it since the end of the week.

Bonjour,

Je n'ai pas de solution ! smiley-sad J'essaierai d'ici la fin de semaine...
Pages: 1 [2] 3 4 ... 10