Post Reply 
AriCalculator is a home made pocket calculator.
02-27-2017, 06:23 AM (This post was last modified: 02-27-2017 06:25 AM by Alejandro Paz(Germany).)
Post: #16
RE: AriCalculator is a home made pocket calculator.
There is almost no hardware: processor (PIC32MX170) plus display, and keyboard. Not that much to "open".

I printed on aluminum, as a test of principle. I'm surprised on the result but it is far off a nice polished finish. That's what I implied with the case, it needs as much work as the rest of the unit.

I did a small script where I can enter the number of rows and columns and I get a done keyboard, sort of. For portrait keyboards works a treat. One can improve the keys a bit, make them with rounded corners and so on (for openSCAD):

Code:

// all measurements in mm
// fully parametrized
//
nkeys_horiz = 6;
nkeys_vert = 7;

key_width = 8;
key_height = 5;
key_depth = 3; // z-axis
key_binder_width = 5;
key_binder_depth = 0.6;
key_border = 0.6;
keyrow_height = 12.7-1.27-1.27;
keyrow_step = 12.7;

border_width = 6;
border_height = 5;
border_depth = 1;
// horizontal key separator
sep_width = keyrow_step - 2 * key_border - key_width;
// double-length key
module enter_key()
{
    translate ([key_border, key_border, 0]) 
    {
        cube ([ key_width+keyrow_step, key_height, key_depth]);
        translate ([(key_width-key_binder_width) / 2, -key_border, 0]) cube ([ key_binder_width+keyrow_step, key_border, key_binder_depth]);
    }
}

module key()
{
    translate ([key_border, key_border, 0]) 
    {
        cube ([ key_width, key_height, key_depth]);
        translate ([(key_width-key_binder_width) / 2, -key_border, 0]) cube ([ key_binder_width, key_border, key_binder_depth]);
    }
}

module keyrow()
{
    //sep_width = keyrow_step - 2 * key_border - key_width;
    translate ([0, keyrow_height - 2 * key_border-key_height, 0])
    {
        for (x = [0:nkeys_horiz-1])
            translate ([x*keyrow_step, 0, 0]) key();
        if (nkeys_horiz > 1)
        for (x = [0:nkeys_horiz-2])
            translate ([x*keyrow_step + 2 * key_border + key_width, 0, 0]) cube ([sep_width, 2*key_border+key_height, border_depth]);
    }
    cube ([(nkeys_horiz-1)*keyrow_step+key_width+2*key_border, keyrow_height-key_height-2*key_border, border_depth]);
}

module enter_keyrow()
{
    //sep_width = keyrow_step - 2 * key_border - key_width;
    translate ([0, keyrow_height - 2 * key_border-key_height, 0])
    {
        for (x = [0:nkeys_horiz-1])
            if (x == 0)
                translate ([x*keyrow_step, 0, 0]) enter_key();
            else
                if (x != 1)
                    translate ([x*keyrow_step, 0, 0]) key();
        if (nkeys_horiz > 1)
        for (x = [0:nkeys_horiz-2])
            if (x != 0)
                translate ([x*keyrow_step + 2 * key_border + key_width, 0, 0]) cube ([sep_width, 2*key_border+key_height, border_depth]);
    }
    cube ([(nkeys_horiz-1)*keyrow_step+key_width+2*key_border, keyrow_height-key_height-2*key_border, border_depth]);
}

// keys 7x6
translate ([1*border_width, 0, 0])
{
    // keys from bottom to top, row 5 is always enter key row
    for (y = [0:nkeys_vert-1])
        if (y == 4)
            translate ([0, keyrow_height*y, 0]) enter_keyrow();
        else
            translate ([0, keyrow_height*y, 0]) keyrow();
    // left side
    translate ([-border_width, 0, 0]) cube ([border_width, nkeys_vert*keyrow_height+border_height, border_depth]);
    // right side
    translate ([nkeys_horiz*keyrow_step-sep_width, 0, 0]) cube ([border_width, nkeys_vert*keyrow_height+border_height, border_depth]);
    // top
    translate ([-border_width, keyrow_height*nkeys_vert, 0]) cube ([border_width+nkeys_horiz*keyrow_step-sep_width, border_height, border_depth]);
    // display area
}
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: AriCalculator is a home made pocket calculator. - Alejandro Paz(Germany) - 02-27-2017 06:23 AM



User(s) browsing this thread: 5 Guest(s)