Brand New Model F - Powder Coating Removal

User avatar
darkcruix

13 Jun 2021, 15:42

For those who wanted to see how the F77 zinc case without powder coating, I worked my way up till a 800 grid today... Still a few steps to go until it is shiny (I plan to go up to 2500 grid and then polish it). Finally I plan to put a clear coating over it.
Yes, I have multiple blisters on my hands ...
IMG_1525.jpeg
IMG_1525.jpeg (1.32 MiB) Viewed 2655 times

User avatar
fohat
Elder Messenger

13 Jun 2021, 16:00

Please keep us posted. When I stripped my original 107 and took it to the metalworking shop to get it shot-blasted, they told me that they would never be able to get it to a smooth and consistent finish.

viewtopic.php?p=260151#p260151

User avatar
darkcruix

13 Jun 2021, 17:38

Just ran up to 2500 and tried to polish a part of it. So far, I think I can make it quite clean looking. I don't want it perfect, otherwise I'd paint it with a chrome finish.
I want an industrial style, where you can see that it is real metal.
IMG_1526.jpeg
IMG_1526.jpeg (1.86 MiB) Viewed 2614 times

User avatar
fohat
Elder Messenger

13 Jun 2021, 18:05

darkcruix wrote:
13 Jun 2021, 17:38

I think I can make it quite clean looking.
Now time for polishing compound.

User avatar
Weezer

13 Jun 2021, 18:48

Are the two holes for lock lights?

User avatar
darkcruix

13 Jun 2021, 19:19

Weezer wrote:
13 Jun 2021, 18:48
Are the two holes for lock lights?
They are :) Actually I programmed them so they show Layer 1 or Layer 2 (or together = Layer 3).
While Layer 2 is numpad and Layer 3 is mouse movement.

User avatar
raoulduke-esq

13 Jun 2021, 19:33

darkcruix wrote:
13 Jun 2021, 19:19
Weezer wrote:
13 Jun 2021, 18:48
Are the two holes for lock lights?
They are :) Actually I programmed them so they show Layer 1 or Layer 2 (or together = Layer 3).
While Layer 2 is numpad and Layer 3 is mouse movement.
Could I take a look at your led configurations for that?

User avatar
darkcruix

13 Jun 2021, 19:45

config.h

Code: Select all

#pragma once
#include "config_common.h"
#undef  PRODUCT
#define PRODUCT      darkcruix model f77
#define TAPPING_TERM 200
#define TAPPING_TOGGLE 2
#undef LED_CAPS_LOCK_PIN
#undef LED_NUM_LOCK_PIN
#define LED_PIN_ON_STATE 1
keyboard.c

Code: Select all

#include QMK_KEYBOARD_H

// Defines names for use in layer keycodes and the keymap
enum layer_names {
    _BASE,
    _FN,
    _FN2
};

typedef struct {
    bool is_press_action;
    uint8_t state;
} tap;

// Define a type for as many tap dance states I need
enum {
    SINGLE_TAP = 1,
    SINGLE_HOLD,
};

enum {
            TD_DOT_COMM,
            INS_LAYR,
            TD_ESC,
};




// Declare the functions to be used with my tap dance key(s)

// Function associated with all tap dances
uint8_t cur_dance(qk_tap_dance_state_t *state);

// Functions associated with individual tap dances
void ql_finished(qk_tap_dance_state_t *state, void *user_data);
void ql_reset(qk_tap_dance_state_t *state, void *user_data);


const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* Base */
    [_BASE] = LAYOUT_ansi_hhkb_split_shift_regular_backspace(
        TD(TD_ESC),  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,    K
C_BSPC,    KC_INS,  KC_HOME, KC_PGUP,
        KC_TAB,   LCTL_T(KC_Q),    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_LBRC, KC_RBRC, K
C_BSLS,    KC_DEL,  KC_END,  KC_PGDN,
        KC_LCTL,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,              K
C_ENT,     KC_VOLD, KC_MUTE, KC_VOLU,
        KC_LSFT,     KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,    KC_RSFT,         T
G(_FN2),   KC_F5,   KC_UP,   KC_F12,
        KC_LALT, MO(_FN), KC_LGUI,                                      KC_SPC,                      KC_RGUI, MO(_FN),             KC_RALT,    KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [_FN] = LAYOUT_ansi_hhkb_split_shift_regular_backspace(
        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,        KC_DEL,     _______, _______,  _______,
        KC_TAB,   _______, _______, _______, _______,  HPT_ON, HPT_OFF, HPT_TOG, HPT_RST, HPT_FBK, HPT_BUZ, HPT_CONT, HPT_DWLD,       HPT_TOG,    _______,  _______,  KC_6,
        KC_CAPS,   _______,  _______,  DEBUG, _______,  _______, _______,  _______, RESET,  _______, KC_BRMD, KC_BRMU,                 KC_ENT,     _______,    _______,    KC_3,
        KC_LSFT,    KC_F13, KC_F14, KC_F15, KC_MPLY,  KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______,      KC_RSFT,         TG(_FN2),   KC_0,    KC_UP,   TD(TD_DOT_COMM),
        _______, KC_TRNS, KC_LGUI,                                      KC_SPC,                                  KC_RGUI, KC_TRNS, KC_RALT,    KC_LEFT, KC_DOWN, KC_ENT
    ),
    [_FN2] = LAYOUT_ansi_hhkb_split_shift_regular_backspace(
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,       _______,    KC_7,    KC_8,    KC_9,
        _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,      _______,    KC_4,    KC_5,    KC_6,
        _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,              _______,    KC_1,    KC_2,    KC_3,
        _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______,    KC_0,    _______, TD(TD_DOT_COMM),
        _______, KC_TRNS, _______,                                   KC_SPC,                                    _______, KC_TRNS,  _______,    _______, _______, _______
    )
};

void keyboard_pre_init_user(void) {
  // Call the post init code: flash the LEDs
                setPinOutput(B5);
                writePin(B5, 1);
                setPinOutput(B4);
                writePin(B4, 1);
                _delay_ms(50);
                setPinOutput(B5);
                writePin(B5, 0);
                setPinOutput(B4);
                writePin(B4, 0);
}


// Determine the current tap dance state
uint8_t cur_dance(qk_tap_dance_state_t *state) {
    if (state->count == 1) {
        if (!state->pressed) return SINGLE_TAP;
        else return SINGLE_HOLD;
    } 
    else return 8;
}

// Initialize tap structure associated with example tap dance key
static tap ql_tap_state = {
    .is_press_action = true,
    .state = 0
};

// Functions that control what our tap dance key does
void ql_finished(qk_tap_dance_state_t *state, void *user_data) {
    ql_tap_state.state = cur_dance(state);
    switch (ql_tap_state.state) {
        case SINGLE_TAP:
            // Toggle Layer 2 on or off
            if (layer_state_is(_FN2)) {
                // If already set, then switch it off
                layer_off(_FN2);
                setPinOutput(B5);
                writePin(B5, 0);
            } else {
                // If not already set, then switch the layer on
                layer_on(_FN2);
                setPinOutput(B5);
                writePin(B5, 1);
            }
            break;
        case SINGLE_HOLD:
            // Momentary set Layer 1 on or off while key pressed 
            layer_on(_FN);
            setPinOutput(B4);
            writePin(B4, 1);
            break;
    }
}

// If the Fn key was held down and now is released then switch off layer 1
void ql_reset(qk_tap_dance_state_t *state, void *user_data) {
    if (ql_tap_state.state == SINGLE_HOLD) {
        layer_off(_FN);
        setPinOutput(B4);
        writePin(B4, 0);
    }
    ql_tap_state.state = 0;
}

// Associate our tap dance key with its functionality
qk_tap_dance_action_t tap_dance_actions[] = {
    [INS_LAYR] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, ql_finished, ql_reset, 175),
    [TD_DOT_COMM] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_COMM),
    [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV),
};


// Since solenoid support is enabled by default, the above lock light pin
// assignments are disabled by default.
// Instead the more common Num Lock and Caps Lock are assigned the following
// way by default, and this can be used in combination with the solenoid:
// #define LED_NUM_LOCK_PIN B4
// #define LED_CAPS_LOCK_PIN B5
// darkcruix: I have de-activated both in config.h (undef) and use them for layers
// darkcruix: The light activation is done in the tab dance functions - here it is reset
layer_state_t layer_state_set_user(layer_state_t state) {
    if (get_highest_layer(state) == 2) {
        setPinOutput(B5);
        writePin(B5, 1);
    } else {
        setPinOutput(B5);
        writePin(B5, 0);
    }

/*
    switch (get_highest_layer(state)) { 
    case 0:
        setPinOutput(B5);
        writePin(B5, 0);
        break;
    case 1:
        setPinOutput(B5);
        writePin(B5, 0);
        break;
    case 2:
        setPinOutput(B5);
        writePin(B5, 1);
        break;
    default: //  for any other layers, or the default layer
        break;
    } */
  return state;
  }

User avatar
raoulduke-esq

13 Jun 2021, 20:52

Thanks kindly!!

User avatar
Weezer

13 Jun 2021, 20:57

darkcruix wrote:
13 Jun 2021, 19:19
Weezer wrote:
13 Jun 2021, 18:48
Are the two holes for lock lights?
They are :) Actually I programmed them so they show Layer 1 or Layer 2 (or together = Layer 3).
While Layer 2 is numpad and Layer 3 is mouse movement.
Interesting. Now that's what I call getting the most out of a Model F.

User avatar
ddrfraser1

14 Jun 2021, 15:19

Awesome.

User avatar
darkcruix

19 Jun 2021, 13:15

I tried very hard and went all the way from 320 to 3000 grain (with intermediate steps using 600, 1000, 1500, 2000). In the end I gave it a good polish (about 5 complete rounds). I think I am just not skilled enough to get it properly done:
Spoiler:
IMG_1537.jpeg
IMG_1537.jpeg (233.36 KiB) Viewed 2256 times
Maybe an important note for others: the zinc casing was very well done and I had only very limited casting issues (tiny holes etc). Nevertheless, I didn't succeed. I have added 2K clear coating and it looks horrific at the moment. Open for any additional ideas (including getting the keyboard powder coated again) :)

User avatar
wobbled

19 Jun 2021, 21:49

Looks pretty good without any sort of coating. I may need to sand my compact case as the paint layer was extremely thin and has already begun to show marks.

User avatar
darkcruix

20 Jun 2021, 21:09

wobbled wrote:
19 Jun 2021, 21:49
Looks pretty good without any sort of coating. I may need to sand my compact case as the paint layer was extremely thin and has already begun to show marks.
I used enamel paint in pure white for the case. It should be very durabel and feels very smooth.
IMG_1556.jpeg
IMG_1556.jpeg (169.2 KiB) Viewed 2163 times

User avatar
fohat
Elder Messenger

20 Jun 2021, 21:26

When I did my restoration I paid a shop (found them under automotive restoration) $65 to shot blast the shell. I was hoping to do a clear anodizing and no varnish coat, but that was when I thought that it was aluminum and not a funky alloy.

It would be worth a phone call or maybe a trip to a shop to ask them what they thought that they could realistically do.

viewtopic.php?p=260151#p260151

Post Reply

Return to “Workshop”