Go Down

Topic: Arduino Visual basic Firmata (Read 1 time) previous topic - next topic

Mork11

#15
Oct 07, 2016, 11:59 pm Last Edit: Oct 08, 2016, 12:12 am by Mork11
Questo è quello che ho:

Dim Angolo1 As Integer
Dim potPin1 As Integer
Dim BitMin As Long
Dim BitMax As Long
Dim ValAngMin As Integer
Dim ValAngMax As Integer
Dim VALANG As Integer
FirmataVB1.PinMode(6, OUTUPT)
potPin1 = 0
   

BitMin = 0
BitMax = 1023
ValAngMin = 0
ValAngMax = 179

Private Sub Tmr_AnalogIN_Pot1_Tick(sender As Object, e As EventArgs) Handles Tmr_AnalogIN_Pot1.Tick
        potPin1 = FirmataVB1.AnalogRead(0)                   'leggi lo stato del pin analogico A0 e assegnalo al potPin1
        LggIngAnalog1.Text = potPin1 * (5 / 1023)            'quello che leggi sul potPin1 scrivilo nella label
        CnvAnlINGrd1.Text = potPin1 / 5.69                   'scrivi nella text box il valore di Angolo1
        If Angolo1 < 20 Then                                 'fine corsa negativo
            Tmr_AnalogOUT_J1.Enabled = False                 'disabilita il timer
            CnvAnlINGrd1.Text = " F.Corsa N "                'mess. finecorsa
        ElseIf Angolo1 > 160 Then                            'fine corsa positivo
            Tmr_AnalogOUT_J1.Enabled = False                 'disabilita il timer
            CnvAnlINGrd1.Text = " F.Corsa P "                'mess. finecorsa
        End If
        VALANG = potPin1
        Angolo1 = (VALANG - BitMin) / (BitMax - BitMin) * (ValAngMax - ValAngMin) + ValAngMin
        FirmataVB1.AnalogWrite(6, Angolo1)                   'invia il valore di angolo1 al pin digitale 6
    End Sub

Mork11

#16
Oct 08, 2016, 12:13 am Last Edit: Oct 08, 2016, 01:45 am by Mork11
Ma in pratica accenna a muoversi in mal modo e a scatti non definiti ho verificato il valore di Angolo1 in ed effettivamente mi restituisce valori interi che vanno da 0 a massimo 179 interi
ma il motore sibila ma non si muove.

Per spiegare l'intenzione della mia parentesi "flash" sull'uso della formula "per due punti una sola retta"...per far eseguire al robot un movimento lineare (in gergo MOVELINEAR) ossia un movimento da punto a punto con cinematica inversa e quindi nel più breve tempo possibile.

Memorizzo la posizione di un punto A nello spazio
Memorizzo la posizione di un punto B nello spazio
Esegui il movimento da punto "A" a punto "B" passando per la retta che unisce i due
Lasciando libero arbitrio sull'utilizzo degli assi  

cinematica inversa in robotica    

zoomx

#17
Oct 08, 2016, 09:25 am Last Edit: Oct 08, 2016, 09:25 am by zoomx
Sto dormendo, mi sono concentrato sulla formuletta e non ho fatto caso all'uso del PWM per il servo.

Però mi pare di ricordare che con Firmata i servo si possano comandare.

Qui
http://www.xorse.it/comandare-arduino-da-vb-net.html
c'è anche un progetto in vb.net (CamMove) che muove 2 servo
http://www.xorse.it/wp-content/plugins/download-monitor/download.php?id=28
Il progetto si carica con la versione 2010.

La formula che ho scritto va bene per una retta su un piano, nello spazio non va bene. Ma esiste pure la formula per quella. Che io non conosco.

paulus1969

Però mi pare di ricordare che con Firmata i servo si possano comandare.


Ho verificato, a quanto ho visto si può fare, oltre ai pinMode input e pinMode output, ce ne è uno apposito per i servo. Una volta inizializzato come servo, poi basta fare un analogwrite.

zoomx

Quindi va cambiato questo
FirmataVB1.PinMode(6, OUTUPT) in FirmataVB1.PinMode(6, SERVO)
almeno secondo le specifiche
http://firmata.org/wiki/V2.2ProtocolDetails#Servos

paulus1969

Da quanto ho visto, sembrerebbe così.
Da altre parti leggo anche che si potrebbe dare un mode 5 invece di mode SERVO.


nid69ita

#21
Oct 08, 2016, 11:54 am Last Edit: Oct 08, 2016, 12:02 pm by nid69ita
Però la frase al link firmata 2.2 "This is the current proposal for adding Servo support "
Proposal non vuol dire che sia poi stato implementato, no ?  Però:

