RC car lesson (#519)

* initial drop

* fixing summary

* adding images

* Adding basic connect code

* connect section

* moving video

* adding ignores
This commit is contained in:
Peli de Halleux 2017-08-25 17:02:13 -07:00 committed by GitHub
parent 588f127ddd
commit 743979b9ea
17 changed files with 261 additions and 0 deletions

View File

@ -30,6 +30,7 @@
* [Inchworm](/projects/inchworm)
* [Milk Carton Robot](/projects/milk-carton-robot)
* [Milk monster](/projects/milky-monster)
* [RC Car](/projects/rc-car)
* [Timing gates](/projects/timing-gates)
* [Compass](/projects/compass)
* [Telegraph](/projects/telegraph)

View File

@ -110,6 +110,10 @@ Fun games to build with your @boardname@.
"name": "Railway crossing",
"url":"/projects/railway-crossing",
"imageUrl":"/static/mb/projects/railway-crossing.png"
},{
"name": "Hacked RC car with Kitronik",
"url": "/projects/rc-car",
"imageUrl":"/static/mb/projects/rc-car.jpg"
}]
```

54
docs/projects/rc-car.md Normal file
View File

@ -0,0 +1,54 @@
# RC car
### ~avatar avatar
Hack a toy RC car with your @boardname@!
### ~
https://youtu.be/xQJCZwVvjyw
### ~ hint
This activity involves opening an electronic toy, cutting into cables and potentially rendering it completly useless.
### ~
## Materials
* Toy RC car with 4 or 6 AA batteries
* 1 @boardname@
* a cable trimmer
* small Philips screw driver
* [1 Kitronik motor driver](https://www.kitronik.co.uk/5620-motor-driver-board-for-the-bbc-microbit-v2.html)
## What's the plan?
Most toy RC car use 3 small DC motors to operate:
* 1 DC motor for the back wheels torque,
* 1 DC motor for the front wheels torque,
* 1 DC motor to steer the front wheels
The plan is to open up the RC car, remove the existing electronic controller and replace it with the motor driver
that can control 2 DC motors. We will connect both torque motors to one controller and the steering motor to the other controller.
Once the motor driver is connected, we will use a @boardname@ to control it. Another @boardname@ can also be used as a radio controller
for the @boardname@ in the car.
### ~ hint
Ask friends and family for old RC cars lying around, scout thrift shops and other second hand shops for discarded RC cars.
### ~
## Activities
* [Make](/projects/rc-car/make)
* [Code](/projects/rc-car/code)
* [Connect](/projects/rc-car/connect)
### ~button /projects/rc-car/make
Let's make it!
### ~

View File

@ -0,0 +1,72 @@
# Code
## Step 1: Add the Kitronik package
Kitronik published a set of blocks to use their motor driver. We need to add it to our project.
* Click on **Advanced**
* Click **Add Package**
* Type ``kitronik``, press **Enter**
* Select the **kitronik-motor-driver** package
After the package gets loaded, you should see a new **Kitronik" category in the toolbox.
## Step 2: Round and round we go!
https://youtu.be/pD6tM1nXCPA
The first program will have the car drive in a circle for 5 seconds when the user presses button ``A``.
This is simply done by turning both motor controllers on for 5 seconds.
```blocks-ignore
input.onButtonPressed(Button.A, () => {
basic.showIcon(IconNames.Happy)
kitronik.motorOn(kitronik.Motors.Motor1, kitronik.MotorDirection.Reverse, 100)
kitronik.motorOn(kitronik.Motors.Motor2, kitronik.MotorDirection.Forward, 100)
basic.pause(5000)
kitronik.motorOff(kitronik.Motors.Motor1)
kitronik.motorOff(kitronik.Motors.Motor2)
basic.showIcon(IconNames.SmallDiamond)
})
```
### ~ hint
Make sure to unplug the @boardname@ from the Edge connector while your are connecting it to your computer to avoid any kind of electrical problem.
### ~
Depending on how you've connected your cables to the motor driver, your car may be going backward instead of forward.
You can either swap the cables or change your code to account for that.
## Step 3: Figure Eight
https://youtu.be/agor9wtiAkE
Instead of stopping after 5 seconds, we reverse the steering motor to turn the other direction. This will create a figure eight trajectory.
```blocks-ignore
input.onButtonPressed(Button.A, () => {
basic.showIcon(IconNames.Happy)
kitronik.motorOn(kitronik.Motors.Motor1, kitronik.MotorDirection.Reverse, 100)
kitronik.motorOn(kitronik.Motors.Motor2, kitronik.MotorDirection.Forward, 100)
basic.pause(3500)
kitronik.motorOn(kitronik.Motors.Motor2, kitronik.MotorDirection.Reverse, 100)
basic.pause(3500)
kitronik.motorOff(kitronik.Motors.Motor1)
kitronik.motorOff(kitronik.Motors.Motor2)
basic.showIcon(IconNames.SmallDiamond)
})
```
Great! It's now time to use another @boardname@ to remove control the car.
### ~button /projects/rc-car/connect
Connect
### ~
```package
pxt-kitronik-motor-driver=github:kitronikltd/pxt-kitronik-motor-driver#v0.0.3
```

View File

@ -0,0 +1,54 @@
# Connect
https://youtu.be/XXesoUC0XBU
We are going to use radio to remote control the toy car.
A second @microbit@ will send commands to control the throttle and the steering.
```blocks-ignore
let steering = 0
let throttle = 0
radio.onDataPacketReceived( ({ receivedString: name, receivedNumber: value }) => {
led.toggle(0, 0)
if (name == "throttle") {
if (value > 0) {
kitronik.motorOn(kitronik.Motors.Motor1, kitronik.MotorDirection.Reverse, 100);
} else if (value < 0) {
kitronik.motorOn(kitronik.Motors.Motor1, kitronik.MotorDirection.Forward, 100);
} else {
kitronik.motorOff(kitronik.Motors.Motor1);
}
} else if (name == "steering") {
if (value > 0) {
kitronik.motorOn(kitronik.Motors.Motor2, kitronik.MotorDirection.Forward, 100);
} else if (value < 0) {
kitronik.motorOn(kitronik.Motors.Motor2, kitronik.MotorDirection.Reverse, 100);
} else {
kitronik.motorOff(kitronik.Motors.Motor2);
}
}
})
basic.forever(() => {
throttle = 0
if (input.buttonIsPressed(Button.A)) {
throttle = 100
} else if (input.buttonIsPressed(Button.B)) {
throttle = -100
}
radio.sendValue("throttle", throttle)
steering = 0
if (input.acceleration(Dimension.X) < -512) {
steering = -100
} else if (input.acceleration(Dimension.X) > 512) {
steering = 100
}
radio.sendValue("steering", steering)
})
radio.setGroup(12)
```
```package
radio
pxt-kitronik-motor-driver=github:kitronikltd/pxt-kitronik-motor-driver#v0.0.3
```

View File

@ -0,0 +1,76 @@
# Make
### @description Hacking the car electronics
### ~avatar avatar
Hack the @boardname@ into the car!
### ~
https://youtu.be/gH__3l_oDeM
## Materials
* a toy RC car with 4 or 6 AA batteries
* a cable trimmer
* small Philips screw driver
![A toy RC car](/static/mb/projects/rc-car/rccar.jpg)
## Step 1: Remove the batteries!
Make sure all the batteries are removed from the toy car!
## Step 2: Remove the cover
Remove the various protective covers until you have access to the electronic controller. Make sure to keep track of all the screws you remove,
you will need them again!
## Step 3: Cut out the electronic board
Follow the motor and power cables and cut the wires as close as possible from the electronic board. You should end up with a total of 8 cables:
2 for power, 2 for the steering motor and 2 pairs for the torque motors.
![Electronic board removed](/static/mb/projects/rc-car/elecremoved.jpg)
## Step 4: Prepare the cables
Using the wire trimmer, expose 1/4 inch (1/2 cm) of metal on each wire so you can attach it to the motor driver.
![Various cables](/static/mb/projects/rc-car/cables.jpg)
## Step 5: Connect the battery cables
* Connect the cables from the battery section to the power input on the motor shield.
Make sure the **+** cable goes into the **+** port!
* Connect both torque motors to the **motor 1** connector in the motor driver.
Make sure to connect the cables of same colors so that your wheel turn the same direction!
* Connect the remaining motor cables to the **motor 2** connector.
![Wiring](/static/mb/projects/rc-car/wiring.jpg)
## Step 6: Slot in the @boardname@
Probably the easiest step, insert the @boardname@ in the edge connector until clips in.
## (Optional) Step 7: Cut out a slot in the cover to fit the @boardname@
Depending on your car size, you may be able to fit back the decoration top back on the car.
Otherwise, get some cardboard, scissors and a glue gun to rebuild it yourself!
![Cutout](/static/mb/projects/rc-car/cutout.jpg)
## (Optional) Step 8: Paint job
Once you have replaced the cover (original or carboard), decorate it to your taste!
![Painted](/static/mb/projects/rc-car/painted.jpg)
That's it, it's time to code!
### ~button /projects/rc-car/code
Code
### ~

BIN
docs/static/mb/projects/rc-car.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
docs/static/mb/projects/rc-car/rccar.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB