Tabla de contenido:

Interfaz de un CMUCam2 a un OOPIC: 5 pasos
Interfaz de un CMUCam2 a un OOPIC: 5 pasos

Video: Interfaz de un CMUCam2 a un OOPIC: 5 pasos

Video: Interfaz de un CMUCam2 a un OOPIC: 5 pasos
Video: Vision artificial con pixy 2 arduino modulo mp3 y display oled de la mano de DFRobot 2024, Noviembre
Anonim

Por arsinio Siga más por el autor:

Conectando dos OOBoards juntos usando I2C
Conectando dos OOBoards juntos usando I2C
Conectando dos OOBoards juntos usando I2C
Conectando dos OOBoards juntos usando I2C

Descripción general de cómo interconectar un CMUCam2 y OOPIC.

Paso 1: hacer el cable adaptador

Hacer el cable adaptador
Hacer el cable adaptador

1. Vaya a Radioshack y compre 2 de estos: Conector macho de copa de soldadura DB-92. Suelde el pin 5 del conector A al pin 5 del conector B (si observa atentamente el conector, están marcados) 3. Suelde el pin 2 del conector A al pin 3 del conector B (si observa atentamente el conector, están marcados) 4. suelde el pin 3 del conector A al pin 2 del conector B (si observa atentamente el conector, están marcados)

Paso 2: cambiar la velocidad en baudios en la CMUCam

Cambiar la velocidad en baudios en la CMUCam
Cambiar la velocidad en baudios en la CMUCam

Cambie la velocidad en baudios de la CMUCamera a 9600 baudios (agregue un puente a la posición 0).

Paso 3: conecte el cable de programación estándar y cargue el código

Conecte el cable de programación estándar y cargue el código
Conecte el cable de programación estándar y cargue el código

Conecte el cable de programación estándar y cargue su código. Aquí hay un código de ejemplo para comenzar. Este código rastreará el movimiento usando los comandos LF y FD. Cambiará la IOLine 7 (conectada a un LED) y reflejará el LED de estado de seguimiento en la CMUCam.

