Sommario:

Interfacciare una CMUCam2 a un OOPIC: 5 passaggi
Interfacciare una CMUCam2 a un OOPIC: 5 passaggi

Video: Interfacciare una CMUCam2 a un OOPIC: 5 passaggi

Video: Interfacciare una CMUCam2 a un OOPIC: 5 passaggi
Video: Pixy CMUcam5 Easy To Use Image Recognition And Motion Tracking Vision Sensor 2024, Dicembre
Anonim

Di arsinioFollow More dell'autore:

Collegamento di due OOBoard insieme utilizzando I2C
Collegamento di due OOBoard insieme utilizzando I2C
Collegamento di due OOBoard insieme utilizzando I2C
Collegamento di due OOBoard insieme utilizzando I2C

Panoramica su come interfacciare una CMUCam2 a e OOPIC.

Passaggio 1: realizzazione del cavo adattatore

Realizzazione del cavo adattatore
Realizzazione del cavo adattatore

1. Vai a radioshack e acquista 2 di questi: connettore maschio DB-9 Solder Cup2. saldare il pin 5 del connettore A al pin 5 del connettore B (se si guarda bene il connettore, sono contrassegnati)3. saldare il pin 2 del connettore A al pin 3 del connettore B (se si guarda bene il connettore, sono contrassegnati)4. saldare il pin 3 del connettore A al pin 2 del connettore B (se si guarda bene il connettore, sono contrassegnati)

Passaggio 2: modifica la velocità di trasmissione su CMUCam

Modificare il Baud Rate su CMUCam
Modificare il Baud Rate su CMUCam

Modificare la velocità di trasmissione di CMUCamera a 9600 baud (aggiungere un ponticello alla posizione 0).

Passaggio 3: collegare il cavo di programmazione standard e caricare il codice

Collegare il cavo di programmazione standard e caricare il codice
Collegare il cavo di programmazione standard e caricare il codice

Collega il cavo di programmazione standard e carica il tuo codice. Ecco un esempio di codice per iniziare. Questo codice terrà traccia del movimento utilizzando i comandi LF e FD. Commuterà IOLine 7 (collegato a un LED) e rispecchierà il LED di stato di tracciamento su CMUCam.

&apos******** oggetti relativi alla porta seriale ********Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 &aposcambia 27 per rendere il buffer più grande/più piccoloDim rxBuff As New oBuffer10Dim serialActive_LED As New oDIO1Dim toggleSerial_Button As New oDIO1Dim toggleSerial_Event As New oEventDim toggleSerial_Wire As New oWireDim serialReceive_Event As New oEventDim serialReceive_Wire As New oWire&apos ******** debug di oggetti correlati ******** Dim statLED As New oDIO1&apos ******** **************************************&apos* Subroutine generiche *&apos****** ****************************************Sub main &aposinitialize tutto main_init &imposta la nostra maschera di output su segui solo il centro di massa CMUCAM_setOutputMask(2, 3) &aposcarica il nostro frame della differenza iniziale CMUCAM_loadDiffFrame() &aposavvia il calcolo della differenza CMUCAM_startDiffCalc(10)End SubSub main_init &aposinitialize a LED di stato statLED. IOLine = 7 statLED. Direction = cvOutput &aposinitialit nostro serial_init)Fine Su b&aposprocesses ha ricevuto i pacchettiSub processPacket() Dim mx As Byte Dim my As Byte &aposcontrolla che sia Mx che My siano 0 &aposconcesso se non sono 0, la posizione sarà disattivata (cioè &aposT 12 34) &aposma poi hanno vinto&apost soddisfano i criteri 0 rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value &apostthe led dovrebbe lampeggiare all'unisono con il LED tracking sulla telecamera If (mx = "0") And (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub&apos********************************************* ****&apos* Funzioni della camma CMU *&apos**************************************** *******&imposta il led indicato su on, off, automatic&aposparam ledNum numero di led (0, 1)&aposparam val off, on, auto (0, 1, 2)Funzione CMUCAM_ledSet(ledNum As Byte, val As Byte) Poiché Byte &aposVString funzionava correttamente nel nuovo compilatore… &aposnon sono sicuro del vecchio &apostxBuff. VString = "L0 0" &apossetup la nostra stringa di comando manualmente txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 &aposthe s La funzione tr$ fa schifo… quindi ora sta succedendo txBuff. Value = serial_toChar(ledNum) txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 txBuff. Value = serial_toChar(val) txBuff. Location = 4 txBuff. Value = 13 &apossend il comando serial_SendBufferEnd Sub&aposcarica la differenza iniziale frameSub CMUCAM_loadDiffFrame() &apssetup la nostra stringa di comando manualmente txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" txBuff. Value = 13 &apsend il comando serial_SendBufferEnd Sub&aposstarts calcola le differenze di frame&aposparam soglia soglia (0-9)Sub CMUCAM_startDiffCalc(thresh As Byte) Dim tens As Byte &apossetup la nostra stringa di comando manualmente txBuff. Location = 0 txBuff. Value = "F." t 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 decine = thresh/10 txBuff. Value = serial_toChar(tens) txBuff. Location = 4 decine = thresh/10 txBuff. Value = serial_toChar(thresh-decine) txBuff. Location = 5 txBuff. Value = 1 3 &apprende il comando serial_SendBufferEnd Sotto&imposta la maschera di output&aposparam packetType tipo di pacchetto da mascherare (0, 1, 2, ecc.) vedi pagina 46&aposparam mask valore maschera da applicare (0-255)Sub CMUCAM_setOutputMask(packetType As Byte, mask As Byte) Dim centinaia As Byte Dim ten As Byte &apossetup la nostra stringa di comando manualmente txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = " " &apospacket type txBuff. Location = 3 txBuff. Value = serial_toChar(packetType) txBuff. Location = 4 txBuff. Value = " " &aposmask per applicare txBuff. Location = 5 centinaia = mask/100 txBuff. Value = serial_toChar(centinaia) txBuff. Location = 6 decine = (maschera-centinaia)/10 txBuff. Value = serial_toChar(decine) txBuff. Location = 7 txBuff. Value = serial_toChar(maschera-centinaia-decine) &aposcarriage return txBuff. Location = 8 txBuff. Value = 13 &aprendo il comando serial_SendBufferEnd_SendBuffer *********************************************&apos* Subroutine seriali generali *&apo s**************************************************&aposinizializza il seriale portSub serial_init() &aposinitialize un pulsante per attivare e disattivare la porta seriale (accendi per eseguire, spegni per programmare) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link(toggleSerial_Button. Value) toggleSerial_Wire. Output. Link(toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue &aposinitialize un evento per bufferizzare i nostri dati serialReceive_Wire. Input. Link(serialPort. Received) serialReceive_Wire. Output. Link(serialReceive_Event. Operate) serialReceiveBposiaRX bufferReceive_WireTrueRX = 0 &aposinitialize la nostra porta seriale serialPort. Baud = cv9600 &aposinitialize il nostro LED di stato seriale serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput &aposaspetta qui fino a quando la nostra porta seriale non viene attivata While serialPort. Operate = cvFalse WendEnd Sub&aposcopie i dati nel nostro buffer di ricezione e controlla completamento del pacchettoSub serialRe ceive_Event_Code() &apos.received diventa falso quando il buffer di 4 byte è vuoto While(serialPort. Received = cvTrue) &aposcopia il byte nel nostro buffer rxBuff. Value = serialPort. Value &aposcontrolla la fine del pacchetto If rxBuff. Value = 13 &aposprocess pacchetto processPacket() &aposreimposta il buffer all'inizio rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub&Attiva e disattiva la porta seriale per la programmazioneSub toggleSerial_Event_Code() If serialPort. Activte = cvFalse serialPort. Operate = cvLEDTrue serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub&converte un numero a una cifra in un characterFunction serial_toChar(inVal As Byte) As Byte Dim retVal As Byte Seleziona Case inVal Case 0 retVal = "0" Case 1 retVal = "1" Case 2 retVal = "2" Caso 3 retVal = "3" Caso 4 retVal = "4" Caso 5 retVal = "5" Caso 6 retVal = "6" Caso 7 retVal = "7" Caso 8 retVal = "8" Caso 9 retVal = "9" End Select serial_toChar = retValEnd Function&apos sen ds i dati contenuti in txBuff&apos Nota: assicurati che il buffer contenga un ritorno a capo (13) alla fine!!Sub serial_SendBuffer() &apositerate attraverso, inviando ogni byte, termina al ritorno a capo txBuff. Location = 0 Mentre 1 serialPort. Value = txBuff. Value ooPIC. Delay = 1 &apospot potrebbe non essere necessario &apossee se fosse un ritorno a capo If txBuff. Value = 13 &aposbreak out of our loop Return End If &aposvai al carattere successivo txBuff. Location = txBuff. Location + 1 WendEnd Sub

Passaggio 4: scollegare il connettore di programmazione

Scollegare il connettore di programmazione
Scollegare il connettore di programmazione
Scollegare il connettore di programmazione
Scollegare il connettore di programmazione

Una volta scollegato il connettore di programmazione, collegare il nuovo gruppo cavi come mostrato di seguito. L'adattatore realizzato nel passaggio 1 dovrebbe consentire il collegamento diretto di CMUCam all'OOPIC

Passaggio 5: premere il pulsante per inizializzare la comunicazione seriale

Il pulsante su IOLine 5 avvierà la comunicazione seriale tra CMUCam e OOPIC. Poiché la porta seriale viene utilizzata sia per la programmazione che per CMUCam, probabilmente dovrebbe esserci un modo controllato per alternare tra i due.

Il programma non verrà eseguito finché non si preme questo pulsante. Se premi nuovamente il pulsante, la porta seriale si disattiverà, permettendoti di programmarla. Il LED su IOLine 6 visualizza lo stato corrente della porta seriale (acceso significa attivo, spento significa pronto per la programmazione).

Consigliato: