Comandare ARDUINO da VB.NET

Comandare ARDUINO da VB.NET

Può essere un modo per fare eseguire finalmente un’azione ‘fisica’ al computer, oppure per permettergli di acquisire dati dall’esterno, oppure meglio ancora per un primitivo impianto di domotica.

Comandare ARDUINO dal PC è semplicissimo. In questo articolo usiamo VB.NET ed il protocollo per la comunicazione seriale (via USB) di Arduino <> PC.

Il protocollo si chiama FIRMATA.

“Firmata è un protocollo generico che permette la comunicazione tra microcontrollori e un computer. E’ studiato per funzionare con qualsiasi linguaggio di programmazione su qualsiasi sistema operativo. Fondamentalmente, questo firmware stabilisce un protocollo per far parlare Arduino con il PC, e l’obbiettivo è di permettere il controllo completo di Arduino.”

Vediamo prima i passi fondamentali, che sono sostanzialmente due:

passo 1: avviare l’IDE di Arduino, caricare lo sketch FIRMATA (si trova tra gli esempi) ed eseguirne l’upload;

passo2: avviare il software che utilizza il protocollo FIRMATA per dialogare con ARDUINO.

Sul passo 1 c’è poco da commentare. Vedere la foto sotto. 

Per quanto riguarda il passo 2 vedremo:

1- il progetto Visual Studio per il test (che funziona solo con lo sketch OLDFIRMATA);

2- un altro progetto in Visual Studio meno completo ma di più facile apprendimento;

3- un mio progetto, scritto per comandare due servo motori, collegati allo shield “Motor Control Shield for Arduino” di www.ladyada.net/make/mshield.

Prendete pure visione della pagina http://firmata.org, che contiene tutto ciò che c’è da sapere sul protocollo di comunicazione seriale. Dalla sezione “Firmata Test Program” potete scaricare un programma di test, che permette di verificare imemdiatemente il funzionamento del protocollo.  Il programma è disponibile, già compilato, per  Windows, Mac OS-X  e Linux.

Vedi foto sotto.

Per far funzionare il programma di test bisogna PRIMA collegare Arduino al PC, e poi scegliere la porta (foto). Attendere qualche secondo.

Il pin 13 è collegato ad un led onboard. Cliccandolo si vede immediatamente che il led si accende e si spegne.

Nel caso si avesse a disposizione lo shield “Motor Control Shield for Arduino”, vedere le figure seguenti per provarlo velocemente.

1) All’url: http://www.acraigie.com/programming/firmatavb/ è proposta la libreria (DLL)  firmataVB.dll e due controlli: DigitalPinControl.dll e AnalogPinControl.dll

Il loro utilizzo è spiegato bene sul sito stesso. Scaricate il progetto (Questo: [Download not found] è il progetto in VB.NET.) “ArduinoFirmataVBExtended” ed avviatelo per avere in un colpo solo la visione completa di tutti gli ingressi di Arduino. 

Attenzione però: personalmente non sono riuscito a farlo funzionare esattamente come in foto. Bisogna caricare su Arduino il firmware “OLDSTANDARDFIRMATA”. Con gli altri non funziona. 

I controlli Analog Pin funzionano tutti, sia in ingresso che in uscita. I Digital Pin funzionano solo in uscita (cioè per inviare comandi ON/OFF ad Arduino). Il Port Reporting NON FUNZIONA. Del resto, guardando il codice, nei commenti è scritto che la versione attuale di Firmata non consente il controllo dei singoli ingressi digitali. Evidentemente il progetto è datato, perchè la versione attuale (la versione 2)  invece funziona, ma non con la libreria firmataVB.dll proposta con questo progetto.

