Clear all

K8055 Robot

5 Posts
2 Users
Noble Member
Joined: 4 years ago
Posts: 1659
Topic starter  

To test this setup I ran the K8055 demo. By moving the DA1 slider up and down I could change the speed of the motor. By selecting different combinations of Outputs 1 and Output 2  I could change the direction of the motor. There are k8055 commands that can be used in your own software running on the PC that will write or read the same data as in the k8055 demo.

In my larger and now defunct k8055 robot base (failed motor) I wired up my own h-bridge but now I am using a smaller robot base using two motors from a robot vacuum cleaner the L289 should do the job. The BASIC code I wrote for the old robot base should work on this smaller robot base.

Tomorrow I will wire up the second motor and place them and the circuits back into the robot base. The wireless keyboard you see in front of the laptop is used to send commands to the robot's laptop brain. I will give some demo code written in BASIC (although it can also be written in C++). This means you don't have to plug an Arduino into the PC every time you want to change the code. All you have to do is write and/or run whatever robot program you want on the laptop making use of all the developmental software a laptop provides. You can also use the PC for speech, speech recognition, playing sounds, internet connection and so on and make use of the inbuilt webcam to give the robot vision. The laptop screen can have a robot face for showing emotions.



Robo Pi
Noble Member
Joined: 4 years ago
Posts: 1909

Looks like the birth of a baby Arlo.  A computer screen face will make the face part of it really easy. Looks like you are well on your way to having a fully functional robot in the very near future.  Cool.

DroneBot Workshop Robotics Engineer

Noble Member
Joined: 4 years ago
Posts: 1659
Topic starter  

I have always considered a pc as giving you the best bang for your buck when it comes to a robot brain. The problem I had was they took away the parallel ports replacing them with USB ports and created a complex multitasking operating system making the pc impossible for me to use as a robot controller with my limited self taught knowledge. The K8055 changed all that but by then I had other things taking up most of my life so it was a halfhearted effort to build the first k8055 robot base when I lucked upon some powerful geared motors. All was going fine until one of the motors failed. Now some years later I am giving it another go with a weaker robot base that is sufficient to test some ideas and even perhaps do some interesting stuff.

As for the robot face and speech that is last on my list I was just pointing out how easy and cheap that would be no special extra hardware to purchase.  My first interest is just getting the robot base to map and navigate a house. Also the K8055 is just a stop gap until I have my own Arduino based intelligent USB interface between the laptop and the sensors and motors. Also I have been experimenting with the RPi and its high level software access to its GPIO pins as a possible addition in future designs.

But for now all I want is to get an easy to program working robot base up and running as a platform for testing coding ideas and different types of sensors.


Noble Member
Joined: 4 years ago
Posts: 1659
Topic starter  
'' create a function pointer, arguments must be the same
'' as in the original function

Dim OpenDevice As Function (Byval CardAddress As Long) As Long
Dim CloseDevice As Sub

Dim SetAllDigital As Sub
Dim ClearAllDigital As Sub
Dim SetDigitalChannel As Sub (Byval As Integer)
Dim ClearDigitalChannel as sub (Byval as integer)
Dim WriteAllDigital As Sub(Byval As Integer)

Dim ReadAnalogChannel as Function(Byval CardAdress As Integer) As Integer
Dim ReadAllAnalog As Sub(Byval As Integer Ptr, Byval As Integer Ptr)
Dim OutputAnalogChannel As Sub (Byval As Integer, Byval As Integer)
Dim OutputAllAnalog  As Sub (Byval As Integer, Byval As Integer)
Dim ClearAnalogChannel As Sub (Byval As Integer)
Dim SetAllAnalog As Sub ()
Dim ClearAllAnalog As Sub ()
Dim SetAnalogChannel As Sub (Byval As Integer)

Dim ReadDigitalChannel As Function (Byval As Integer) As Integer
Dim ReadAllDigital As Function () As Integer
Dim ReadCounter As Function (Byval As Integer) As Integer
Dim ResetCounter As Sub (Byval As Integer)
Dim SetCounterDebounceTime As Sub (Byval As Integer, Byval As Integer)
Dim hndl As Any Ptr


'' find the procedure address (case matters!)
OpenDevice = DyLibSymbol( hndl, "OpenDevice" )
CloseDevice = DyLibSymbol( hndl, "CloseDevice" )

SetAllDigital = DyLibSymbol( hndl, "SetAllDigital" )
ClearAllDigital = DyLibSymbol( hndl, "ClearAllDigital" )
SetDigitalChannel = DyLibSymbol(hndl, "SetDigitalChannel")
ClearDigitalChannel = DyLibSymbol(hndl, "ClearDigitalChannel")
WriteAllDigital = DyLibSymbol( hndl,"WriteAllDigital")

ReadAnalogChannel = DyLibSymbol( hndl,"ReadAnalogChannel")
ReadAllAnalog = DyLibSymbol( hndl, "ReadAllAnalog")
OutputAnalogChannel = DyLibSymbol( hndl,"OutputAnalogChannel")
OutputAllAnalog  = DyLibSymbol( hndl,"")
ClearAnalogChannel = DyLibSymbol( hndl, "ClearAnalogChannel")
SetAllAnalog = DyLibSymbol( hndl, "SetAllAnalog")
ClearAllAnalog = DyLibSymbol( hndl,"ClearAllAnalog")
SetAnalogChannel = DyLibSymbol( hndl,"SetAnalogChannel")

ReadDigitalChannel = DyLibSymbol( hndl, "ReadDigitalChannel")
ReadAllDigital = DyLibSymbol( hndl,"ReadAllDigital")
ReadCounter = DyLibSymbol( hndl,"ReadCounter")
ResetCounter = DyLibSymbol( hndl, "ResetCounter")
SetCounterDebounceTime = DyLibSymbol( hndl, "SetCounterDebounceTime")

screenres 640,480,32  'open a 640x480 window with 32 bit colors

'' then call it..
Print "opening"
Print "opened"
Sleep 1000

ClearAllDigital()  'clear all digital outputs
print "All Clear"


    if multikey(&H2C) then          'forward direction of motor1 [Z] key
        OutputAnalogChannel(1,192)  'start motor1
    elseif multikey(&H2E) then      'reverse direction of motor1 [C] key
        OutputAnalogChannel(1,192)  'start motor1
        OutputAnalogChannel(1,255)  'stop motor1
    end if
    if multikey(&H33) then          'forward direction of motor2 [,] key
        OutputAnalogChannel(3,192)  'start motor2
    elseif multikey(&H35) then      'reverse direction of motor1 [?] key
        OutputAnalogChannel(3,192)  'start motor2
        OutputAnalogChannel(3,255)  'stop motor2
    end if
    sleep 2
loop until multikey(&H01)



'now shut down the device
Print "closing"
CloseDevice ()
Print "closed"
DyLibFree hndl


Noble Member
Joined: 4 years ago
Posts: 1659
Topic starter  

So I have wired up the second motor and tested it with a little program shown in the previous post that allows you to drive around using keys [Z] and [C] together as a toggle switch for one motor and keys [,] and [?] as another toggle switch for the other motor to drive the robot base around like a tank.
The program was written in FreeBASIC  although it can be written in other languages as well that can make use the k8055.dll that comes as part of the K8055 board to send and receive messages with a PC.
The PWM signals are inverted thus 255 means STOP while 0 is full speed ahead.