Archive for the ‘fablab’ Category
Hexapod in the press
IEEE Pervasive Computing magazine recently had an article featuring the hexapod..
TechFest 2012
Together with PLANETART and FullFormFreedom invited to show some of the robots at the TechFest 2012 festival in Mumbai, India.
MakerBot Thing-O-Matic
Ok, one could argue that it is cheeting, but before the PrinterPrinter is ready, I thought of taking a shortcut by building a makerbot first. The Thing-O-Matic works right out of the box (and about 200 m3×16 socket screws later):
PrinterPrinter @ Refab session
During Fab6, the international fablab conference, the printerprinter has been presented during a session on ‘refab’ at the fablab Amersfoort. Results of the workshop, presentation slides etc. can be found on the wiki. The workshop resulted in a set of ‘house rules’ for refab in fablabs (but they equally apply to work in whatever lab you’re making stuff):
- bring your own stuff, take your own waste
- be efficient with your design and materials (limit your waste)
- be efficient with your tools (hand tools are handy too)
- make it modular, upgradable, repairable, recyclable!
- make sure you know the material you are working with
- contribute your errors and mistakes (document!)
- mark what your thing’s made of (document!)
- reuse what you can find!
- build stuff to last
Repstrap using HP840c’s
With the StarLC10 matrix repstrap ending up as pizza plotter, a start has been made building a new 3D machine using only the parts of 3 HP deskjet 840c printers.
The printers contain many useful parts, the casing is made almost entirely out of ABS (printing material, hurray!)
Especially the sliders come in nice, rectangular frame’s which make mounting them easy. For the first tests a frame has been assembled using standard aluminum X-beams (boikon).
Using the cleaner bin (which normally brushes and seals the cartridge) a Z-axis has been made which has at least 8cm of travel:
Arduino-based control of a DC motor using incremental encoder and PID is not much more difficult than controlling a stepper motor. See the wiki for full documentation.
void setup(){
int oldposition;
Serial.begin(9600);
attachInterrupt(0, encoder, RISING);
pinMode(10,OUTPUT);
pinMode(12,OUTPUT);
setMotor(-150);
delay(50);
while(position!=oldposition) {
oldposition=position;
delay(50);
}
setMotor(0);
position=0;
}
void loop(){
if(millis()>time+1)
{
float setpoint = 1000+400*sin(n/200)+200*sin(n/50); // 1890 positions
float error = setpoint - position;
setMotor((int)(limit((Kp*error + Kd*(error-oldError) + limit((Ki*sumError),antiWindup)),255)));
oldError = error;
sumError+=error;
n++;
time=millis();
}
}
void encoder() {// encoder service routine
if (digitalRead(4)>0) position++;
else position--;
}
void setMotor(int value){ // set PWM of motor, value may range from -255 to 255
if (value>=0) {
digitalWrite(12,LOW);
analogWrite(10,value);
}
if (value<0) {
digitalWrite(12,HIGH);
analogWrite(10,value);
}
}
next up: including the extruder head, interfacing, making connections, shredding abs, making a scrap-2-3mm-wire extruder system, etc.. etc…
18-servo walker
New A4 flat-kit design: a 18-servo 6-legged hexapod. It does not walk (yet) but servo control works and the mechanics look good:
All parts can be cut from a single A4 sheet of acrylic glass. Other parts include 18 miniature servo’s (selling for 5EUR as TopLine mini-servo ES-05 JR (at Conrad Electronic)) and an ottantotto board
The servo’s are controlled using a simple soft-servo library (for the timebeing) which can be found here.
Flatpack Walker with Sensor
As presented for the first time on FAB6, using a Sharp gp2y0a02 sensor the flatpack-walker just got a little bit smarter. As long as the distance sensor is triggered, the robot walks backwards.
The code is still pretty simple:
// avoid obstacles using Sharp G2P sensor on Analog 0
#include <Servo.h>
Servo frontservo,backservo;
char walkpattern[] = {60,100,100,100,100,60,60,60};
void setup(){
frontservo.attach(9);
backservo.attach(10);
}
void loop(){
for(int n=0;n<4;n++){
if(analogRead(0)>500){
frontservo.write(walkpattern[2*n]);
backservo.write(walkpattern[(2*n)+1]);
}
else{
backservo.write(walkpattern[2*n]);
frontservo.write(walkpattern[(2*n)+1]);
}
delay(200);
}
}