2) Il secondo progetto (qui: [Download not found] da http://connect.mind-craft.net/arduino-firmata-vb-class) nasce dall’esigenza di utilizzare il protocollo in modo più semplice, riducendo il tempo necessario a studiare e comprendere il codice visto al punto 1). Il progetto (in visual studio 2008) è più spartano, ma propone la classe Arduino.vb che funziona perfettamente con la versione 2 di firmata. Il programmatore assicura la completa funzionalità anche del protocollo I2C. Volendo, funziona perfettamente anche con i due controlli (DigitalPinControl e AnalogPinControl) visti prima. Consiglio questa classe insieme a questi due controlli per iniziare da zero qualsiasi progetto con il Arduino ed il protocollo di comunicazione Firmata.

3) In ultimo, un mio progetto (è solo un test, niente di più) usato per comandare due servo motori montati sullo shield Motor Control sopra citato. Scarica qui: [Download not found]

Indispensabile da sapere:

Arduino usa ‘Port’ e ‘Pin’.

Alla porta 0 (zero) sono assegnati i pin 0,1,2,3,4,5,6,7  ed alla porta 1 i pin 8,9,10,11,12,13.

Solo alcuni pin hanno la possibilità di modulare il segnale digitale in PWM (pulse-width modulation), sono i pin 3,5,6,9,10,11 (0,1 vengono utilizzati per la comunicazione seriale)

I pin 2,4,7,8,12,13 NON sono abilitati PWM.

 

Un’occhiata al codice

Questo è il codice strettamente necessario a dare qualche comando e ricevere qualche dato. Nota: ho usato la classe arduino.vb (da questo progetto: [Download not found] ) ed il firmware “standard firmata” caricato su Arduino.

'apre la porta COM4
 arduino1 = New Arduino("COM4")
'imposta in pin 10 per pilotare un servo motore
 arduino1.pinMode(10, Arduino.SERVO)
 'invia un comando
 arduino1.analogWrite(10, 180)
'imposta il pin 13 in scrittura
 arduino1.pinMode(13, Arduino.OUTPUT)
 'accende il led
 arduino1.digitalWrite(13, Arduino.HIGH)
'imposta il pin 11 in lettura
 arduino1.pinMode(11, Arduino.INPUT)
 'legge il valore
 Dim iValoreLetto As Integer = arduino1.digitalRead(13)
 

8 replies to Comandare ARDUINO da VB.NET

  1. Theremino, lo sconsiglio, non mi piace, non lo capisco, se non programmo che cosa faccio? Utilizzo un sistema fatto da altri? Lo spirito del maker è vanificato. Non mi piace, Non mi piace !!!

  2. Interessante il suo articolo il quale mi ha resa facile l’usa di FIRMATA , ma come e possibile comandare due arduino con due porte diverse sullo stesso PIN (esempio 8)contemporaneamente pin 8 com4 e pin 8 com10 sempre con programmazione VB
    sarei molto grata di una sua esplicita dimostrazione . saluti

  3. E cosa c’entra stò theremino con Arduino ? Nulla

    • Ogni spunto è ben accetto.

    • Questo sito non è dedicato solo ad Arduino ma al FaiDaTe in genere, quindi non mi sembra di essere andato fuori tema.
      L’esistenza di un sistema più semplice e meno costoso mi sembrava una informazione utile.
      In ogni caso non si tratta di pubblicità perché stiamo parlando di Open Source e DIY.

    • Certo che c’entra! Qui si parla di DotNet e Arduino no?

      Ebbene sul sito Theremino sono pubblicati oltre 45 software in DotNet, tutti Open Source, e tutti usabili anche con Arduino!

      E questi software contengono esempi e soluzioni, per quasi ogni aspetto della programmazione DotNet. Dal controllo dell’audio e del video, al 3D, all’input-output, ai servomotori, sensoristica, spettrometria, musica… Tutto gratuito e Open. Quindi, se non sbaglio, c’entra eccome.

      Se invece mi sbaglio, scrivimi il perché e discutiamone.

    • E c’entra anche perché il tuo articolo comincia così: “Può essere un modo per fare eseguire finalmente un’azione ‘fisica’ al computer, oppure per permettergli di acquisire dati dall’esterno…”

      Ebbene il sistema Theremino fa proprio questo.

  4. Sistema macchinoso e scomodo. Theremino (open source e open hardware) non richiede programmazione del firmware e comunica molto più velocemente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

wp-puzzle.com logo

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.