sábado, 12 de abril de 2014

Instalación de Octoprint sobre Raspberry Pi.

Servidor de impresión para impresoras 3D

Octoprint é un proxecto que permite implementar un servidor de impresión, con case todas as funcionalidades dos programas para manexar as impresoras 3D (como Cura, Printum, etc), de forma remota.



O tempo, é unha das variables que é máis importante a hora de imprimir as nosas pezas. E nese tempo precisamos dun equipo que controle a impresora durante ese período. Tamén é necesario realizar unha supervisión do proceso impresión. E o fin é preciso realizar o apagado da impresora, cama quente, etc.

Como non sempre é posible estar a espera de que o proceso de impresión 3D remate a solución é poder seguir, controlar, e accionar a impresora a distancia. Octoprint permite realizar o control e seguimento da impresora sen que estar directamente presente no lugar onde está situada. Permite cargar dende calquera equipo os arquivos que queremos imprimir, lanzar a orde de impresión, seguir a evolución da impresión (incluso visualmente mediante webcam), cambiar os parámetros (incluso durante a impresión) e por último apagar remotamente cama, ventiladores e incluso impresora.


Para obter unha imaxe de Raspibian co Octoprint instalado, podemos baixar a imaxe do seguinte servidor
. Unha vez xa temos o arquivo, o descomprimimos e copiamos a imaxe na tarxeta SD (podedes consultar o proceso aquí).


Unha vez preparada a imaxe e copiada na tarxeta, o arrincar hai que configurar as opcións do Raspibian.Isto se pode facer nada mais arrincar por primeira vez ou mediante o comando raspi-config.


Para poder executar Octoprint, precisase instalar os paquetes de python. Estos están especificados no documento de texto requirements.txt. Mediante a utilidade pip instalamos os paquetes, mediante o comando sudo pip install -r requirements.txt.


O arrinque do servidor se fai mediante o script run, situado no directorio de Octoprint. É necesario especificar a dirección ip e o porto por onde se van a atender as peticións. O comando quedaría asi:  ./run --host=0.0.0.0 --port=5000. Neste caso a dirección 0.0.0.0 especifica calquera interface.

E a imprimir!



Creando obxectos parametrizables en Openscad e outras funcións

Openscad permite a posibilidade de crear obxectos de distintas características utilizando unha única definición.
Para poder facer isto precisamos definir módulos (funcións) os cales se lle pasan os parámetros. Estes parámetros diferencian as características dos obxectos.
A definición dun módulo se realiza mediante a palabra clave module. Para exemplarizar isto imos crear unha estrela de oito puntas. En primeiro lugar creamos o módulo marco, que crea un cadrado hueco.
 
//Marco cadrado

module marco( ){

difference (){

cube([40, 40, 10], center= true);

cube([25, 25, 14], center= true);

}

}

A limitación que ten o código anterior é que o marco que crea o módulo sempre ten a mesma dimensión 40 por 40 mm. Podemos definir parámetros para esa función, de maneira que dependendo do valor que lle pasemos na chamada a esa función, podamos variar as características do noso marco. No exemplo imos definir dous parámetros un se vai chamar dimensión é se refire o tamaño externo do cubo e outro altura que define a altura do marco. 

//Marco cadrado con parámetros

module marco(dimension, altura ){

difference (){

cube([dimension, dimension, altura], center= true);

cube([25, 25, 14], center= true);

}

}
Para utilizar este módulo temos que chamalo, como unha función máis do Openscad, especificando entre os parentesis os parámetros.

marco (40, 10); 

Se poden chamar os módulos dende outros módulos permitindo a creación de figuras máis complexas a partir de figuras máis simples.

