Robut

I wanted to make a simple robot chassis that could have things added to it as needed.
I decided to go with some pz22gr9120r gearmotors because they are cheap (~$3 each) and easy to find. The 1:84 gear ratio and 6-24V operating range means that they aren’t going to be going very fast on a 2s or 3s battery pack, but for just playing around I think that robustness is more important.

The top shell shown upside down.

The top of the shell shown upside down, tanning in the desert

The body has a 20 mm grid for attaching components and takes about 12 hrs to print. The bottom takes another 3.

R: face mount screws for gearbox  G: 20x20mm grid W: Melt inserts for attaching bottom B: holes for wires in/out of body

R: face mount screws for gearbox   G: 20x20mm grid   W: Melt inserts for attaching bottom   B: holes for wires in/out of body

The body has four mounts for the motors, which is going to be unnecessary for almost everything, but there isn’t much point in not putting them in. The motor diameter is 22mm, so popping a common skate bearing into the motor mount should be trivial. I’d probably just do a press fit and then melt it in. The motor mounts include (R) a face mount with screw holes and a notch for the face profile as well as (M) clamps mounting the body when the bottom is put on.

There are also (B) numerous holes for wires to pass through. The bottom plate is intended to be attached to the top using (W) (up to) 12 mount points with hot melt insert nuts. Accessories are intended to be attached to the top using (G) a 20 mm x 20 mm grid of holes.

Bottom plate

Pretty simple. I put some slits and screw holes on the bottom for sensors.

The bottom is mostly just intended to clam down the motors and protect the guts, but I added holes and stuff for more sensors. I figured maybe someone might want line following or something. Someone wanted help with a setup where they controlled mecanum wheels using a RC controller* so I slapped it together and it worked fine for that purpose.

I don't care for these wheels.

I don’t care for these wheels.

I am not a big fan of omni wheels so I went back to “normal” ones. I made a mount for an Uno and a distance sensor and tried it out.

Image of carbot

The lack of traction could be an issue.

It is a lot more fun to put my hand in front of it and make it move forward and backward. The code I used is at the bottom of this post. It is pretty simple, but it does what I wanted it to do, which is to act as a prototyping bed that I can add stuff to and try out. The motors have enough torque that I can put a bit of weight on it and not worry about it stalling, and mounting more sensors is super easy.

 

*is RC controller redundant? I feel like in this context in communicates what I mean so I’ll leave it.

CarPartsAPR2022 (STL files used to print the car thing)

//Simple arduno code to maintain a set distance to the object in front of it.
//Note that you may need to reset the arduno after plugging in the power
//to the motors so that the ESCs initialize correctly.
#include <Servo.h>

Servo FRmotor;
Servo FLmotor;
Servo BRmotor;
Servo BLmotor;

#define FRpin 6 //rev
#define FLpin 5 //rev
#define BRpin 9
#define BLpin 10

//Trims for ESC
#define TrimFR 5
#define TrimFL 25
#define TrimBR 0
#define TrimBL 0

//Scale factors for conversion from % to µs
#define MultiFR -5
#define MultiFL -5
#define MultiBR 5
#define MultiBL 5

void setup() 
{
 //init motors -assign to pins
 FRmotor.attach(FRpin);
 FLmotor.attach(FLpin);
 BRmotor.attach(BRpin);
 BLmotor.attach(BLpin);
 delay(100);
 Serial.begin(9600);
 delay(100);
}

void loop() 
{
 delay(500);
 int dst = analogRead(A0); //TOF IR used in analog mode
 Serial.println(dst); // for debug
 //if (dst > 400) {dst = 400;} //If I wasn't sloppy
 allMotors( 100 - dst/2); //Maintiain set distance (value range is ~0-400)
}

void stopMotors() 
{
 MotFR(0);
 MotFL(0);
 MotBR(0);
 MotBL(0);
}

void maxMotors() 
{
 MotFR(100);
 MotFL(100);
 MotBR(100);
 MotBL(100);
}

void allMotors(int Spd) 
{
 MotFR(Spd);
 MotFL(Spd);
 MotBR(Spd);
 MotBL(Spd);
}

void MotFR(int Speed)
{
 FRmotor.writeMicroseconds(TrimFR + 1500 + MultiFR * Speed);
}

void MotFL(int Speed)
{
 FLmotor.writeMicroseconds(TrimFL + 1500 + MultiFL * Speed);
}

void MotBR(int Speed)
{
 BRmotor.writeMicroseconds(TrimBR + 1500 + MultiBR * Speed);
}

void MotBL(int Speed)
{
 BLmotor.writeMicroseconds(TrimBL + 1500 + MultiBL * Speed);
}

Comments are closed.