& apos ******** objetos relacionados con el puerto serie ******** Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 & aposchange the 27 para hacer el búfer más grande / más pequeño Dim rxBuff As New oBuffer10Dim serialActive_LED As New oDIO1Dim toggleSerial_Button As Nuevo oDIO1Dim toggleSerial_Event As New oEventDim toggleSerial_Wire As New oWireDim serialReceive_Event As New oEventDim serialReceive_Wire As New oWire & apos ******** depurar objetos relacionados ******** Dim statLED As New oDIO1 & apos ******** ************************************* & apos * Subrutinas genéricas * & apos ****** *************************************** Sub principal & aposinicializar todo main_init & apostablecer nuestra máscara de salida a solo siga el centro de masa CMUCAM_setOutputMask (2, 3) y aposcargue nuestro marco de diferencia inicial CMUCAM_loadDiffFrame () y aposceda el cálculo de la diferencia CMUCAM_startDiffCalc (10) Finalizar SubSub main_init y aposinicializar un LED de estado statLED. IOLine = 7) Fin Su b & aposprocesses recibió paquetesSub processPacket () Dim mx As Byte Dim my As Byte & aposcheck for both Mx and My to be 0 & aposgranted if they are not 0, the location will be off (ie & aposT 12 34) & apospero luego ganaron & apost cumplieron el criterio 0 rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value & aposthe LED deben parpadear al unísono con el LED de seguimiento en la cámara Si (mx = "0") Y (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub & apos **************************************** **** & apos * Funciones de la cámara CMU * & apos ************************************ ******* & apostea el led dado en on, off, automatic & aposparam ledNum número de led (0, 1) y aposparam val off, on, auto (0, 1, 2) Función CMUCAM_ledSet (ledNum As Byte, val As Byte) Como Byte & aposVString no estaba & apost funcionando correctamente en el nuevo compilador … & apos no estoy seguro del antiguo & apostxBuff. VString = "L0 0" & apossetup nuestra cadena de comandos manualmente txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 & aposthe s La función tr $ apesta … así que ahora esto está sucediendo txBuff. Value = serial_toChar (ledNum) txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 txBuff. Value = serial_toChar (val) txBuff. Location = 4 txBuff. Value = 13 & aposenvía el comando serial_SendBufferEnd Sub & aposcarga la diferencia inicial frameSub CMUCAM_loadDiffFrame () & apossetup nuestra cadena de comandos manualmente txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. ValueBuff = "F. Location. Valor = 13 & aposenviar el comando serial_SendBufferEnd Sub & aposstarts calculando las diferencias de fotogramas & aposparam umbral de umbral (0-9) Sub CMUCAM_startDiffCalc (Thresh As Byte) Dim decenas As Byte & apossetup nuestra cadena de comandos manualmente txBuff. Location = 0 txBuff. LoxBuff "Value = " 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 decenas = umbral / 10 txBuff. Value = serial_toChar (decenas) txBuff. Location = 4 decenas = umbral / 10 txBuff. Value = serial_toChar (umbral-decenas) txBuff. Location = 5 txBuff. Value = 1 3 & aposend el comando serial_SendBufferEnd Sub & apostablece la máscara de salida & aposparam packetType tipo de paquete para enmascarar (0, 1, 2, etc.) vea la página 46 & aposparam mask valor de máscara para aplicar (0-255) Sub CMUCAM_setOutputMask (packetType como byte, máscara como byte) Dim cientos As Byte Dim decenas As Byte & apossetup nuestra cadena de comando manualmente txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = "" & apospacket tipo txBuff. Location = 3 txBuff. Value = serial_toChar (packetType) txBuff. Location = 4 txBuff. Value = "" & aposmask para aplicar txBuff. Location = 5 cientos = máscara / 100 txBuff. Value = serial_toChar (cientos) txBuff =. Location = 6 decenas (máscara-centenas) / 10 txBuff. Value = serial_toChar (decenas) txBuff. Location = 7 txBuff. Value = serial_toChar (máscara-centenas-decenas) & aposcarriage return txBuff. Location = 8 txBuff. Value = 13 & apossend the command serial_SendB & apossend the command serial_SendB & apossend the command serial_SendB ******************************************* & apos * Subrutinas en serie generales * & apo s ******************************************** & aposinicializa la serie portSub serial_init () & aposinitialize un botón para encender y apagar el puerto serial (encender para ejecutar, apagar para programar) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link (toggleSerial_Button. Value_Wire) toggleSerial. Enlace (toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue & aposinitialize un evento para almacenar en búfer nuestros datos serialReceive_Wire. Input. Link (serialPort. Received) serialReceive_Wire. Output. Link (serialReceive_Event. Operate) serialReceive_Winff = nuestro búfer de Ruptura de serialReceiveBosire. = 0 & aposinicializar nuestro puerto serial serialPort. Baud = cv9600 & aposinitializar nuestro LED de estado serial serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput & aposesperar aquí hasta que nuestro puerto serial sea activado Mientras serialPort. Operate = cvFalse WendEnd Sub y recibir datos en búfer finalización del paquete Sub serialRe ceive_Event_Code () & apos.received se vuelve falso cuando el búfer de 4 bytes está vacío While (serialPort. Received = cvTrue) & aposcopia el byte a nuestro búfer rxBuff. Value = serialPort. Value & aposcheck for end of packet If rxBuff. Value = 13 & aposprocess proceso & aposestablece el búfer al principio rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub & apostilla dentro y fuera del puerto serial para la programación Sub toggleSerial_Event_Code () Si serial_Event_Code () Si serial_Port. Operate = cvFalse serialPort. Operate 1 serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub & aposconvierte un número de un solo dígito en un carácter Función serial_toChar (inVal As Byte) As Byte Dim retVal As Byte Select 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 Seleccione serial_toChar = retValEnd Función & apos sen ds los datos contenidos en txBuff & apos Nota: asegúrese de que el búfer contenga un retorno de carro (13) al final !! Sub serial_SendBuffer () & apositerate through, enviando cada byte, finalizando en el retorno de carro txBuff. Location = 0. Value ooPIC. Delay = 1 & apospodría no necesitar esto & apossee si fue un retorno de carro If txBuff. Value = 13 & aposbreak out of our loop Return End If & aposgo al siguiente carácter txBuff. Location = txBuff. Location + 1 WendEnd Sub

Paso 4: desconecte el conector de programación

Desconecte el conector de programación
Desconecte el conector de programación
Desconecte el conector de programación
Desconecte el conector de programación

Una vez desconectado el conector de programación, conecte el nuevo conjunto de cables como se muestra a continuación. El adaptador hecho en el paso 1 debe permitir que el CMUCam se conecte directamente al OOPIC

Paso 5: presione el botón para inicializar la comunicación en serie

El botón de IOLine 5 iniciará la comunicación en serie entre CMUCam y OOPIC. Dado que el puerto serie se utiliza tanto para la programación como para la CMUCam, probablemente debería haber una forma controlada de alternar entre los dos.

El programa no se ejecutará hasta que se presione este botón. Si presiona el botón nuevamente, el puerto serial quedará inactivo, permitiéndole programarlo. El LED de IOLine 6 muestra el estado actual del puerto serie (encendido significa activo, apagado significa listo para programación).

Recomendado: