Let's Make Robots!

Finally finishing the "start here" bot.

I just got the part I need for the "start here" bot, which is the new GP2Y0A02YK0F. My first problem is, I can't remove the old GP2D12 from the cable that connects it to the PICAXE board. If I am also correct, The setup should be the same as the old GP2D12 right? Like where the wires are supposed to go?

 

EDIT: Okay, I got it working kind of. I see one infrared light on in the sensor, but the other doesnt show anything. Is it supposed to light up? Secondly, When i use the program on the "start here" page, My robot just looks left and right, turns, and repeats. Never drives forward. Any suggestions?

EDIT2: Well, after much struggle, I am at a loss. I have nothing else to do. The Sharp IR lights up, no smoke or smells, but whatever I try I just cannot get it to recognize my hand at all. Its hooked up correctly, I am sure of it. I measured 20cm back from the sensor, no response still. I am afraid that I must give up on this if I can't figure out a solution.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

oh sorry my bad i just gave you the code attached in the start here section

just give me few moments

try this and let me know

just copy paste

 

' This is the program ued to make the video on letsmakerobots.com/start. The program is optimized to make the robot look alive on video, and so it is made to stop up and look around at objects. and if it finds something close (like the camera ;) it stops and animates.
' The program is not optimized for abject avoidance or anything else like that.
' Makes a cute robot, though :) And if you made the robot just like the instructions, it should be ready to just download and run!

wait 5 ' just to give you time to put it down on the table

symbol way = bit0 ' which direction is head moving
symbol neck = b1 ' value for servo turning Sharp
symbol maxdistvalue = b2 ' max value for distance when panning
symbol maxdistvaluepos = b3 ' position where maxdistvalue is achieved
symbol dist = b4 ' Value returning from Sharp. non liniar, closer is higher, 35 is 40cm away, but from 100-150 (10 CM) it starts to count dramatically down
symbol lastturn = b5
symbol sharppin = 0
symbol servocenter = b6
symbol soundvar = b7
symbol servopin = 0

gosub lightoff

servocenter = 150

main:
servo servopin, servocenter ' look forward
gosub distance ' measure distance
   
    if dist > 60 and dist < 80 then ' hey, something ahead, turn a little to the side we where turning last time
    servocenter = 150
    gosub lighton
    if lastturn > 175 then
        gosub driveright
                inc lastturn
        else
            gosub driveleft
                inc lastturn
            end if
            gosub lightoff
            goto main
        end if   
   
if dist >80 and dist < 115 then ' Hey, lets have a look around
servocenter = 150

gosub totalhalt ' stop
    pause 500 ' make a natural stop
    gosub choser ' enter subroutine that decides where to look and stuff
    goto main ' now return and see if all is OK, and we can proceed
endif

if dist >= 115 then ' danger: Something is close
servocenter = 150
gosub totalhalt ' stop
gosub hard_chose
    goto main
endif

if dist < 90 then ' no danger. we can proceed
gosub driveforward ' drive forward
endif

if dist < 40 then ' Absolutely no danger. Look around while drivin
   
    if way = 1 then
    servocenter = servocenter +1 max 225
    else
    servocenter = servocenter -1 min 75
    end if
    if servocenter = 225  or servocenter = 75 then
        inc way
       
    end if

endif

goto main ' start over


choser:

 maxdistvalue = 0 maxdistvaluepos = servocenter ' initialize everything

for neck = servocenter to 75 step -1
    servo servopin, neck ' turn neck
    pause 30 ' allow servo to turn
    gosub distance ' measure distance
        if dist >70 then
            'pause 50 ' move hed slower on closer objects
            'neck = neck - 3 min 75
        end if
    if dist >  maxdistvalue then
            maxdistvalue = dist
            maxdistvaluepos = neck
    end if
next neck
servo servopin, maxdistvaluepos wait 1
servo servopin, servocenter pause 50 ' turn neck
   
for neck = servocenter to 225 step 1
    servo servopin, neck ' turn neck
    pause 30 ' allow servo to turn
    gosub distance ' measure distance
        if dist >70 then
            'pause 50 ' move hed slower on closer objects
            'neck = neck + 3 max 225
        end if
    if dist >  maxdistvalue then
            maxdistvalue = dist
            maxdistvaluepos = neck
    end if
next neck

'********
' maxdistvaluepos  is now where the closest object is
'here should be inserted: If really close, have a look, pause and move on
if maxdistvalue > 121 then
    servo servopin, maxdistvaluepos
    wait 2
    for soundvar = 120 to maxdistvalue
        sound 4, (soundvar, 1) pause 1
        sound 6, (soundvar, 1) pause 1
                sound 1, (soundvar, 1) pause 1
                sound 1, (soundvar, 1) pause 1
    next soundvar
end if
'wait 1 ' look back at the closest object


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'calculate opposite:
if maxdistvaluepos <= 150 then
    neck = 150 - maxdistvaluepos
    neck = neck +150
   
    servo servopin, neck ' turn head to opposite
    maxdistvaluepos = neck
    pause 200
    'start turning body and all
    for neck = maxdistvaluepos to 150 step -1
        servo servopin, neck ' turn neck while turning body
        gosub driveright pause 3 lastturn = 175
    next neck
   
    dontstopturningA: ' keep turning till we are frr in front
        gosub distance
            if dist > 60 then goto dontstopturninga
else
    maxdistvaluepos = maxdistvaluepos -150
    neck = 150- maxdistvaluepos
   
    servo servopin, neck ' turn head to opposite
    maxdistvaluepos = neck
    pause 200
    'start turning body and all
    for neck = maxdistvaluepos to 150 step 1
        servo servopin, neck ' turn neck while turning body
        gosub driveleft pause 3 lastturn = 0
    next neck
   
    dontstopturningB:
        gosub distance
            if dist > 60 then goto dontstopturningB
   
end if


'servo servopin, neck wait 10 ' look away from closest


return



hard_chose:
high 1
servo servopin, 75
wait 1
gosub distance
maxdistvalue = dist

servo servopin, 225
wait 1
gosub distance
    servo servopin, 150
    wait 1
   
    if  maxdistvalue > dist then
   
    turnon:
    gosub driveleft
    gosub distance
    if dist > 50 then goto turnon
   
    else
       
        turnoff:
        gosub driveright
            gosub distance
                if dist > 50 then goto turnoff
            end if
    low 1
return



distance:
readadc sharppin, dist
return

totalhalt:
low 4 low 5 low 6 low 7
return

driveright:
'servo servopin, alltv
high 5 low 4  ' h
high 7 low 6' v
return

driveleft:
'servo servopin, allth
high 4 low 5  ' h
high 6 low 7  ' v
return

driveforward:
low 4
high 5
high 6
low 7
return


lightoff:
high 2
return

lighton:
low 2
return

Now it just spins in a circle the same direction and does not stop.

probably the problem why your robot is turning is  because the motor pins are not matching with the code.

Try:

exchange the pins of the motor wires

Well I can't really exchange the pins since everything is already glued together. I could change the code but I am not exactly sure how to put it in. The values that worked for me were:

low 4

high 5

high 6

low 7

 

How do I put those into the code?

well before editing i would have to know that which pin runs which motor(left or right ) ?

The wire marked "A" goes to the left motor, and the one marked "B" goes to the right.

put this code

low 4

high 5

and tell me which wheel is moving forward(left one or the right one )

left

 

Oops, posted wrong