Un paso más hacia la conversión de un coche convencional en coche semi autónomo


George Hotz,  es conocido por ser  el hacker   americano experto en seguridad de sistemas informáticos que cobró notoriedad por la gran precocidad que demostró con solo  17 años  crear blackra1nque, aprovechando otros desarrollos, logrando ser el primero en desbloquear el iPhone, permitiendo que el dispositivo fuese utilizado con otros operadores de telecomunicaciones, a diferencia de la intención de Apple de proveer a sus clientes el terminal sólo en  la red de AT&T , pero  quizás  muchos no sepan que tambien es uno de los primeros en   construir  un coche autónomo en su garaje convirtiendo su turismo convencional T Acura ILX en un coche semiautónomo.

Según Hotz, el desarrollo de su tecnología debería resultar en un kit de conversión capaz de transformar un coche convencional en un coche semiautónomo  pudiéndose instalar en vehículos relativamente modernos y que cumplan ciertos requisitos mínimos, como disponer de dirección asistida eléctrica y de frenado automático  .

Los modelos soportados   por este kit son los siguientes:

  • cura ILX 2016 con AcuraWatch Plus (debido al uso del control de crucero para el gas, solo se puede habilitar a más de 25 mph)
  • Honda Civic 2016-2017 con Honda Sensing.(debido a limitaciones en el firmware de la dirección, la dirección se desactiva a menos de 12 mph .El modelo hatchback no es compatible
  • Honda CR-V Touring 2015-2016 (Solo se puede habilitar a más de 25 mph)
  • Honda Odyssey 2018 con Honda Sensing (alfa!)Solo se puede habilitar a más de 25 mph
  • Acura RDX 2018 con AcuraWatch Plus (alfa!)Solo se puede habilitar a más de 25 mph
  • Honda Pilot 2017 con Honda Sensing (alfa!)Solo se puede habilitar a más de 27 mph
  • Toyota RAV-4 2016+ no híbrido con TSS-P.Por defecto usa stock Toyota ACC para control longitudinal .control longitudinal de piloto abierto disponible después de desenchufar la ECU de soporte de conducción y se puede habilitar a más de 20 mph
  • Toyota Prius 2017 (alfa!).Por defecto usa stock Toyota ACC para control longitudinal. El control longitudinal de Openpilot disponible después de desenchufar la ECU de soporte de conducción.El control lateral necesita mejoras
  • Toyota RAV-4 2017 híbrido (alfa!)Por defecto usa stock Toyota ACC para control longitudinal.El control longitudinal de Openpilot está disponible después de desenchufar la ECU de soporte de conducción y puede detenerse e irse
  • Toyota Corolla 2017 (alfa!)Por defecto usa stock Toyota ACC para control longitudinal.El control longitudinal de piloto abierto disponible después de desenchufar la ECU de soporte de conducción y se puede habilitar a más de 20 mph
  • Lexus RX 2017 hybrid (alpha!).Por defecto usa stock Lexus ACC para control longitudinal.El control longitudinal de Openpilot disponible después de desenchufar la ECU de soporte de conducción

    Proximos

  • Todos los TSS-P Toyota con asistente de dirección.Se requiere ‘control de crucero de radar dinámico de rango de velocidad máxima’ para permitir el arranque y la parada. Solo el Prius, Camry y C-HR tienen esta opción.Aunque la Tundra, Sequoia y Land Cruiser tienen TSS-P, no tienen Steering Assist y no son compatibles.
  • Todos los LSS-P Lexus con asistente de dirección o Lane Keep Assist.Se requiere ‘Control de crucero de radar dinámico de rango de todas las velocidades’ para permitir el arranque y la parada. Solo los GS, GSH, GS, F, RX, RXH, LX, NX, NXH, LC, LCH, LS, LSH tienen esta opción.Aunque el LX tiene TSS-P, no tiene Steering Assist y no es compatible.

 

Hardware necesario

En octubre pasado, Comma.ai  abandono  sus primer producto:el kit de recambio $999, que fue diseñado para dar a coches normales  habilidades semiautónomas, después de recibir una consulta de  la administración de seguridad del tráfico por la seguridad del producto. En su lugar,  publicó OpenPilot, el  código desarrollado que se presenta como una alternativa de código abierto de la  función semiautónoma del piloto automático de  Tesla . No ha perdido la esperanza  y desde su empresa alenta de  hecho  la gente a construir sus propios kits  para  auto-conducción, pero al poner su código  Comma.ai  libre  ha sido capaz de evitar esos molestos reguladores federales y, esperemos tambien que pueda mejorar el software.

De hecho todavía la version publicada tiene  sus limitaciones pues el software permite control de crucero adaptativo y mantener asistencia para los coches demostrando lo con  un Acura ILX en 2015, un Honda Civic en 2016 y este año, un Toyota Prius  que es plausible ,  pero todavía le falta mas desarrollo

A falta de qeu el kit sea completamente seguro , su empresa por el momento han comercializado las siguientes herramientas:

 

Panda OBD2 Dongle

El componente de hardware primario llamado Panda  que vende pro unos 99$  es en realidad  un dongle que se conecta al puerto OBDII  presente en todos los coches fabricados después de 1996( y del que hemos hablado en numerosa ocasiones en este blog)

Este dongle  soporta  tanto  USB como Wi-Fi  permitiendo extraer los  datos  tanto a ordenadores como a  teléfonos inteligentes.

El dongle   junto con su nuevo software «Cabana», debería ayudar a los propietarios    a ver los datos  que están recogiendo los sensores en sus coches .Ademas los datos que vierte se  pueden estudiar aparte  como podemos  ver en esta demostración

 

odb2.PNG

La compañía ha creado un repositorio DBC llamado opendbc que se integra con el software de Cabana y permite a los usuarios crear una base de datos sobre su coche y compartirla.El objetivo es construir un repositorio con un archivo DBC para cada coche  fabricado y democratizar el acceso al anillo decodificador para su automóvil,Con esta información se proporciona el primer paso para hacer un coche uno mismo-conduciendo

Según afirman sus creadores panda + cabana es como fitbit para su  coche pues rastrea  RPM, MPG, fuerza G en las curvas, duración de la batería y mucho más. Ademas se puede usar  para sincronizarlo con el video

Sus creadores  sostiene que este  dongle no es como las decenas de otros dongles desarrollado por la interminable cadena de startups de coches conectados que han surgido en los últimos años. «Lo que están haciendo esas cosas usa el API estándar para coches,»  que es la misma API que mecánicos y personas que llevan a cabo las pruebas de emisiones y por tanto muy limitada. Este dongle obtiene acceso a todo lo que el fabricante tiene acceso. Por otro lado el sw  Panda es compatible con todas las redes de comunicaciones internas  (conocidas como CAN BUS   que interconecta los componentes de un vehículo.

Giraffe

Los automóviles tienen muchos buses CAN que no están expuestos en el conector OBD-II principal. jiraffe es una placa adaptadora que cuesta unos 60$  y que  permite acceder a estos

Hay dos modelos: para Toyota  y para Honda .

En la foto vemos la diseñada para Honda Civic (no hatchback) con Honda Sensing y Acura ILX con AcuraWatch Plus. También puede funcionar en otros automóviles con el mismo conector.

La  funcionalidad de esta placa es pasar a través de las señales al sistema de asistencia al conductor existente apagando los interruptores y bloqueando las señales. Es como desconectarse, pero mejor.  Cuando se usa con un panda chffr, obtiene más señales y acceso para leer de un automóvil. También tiene un puerto de Ethernet falso compatible con NEO con acceso a CAN1, CAN2, detección iniciada, +12v y tierra.

Esta placa  pues permite a los propietarios de automóviles grabar y revisar sus unidades. Si el Panda se empareja con Chffr, los usuarios pueden registrar todos los datos del sensor de sus coches. Si el coche tiene sensores,  entonces los usuarios podrán ver todo tipo de datos  tanto  información simple como la velocidad y datos más complejos como las RPM del motor, cuánto gasolina le queda  es en el tanque, lo que está haciendo la suspensión, si los frenos antibloqueo estan actuando  o incluso si el conductor cómo duro golpeo los frenos.

 

EON Dashcam DevKit

Necesita tres cosas en su salpicadero: una dashcam, navegación y música. EON son los tres.Construido sobre una base sólida de NEOS, ejecuta chffrplus, el  galardonado software dashcam de fuente abierta. chffrplus es una dashcam basada en la nube, lo que significa que todas sus unidades no consumen el espacio en su dispositivo.

Explore sus discos desde la aplicación chffr o desde el dispositivo; EON se integra con el ecosistema de coma.

Como está basado en Android, también ejecuta Waze y Spotify. Las aplicaciones de música y navegación de más alta calidad en el mundo. No ejecuta radio slacker o mapquest.

 

 

chffr – dash cam by comma.ai

app.PNG

 

Chffr es una app par aandroid   de  dashcam que entrena automoviles  sin conductor. Conducir con chffr mejora el sistema  de comma.ai openpilot, software de auto sin conductor gratis. Usando la app se contribuya a las más de 1 millón de millas manejadas con Chffr  de modo que cada   minuto que se conduces con Chffr, gana 1 punto de coma.

Los líderes de puntos recibiran acceso temprano a la tecnología coma.ai y consiguen un lugar en la clasificación de Chffr en http://beta.comma.ai.

Esta app :

  • permite  grabar viajes y ver el velocímetro en vivo, la duración del viaje y las recompensas de punto de coma.T
  • Tambien Chffr graba en segundo plano para que pueda usar otras aplicaciones (Maps, Waze, Spotify)
  •  Revisa sus viajes con la cámara del tablero en el Driving Explorer
  •  Comparte momentos de tus viajes

 

Chffr conserva el almacenamiento y los datos al guardar los viajes de la cámara de su tablero a la nube cuando está conectado a WiFi. Recomendamos enchufar su teléfono mientras conduce.

 

 

 

Ya, para terminar, esperando que el producto final que se lance   en un futuro muy cercano sea seguro y funcional , os dejamos con un video de las primeras pruebas realizadas:

 

 

 

 

 

 

En el artículo A16z Led a $3.1 Million Round in Aftermarket Autonomous Car Company, Comma.ai George Hotz deja claro que su gran aspiración es batir a Tesla, «líder no porque su tecnología sea mejor, sino porque ya la ha puesto en la calle.»

Introducción al modelado 3d con OpenSCAD para electrónicos


Para el modelado 3D, Tinkercad debería ayudarnos ante cualquier diseño inicial de una manera  más sencilla con el proceso de modelado 3D, tanto es así, que incluso los modeladores experimentados lo hacen  explorando las formas de Tinkercad,  pues curiosamente, una herramienta «simple» como Tinkercad puede conducir a formas complejas.

Lógicamente detrás de Tinkercad y de cualquier otro programa de modelado 3D está el código, de modo que a medida que arrastra y suelta formas, los algoritmos complejos están trabajando para calcular cómo aparecerán los gráficos en la pantalla, asi que  también debería ser posible crear figuras geométricas directamente mediante código.

Para aquellos que tienen curiosidad sobre el código, OpenSCAD es una herramienta gratuita de software para explorar el modelado 3d desde esa perspectiva,  resultando  mucho mas eficiente   y concisa   en el  proceso de diseño que cualquier otra herramienta gráfica como por ejemplo Tinkercad..

A diferencia de Tinkercad, OpenSCAD no es una aplicación basada en la web de  modo que si esta interesado  en la herramienta   tendrá que descargarla ( OpenSCAD se puede descargar gartis en http://www.openscad.org y está disponible para Windows, Mac OS X y Linux)   e instalarla en su PC para usarla.

La interfaz OpenSCAD es sencilla  en comparación con Tinkercad ,constando  de sólo tres ventanas, siendo la ventana de la izquierda un editor de texto utilizado para ingresar el código.

 

panel

Con OpenSCAD está diseñando código,pero no se preocupe: escribir código con Open SCAD es similar al uso de HTML en una página web, siendo el código para crear objetos  autoexplicativo  (por ejemplo, el comando del cubo crea cubos, el comando de esfera crea esferas y el comando del cilindro crea cilindros, etc).

Probablemente haya alrededor de 60 comandos en OpenSCAD, muchos de los cuales  permitirán manipular la geometría ,  como por ejemplo mover, rotar, escalar y usar operaciones booleanas para combinar objetos, pero no se preocupe porque  para modelar  la mayoría de la piezas solo necesitaran  unos pocos comandos como  son union , difference, translate, cylinder o  cube.

 

Las secuencias de comandos en el lenguaje de OpenSCAD se utilizan para crear modelos en 2D o 3D.

Este script es una lista de formato libre de instrucciones de acción.

 object();
 variable = value;
 operator()   action();
 operator() { action();    action(); }
 operator()   operator() { action(); action(); }
 operator() { operator()   action();
              operator() { action(); action(); } }

 

Como vemos  hay objetos,acciones  y operadores para construir un pieza:

  • Objetos:Los objetos son los bloques de construcción de modelos, creados por primitivas 2D y 3D. Los objetos terminan en un punto y coma ‘;’.
  • Acciones: Instrucciones de acción  que incluyen la creación de objetos usando las primitivas y asignar valores a variables. Las instrucciones de acción también terminan en un punto y coma ‘;’.
  • Operadores :Los operadores o las transformaciones, modifican la ubicación, color y otras propiedades de los objetos. Los operadores usen llaves ‘{}’ cuando su ámbito de aplicación abarca más de una acción. Más de un operador puede usarse para la misma acción o grupo de acciones. Varios operadores se procesan de derecha a izquierda, es decir, el más cercano a la acción del operador se procesa primero. Los operadores no terminan en punto y coma ‘;‘, pero la persona hacen acciones que contienen.

 

 

Las unidades en OpenSCAD son genéricas  de modo que no hay sistemas de medición en OpenSCAD, es decir , no hay designación para las unidades, y le corresponde al diseñador definir el tamaño del objeto al configurar el archivo antes de la impresión 3D.

CLINDRO (Cylinder)


Crea un cilindro o un cono centrado sobre el eje z. Cuando el centro es cierto, también se centra verticalmente a lo largo del eje z.

Nombres de los parámetros son opcionales si en el orden que se muestra a continuación. Si un parámetro se denomina, deben también llamarse todos los parámetros siguientes.

Nota: Si se utilizan r, d, d1 o d2 debe llamarse.

cylinder(h = height, r1 = BottomRadius, r2 = TopRadius, center = true/false);
Parámetros
h : altura del cilindro o de cono
r : radio del cilindro. R1 = r2 = r.
R1 : radio, parte inferior del cono.
R2 : radio superior del cono.
d : diámetro del cilindro. R1 = r2 = 2 d.
D1 : diámetro, parte inferior del cono. R1 = d1/2
D2 : diámetro superior del cono. R2 = d2/2

(Nota: d, d1, d2 requiere 2014.03 o posterior. Debian en la actualidad se sabe que detrás de esto)
Centro

falso (por defecto), z va desde 0 a h
cierto, rangos de z de -h/2 a + h/2
$fa : ángulo mínimo (en grados) de cada fragmento.
$fs : longitud circunferencial mínima de cada fragmento.
$fn : fija el número de fragmentos en 360 grados. Valores de 3 o más reemplazar $fa y $fs

$fa, $fs y $fn deben ser nombrados. 
defaults: cylinder();  yields: cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false);

OpenSCAD Cone 15x10x20.jpg

equivalent scripts
 cylinder(h=15, r1=9.5, r2=19.5, center=false);
 cylinder(  15,    9.5,    19.5, false);
 cylinder(  15,    9.5,    19.5);
 cylinder(  15,    9.5, d2=39  );
 cylinder(  15, d1=19,  d2=39  );
 cylinder(  15, d1=19,  r2=19.5);

OpenSCAD Cone 15x10x0.jpg

equivalent scripts
 cylinder(h=15, r1=10, r2=0, center=true);
 cylinder(  15,    10,    0,        true);
 cylinder(h=15, d1=20, d2=0, center=true);
equivalent scripts
 cylinder(h=20, r=10, center=true);
 cylinder(  20,   10, 10,true);
 cylinder(  20, d=20, center=true);
 cylinder(  20,r1=10, d2=20, center=true);
 cylinder(  20,r1=10, d2=2*10, center=true);

 

CUBO (Cube)


Crea un cubo en el primer octante. Cuando el centro es cierto, el cubo se centra en el origen. Nombres de argumento son opcionales si en el orden que se muestra a continuación.

cube(size = [x,y,z], center = true/false);
cube(size =  x ,     center = true/false);
parámetros:
tamaño

solo valor, cubo con los lados de esta longitud
3 valor array [x, y, z], cubo con dimensiones x, y y z.
Centro

falso (predeterminado), 1 º octante (positivo), una de las esquinas en (0,0,0)
cierto, cubo está centrado en (0,0,0)
default values:  cube();   yields:  cube(size = [1, 1, 1], center = false);
ejemplos:

OpenSCAD example Cube.jpg

equivalent scripts for this example
 cube(size = 18);
 cube(18);
 cube([18,18,18]);
 .
 cube(18,false);
 cube([18,18,18],false);
 cube([18,18,18],center=false);
 cube(size = [18,18,18], center = false);
 cube(center = false,size = [18,18,18] );

OpenSCAD example Box.jpg

equivalent scripts for this example
 cube([18,28,8],true);
 box=[18,28,8];cube(box,true);

 

 

ROTATE

Gira su objeto ‘a’ grados sobre el eje del sistema coordinado o alrededor de un eje arbitrario. Los nombres de argumento son opcionales si los argumentos se dan en el mismo orden como se especifica.

//Usage:
rotate(a = deg_a, v = [x, y, z]) { ... }  
// or
rotate(deg_a, [x, y, z]) { ... }
rotate(a = [deg_x, deg_y, deg_z]) { ... }
rotate([deg_x, deg_y, deg_z]) { ... }

El argumento ‘a’ (deg_a) puede ser una matriz, tal como se expresa en el uso de más arriba; Cuando deg_a es una matriz, se omite el argumento de ‘v’. Donde ‘a’ especifica múltiples ejes después de la rotación se aplica en el siguiente orden: x, y, z. que significa el código:

rotate(a=[ax,ay,az]) {...}

es equivalente a:

rotate(a=[0,0,az]) rotate(a=[0,ay,0]) rotate(a=[ax,0,0]) {...}

El argumento opcional de ‘v’ es un vector y le permite establecer un eje arbitrario que será girado al objeto.
Por ejemplo, para voltear un objeto boca abajo, se puede girar el objeto 180 grados alrededor del eje ‘y’.

rotate(a=[0,180,0]) { ... }

Con frecuencia esto se simplifica a

rotate([0,180,0]) { ... }

Cuando se especifica un solo eje el argumento de ‘v’ permite especificar cuyo eje es la base para la rotación. Por ejemplo, el equivalente a lo anterior, para girar a la vuelta y

rotate(a=180, v=[0,1,0]) { ... }

Cuando se especifica un solo eje, ‘v’ es un vector de definición de un eje arbitrario de rotación; Esto es diferente del eje múltiple anterior. Por ejemplo, rotar el objeto 45 grados alrededor del eje definido por el vector [1,1,0],

rotate(a=45, v=[1,1,0]) { ... }

 

 

TRANSLATE

Se  mueve sus elementos secundarios a lo largo del vector especificado. El nombre de argumento es opcional.

Example:
translate(v = [x, y, z]) { ... }
cube(2,center = true); 
translate([5,0,0]) 
   sphere(1,center = true);

image of result of the translate() transformation in OpenSCAD

image of result of rotate() transformation in OpenSCAD

 

 

MINKOWSKY

Muestra la suma de minkowski de los nodos secundarios.

Supongamos que tiene una caja plana y quiere un borde redondeado. Hay muchas formas de hacerlo, pero minkowski es muy elegante.

Por ejemplo toma un cubo  y un cilindro:

 $fn=50;
 cube([10,10,1]);
 cylinder(r=2,h=1);

Luego, haga una suma de minkowski de ellos (tenga en cuenta que las dimensiones exteriores de la caja ahora son 10 + 2 + 2 = 14 unidades por 14 unidades por 2 unidades de altura a medida que se suman las alturas de los objetos):

$fn=50;
minkowski()
{
  cube([10,10,1]);
  cylinder(r=2,h=1);
}

Note que el origen del segundo objeto se usa para la suma. Si el segundo objeto no está centrado, entonces la adición será asimétrica. Las siguientes sumas de Minkowski son diferentes: la primera expande el cubo original en 0.5 unidades en todas las direcciones, tanto positivas como negativas. El segundo lo expande en +1 en cada dirección positiva, pero no se expande en las direcciones negativas.

minkowski() {
    cube([10, 10, 1]);
    cube(1, center=true);
}
minkowski() {
    cube([10, 10, 1]);
    cube(1);
}

 

 

mikonsji.png

En  nuestro  diseño final que veremos  para la caja ATX  nos sirve para   redondear los bordes de la caja  :

minkowski(){
translate([0,0,0]) cube([151,85,29]);
cylinder(r=2);

Observar que una caja ATX es de 151 x 85

 

TRANSFORMACIONES

La transformación afectan a  los nodos secundarios y como su nombre indica transforma de diversas maneras las figuras como moviéndolas , rotándolas   o escaléndolas . Las transformaciones en cascada se utilizan para aplicar una gran variedad de transformaciones a un a figura 

En cascada se logra mediante declaraciones de anidación,

Un ejemplo :

rotate([45,45,45])
  translate([10,20,30])
    cube(10);

Las transformaciones pueden aplicarse a un grupo de nodos secundarios mediante el uso de ‘ {‘ y ‘}’ para incluir por ejemplo el subárbol

translate([0,0,-5])
{
    cube(10);
    cylinder(r=5,h=10);
}

Un  aspecto a tener muy en cuenta es  que las transformaciones se escriben antes el objeto que afectan.

 

 

 

Primer ejemplo

 

Como  habrá  podido deducir , construir una pieza en  OpenSCAD es un proceso mucho más eficiente cuando se  usa código.

Por ejemplo,  el uso de Tinkercad para crear una caja y su tapa toma más de diez operaciones que consisten en dejar caer y arrastrar objetos, alinearlos y agruparlos para crear las formas finales, de modo que  este proceso podría tardar mucho tiempo según el manejo que se tenga de la herramienta.

Con OpenSCAD, puede crear la misma pieza en menos de diez minutos simplemente usando el siguiente código:

difference () {
cube ([4,3,2], center=true);
translate ([0,0,1])
cube ([3.5,2.5,2], center=true);
}

union () {
translate ([0,0,2])
cube ([4,3,.4], center=true);
translate ([0,0,1.8])
cube ([3.49,2.49,.4], center=true);

translate ([0,0,2.2])
scale ([.1,.1,.1])
sphere (r=5, center=true);

translate ([0,0,2.7])
scale ([.07,.07,.07])
sphere (r=5, center=true);
}

Explicamos a continuacion el código:

La primera sección del código se usa para crear una  caja hueca .

El  comando (cube [4,3,2], center = true); crea el cuadro inicial.

El  comando center= true  se usa para asegurar que la caja esté perfectamente centrada en 3D

La siguiente serie de comandos, translate ([0,0,1]) cube ([3.5,2.5,2], center = true) ;, se usa para crear un segundo cuadro más pequeño.

Esta segunda caja, más pequeña, se mueve hacia arriba en 1 unidad en la dirección Z usando el comando translate y se usará en la operación boleana para crear la caja hueca  gracias al comando difference  que  se usa para restar el cuadro más pequeño (3.5×2.5×2)  para el cuadro grande (4x3x2)

Como vemos cualquier comando de forma como cubo, esfera y cilindro que se encuentre dentro de los corchetes que preceden al comando de diferencia se usará en la operación booleana  dando resultado que el primer objeto enumerado en los corchetes tendrá la forma de base, y los objetos anteriores enumerados serán «objetos de corte» y restarán la geometría de la base.

cajas.png

Para la tapa de  la caja, simplemente usaremos el comando unión para   formar una pieza compuesta por dos cubos superpuestos  ,uno de 4x3x.4  y  otro algo  mas pequeño de 3.49×2.49x.4

tapas.png

Los últimos dos conjuntos de comandos crean el mango esférico para la parte superior de la tapa

translate ([0,0,2.2])
scale ([.1,.1,.1])
sphere (r=5, center=true);

translate ([0,0,2.7])
scale ([.07,.07,.07])
sphere (r=5, center=true);

 

Finalmente, el comando de unión se usa para combinar todos los elementos de tapa juntos.

 

caja

 

 

Ejemplo fuente ATX

Para mostrar lo util que es el prototipado  con esta herramienta, vamos   a ver como se puede hacer un tapa a una fuente de ordenador ATX de ordenador  de modo que queden accesibles las tensiones principales de la fuente(+12,-12 y +5V)   y además podamos controlarlas con un conmutador y un instrumento de panel.

El prototipo final es el que mostramos a continuación:

atx2.png

 

 

Podemos ver  la tapa como dos bloques , donde uno sera la caja  y el otro  todos los orificios que se practiquen sobre el mismo

Bloque  inicial

La primera sección del código se usa para crear una  caja hueca  y los agujeros de los laterales.

El  comando translate([0,0,0]) cube([151,85,29]); crea el cuadro inicial  de medidas algo superiores al frontal de una caja ATX dado que debe colocarse esta deno.

La siguiente serie de comandos, trtranslate([0,0,2]) cube([151,85,28]);  se usa para crear un segundo cuadro más pequeño  .

Esta segunda caja, más pequeña, se mueve hacia arriba en 2 unidades en la dirección Z usando el comando translate y se usará en la operación boleana para crear la caja hueca  gracias al comando difference  que  se usa para restar el cuadro más grande al cuadro pequeño

En  el  diseño   para la caja ATX  nos sirve la función minkowski   para   redondear los bordes de la caja  :

minkowski(){
translate([0,0,0]) cube([151,85,29]);
cylinder(r=2);

Observar que una caja ATX es de 151 x 85 x29.

En este bloque además se practican los agujeros  de refrigeracion en la cara inferior por medio de la creación de cilindros de radio 5

//agujeros de refrigeracion
translate([40,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([60,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([75,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([90,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([110,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);

Asimismo, se crean 4 orificios para los 4 tornillos que  serviran para sujetar esta pieza a la caja ATX  :

// 4 agujeros para sujetarlos a la caja ATX
translate([15.5,-2,25]) rotate([-90,0,0]) cylinder(h=3,r1=3.5,r2=1.5);
translate([135.5,-2,25]) rotate([-90,0,0]) cylinder(h=3,r1=3.5,r2=1.5);

translate([-2,80,25]) rotate([0,90,0]) cylinder(h=3,r1=3.5,r2=1.5);
translate([154,80,25]) rotate([0,-90,0]) cylinder(h=3,r1=3.5,r2=1.5);

 

Además, en este bloque se han añadido dos patas  compuestas por dos cubos que se fijaran a la cara inferior

//2 pies de apoyo
translate([10,86,0]) rotate([.5,0,0]) cube([10,3,30]);
translate([131,86,0]) rotate([.5,0,0]) cube([10,3,30]);

 

Bloque de vaciados

Se ha visto interesante reforzar los 5 bornas  por medio de 5 cilindros interiores  que ayudan a  dar más consistencia  a las bornas en su operacion  normal ,las cuales estan   formados simplemente por cilindros  de poca altura:

//refuerzo conectores
translate([18,70,0]) cylinder(h=5,r=6);
translate([38,70,0]) cylinder(h=5,r=6);
translate([58,70,0]) cylinder(h=5,r=6);
translate([151-18,70,0]) cylinder(h=5,r=6);
translate([151-38,70,0]) cylinder(h=5,r=6);

Asimismo  se han añadido refuerzos en el interior para mejorar la estabilidad mecánica  formados por cubos   y que recorren toda la caja :

//Costillas de refuerzo  para la caja
translate([0,0,0]) cube([3,3,20]);
translate([0,82,0]) cube([3,3,20]);
translate([148,0,0]) cube([3,3,20]);
translate([148,82,0]) cube([3,3,20]);
translate([47,0,0]) cube([3,3,20]);
translate([47,82,0]) cube([3,3,20]);
translate([77,0,0]) cube([3,3,20]);
translate([100,82,0]) cube([3,3,20]);
translate([0,40,0]) cube([3,3,20]);
translate([148,50,0]) cube([3,3,20]);
translate([47,40,0]) cube([3,45,4]);
translate([100,50,0]) cube([3,35,4]);
translate([0,40,0]) cube([80,3,4]);
translate([77,0,0]) cube([3,50,4]);
translate([77,50,0]) cube([151-77,3,4]);
}

También es interesante destacar la abertura para el interruptor  de encendido  y el display led  formado por dos  simples cubos , así como tambien  los agujeros para los conectores formados por 5 cilindros:

//Abertura para el display
translate([32,12,0]) cube([45.3,25.7,10]);

//Abertura para el interruptor
translate([15,15,0]) cube([11.7,19.6,10]);

//Agujeros para los conectores
translate([18,70,0]) cylinder(h=9,r=5);
translate([38,70,0]) cylinder(h=9,r=5);
translate([58,70,0]) cylinder(h=9,r=5);
translate([151-18,70,0]) cylinder(h=9,r=5);
translate([151-38,70,0]) cylinder(h=9,r=5);

 

Por ultimo, para mejorar la refrigeración   se ha optado por poner rejillas de ventilación en el frontal formadas cada una por 2 cilindros huecos y un cubo

Como novedad   se realiza  de forma re-cursiva mediante el empleo de un bucle for

//Rejilla de ventilacion
for ( i = [85 : 8 : 145] )
{
translate([i,10,0]) cylinder(h=9,r=2);
translate([i,45,0]) cylinder(h=9,r=2);
translate([i-2,10,0]) cube([4,35,4]);
}

 

Finalmente, si lo unimos todo, tenemos el siguiente código para general la pieza entera:

 

// …………………………
// Panel para fuente ATX
// CRN
// 17/01/2018
// GNU GPL v3
// …………………………

 

module box(){
difference(){
union(){
minkowski(){
translate([0,0,0]) cube([151,85,29]);
cylinder(r=2);
}
//2 pies de apoyo
translate([10,86,0]) rotate([.5,0,0]) cube([10,3,30]);
translate([131,86,0]) rotate([.5,0,0]) cube([10,3,30]);
}
//vaciado de la caja
translate([0,0,2]) cube([151,85,28]);

//agujeros de refrigeracion
translate([40,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([60,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([75,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([90,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);
translate([110,80,12]) rotate([-90,0,0]) cylinder(h=9,r=5);

// 4 agujeros para sujetarlos a la caja ATX
translate([15.5,-2,25]) rotate([-90,0,0]) cylinder(h=3,r1=3.5,r2=1.5);
translate([135.5,-2,25]) rotate([-90,0,0]) cylinder(h=3,r1=3.5,r2=1.5);

translate([-2,80,25]) rotate([0,90,0]) cylinder(h=3,r1=3.5,r2=1.5);
translate([154,80,25]) rotate([0,-90,0]) cylinder(h=3,r1=3.5,r2=1.5);

}
}

 

 

 

 

difference(){
union(){
box();

//refuerzo conectores
translate([18,70,0]) cylinder(h=5,r=6);
translate([38,70,0]) cylinder(h=5,r=6);
translate([58,70,0]) cylinder(h=5,r=6);
translate([151-18,70,0]) cylinder(h=5,r=6);
translate([151-38,70,0]) cylinder(h=5,r=6);

//Costillas de refuerzo  para la caja
translate([0,0,0]) cube([3,3,20]);
translate([0,82,0]) cube([3,3,20]);
translate([148,0,0]) cube([3,3,20]);
translate([148,82,0]) cube([3,3,20]);
translate([47,0,0]) cube([3,3,20]);
translate([47,82,0]) cube([3,3,20]);
translate([77,0,0]) cube([3,3,20]);
translate([100,82,0]) cube([3,3,20]);
translate([0,40,0]) cube([3,3,20]);
translate([148,50,0]) cube([3,3,20]);
translate([47,40,0]) cube([3,45,4]);
translate([100,50,0]) cube([3,35,4]);
translate([0,40,0]) cube([80,3,4]);
translate([77,0,0]) cube([3,50,4]);
translate([77,50,0]) cube([151-77,3,4]);
}
//Abertura para el display
translate([32,12,0]) cube([45.3,25.7,10]);

 

//Aabertura para el interruptor
translate([15,15,0]) cube([11.7,19.6,10]);

 

//Agujeros para los conectores
translate([18,70,0]) cylinder(h=9,r=5);
translate([38,70,0]) cylinder(h=9,r=5);
translate([58,70,0]) cylinder(h=9,r=5);
translate([151-18,70,0]) cylinder(h=9,r=5);
translate([151-38,70,0]) cylinder(h=9,r=5);

//Rejilla de ventilacion
for ( i = [85 : 8 : 145] )
{
translate([i,10,0]) cylinder(h=9,r=2);
translate([i,45,0]) cylinder(h=9,r=2);
translate([i-2,10,0]) cube([4,35,4]);
}
}