Obiettivo: Utilizzare uno sketch Arduino di lettura di input analogici/digitali, comunicando al PC senza dover creare un software che in background legga la COM e ne interpreti i messaggi.

Soluzione ipotizzata dopo la solita ricerca sul web: Trasformare Arduino in un HID(Human Interface Device) che comunichi dunque secondo uno standard USB al PC, senza la necessità installare Driver e me che meno creando software in background ad hoc.

Breve spiegazione tecnica: il chip Atmega16U2 presente sull’ Arduino UNO(rev.3) è programmato per permettere la comunicazione seriale necessaria per il download degli sketch e per la comunicazione tramite COM virtuale. Il chip può però essere riprogrammato e grazie al lavoro svolto da community e team Arduino.

Non è difficile reperire materiale su come farlo e al seguente link c’è una raccolta di firmware per vari HID(Joystick, Keyboard, MIDI… ): Arduino UNO Keyboard HID version 0.3

 Step che ho seguito:

  1. Download sul PC dell’esempio(kbd_usb_demo.pde) e successivo caricamento sull’Arduino UNO
  2. Download sul PC del firmware HID(Arduino-keyboard-0.3.hex) per Atmega8U2(funziona anche per Atmega16U2 presente sulla rev.3 dato che ha semplicemente più Flash e RAM)
  3. Seguendo la guida presente su questo sito(Lettore RFID con trasmissione come tastiera HID) ho caricato il firmware sul 16U2 tramite il SW di programmazione di Atmel (FLIP), dopo aver cortocircuitato gli opportuni pin.

  4. Scollegato e ricollegato la scheda e il PC l’ha riconosciuta come periferica USB HID di input e ha iniziato a scrivere “HelloWord” ogni 5 secondi(come previsto da esempio)

  5. Ho ricaricato(come nel punto 3) il firmware di default “Arduino-usbserial-atmega16u2-Uno-Rev3.hex” presente nella cartella “\arduino-1.0\hardware\arduino\firmwares\arduino-usbserial” 
  6. Per provare l’invio di informazioni emulando una periferica MIDI, ho scaricato lo skatch(midi_usb_demo.pde). A mio parere la trasmissione MIDI si presta meglio all’invio di informazioni provenienti da sensori analogici pertanto con valori non discreti(non dico continui volutamente).
  7. Ho commentato la parte di codice che attende segnali MIDI prima della ritrasmissione le note, in modo da avere la trasmissione continua delle 5 note con la sola pausa di 10 secondi.
  8. Ho caricato lo sketch sulla UNO.
  9. Con la stessa procedura del punto 3 ho caricato sull’16U2 il firmware come periferica USB MIDI (Arduino-usbmidi-0.1.hex)
  10. Ho captato i segnali(note) provenienti dal canale dalla periferica come previsto dall’esempio tramite il software free MIDI-OX, reindirizzandolo sulla scheda audio (quindi ascoltando i suoni dalle casse)

Fine.

Le basi ci sono, adesso bisogna usarle in un progetto…