Tra le librerie del IDE 1.6.12,   nel Firmata.h si legge la costante
#define PIN_MODE_SERVO          0x04 // digital pin in Servo output mode
e poi
// DEPRECATED as of Firmata v2.5
#define SERVO                   0x04 // same as PIN_MODE_SERVO

Lo sketch StandardFirmata.ino  effettivamente richiama servo.h quindi c'è l'implementazione (si trovano nel codice dei attach e detach per i servo)

Nel firmata.h si legge anche che segue lo standard 2.5.1 
#define FIRMATA_PROTOCOL_MAJOR_VERSION  2 // for non-compatible changes
#define FIRMATA_PROTOCOL_MINOR_VERSION  5 // for backwards compatible changes
#define FIRMATA_PROTOCOL_BUGFIX_VERSION 1 // for bugfix releases
my name is IGOR, not AIGOR

zoomx

Quindi il mode sarebbe 4 invece che 5, il resto, PIN_MODE_SERVO  o SERVO è solo cosmesi inutile, serve solo a rendere incompatibili i programmi per banali cambi di nome. Ma chi sviluppa Firmata non poteva decidere una volta per tutte?

Mork11

 FirmataVB1.PinMode(6, PIN_MODE_SERVO)   'lo vede come errore
 FirmataVB1.PinMode(6, SERVO)                   'lo vede come istruzione

Come faccio ad associare il risultato della seguente formula all'uscita 6
Angolo1 = (VALANG - BitMin) / (BitMax - BitMin) * (ValAngMax - ValAngMin) + ValAngMin

Visto che associandolo in questo modo
FirmataVB1.AnalogWrite(6, Angolo1)

non succede nulla ?

paulus1969

Meglio fare le cose gradualmente... prima prova a spostare semplicemente il servo, fornendo un paio di valori fissi.

nid69ita

#25
Oct 08, 2016, 06:23 pm Last Edit: Oct 08, 2016, 06:25 pm by nid69ita
Le costanti che ho trovato sono LATO Arduino.  E sono riferite a Firmata 2.5.1
La libreria che usi lato VB non sò a che versione di Firmata si riferisce.
Non hai dato, secondo me, molte info.  Lato Arduino che versione di IDE ?
Lato PC/VB  che versione di VB ? Usi librerie lato VB ? Quali ? A che versione di Firmata si riferiscono ?
my name is IGOR, not AIGOR

Mork11

Versione Arduino IDE V 1.6.7
Versione Firmata V.3 29 June 2007
Visual Basic Studio Ultimate 2013
Libreria Firmata.FirmataVB

Sono daccordo con quello che dice paulus1969, così facendo avrò modo di conoscere meglio il procedimento alla radice imparando anche come funziona sia l'hardware che il software con cui sto lavorando...
 

nid69ita

tieni presente che quella libreria VB è ferma dal 2011, e si riferisce a Firmata 2.0
Mentre StandardFirmata su Arduino dipende dal IDE, ma è di sicuro più avanti.
Nel ide 1.6.5 è alla 2.4.3
my name is IGOR, not AIGOR

Mork11

#28
Oct 09, 2016, 12:00 am Last Edit: Oct 09, 2016, 12:07 am by Mork11
Ok! A questo punto cosa mi consigliate di fare concretamente per portare a termine il progetto?
Un programma a caratteri singoli e uso della seriale con firmware preimpostato su arduino è banale e scontato e oltretutto il mio obbiettivo è un altro....

zoomx

Il library manager permette anche di scaricare e installare versioni precedenti, attualmente partono dalla 2.3.6 fino alla 2.5.2

Il mio parere.
Da un certo punto di vista Firmata è comodo ma, a quanto pare, manca della compatibilità fra versioni differenti anche se la cosa sembra più legata al lato VB.net
Se vuoi usarlo devi trovare l'accoppiata giusta fra versione firmware e libreria.
PArti dalla pagina ufficiale
https://github.com/firmata/protocol
In fondo ci sono un paio di progetti per vb.net
Poi ci sarebbe questo
http://www.acraigie.com/programming/firmatavb/default.html
ma ho l'impressione che sia vecchiotto nonostante il tizio abbia dei post che risalgono a questa estate.

Ricordati di tenere l'accoppiata librerie e componente vb.net come reliquie perché probabilmente in futuro le cose cambieranno e non le troverai più.

In alternativa potresti interagire con Firmata senza libreria DLL ma c'è da studiare il protocollo.

Go Up