//Estrela de oito puntas a partir de dous marcos rotados
module estrela (dimension, altura){
              marco (dimension, altura);
  rotate ([0,0,45])
  marco (dimension, altura);

 

Se isto se garda nun arquivo chamado estrela.scad se pode utilizar en calquera outro deseño importando o arquivo, e chamando o módulo dentro do código.
Utilizando a instrución include se pode facer referencia o arquivo onde se encontra a nosa estrela.

include <estrela.scad>

Para utilizar a función só se ten que facer a chamada, da mesma maneira que si estivera codificado no mesmo ficheiro.


martes, 4 de marzo de 2014

Galiñeiro Móbil

Como nos agasallaron cunhas galiñas de Mos, construín un galiñeiro móbil. O galiñeiro está pensado para 5-6 galiñas.

A verdade que o plan non era quedarse coas galiñas, llas ofrecín a miña nai,  a nosa provedora de ovos. Pero como os maiores non teñen paciencia, mentres o avicultor (Ricardo) as criou, ela xa mercou galiñas para substituír as súas.  Polo que cando Ricardo nos deu as galiñas non nos quedou máis remedio que deseñalo e construilo.

Utilizamos a rede para buscar modelos para poder deseñar o noso galiñeiro. Hai un monte de propostas distintas, pero eu me inspirei nos seguintes enlaces. Neste primeiro enlace, gustoume como resolveu o corral, e me pareceu boa proposta o das portas que lle deixou na parte superior. No foro tamén comenta o exceso de peso do conxunto, que e inevitable o utilizar madeira maciza e tegola canadense no tellado. Como se comenta no foro, hai que ter un detalle en conta que os niños o estar no dormitorio se ensucian o defecar as galiñas dentro.

Deste segundo modelo, no que se inspirou o autor do anterior galiñeiro, collín o modelo de tela metálica, introducida nunha canle feita na propia madeira. Queda moi ben, pero é bastante difícil de montar o ter que meter a tela no momento de colar os travesas, o cal levou o seu tempo.


A maior diferenza con respecto os anteriores modelos foi a elevación do dormitorio, para poder ter un espazo seco onde poder poñer o comedeiro, similar o proposto neste outro modelo. O certo é que neste modelo hai mais ideas interesantes para implementar, como a automatización do desprazamento, o pastor eléctrico antialimañas, o bebedeiro, comedeiro. Pero o deixaremos para unha segunda fase.

Para facilitar a mobilidade, instaleille unhas rodas, dos rodíns das bicicletas. Axuda a movelo en superficies duras, pero o movelo sobre terra afunden polo peso. Polo que é necesario cambialas por outras rodas con máis superficie de contacto sobre a superficie.

O custe do galiñeiro está sobre uns 100 € en materiais. En madeira gastei 35 €, tendo en conta que reciclei dúas caixas de embalaxe de pezas de automoción e algúns recortes que tiña por casa. A madeira é de piñeiro tratada en autoclave de 40X30 mm. O máis caro foi a tela metálica, sobre uns 40 € (seguro que é posible mercala a mellor prezo). A tellado o cubrín cunhas pranchas, que normalmente se poñen embaixo do tellado que custaron 25 €. Non conto colas, parafusos, etc, o ser a parte do proxecto menos custosa.

domingo, 16 de febrero de 2014

Introducción a Openscad

A forma de traballar con OpenSCAD é a de construír sólidos mediante o modelado de formas básicas como son os cubos, esferas ou cilindros e operacións básicas. Comecemos polas formas básicas, o cubo:

//Este é o código para debuxar un cubo de 10 mm no eixo X
// 20 mm no eixo Y e 30 no eixo Z 
// A variable center permite centrar o obxecto nos eixos
cube ([10,20,30], center = false);


O obxecto que permite debuxar un cilindro ou un cono é:

/* Onde temos que definir o radio (r), altura (h), si está centrado e a resolución ($fn, número de rectángulos para renderizar o cilindro). Para os conos temos que definir r1 (radio da base) e r2 (radio do tope) */
cylinder (r=5, h= 20, center= true, $fn=20);



O obxecto que debuxa a esfera é:

//O parámetro é o radio (r) ou diámetro (d) //e resolución ($fn)
sphere(10);



As operacións, que nomeamos antes, en OpenSCAD se chaman transformacións. A traslación permite desprazar o orixe da figura as coordenadas especificadas, como expresamos no exemplo:

//Debuxamos unha esfera de radio 10
//Trasladamos un cilindro, 15 mm no eixo X, 15 mm no eixo Y e -10 no Z
 sphere(10);
     translate([15,15,-10])
          cylinder(h=20, r=5);





Outra transformación interesante é a que nos permite unir obxectos como é union(). Mostramos un exemplo a continuación, onde se unen (ou combinan) o cilindro e esfera anterior:
union(){
     sphere(10); cylinder(h=20, r=5, center= true); 
 }

Si queremos facer a diferencia de dous obxectos, podemos facelo coa función difference(). Neste caso mostramos o cilindro restado sobre a a esfera:
difference(){ 
      sphere(10);      
      cylinder(h=20, r=5, center= true);





Tamén temos a intersección: 

intersection(){ 
      sphere(10); 
      cylinder(h=20, r=5, center= true); 
}