fhunleth / elixirbot

Elixir robots created for Erlang Factory 2015

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ElixirBot

ElixirBot!!!

Parts

The following lists all of the parts except for the laser cut frame and 3D printed ball bearing holder. If you have a local hackerspace or Fab Lab, you're in luck. If not, companies like Pololu and Ponoko will do it for you, but I have not tested the designs with either of them.

Very useful items:

Building the frame

The robot frame is a modification of the awesome SumoBot Jr.. I've made the following modifications to the original design:

  1. Changed screw hole locations to mount a Raspberry Pi Model A
  2. Added a mount for a Pi Camera up front
  3. Added more room for batteries and enlarged the servo hole slightly
  4. Modified the wheels to screw into the servo horn rather than directly attaching (not completely sure that this is an improvement)

The dxf containing the laser cutter pattern was created in QCad. I cut the pattern in 5 mm birch plywood using a Full Spectrum laser cutter. The Full Spectrum driver isn't smart about which lines to cut first like the Epilog and Universal Laser drivers, so it has the cuts divided into "first" and "second" passes.

Building the electronics

First, order a PCB from OSH Park.

IMPORTANT: I messed up the drill size for the 4-40 mounts, so the mounting holes on the daughterboard need to be manually enlarged with a 7/64" drill bit. Don't worry, I left clearance.

Solder the surface mount parts first. For the 10K resisters, make sure that you have the orientation correct (same direction as silkscreen label). You'll see what I mean.

The remaining components are fairly straightforward to solder since they're through-hole. I didn't solder in the ISP connector, since I programmed the ATtiny85 chips before plugging them into the board.

See the ATtiny85 program for build and programming instructions.

Building

  1. Build a nerves_rpi_elixirbot_defconfig configuration of Nerves
  2. . ./nerves-env.sh in the Nerves directory
  3. Go here and run make

Post-mortem

One thing I learned on this project was that the Raspberry Pi does not support clock stretching on the I2C bus. Apparently, this was well documented, but I hadn't seen it beforehand. The I2C code on the ATtiny85 does stretch the clock, so if you rebuild this exactly, you will see I2C errors. With work, it may be possible to fix the clock stretching issue, but if I were to do this project again, I would look at another part besides the ATtiny85 or see if the RPi's PWM support is improved.

About

Elixir robots created for Erlang Factory 2015

License:Apache License 2.0


Languages

Language:Eagle 90.1%Language:JavaScript 2.8%Language:Elixir 2.6%Language:Arduino 2.5%Language:CSS 0.9%Language:HTML 0.6%Language:Prolog 0.4%Language:Makefile 0.0%