-
1Leg Module
In one week, for less than $500., we can have a four leg module.
To make the module stand and walk, power and control need to be provided and that will add about $100. more in cost (Arduino, battery, switches, voltmeter, wire, connectors).
As shown in the Hackaday Prize Video, the dog costs less than $600.
Here's what the module should look like:
Let's start with a list of materials needed. First, there are the 3d printed parts (files available on this site).
Bill of Materials
(4) Super Servo Holder
(4) Axle Shorter Thread
(8) Back Bearinga
(4) Fat Pieceb
(4) Bearing Linear
(4) Axle Nut
(4) Upper LegA
(4) Super Servo Combo
(36) Axle Bolt
(4) Ankle Servo Conn
(4) Lower Leg
(4) Foot Holdera
(4) Axle
(4) Foot
(4) Wire Guide
Other Parts:
(32) m3 x 16mm bolts
(32) flat washers for m3 bolts
(48) m3 nuts
(8) FT 5335M servo motors (Pololu.com)
(8) aluminum horn for FT 5335M servo (pololu.com)
(20) 2-56 x 7/16" bolts
(28) 2-56 nuts
(24) m3 x 8mm bolts
(4) 20 kg-cm servo motor (amazon.com)
(1) Arduino Uno
(1) 8 volt 3.2 amp hr. sealed lead acid battery (amazon.com)
(1) digital voltmeter (amazon.com)
(2) heavy duty toggle switch (amazon.com)
(16) m3 x 12 mm bolts
(8) 2-56 x 3/4" bolts
(8) lockwashers for 2-56 bolts
(1) plywood body 1/2" plywood 28" x 10"
(1) paint for plywood body
(16) #6 x 1 1/4" wood screws
(24) #6 x 3/4" wood screws
(4) 5 position terminal blocks
(4) number 4 x 1/2" wood screw
(4) servo extension cable
(1) aluminum duct tape (or any other tape)
(4) small tie wrap
(1) 8" diameter styrofoam ball
oval styrofoam, glue, paint, google eyes, brown faux fur fabric, brown
giant chenille stem
For the body, I examined several materials and decided to go with 1/2" plywood. The body requires about 200 square inches of material. Below are some of the materials considered:
1/4" plywood 2.15 grams per square inch
1/2" plywood 4.3 grams per square inch
1/4" acrylic 4 grams per square inch
5 mm foam board .59 grams per square inch
1/4" plywood is too flexible--I had bending problems requiring support on the early dog versions.
5 mm foam board looks great in theory, but I had doubts about the stiffness and my ability to connect things securely.
1/4" acrylic would look "cool," but it's not so easy for me to work with.
I examined carbon fiber sheets, but that looked like a project unto itself.
I cut the plywood in a shape to reduce the weight.
Then, I painted the plywood.
-
2Assembling the Leg
Here's the main pieces.
Attach a servo motor to "Super Servo Holder" using (4) m3 x 16 mm bolts, nuts and flat washers.
Set the left front shoulder servo to the ccw rotation maximum, 150 degrees.
I printed (4) axles with shorter threads ("axle shorter thread"), then attached the servo horns.
I slide this piece ("axle shorter thread") through "bearing linearb."
Thread "fat pieceb" onto this.
Drill holes 25 mm deep using a 7/64 inch drill bit. Install (4) 20 mm M3 machine screws.
Add the servo horn and back bearing piece.
Set Servo Twist Motor to 90 degrees. Attach "Servo Twist Holder" to "Upper Lega" using (4) m3 x 12 mm bolts and nuts.
Install motor in "Super Servo Combo" using (4) m3 x 16 mm bolts, nuts and flat washers.
Attach "Super Servo Combo" to "Upper Lega" using (4) 3d printed "axle bolts."
Set "Super Servo Combo" motor to cw max--30 degrees.
Attach "back bearinga" to "Ankle Servo Conn" using (3) m3 x 8 mm bolts.
Attach aluminum servo horn to "Ankle Servo Conn" using (2) 2-56 x 3/4" bolts, nuts and lockwashers.
Connect "Ankle Servo Conn" to "Lower Leg" using (1) "Axle Bolt."
Connect "Foot Holdera" to "Lower Leg" using (2) "Axle Bolts."
Place "Axle" in "Foot." It's a loose fit.
Insert foot/axle into "Foot Holdera."
Secure foot using (2) "Axle Bolts."
Connect lower leg assembly to upper leg assembly by attaching "Ankle Servo Conn" to servo motor. Leg should be in sitting position. Insert servo horn screw and tighten.
Adjust "fat pieceb" so that leg will be in sitting position. Insert servo horn screw and tighten.
Place "Servo shoulder holder" and "Bearing Linearb" on plywood body. Assume sitting position for dog. Secure using (4) number 6 x 1 1/4" screws and (4) number 6 x 3/4" screws.
Insert servo twist motor into "fat pieceb." Install and tighten servo horn screw.
Install 5 position terminal block using (2) number 6 x 3/4" wood screws.
Install wire guide. Use (1) number 4 x 1/2" wood screw.
Connect servo extender cable to "Super Servo Combo" servo motor.
Route cable and secure using duct tape. Secure servo wire to "Servo Twist Holder" using a tie wrap.
Secure wires in terminal blocks. From outside looking in, position number 1 (left most) is upper servo control wire. Position 2 is "servo twist" control wire. Position 3 is lower ("super servo combo") control wire. Position 4 is positive. Position 5 is negative.
Do this three more times. Left front and right rear legs are the same.
Right front and Left rear legs are set up with the "Servo shoulder motor" set to the maximum cw limit (30 degrees) instead of 150 degrees.
-
3Control and Power
To make the dog move, power and control must be provided. The legs are attached to an Arduino and battery as shown in the schematic diagram below.
Connect the motor power terminal blocks using #18 AWG wire.
Add the Arduino.
Connect the left front leg to the Arduino.
Add control to the right front leg from the Arduino.
Add control to the right rear leg.
Finally, connect the left rear leg.
The power supply is a combination of an 8 volt lead acid battery (sealed), a voltmeter and two switches. Lugs slide onto the battery--they can be removed for recharging. The power supply is mounted on 1/4 inch plywood and the plywood is attached to the body using Velcro. A disconnect plug from the power supply enables the entire supply to be quickly removed or swapped.
The voltmeter is not absolutely necessary, it's just handy so that the battery status can be easily monitored.
The head and tail reduce the "uncanny valley" effect and increase the "doglike" look. The head was formed using an 8 inch diameter foam ball (carved for shape). The muzzle is a styrofoam oval--the nose a small circle. The neck was carved from a styrofoam oval. The ears are brown faux fur fabric (craft store) and the tongue is pink foam. Add google eyes, paint and glue for the head. A 1" x 2" rectangle of wood was inserted into the neck (square hole cut out first) and that is used to mount the head to the dog. The tail is a "brown giant chenille stem" (doubled).
-
4Software
Making the dog walk is quite the challenge, so here's my approach. I created a drawing showing "standing" leg positions in black and progressive changes in red.
The approach is to:
1) lift the left front and right rear legs
2) move the left front and right rear legs forward and down
3) lift the right front and left rear legs
4) return the left front and right rear legs to normal position
5) move the right front and left rear legs down to normal position
REPEAT
The sketch is leg lift direct1013 in the files.
The code looks like this:
#include <Servo.h>
Servo lfupper;
Servo lfmid;
Servo lflower;
Servo rfupper;
Servo rfmid;
Servo rflower;
Servo rrupper;
Servo rrmid;
Servo rrlower;
Servo lrupper;
Servo lrmid;
Servo lrlower;int a=131;//lf upper
int b=99;//lf mid
int c=42;//lf lower
int d=46;//rf upper
int e=98;//rf mid
int f=38;//rf lower
int g=150;//rr upper
int h=96;//rr mid
int j=30;//rr lower
int k=48;//lr upper
int m=102;//lr mid
int n=50;//lr lowerint z=0;//counter value
int st=0;//number of steps valueint p=100;//delay value
int tilt=200;//lean delay timevoid setup() {
lfupper.attach(0);
lfupper.write(131);
lfmid.attach(1);
lfmid.write(99);
lflower.attach(2);
lflower.write(42);
rfupper.attach(3);
rfupper.write(46);
rfmid.attach(4);
rfmid.write(98);
rflower.attach(5);
rflower.write(38);
rrupper.attach(6);
rrupper.write(150);
rrmid.attach(7);
rrmid.write(96);
rrlower.attach(8);
rrlower.write(30);
lrupper.attach(9);
lrupper.write(48);
lrmid.attach(10);
lrmid.write(102);
lrlower.attach(11);
lrlower.write(50);
delay(10000);}
void loop() {
//lower and raise lf leg
for (int z=131; z>=95; z--) {//move leg toward stand 85
a=a-1;
lfupper.write(a);
c=c+2;//move lower leg toward stand
lflower.write(c);d=d+1;//rf leg toward stand
rfupper.write(d);
f=f+2;
rflower.write(f);k=k+1;//lr leg toward stand
lrupper.write(k);
n=n+2;
lrlower.write(n);g=g-1;//rr leg toward stand
rrupper.write(g);
j=j+2;
rrlower.write(j);
delay(p);
}delay (5000);//wait in stand position
//lift lf and rr feet
for (int st=0; st<20; st++) {a=a+7;
c=c-14;g=g+7;
j=j-14;lfupper.write(a);
lflower.write(c);rrupper.write(g);
rrlower.write(j);
delay(500);//put lf and rr down in new position
a=a-14;//makes a=a-7
c=c+9;//makes c=c-5j=j+21;//makes j=j+7
lfupper.write(a);
lflower.write(c);rrlower.write(j);
delay(1000);
f=f-14;
k=k-7;
n=n-14;g=g-7;
j=j-7;a=a+7;
c=c+5;rflower.write(f);
lrupper.write(k);
lrlower.write(n);rrupper.write(g);
rrlower.write(j);lfupper.write(a);
lflower.write(c);delay(500);
f=f+14;
k=k+7;
n=n+14;rflower.write(f);
lrupper.write(k);
lrlower.write(n);
delay(500);
}delay(5000);
//should be in normal position
for (int z=95; z<=131; z++) {//move back toward sit 85
a=a+1;
lfupper.write (a);
c=c-2;//move lower leg toward sit
lflower.write(c);d=d-1;//rf leg toward sit
rfupper.write(d);
f=f-2;
rflower.write(f);k=k-1;//lr leg toward sit
lrupper.write(k);
n=n-2;
lrlower.write(n);g=g+1;//rr leg toward sit
rrupper.write(g);
j=j-2;
rrlower.write(j);
delay (p);
}delay(5000);//wait
}
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.