[WIP] Simon Merrett's Arduboy Clone

@Keyboard_Camper I love this step in the hardware design process. Can’t believe I haven’t tried it before. Printing a perfectly 1:1 scale selection of layers from kicad was deceptively easy.


I think another 4mm to the left for the direction buttons should do it and maybe 2mm for the A button. As I said before, I do expect to need to revise this board before I’d call it done.

Love the cardboard mock up though!

3 Likes

Layout revs have moved the buttons as above. A & B have also come down (a finding from the card mockup). Off to route the traces now. Although feel free to keep comments coming.

1 Like

Now with net traces! Time to sleep on this and check things another time.

Not sure if its the colour choices but I thought this was a map

2 Likes

Whats the size / spacing / geometry of those buttons?

@bateske These are the kind of thing I had in mind until I can sort out footprints and my own (mechanical) confidence in snap domes:


The direction buttons are on a ~11mm grid, so ~16mm across the diagonals. The silkscreen circle around the direction buttons is 24mm dia. A and B are at 45 degrees and ~14mm apart.

On my cardboard cutout the spacings seem ok (I appreciate some hands are larger but this does need to fit children’s hands too). The buttons are admittedly small but I envisage they will become snap domes, as mentioned, and would also work with button covers when it gets an enclosure, as they’re so low-profile. What are the official Arduboy buttons’ size / spacing / geometry?

@Kea_Oliver oh dear, I’m not great at layout! Would you be interested in helping by reviewing the board layout?

Either way, have fun navigating the map!

If you’ve got some other handheld games consoles or game controllers to hand, use those for comparison.

Is that picture the printed one or the cardboard one?
Or did you print ink onto cardboard and then cut it out?

Embarrassingly not!

In post 41 I printed onto A4 paper (you have to check a box to print all the selected layers onto one sheet, rather than a separate sheet per layer). I then glued that to some card and cut around the edges. Is this what you were asking about?

That’s unfortunate.

Interestingly your current design reminds me of the Game Boy Micro:

Yes, that makes sense.

I hear ‘printing’ used to mean ‘3D printing’ so often that talking about a printer that puts ink on paper starts to seem weird. :P


I’m pretty sure the colour choices help.
The little white dots at the ends of the lines make it look like a London tube map, or a bus route map.
(Maybe the green looks like grass too?)

1 Like

I have a 3D printer which I use for mechanical prototyping but the 2D version was waaay faster and easier for this purpose.

1 Like

I have added the kicad to Github and published it under the MIT license (so you can do pretty much what you want with it). Happy to share any footprints etc individually.

Why aren’t you using an STM H7 or a PIC32?

Overall it is a fantastic design and looks wonderful. Looks like art so far.

1 Like

@Seegson thanks for the compliment! The reason I’m using the SAMD21 is because I want to move on from the ATMEGA and ATtiny chips that I am familiar with from the arduino world. Moving to PIC would seem like more of a leap in one go than necessary. The H7 seems overpowered in the sense that I couldn’t see myself using it in my work designs, so learning it might be inefficient. I do want to get into stm32 development but more around the M0 and M4 end of things.

You are most welcome. I understand where you are coming from. I am excited to see how it all turns out.

1 Like

Ha wrong topic so i’ll Just leave this here for a reply

@Keyboard_Camper I have looked at those displays for other applications. Great for low power, daylight readability and reasonable refresh rate. But the price is too high for the size. I think the increasing availability is going to keep them as a niche product (you still need to provide a voltage toggle to maintain the display, even in low power mode).

Well, it seems like Ardugirl is in a race to not get made but the first run of PCBs went off to the fab last night. I hope to get them to the point where I have:

  • Bootloader loaded on the SAMD21
  • Direction + A&B buttons detected
  • Screen is writeable (mainly the HW as I know the software will need extensive work in this area to be suitable for games - plan to use u8g2lib or similar for a test)

Stretch target (at this early stage) is

  • RGB LED works
  • to read/write to SPI flash
  • get some sound out of the headphone jack
  • Backlight dimming

Will leave until later:

  • IR link between devices
  • Battery integration

If I get the first stage done in qty > 1, I hope those kind offers to help develop the software/port are still out there.

1 Like

What is the screen like?
Is it SPI driven?
If so, is there a datasheet detailing the commands it responds to?

It’s this one.
This code works to put an image on the screen, using u8glib from a pro mini:

/* HelloWorld.pde
"Hello World!" example code.

  >>> Before compiling: Please remove comment from the constructor of the
  >>> connected graphics display (see below).

  Universal 8bit Graphics Library, http://code.google.com/p/u8glib/

  Copyright (c) 2012, olikraus@gmail.com
  All rights reserved.

  Redistribution and use in source and binary forms, with or without modification,
  are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

#include "U8glib.h"

// setup u8g object, please remove comment from one of the following constructor calls
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device

//u8g_dev_uc1701_mini12864_hw_spi
U8GLIB_MINI12864 u8g(10, 8, 9);
const uint8_t  logo104x64 [] U8G_PROGMEM = {
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  ..............................................................................................
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};

uint8_t contrast = 220;

void draw(void) {
  // graphic commands to redraw the complete screen should be placed here
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  u8g.drawStr( 0, 22, "Hello World!");
}

void drawbmp(void) {
  // graphic commands to redraw the complete screen should be placed here
  u8g.drawBitmapP( 0, 0, 16, 64, hundenlogo104x64);
}

void setup(void) {
  Serial.begin(9600);
  // set SPI backup if required
  //u8g.setHardwareBackup(u8g_backup_avr_spi);

  // assign default color value

  u8g.setColorIndex(1);         // pixel on
  u8g.setContrast(contrast);
}

void loop(void) {
  // picture loop
  u8g.firstPage();
  do {
drawbmp();
  } while ( u8g.nextPage() );

  // rebuild the picture after some delay
  delay(1000);
}