Blog 17

From BitWizard Wiki
Jump to navigation Jump to search

2 Wheel controlled car

I made this on the Raspbery Pi for the stepper motor and for 'electric wheels'.

Stepper motor version

Hardware I used on my Raspberry Pi:

Programming:

  • Bash

The full car just went to be a carton box, with everything attached to it with tieraps.

3D printed wheels code

I made the wheels in OpenSCAD and let them be printed out on a 3d printer. The diameter of the wheel is 60mm and is 12mm high. The hole in the middle was made to put in the 28BYJ-48 Stepper Motor. The OpenSCAD code:

$fs=0.2; $fa=2;

module stepperas(d=5, l=25, t=3) 
{
  difference()
  {
    cylinder (r=d/2 , h=l);
translate ([t/2, -5, -1])   cube([10, 20, l+2]);
translate ([-t/2-10, -5, -1])  cube([10, 20, l+2]);

  }
} 

difference()
{
  union () {
    difference () {
      cylinder (r=60/2 ,h=12);
      translate ([0, 0, 1.5])
        cylinder (r=50/2, h=20);
    }
    cylinder (r=6,h=6);
  }  

  translate ([0, 0, -1]) 
    stepperas(5.2, 20, 3.2);
}

The result of the OpenSCAD code (Press F5 to see it in OpenSCAD):

OpenSCADRes.png

Code

Here is a list of the commands one of each other, that you could send to the stepper motor.

#!/bin/bash

#Address=spi0   address2=spi1
Address="bw_tool -s 50000 -a 88"
Address2="bw_tool -S -D /dev/spidev0.1 -a 88"

#800 is rotating a full circle 
Rot=800 
Target=`$Address -R 41:i`

Speed1=0x200
Speed2=0x100
#Speed3=0x50
#Speed4=0xff

#Turn left
$Address -W 43:$Speed1:b
$Address -W 42:$Rot:i
$Address2 -W 43:$Speed2:b
$Address2 -W 42:$Rot:i
sleep 10

#Turn Right
$Address -W 43:$Speed2:b
$Address -W 42:$Rot:i
$Address2 -W 43:$Speed1:b
$Address2 -W 42:$Rot:i
sleep 10

#Go Forwards
$Address -W 43:$Speed2:b
$Address -W 42:-$Rot:i
$Address2 -W 43:$Speed2:b
$Address2 -W 42:$Rot:i
sleep 10

#Go Backwards
$Address -W 43:$Speed2:b
$Address -W 42:$Rot:i
$Address2 -W 43:$Speed2:b
$Address2 -W 42:-$Rot:i
sleep 10

#Spin right
$Address -W 43:$Speed2:b
$Address -W 42:$Rot:i
$Address2 -W 43:$Speed1:b
$Address2 -W 42:-$Rot:i
sleep 10

#Spin left
$Address -W 43:$Speed2:b
$Address -W 42:-$Rot:i
$Address2 -W 43:$Speed1:b
$Address2 -W 42:$Rot:i

'Electric wheels' version

Hardware I used on my Raspberry Pi:

I also used some tieraps to attach the wheels on a board.

Programming:

  • Bash

Script:

#!/bin/bash

#Wheel A left forward
#Wheel B Right forward 

# X is forwards - Y is backwards
#Wheels at front
#20  A backwards
#21  A forwards
#22  A stop
#30  B backwards
#31  B forwards
#32  B stop
 
Address="bw_tool -I -D /dev/i2c-1 -a 90"
Speed="80"
Speed2="40"

while true; do
  BUTTON=`bw_tool -I -D /dev/i2c-1 -a 94 -R 30:b`

  if [ $BUTTON  = "20" ]; then
  #Car going forwards
  $Address -W 21:$Speed:b
  $Address -W 31:$Speed:b
  fi

  if [ $BUTTON  = "10" ]; then 
  #Car going backwards
  $Address -W 20:$Speed:b
  $Address -W 30:$Speed:b
 
  if [ $BUTTON  = "08" ]; then 
  #Car going left
  $Address -W 21:$Speed2:b
  $Address -W 31:$Speed:b
  fi

  if [ $BUTTON  = "04" ]; then 
  #Car going right
  $Address -W 21:$Speed:b
  $Address -W 31:$Speed2:b
  fi

  if [ $BUTTON  = "02" ]; then 
  #Car Stop
  $Address -W 22:$Speed:b
  $Address -W 32:$Speed:b
  fi

  if [ $BUTTON  = "01" ]; then 
  exit
  fi

  sleep 1
done

Other movements:

#Spinning right
bw_tool -I -D /dev/i2c-1 -a 90 -W 20:80:b
bw_tool -I -D /dev/i2c-1 -a 90 -W 31:80:b

#Spinning left
bw_tool -I -D /dev/i2c-1 -a 90 -W 21:80:b
bw_tool -I -D /dev/i2c-1 -a 90 -W 30:80:b

I think the code pretty much explains itself with the extra info I have given it. I used the push buttons as example of how it could be used. All the protocols can been found in Motor protocol.


Useful links