Taula de continguts:

Interfície d'un CMUCam2 amb un OOPIC: 5 passos
Interfície d'un CMUCam2 amb un OOPIC: 5 passos

Vídeo: Interfície d'un CMUCam2 amb un OOPIC: 5 passos

Vídeo: Interfície d'un CMUCam2 amb un OOPIC: 5 passos
Vídeo: The Personal Rover Project: Robotics for the Masses 2024, De novembre
Anonim

Segueix-ne més per l'autor:

Connectar dos OOBoards junts mitjançant I2C
Connectar dos OOBoards junts mitjançant I2C
Connectar dos OOBoards junts mitjançant I2C
Connectar dos OOBoards junts mitjançant I2C

Descripció general de la interfície entre CMUCam2 i OOPIC.

Pas 1: fabricació del cable de l'adaptador

Creació del cable de l'adaptador
Creació del cable de l'adaptador

1. Aneu al radioshack i en compreu 2: Connector de soldadura DB-9 mascle2. soldeu el pin 5 del connector A fins el pin 5 del connector B (si mireu detingudament el connector, estan marcats) 3. soldeu el pin 2 del connector A fins el pin 3 del connector B (si mireu detingudament el connector, estan marcats) 4. pin de soldadura 3 del connector A fins al pin 2 del connector B (si fixeu-vos atentament en el connector, estan marcats)

Pas 2: canvieu la velocitat de transmissió a la CMUCam

Canvieu la velocitat de transmissió al CMUCam
Canvieu la velocitat de transmissió al CMUCam

Canvieu la velocitat en bauds de la CMUCamera a 9600 baud (afegiu un pont a la posició 0).

Pas 3: connecteu el cable de programació estàndard i el codi de càrrega

Connecteu el cable de programació estàndard i el codi de càrrega
Connecteu el cable de programació estàndard i el codi de càrrega

Connecteu el cable de programació estàndard i pengeu el vostre codi. Aquí teniu un exemple de codi per començar. Aquest codi farà un seguiment del moviment mitjançant les ordres LF i FD. Commutarà IOLine 7 (connectat a un LED) i reflectirà el LED d’estat de seguiment al CMUCam.

