NOTA: se requiere una impresora 3D mas grande que las normales para poder imprimirlo, mide 32cm de ancho y las impresoras normales solo permiten 20 (algunas algo mas)
Un modelo en OpenSCAD que estoy haciendo del Spectrum plus
Teclas:
HECHO: parte superior
TO DO: parte inferior
-. La tecla del Enter... acabo de darme cuenta
La tecla del espacio la he creado como las demas aunque originalmente esta invertica respecto al resto
carcasa:
HECHO: parte superior
TO DO:
-. parte inferior
-. Letras Sinclair y ZX Spectrum (
-. Hueco del arcoiris
-. Perfil angulado
-. ranuras de ventilacion posterior
-. Corte de la salida de TV
-. Saliente de la entrada de 9V
NOTA: para crear el modelo se utiliza el OpenSCAD http://www.openscad.org/ para los que no lo hayan utilizado al abrirlo copiaste este codigo en la parte izquierda y lo renderizais pulsando F5, con F6 se genera el modelo para imprimir tarda mas y no es necesario.
NOTA: esto no es necesario pero se puede modificar un poco el codigo para ver mas cosas
En "module Tecla" una parte pinta las "setas" en donde van colocadas las teclas (los circulos azules) y la otra funcion crea las teclas en si, si comentais Tecla2 en dicha linea con // y "translate([-Izquierda,-Bajo, 0]) Carcasa();" al inicio del codigo solo se mostraran las teclas, las teclas anchas tienen su propio modulo para generarlas
$fn=80; sirve para que las teclas sean mas dedondas en el interior un valos mas alto mejora el aspecto pero tarda mas en renderizarse y al imprimir no hay apenas cambios (no mejora la impresion)
Código: Seleccionar todo
alto = 5;
Normal = 18;
Break = 28;
Delete = 27;
Edit = 23;
Caps = 41.5;
Espacio = 84;
Enter = 32;
Enter_h = 37;
Bajo = 12;
Izquierda = 12;
Gap = Normal+1;
$fn=80;
translate([-Izquierda,-Bajo, 0]) Carcasa();
translate([ 0, 0,12]) Semifila1();
translate([ 0,Gap*1,12]) Semifila2();
translate([ 0,Gap*2,12]) Semifila3();
translate([ 0,Gap*3,12]) Semifila4();
translate([ 0,Gap*4,12]) Semifila5();
module Carcasa()
{
Ancho = 320;
difference()
{
cube([Ancho,150,17], center=false);
color ("red")
translate([Izquierda ,Bajo,12])
cube([256,18*5+6,6], center=false);
translate([-50,Bajo+Gap*0,16])
cube([Ancho*2,1,17], center=false);
translate([-50,Bajo+Gap*1,16])
cube([Ancho*2,1,17], center=false);
translate([-50,Bajo+Gap*2,16])
cube([Ancho*2,1,17], center=false);
translate([-50,Bajo+Gap*3,16])
cube([Ancho*2,1,17], center=false);
translate([-50,Bajo+Gap*4,16])
cube([Ancho*2,1,17], center=false);
translate([-50,Bajo+Gap*5,16])
cube([Ancho*2,1,17], center=false);
translate([-50,Bajo+Gap*6,16])
cube([Ancho*2,1,17], center=false);
translate([-50,Bajo+Gap*7,16])
cube([Ancho*2,1,17], center=false);
}
}
module Semifila1()
{
offset = Normal*5+Espacio+6;
translate([ 0,0,0]) Tecla();
translate([ Gap*1,0,0]) Tecla();
translate([ Gap*2,0,0]) Tecla();
translate([ Gap*3,0,0]) Tecla();
translate([ Gap*4,0,0]) Tecla();
translate([ Gap*5,0,0]) Tecla3(Espacio);
translate([offset+Gap*0,0,0]) Tecla();
translate([offset+Gap*1,0,0]) Tecla();
translate([offset+Gap*2,0,0]) Tecla();
translate([offset+Gap*3,0,0]) Tecla();
}
module Semifila2()
{
offset = Caps+1;
translate([ 0,0,0]) Tecla3(Caps);
translate([offset+Gap*0,0,0]) Tecla();
translate([offset+Gap*1,0,0]) Tecla();
translate([offset+Gap*2,0,0]) Tecla();
translate([offset+Gap*3,0,0]) Tecla();
translate([offset+Gap*4,0,0]) Tecla();
translate([offset+Gap*5,0,0]) Tecla();
translate([offset+Gap*6,0,0]) Tecla();
translate([offset+Gap*7,0,0]) Tecla();
translate([offset+Gap*8,0,0]) Tecla();
translate([offset+Gap*9,0,0]) Tecla3(Caps);
}
module Semifila3()
{
offset = Delete+Edit+2;
translate([ 0,0,0]) Tecla3(Delete);
translate([Delete+1 ,0,0]) Tecla3(Edit);
translate([offset+Gap*0,0,0]) Tecla();
translate([offset+Gap*1,0,0]) Tecla();
translate([offset+Gap*2,0,0]) Tecla();
translate([offset+Gap*3,0,0]) Tecla();
translate([offset+Gap*4,0,0]) Tecla();
translate([offset+Gap*5,0,0]) Tecla();
translate([offset+Gap*6,0,0]) Tecla();
translate([offset+Gap*7,0,0]) Tecla();
translate([offset+Gap*8,0,0]) Tecla();
translate([offset+Gap*9,0,0]) Tecla(Enter);
}
module Semifila4()
{
offset = Delete+1;
translate([ 0,0,0]) Tecla3(Delete);
translate([offset+Gap*0,0,0]) Tecla();
translate([offset+Gap*1,0,0]) Tecla();
translate([offset+Gap*2,0,0]) Tecla();
translate([offset+Gap*3,0,0]) Tecla();
translate([offset+Gap*4,0,0]) Tecla();
translate([offset+Gap*5,0,0]) Tecla();
translate([offset+Gap*6,0,0]) Tecla();
translate([offset+Gap*7,0,0]) Tecla();
translate([offset+Gap*8,0,0]) Tecla();
translate([offset+Gap*9,0,0]) Tecla();
translate([offset+Gap*10,0,0]) Tecla();
translate([offset+Gap*11,0,0]) Tecla();
}
module Semifila5()
{
offset = 0;
translate([offset+Gap*0,0,0]) Tecla();
translate([offset+Gap*1,0,0]) Tecla();
translate([offset+Gap*2,0,0]) Tecla();
translate([offset+Gap*3,0,0]) Tecla();
translate([offset+Gap*4,0,0]) Tecla();
translate([offset+Gap*5,0,0]) Tecla();
translate([offset+Gap*6,0,0]) Tecla();
translate([offset+Gap*7,0,0]) Tecla();
translate([offset+Gap*8,0,0]) Tecla();
translate([offset+Gap*9,0,0]) Tecla();
translate([offset+Gap*10,0,0]) Tecla();
translate([offset+Gap*11,0,0]) Tecla();
translate([offset+Gap*12,0,0]) Tecla3(Delete);
}
module Tecla(Ancho=Normal, Largo=Normal, altura=5)
{
color("blue")
Tecla2(Ancho,Largo,altura);
Tecla1(Ancho,Largo,altura);
}
module Tecla1(Ancho=Normal, Largo=Normal, altura=5)
{
translate([0,0,10])
{
cube([Ancho,Largo,altura], center=false);
translate([Ancho/2,Largo/2-1,0])
difference()
{
cylinder(r=16/2,h=altura+2, center=false);
translate([Ancho/2*0,0*Largo/2,42])
sphere(r=36);
translate([-Ancho/2,5,4])
cube([Ancho,Largo,altura], center=false);
}
}}
module Tecla2(Ancho=Normal, Largo=Normal, altura=5)
{
translate([Ancho/2,Largo/2,0])
cylinder(r=13/2,h=altura*2, center=false);
}
module Tecla3(Ancho=Normal, Largo=Normal, altura=5)
{
translate([0,0,10])
{
cube([Ancho,Largo,altura], center=false);
translate([Ancho/2,Largo/2-1,0])
difference()
{
hull()
{
translate([-Ancho/2+9,0,0])
cylinder(r=16/2,h=altura+2, center=false);
translate([+Ancho/2-9,0,0])
cylinder(r=16/2,h=altura+2, center=false);
}
hull()
{
translate([-Ancho/2+9,0,42])
sphere(r=36);
translate([+Ancho/2-9,0,42])
sphere(r=36);
}
translate([-Ancho/2,5,4])
cube([Ancho,Largo,altura], center=false);
}
}}