I started off by measuring the OBLS (93mm x 48mm), and making a test box 5mm wider than it in each direction. I added some circles for bolt holes to the corners, and cut a test piece out of cardboard out using fablab’s Epilog Laser Cutter.
This piece seemed to be the right size, so I drew up the second layer, with the middle cut out, and a 1cm wide space for the USB socket. this was printed and checked, and I proceeded to the third layer with cutouts for the header and the USB socket.
After I was happy with the measurements on this mockup case, I cut out a copy in clear acrylic:
Assembled it:
Disaster! I had given enough room for the USB plug, but not for the USB cable that plugs into it. I modified the top of the case with a cutout for the plug, and widened the USB hole to 12mm to compensate.
Cut out another copy with the modifications, and a prettier colour scheme:
finally got a gearbox mount that i’m happy with, just need to work out how to add odometry to it, since Plan A had two magnets close and opposite each other. One wheel turning would turn the other!
Ever had an email attachment you want to put on the web, but cant be bothered downloading it to your PC, finding your FTP details, uploading it to a server, fixing the permissions, wondering why it isnt showing up then finding you put it in the wrong folder?
Well, Dan Had the same problem, and decided there must be an easier way, so he created ChompMail!
Just forward your email to hugo the hippo, and he’ll chomp it up, and put it on display for all to see!
The ATmega8 sat near the SD cards interests me, it’d be nice to get a code dump of it to see what it’s up to.
If you have any more information, can read any chip markings i can’t, have a pandora devkit and fancy taking some more high res shots for us all, or datasheet links for the above, please leave a comment.
While waiting for the last parts for r2 to arrive, I have been toying with building a bot based on… well… a toy!
I bought this remote control tank off ebay last year, and took off the plastic top. Today I stripped off the other unnecessary bits of plastic, and mounted a breadboard on top.
Next part of the plan is to either modify the existing drive board to allow direct drive from the microcontroller, or build a replacement based on a single-chip h-bridge device.
After a minor slip up with a probe killed my primary R2 bot (shorted VBATT to 5VCC, bye bye processor and drive chips) I’ve tonight soldered up another of my spare R2 boards to take over the mantle.
And the motor drive code i was debugging at the time works!
Tomorrow, i add a battery monitor circuit and the sensors, so i’ll finally have al the major electronic systems tested and good to go ready for the motor mounts.
#define F_CPU 1000000UL#include < avr/io.h>#include < util/delay.h>#include < avr/interrupt.h>#include "r2.h"int main(void){// Activate all the LEDs, set their pins to output
bit_set(LED_WHITE_L_DDR, LED_WHITE_L_BIT);
bit_set(LED_WHITE_R_DDR, LED_WHITE_R_BIT);
bit_set(LED_RED_L_DDR, LED_RED_L_BIT);
bit_set(LED_RED_R_DDR, LED_RED_R_BIT);
bit_set(LED_YELLOW_FL_DDR, LED_YELLOW_FL_BIT);
bit_set(LED_YELLOW_FR_DDR, LED_YELLOW_FR_BIT);
bit_set(LED_YELLOW_RL_DDR, LED_YELLOW_RL_BIT);
bit_set(LED_YELLOW_RR_DDR, LED_YELLOW_RR_BIT);
// Activate the motor's control lines
bit_set(MOTOR_R_ENABLE_DDR, MOTOR_R_ENABLE_BIT);
bit_set(MOTOR_R_PHASE_DDR, MOTOR_R_PHASE_BIT);
bit_set(MOTOR_L_ENABLE_DDR, MOTOR_L_ENABLE_BIT);
bit_set(MOTOR_L_PHASE_DDR, MOTOR_L_PHASE_BIT);
// turn on the motors
bit_set(MOTOR_R_ENABLE_PORT, MOTOR_R_ENABLE_BIT);
bit_set(MOTOR_R_PHASE_PORT, MOTOR_R_PHASE_BIT);
bit_set(MOTOR_L_ENABLE_PORT, MOTOR_L_ENABLE_BIT);
bit_set(MOTOR_L_PHASE_PORT, MOTOR_L_PHASE_BIT);
// turn on the white and red LEDs
bit_set(LED_WHITE_L_PORT, LED_WHITE_L_BIT);
bit_set(LED_WHITE_R_PORT, LED_WHITE_R_BIT);
bit_set(LED_RED_L_PORT, LED_RED_L_BIT);
bit_set(LED_RED_R_PORT, LED_RED_R_BIT);
// enable internal pullup on PD0
bit_set(PORTD, BIT(0));
// enable external interrupts
EIMSK = BIT(INT0) | BIT(INT1);
// enable global interrupts
sei();
// loop foreverwhile(1){
delayms(500);
}return0;
}// delay for up to 65k millisecondsvoid delayms(uint16_t millis){// loop, delaying 1ms each iterationwhile( millis ){
_delay_ms(1);
millis--;
}}// this catches the Interrupt sent from pin INT0
ISR(INT0_vect){//Turn everything off
bit_clear(LED_WHITE_L_PORT, LED_WHITE_L_BIT);
bit_clear(LED_WHITE_R_PORT, LED_WHITE_R_BIT);
bit_clear(LED_RED_L_PORT, LED_RED_L_BIT);
bit_clear(LED_RED_R_PORT, LED_RED_R_BIT);
bit_clear(MOTOR_R_ENABLE_PORT, MOTOR_R_ENABLE_BIT);
bit_clear(MOTOR_R_PHASE_PORT, MOTOR_R_PHASE_BIT);
bit_clear(MOTOR_L_ENABLE_PORT, MOTOR_L_ENABLE_BIT);
bit_clear(MOTOR_L_PHASE_PORT, MOTOR_L_PHASE_BIT);
// loop forever, flashing our indicators.while(1){
bit_flip(LED_YELLOW_FL_PORT, LED_YELLOW_FL_BIT);
bit_flip(LED_YELLOW_FR_PORT, LED_YELLOW_FR_BIT);
bit_flip(LED_YELLOW_RL_PORT, LED_YELLOW_RL_BIT);
bit_flip(LED_YELLOW_RR_PORT, LED_YELLOW_RR_BIT);
delayms(500);
}}