& apos ******** objectes relacionats amb el port sèrie ******** Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 & aposchange the 27 per fer el buffer més gran / petitDim rxBuff As New oBuffer10Dim serialActive_LED As New oDIO1Dim toggleSerial_Button As Nou oDIO1Dim toggleSerial_Event com a nou oEventDim toggleSerial_Wire com a nou oWireDim serialReceive_Event com a nou oEventDim serialReceive_Wire com a nou oWire i apos ******** objectes relacionats amb la depuració ******** Dim statLED Com a nou oDIO1 i apos ***** ************************************** & apos * Subrutines genèriques * i apos ****** **************************************** Sub main & aposinicialitzar tot main_init & aposset la nostra màscara de sortida a només segueix el centre de massa CMUCAM_setOutputMask (2, 3) i descarrega el nostre marc de diferència inicial CMUCAM_loadDiffFrame () & inicia el càlcul de la diferència CMUCAM_startDiffCalc (10) End SubSub main_init & aposinitialize a LED status statLED. IOLine = 7 statLED. Direction = serial) Fi Su b & aposprocessos rebuts paquets SubprocésPacket () Dim mx As Byte Dim my As Byte & aposcheck per a Mx i My per ser 0 & aposgranted si no són 0, la ubicació estarà desactivada (és a dir, & aposT 12 34) & apos, però llavors guanyaran i apostaran als 0 criteris rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value & aposthe led haurien de parpellejar a l'uníson amb el LED de seguiment de la càmera If (mx = "0") I (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub & apos ****************************************** **** & apos * Funcions CMU Cam * & apos *************************************** ******* & apossets el led donat a on, off, automatic & aposparam led Nombre de leds (0, 1) & aposparam val off, on, auto (0, 1, 2) Funció CMUCAM_ledSet (ledNum As Byte, val As Byte) Com Byte i aposVString no funcionaven i apostaven directament al nou compilador … & No estic segur de l'antic & apostxBuff. VString = "L0 0" & apossetup la nostra cadena d'ordres manualment txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 & aposthe s La funció tr $ és una merda … així que ara està passant 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 l'ordre serial_SendBufferEnd Sub & descarrega la diferència inicial frameSub CMUCAM_loadDiffFrame () & apossetup la nostra cadena d'ordres manualment txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" txBuff. Location = 2 txBuff. Valor = 13 & apossend l'ordre serial_SendBufferEnd Sub & aposstarts calculant les diferències de fotogrames i el llindar aposparam (0-9) Sub CMUCAM_startDiffCalc (thrh As Byte) Dim tens As Byte & apossetup la nostra cadena d'ordres manualment txBuff. Location = 0 txBuff. Value = "F" txBuff. Location 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 desenes = batre / 10 txBuff. Value = serial_toChar (desenes) txBuff. Location = 4 desenes = batre / 10 txBuff. Value = serial_toChar (thres-tens) txBuff. Location = 5 txBuff. Value = 1 3 & Apossend the command serial_SendBufferEnd Sub & Apossets the output mask & aposparam packetType type of paquet to mask (0, 1, 2, etc) see page 46 & aposparam mask mask value to apply (0-255) Sub CMUCAM_setOutputMask (packetType As Byte, mask As Byte) Dim centenars As Byte Dim tens As Byte & apossetup our string command manually txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = "" & apospacket type txBuff. Ubicació = 3 txBuff. Value = serial_toChar (packetType) txBuff. Location = 4 txBuff. Value = "" & mascareta per aplicar txBuff. Location = 5 centenars = màscara / 100 txBuff. Value = serial_toChar (centenars) txBuff. Location = 6 desenes = (mask-centenars) / 10 txBuff. Value = serial_toChar (desenes) txBuff. Location = 7 txBuff. Value = serial_toChar (màscara-centenars) & aposcarriage retorn txBuff. Location = 8 txBuff. Value = 13 & apossend l'ordre serial_SendBufferEnd Sub & apos * ************************************************** & apos * Subrutines generals de sèrie * & apo s ********************************************** i aposinicialitza el serial portSub serial_init () & aposinicialitza un botó per activar i desactivar el port sèrie (activar per executar, apagar per programar) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link (toggleSerial_Button. Enllaç (toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue & aposinitialize a event to buffer our data serialReceive_Wire. Input. Link (serialPort. Received) serialReceive_Wire. Output. Link (serialReceive_Event. = 0 & aposinitialize our serial serial serialPort. Baud = cv9600 & aposinitialize our serial serial LED serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput & espera aquí fins que el nostre port sèrie s'activi Mentre serialPort. Operate = cv finalització del paquet Sub serialRe ceive_Event_Code () & apos.received es converteix en fals quan el buffer de 4 bytes està buit Mentre (serialPort. Received = cvTrue) & aposcopieu el byte al nostre buffer rxBuff. Value = serialPort. Value & aposcheck per al final del paquet If rxBuff. Value = 13 & aposprocess & restableix la memòria intermèdia al començament rxBuff. Location = 0 Altres rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub i apaga i activa el port sèrie per a la programació Subhasta toggleSerial_Event_Code () Si serialPort. Operate = cvFalse serialPort. Operate = cvFerial serialPort serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub & aposconverteix un número de sol dígit en un personatgeFunció 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" Cas 3 retVal = "3" Cas 4 retVal = "4" Cas 5 retVal = "5" Cas 6 retVal = "6" Cas 7 retVal = "7" Cas 8 retVal = "8" Cas 9 retVal = "9" Final Selecciona serial_toChar = retValEnd Function & apos sen ds les dades contingudes a txBuff i apos Nota: assegureu-vos que la memòria intermèdia conté un retorn de carro (13) al final !! Sub serial_SendBuffer () & apositerate through, send each byte, end on carriage return txBuff. Location = 0 While 1 serialPort. Value = txBuff. Valor ooPIC. Delay = 1 & aposmight no necessita aquest & apossee si es tracta d'un retorn de carro Si txBuff. Value = 13 & aposbreak fora del nostre bucle Retorn Final Si & aposgo al següent caràcter txBuff. Location = txBuff. Location + 1 WendEnd Sub

Pas 4: desconnecteu el connector de programació

Desconnecteu el connector de programació
Desconnecteu el connector de programació
Desconnecteu el connector de programació
Desconnecteu el connector de programació

Un cop desconnectat el connector de programació, connecteu el nou conjunt de cables com es mostra a continuació. L'adaptador fabricat al pas 1 hauria de permetre connectar directament la CMUCam a l'OOPIC

Pas 5: premeu el botó per inicialitzar la comunicació en sèrie

El botó d'IOLine 5 iniciarà la comunicació en sèrie entre el CMUCam i l'OOPIC. Atès que el port sèrie s'utilitza tant per a la programació com per a la CMUCam, probablement hi hauria d'haver una manera controlada de commutar entre els dos.

El programa no s'executarà fins que no es prem aquest botó. Si torneu a prémer el botó, el port sèrie quedarà inactiu i us permetrà programar-lo. El LED de l’IOLine 6 mostra l’estat actual del port sèrie (encès significa actiu, apagat significa llest per a la programació).

Recomanat: