Go Down

Topic: Molette arduino (Read 8859 times) previous topic - next topic

leni

Bonjour tout le monde,

J'ai pour projet d'utilisé les plateaux d'un disque dur en tant que molette sur Windows, j'ai réussi à récupérer les valeurs de la part du disque dur sur mon arduino mega, mais je n'arrive pas à l'utilisé sur l'ordi. Le meilleur serait une interface plug&play par usb comme le fait vusb (http://www.practicalarduino.com/projects/virtual-usb-keyboard) mais j'ai tenté de l'utiliser mais ça ne marche pas, Windows ne le détecte pas…
Les claviers et souris peuvent être utilisé en périphériques hid alors un arduino peut le faire aussi non ?
Donc je m'en remets à vous pour savoir comment faire.



Une autre question : Les librairies fonctionnants pour les versions antérieures à la 1.0 marchent en 1.0 ?

skywodd

Bonjour,


J'ai pour projet d'utilisé les plateaux d'un disque dur en tant que molette sur Windows, j'ai réussi à récupérer les valeurs de la part du disque dur sur mon arduino mega, mais je n'arrive pas à l'utilisé sur l'ordi. Le meilleur serait une interface plug&play par usb comme le fait vusb (http://www.practicalarduino.com/projects/virtual-usb-keyboard) mais j'ai tenté de l'utiliser mais ça ne marche pas, Windows ne le détecte pas…
Les claviers et souris peuvent être utilisé en périphériques hid alors un arduino peut le faire aussi non ?

Tu pourrai publier la partie "récupération des valeurs" ça m'intéresserai beaucoup.

Pour vsub il faut faire tout un petit montage, rien de bien compliquer quelques diodes zerner, résistances et un condensateur ;)
Si tu suis le tuto du lien que tu a posté tu devrais te retrouver avec un clavier usb fonctionnelle (j'ai déja fait le montage ya quelque temps, il marche ya pas de probléme).
Avec vusb ou avec la librairie "vusb simplifié pour arduino" tu peut faire sans probléme n'importe quelle type de périphériques HID en norme usb 1.1 ;)


Une autre question : Les librairies fonctionnants pour les versions antérieures à la 1.0 marchent en 1.0 ?

La réponse n'est pas simple : OUI et NON, certaines librairies vont compiler sous 1.0, d'autres non, et d'autre vont compiler mais ne vont pas fonctionner comme voulu.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

al1fch

#2
Jan 14, 2012, 05:10 pm Last Edit: Jan 14, 2012, 05:15 pm by al1fch Reason: 1
Bonjour
Si le portage de vusb sur Arduino n'est pas encore tout à fait au point (pas testé pour ma part) il reste :
-le changement de firmware du mega16u2 d'une carte Arduino récente ?
-l'utilisation d'une carte ou le mega328 est remplacé par un mega32u4 (futur Leonardo, vinciDuino, breakout d'Adafruit, Teensy ...)

leni

Pour la partie récupération des valeurs c'est simple, les plateaux des disques dur sont sur un moteur, si tu tournes les plateaux sa fait une dynamo. J'ai mes 2 des 3 pins du moteur sur la carte (gnd et A0) et la carte sait si le moteur tourne, à quelle vitesse et dans quel sens.


Pour vsub il faut faire tout un petit montage, rien de bien compliquer quelques diodes zerner, résistances et un condensateur ;)

Je n'ai pas vu de condensateur sur le schéma, tu l'as mis où ? Et aussi tu avais quelle version de l'IDE quand tu la fait fonctionner ? au cas où c'est la version de l'IDE qui fait que vusb ne marche pas.

J'ai la version de la 3 mega, donc c'est un Atmega 16U2. J'ai vu qu'on pouvait mettre LUFA sur la carte pour l'utiliser en hid mais pour changer le programme sur la carte il faudra changer le firmware ou je pourrais faire comment avant avec juste des fonctions supplémentaire ?

skywodd


Je n'ai pas vu de condensateur sur le schéma, tu l'as mis où ?

Entre +5v et GND pour stabiliser l'alimentation du circuit ;)


Et aussi tu avais quelle version de l'IDE quand tu la fait fonctionner ?

Arduino 0023


au cas où c'est la version de l'IDE qui fait que vusb ne marche pas.

Il faut une version antérieur à 1.0, 0023 par exemple, car la librairie a était créer à l'époque de arduino 0020 et n'as pas était mis à jour depuis.


J'ai la version de la 3 mega, donc c'est un Atmega 16U2. J'ai vu qu'on pouvait mettre LUFA sur la carte pour l'utiliser en hid mais pour changer le programme sur la carte il faudra changer le firmware ou je pourrais faire comment avant avec juste des fonctions supplémentaire ?

Il faut impérativement changer le firmware pour utiliser le 16U2 en périphérique HID, cela signifie aussi qu'il ne sera plus possible d'uploader de sketch arduino par usb sans remettre avant le firmware de base ;)
Donc je te conseil de rester sous vusb, ça marche trés bien je peut te le garantir, si tu ne comprend pas déja vusb en version "brut" sans arduino, LUFA sera vraiment trés compliqué à mettre en œuvre ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

al1fch

#5
Jan 14, 2012, 06:57 pm Last Edit: Jan 14, 2012, 06:58 pm by al1fch Reason: 1
LUFA :
Avec un mega16u2 il ya à priori la place pour loger à la fois le bootloader Et HID
Certains travaillent le sujet..... pas certain qu'il ya ait à ce jour un résultat abouti à ce jour.
Sans cela la gymnastique permanente de permutation du firmware du
8u2 ou 16u2  est fastidieuse en phase de mise au point.

Si Skywodd garantit le fonctionnement de VUSB sous Arduino il vaut sans doute mieux persévérer dans cette voie.... en attendant une solution efficace côté firmware 'double' sur 16u2.
Pour info :  http://arduino.cc/blog/category/hacks/lufa-hacks/

skywodd


Avec un mega16u2 il ya à priori la place pour loger à la fois le bootloader Et HID
Certains travaillent le sujet..... pas certain qu'il ya ait à ce jour un résultat abouti à ce jour.

Ils ont du courage, pour avoir le bootloader DFU + le programme de CDC pour le port série, tout en laissant de la place pour l'utilisateur ... à moi d'avoir un 32u4 je crois pas qu'il vont s'en sortir ...


Si Skywodd garantit le fonctionnement de VUSB sous Arduino il vaut sans doute mieux persévérer dans cette voie.... en attendant une solution efficace côté firmware 'double' sur 16u2.

Vusb marche avec arduino 0023 je peux le garantir, de même pour le schéma du lien cité plus haut ;)


Pour info :  http://arduino.cc/blog/category/hacks/lufa-hacks/

Sympa ! Je bookmark ^_^

Hs: J'attends d'avoir ma UNO Rev3 pour porter le programmateur avr-ISP de la lib LUFA dessus. L'avantage ? Pouvoir reprogrammer son arduino directement en ISP sans le moindre programmateur externe 8) (J'avais pas pu le mettre sur la UNO Rev-1/2 car le 8u2 n'avait pas assez de flash :smiley-yell:)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

leni

#7
Jan 15, 2012, 03:43 pm Last Edit: Jan 15, 2012, 04:41 pm by leni Reason: 1
J'ai refait 2 fois le montage et sa ne fonctionne pas, Windows ne détecte même pas la carte.
Par contre je n'est pas mis de condensateur de régulation il en faut un de quelle capacité ?

je le donne le code au cas où c'est lui qui à un problème.

Code: [Select]
#include "UsbKeyboard.h"
int ledPin = 13;

void setup()
{
 // Set up the activity display LED
 pinMode (ledPin, OUTPUT);
 digitalWrite (ledPin, HIGH);

 // Disable timer0 since it can mess with the USB timing. Note that
 // this means some functions such as delay() will no longer work.
 TIMSK0&=!(1<<TOIE0);

 // Clear interrupts while performing time-critical operations
 cli();

 // Force re-enumeration so the host will detect us
 usbDeviceDisconnect();
 delayMs(250);
 usbDeviceConnect();

 // Set interrupts again
 sei();
}

/**
* Main program loop. Scan for keypresses and send a matching keypress
* event to the host
* FIXME: currently repeats as fast as it can. Add transition detection
*/
void loop()
{
 UsbKeyboard.update();

     UsbKeyboard.sendKeyStroke(KEY_A);
   digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
 

   UsbKeyboard.sendKeyStroke(KEY_B);
   digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
 
 
   UsbKeyboard.sendKeyStroke(KEY_C);
   digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
 

   UsbKeyboard.sendKeyStroke(KEY_D);
   digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
   }

/**
* Define our own delay function so that we don't have to rely on
* operation of timer0, the interrupt used by the internal delay()
*/
void delayMs(unsigned int ms)
{
 for (int i = 0; i < ms; i++) {
   delayMicroseconds(1000);
 }
}


Le site original de la version vusb pour arduino : http://code.rancidbacon.com/ProjectLogArduinoUSB est down et la seul version que j'ai s'appelle "vusb-for-arduino-005" si c'est une ancienne version a celle que tu a utilisé sa expliquerai pourquoi sa ne marche pas.

skywodd


J'ai refait 2 fois le montage et sa ne fonctionne pas, Windows ne détecte même pas la carte.
Par contre je n'est pas mis de condensateur de régulation il en faut un de quelle capacité.

Le site original de la version vusb pour arduino : http://code.rancidbacon.com/ProjectLogArduinoUSB est down et la seul version que j'ai s'appelle "vusb-for-arduino-005" si c'est une ancienne version a celle que tu a utilisé sa expliquerai pourquoi sa ne marche pas.


La lib : http://code.google.com/p/vusb-for-arduino/ -> v5
Ide 0023 ou 1.0

code :
Code: [Select]
/**
* VirtualUsbKeyboard
*
* Enumerates itself as a HID (Human Interface Device) to a host
* computer using a USB shield. The Arduino then appears to the host to
* be a USB keyboard and keypress events can be sent on demand.
*
* This example watches the state of 6 push buttons and when a button
* is pressed it sends a matching keypress event to the host.
*
* Copyright 2009 Jonathan Oxer <jon@oxer.com.au>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. http://www.gnu.org/licenses/
*
* www.practicalarduino.com/projects/easy/virtual-usb-keyboard
*/

// Requires the use of the "UsbKeyboard" library available from
//   http://code.rancidbacon.com/ProjectLogArduinoUSB
#include "UsbKeyboard.h"

// Define the inputs to use for buttons
#define BUTTON_A 6
#define BUTTON_B 7
#define BUTTON_C 8
#define BUTTON_D 9
#define BUTTON_MSG 10
#define BUTTON_ENTER 11

// Use the on-board LED as an activity display
int ledPin = 13;

/**
* Configure button inputs and set up the USB connection to the host
*/
void setup()
{
  // Set up the activity display LED
  pinMode (ledPin, OUTPUT);
  digitalWrite (ledPin, HIGH);

  // Set the button pins to inputs
  pinMode (BUTTON_A, INPUT);
  pinMode (BUTTON_B, INPUT);
  pinMode (BUTTON_C, INPUT);
  pinMode (BUTTON_D, INPUT);
  pinMode (BUTTON_MSG, INPUT);
  pinMode (BUTTON_ENTER, INPUT);

  // Enable the CPU's internal 20k pull-up resistors on the button
  // inputs so they default to a "high" state
  digitalWrite (BUTTON_A, HIGH);
  digitalWrite (BUTTON_B, HIGH);
  digitalWrite (BUTTON_C, HIGH);
  digitalWrite (BUTTON_D, HIGH);
  digitalWrite (BUTTON_MSG, HIGH);
  digitalWrite (BUTTON_ENTER, HIGH);

  // Disable timer0 since it can mess with the USB timing. Note that
  // this means some functions such as delay() will no longer work.
  TIMSK0&=!(1<<TOIE0);

  // Clear interrupts while performing time-critical operations
  cli();

  // Force re-enumeration so the host will detect us
  usbDeviceDisconnect();
  delayMs(250);
  usbDeviceConnect();

  // Set interrupts again
  sei();
}


/**
* Main program loop. Scan for keypresses and send a matching keypress
* event to the host
* FIXME: currently repeats as fast as it can. Add transition detection
*/
void loop()
{
  UsbKeyboard.update();

  if (digitalRead(BUTTON_A) == LOW) {
    UsbKeyboard.sendKeyStroke(KEY_A);
    digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
  }

  if (digitalRead(BUTTON_B) == LOW) {
    UsbKeyboard.sendKeyStroke(KEY_B);
    digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
  }

  if (digitalRead(BUTTON_C) == LOW) {
    UsbKeyboard.sendKeyStroke(KEY_C);
    digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
  }

  if (digitalRead(BUTTON_D) == LOW) {
    UsbKeyboard.sendKeyStroke(KEY_D);
    digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
  }

  if (digitalRead(BUTTON_MSG) == LOW) {
    UsbKeyboard.sendKeyStroke(KEY_H, MOD_SHIFT_LEFT);
    UsbKeyboard.sendKeyStroke(KEY_E);
    UsbKeyboard.sendKeyStroke(KEY_L);
    UsbKeyboard.sendKeyStroke(KEY_L);
    UsbKeyboard.sendKeyStroke(KEY_O);
    UsbKeyboard.sendKeyStroke(KEY_SPACE);
    UsbKeyboard.sendKeyStroke(KEY_W);//, MOD_SHIFT_LEFT);
    UsbKeyboard.sendKeyStroke(KEY_O);
    UsbKeyboard.sendKeyStroke(KEY_R);
    UsbKeyboard.sendKeyStroke(KEY_L);
    UsbKeyboard.sendKeyStroke(KEY_D);
    UsbKeyboard.sendKeyStroke(KEY_ENTER);
    digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
  }

  if (digitalRead(BUTTON_ENTER) == LOW) {
    UsbKeyboard.sendKeyStroke(KEY_ENTER);
    digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
  }
}


/**
* Define our own delay function so that we don't have to rely on
* operation of timer0, the interrupt used by the internal delay()
*/
void delayMs(unsigned int ms)
{
  for (int i = 0; i < ms; i++) {
    delayMicroseconds(1000);
  }
}


mon circuit :


-> marche nikel !
Point important : il faut brancher l'usb puis faire un reset de l'arduino.

Donc vérifie que les zener que tu utilise sont bien des 3v3, et que tes fils ne soit pas trop long, il n'y a aucune raison que cela marche pour moi et pas pour toi ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

leni

Mes zener sont des 3v6, j'ai pas de résistance de 68 donc j'ai mis 3 de 22 sa fait 24 au multimètre.

Vusb fonctionne sur une mega 2650 ?

skywodd


Vusb fonctionne sur une mega 2650 ?

Fallait le dire tout de suite !

Vusb "brut" fonctionne avec l'ATmega2560 mais pas la lib vusb-for-arduino.
Regarde dans config.h il y a la définition du port et des bits correspondant au broches que tu veut utiliser, faudra aussi modifier UsbKeyboard.h

Si tu garde la config de base il faudrait utiliser PD2, PD4, PD5, sauf que sur la mega PD4 et PD5 ne sont relié à aucune broche donc ça peut pas marcher.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

leni

Quand tu dis relier à aucune broche sa veut dire quelles ne sont pas utilisable ?

skywodd


Quand tu dis relier à aucune broche sa veut dire quelles ne sont pas utilisable ?

Regarde par toi même tu comprendra ;)
http://arduino.cc/en/Hacking/PinMapping2560
(PD4 - PD5)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

leni

j'ai modifié dans le dossier Usbkeyboard usbsonfig.h
Code: [Select]
#define USB_CFG_DMINUS_BIT      6
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
* This may be any bit in the port.
*/


et
Code: [Select]
#define USB_CFG_PULLUP_BIT          7
/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
* above) where the 1.5k pullup resistor is connected. See description
* above for details.
*/



Code: [Select]
//private: TODO: Make friend? c'etait dans le UsbKeyboard.h


Il y a d'autre chose à modifier ?

skywodd


Il y a d'autre chose à modifier ?

Si tu reste sur le port D normalement non.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up