4xidraw

Introducción

Axidraw[1] es un plotter para poder utilizar bolígrafos y escribir sobre cualquier superficie plana. Axidraw se vende como un producto final en el que se adquiere el plotter ya montado y calibrado por un precio de unos 450$. Este plotter no deja de ser un robot cartesiano con dos ejes de movimiento en X e Y, por así decirlo, una versión simplificada de una impresora 3D. Gracias a ello, en la comunidad maker ha aparecido una versión DIY de axidraw, llamada 4xidraw.

4xidraw ha sido desarrollado por Miguel Sanchez (Misan). Todo el proceso de montaje ha sido documentado  tanto en su blog personal [2] como en varias páginas de internet [3], [4]. Observando la lista de materiales necesarios, vi que disponía de la mayoría de materiales a falta del kit de correa GT2 y varios rodamientos. Tras comprarlos en una tienda especializada en impresoras 3D[5], tenía todo lo necesario para iniciar el desarrollo de 4xidraw.

Desarrollo

Durante el desarrollo del proyecto he usado un repositorio alojado en github[6]. Donde se encuentran todas las modificaciones que he desarrollado en el proyecto.

El montaje mecánico de la estructura principal no me llevo más de dos horas, gracias su similitud con una impresora 3D. En la Figura 1 se muestra el plotter ya terminado.

IMG_1544

Figura 1. Plotter DIY 4xidraw. Montaje mecánico del plotter.

Eje Z

La parte que más tiempo me llevo montar de manera correcta fue la encargada de sujetar el boli. Podríamos denominarlo como el eje Z de una impresora 3D. A pesar de seguir las indicaciones de Misan, no logré que funcionara de manera correcta. Quizás fue debido a las varillas lisas que usé, que eran recicladas de un stor de ventana. Estas varillas eran de 3mm en lugar de 4mm, por ello tuve que modificar las dos piezas encargadas de la función del eje Z. Para poder mejorar el accionamiento de subida y bajada del boli, usé la pieza usada como carro para poder hacer un accionamiento biela-manivela con el eje del servo. En la Figura 2 se muestra el montaje del carro. De esta manera, es el propio servo el que obliga al carro a situarse en una posición determinada.

IMG_1547

Figura 2. Eje Z de 4xidraw. Para poder usar las varillas lisas que tenía, tuve que modificar el orificio de los taladros pasantes

 Firmware

El firmware que usa Misan es una versión modificada de GRBL[7] para poder controlar el servo. La versión de este firmware es específica para usar con un arduino UNO y una CNC Shield. Sin embargo, yo disponía de un arduino Mega y una RAMPS y no logré encontrar ninguna versión de GRBL con la modificación del servo y que usará el pinout de la RAMPS.

Así que decidi usar la última versión de Marlin que se suele usar en las impresoras 3D y modificar el plugin que generaba las trayectorias desde inkscape, para poder generar correctamente el movimiento del eje Z del plotter.

Tras varios intentos, logre generar de forma correcta un gcode capaz de dibujar la imagen que yo quería usando Marlin.

Conclusiones

A pesar de que el proyecto ha sido desarrollado por una única persona en su tiempo libre, la información que he encontrado en internet me ha sido de gran ayuda, así como la  ayuda ofrecida por Misan.

Invito a todo aquel que quiera desarrollar este proyecto que se anime a desarrollarlo, ya que    a pesar de no tener conocimiento de impresoras 3D el montaje de 4xidraw es mucho más fácil que el de cualquier impresora 3D.

Referencias

  1. http://shop.evilmadscientist.com/846
  2. http://fightpc.blogspot.com.es
  3. https://www.youmagine.com/designs/4xidraw
  4. http://www.instructables.com/id/4xiDraw/
  5. https://www.moebyus.com
  6. https://github.com/darkomen/4xiDraw
  7. https://github.com/misan/grbl-servo

 

Crear entorno virtual bajo Conda(python)

Introducción

Conda es un gestor de paquetes y de entornos virtuales multiplataforma que nos permite instalar, ejecutar y actualizar los paquetes y sus dependencias, de esta manera podremos configurar y cambiar entre distintos entornos en nuestro ordenador[1].

A grandes rasgos, un entorno virtual o ‘virtual environment’  es una carpeta en la que se encuentran los ejecutables de python y las distintas versiones de las librerías que vayamos a usar. De este modo, podremos estar desarrollando varias aplicaciones con distintas versiones de las librerías, incluso del propio interprete de python, gracias a los entornos virtuales.

Con conda se instalan multitud de librerías y aplicaciones secundarias que son usadas habitualmente en el desarrollo con python[2].

A continuación se explicará el proceso que hay que seguir para poder crear un entorno virtual usando Conda así como una lista con los comandos más usados en la gestión de los entornos virtuales.

Instalación

Lo primero será comprobar si tenemos conda actualizado:

:~$  conda update conda

En caso de tener que actualizar algún paquete, pulsaremos la tecla Y para confirmar la actualización.

Posteriormente comprobaremos cuales son las versiones de python que tenemos instaladas en nuestro sistema.

:~$ conda search ‘^python$’

Una vez que sabemos cual es la versión que queremos, crearemos el entorno virtual:

:~$ conda create -n nombredeentorno python=x.x anaconda

Donde sustituiremos x.x por la versión antes buscada.

Una vez creado, el siguiente paso será activarlo para poder usarlo:

:~$ source activate nombredeentorno

Una vez que terminemos de usar el entorno deveremos descativarlo:

:~$ source deactivate

Otros comandos

A continuación se detallan otros comandos relacionados con el mantenimiento de los entornos virtuales[3].

Listar todos los entornos virtuales creados:

:~$ conda info —envs

Comprobar el entorno virtual activado:

:~$ conda info —envs

Eliminar un entorno virtual:

:~$ condo remove —name nombredeentorno —all

Comprobar las versiones de las librerías instaladas:

:~$ conda list -e

Referencias

  1. http://conda.pydata.org/docs/install/quick.html#os-x-miniconda-install
  2. https://docs.continuum.io/anaconda/pkg-docs
  3. http://conda.pydata.org/docs/using/envs.html#managing-environments

Renacujo sigue lineas y seguidor de luz

Siguiendo con los ejemplos de programación de renacuajo he añadido un ejemplo muuuy sencillo. Hasta ahora, si el renacuajo llegaba al final de la linea, buscaba otra con los sensores IR, sin embargo ahora he añadido que, al llegar al final de la linea se le pueda guiar con la luz que va recibiendo con las fotoresistencias.

Aquí añado un vídeo de ejemplo:

Y el código muy sencillo:


#include <Servo.h>

//Creamos los objetos del tipo servo
Servo Servo1;
Servo Servo2;

int ir_derecho;
int ir_izquierdo;
int ldr_derecho;
int ldr_izquierdo;
int NEGRO =0;
int BLANCO= 1;
int umbral = 30;

void setup()
{

Servo1.attach(6);
Servo2.attach(9);

pinMode(2, INPUT);
pinMode(3, INPUT);

}

void loop()
{
//Vemos como están los IR
ir_derecho = digitalRead(2);
ir_izquierdo = digitalRead(3);
// Seguimos la linea
if ( (ir_derecho == NEGRO) && (ir_izquierdo == NEGRO) ) {
Servo1.write(0);
delay(20);
Servo2.write(180);
delay(20);

}
//Giramos a la izquierda
else if ( (ir_derecho == BLANCO) && (ir_izquierdo == NEGRO) ){
Servo1.write(90);
delay(20);
Servo2.write(180);
delay(20);
}
//Giramos a la derecha
else if ( (ir_derecho == NEGRO) && (ir_izquierdo == BLANCO) ) {
Servo1.write(0);
delay(20);
Servo2.write(90);
delay((20));

}
//Seguimos la luz si los dos sensores no detectan negro
else {
//Leemos el estado de los sensores de luz
ldr_derecho = analogRead(A2);
ldr_izquierdo = analogRead(A3);
//Si hay mas luz en el lado derecho giramos a la derecha
if (ldr_derecho >= ldr_izquierdo + umbral){
Serial.println("Derecha");
Servo1.write(0);
delay(20);
Servo2.write(90);
delay((20));
}
//Si hay mas luz en el lado izquierdo giramos a la iquierda
else if (ldr_izquierdo >= ldr_derecho + umbral){
Serial.println("Izquierda");
Servo1.write(90);
delay(20);
Servo2.write(180);
delay(20);
}
//Vamos hacia adelante.
else{
Serial.println("Adelante");
Servo1.write(0);
delay(20);
Servo2.write(180);
delay(20);
}
}

}</blockquote>

 

[Review]Mi primer kit de robótica de bq

Desde la empresa bq Readers, me han ofrecido la posibilidad de ser MVP(Most valuable player), dentro del departamento de Innovación y Robótica, de los productos que vayan sacando. Iré poniendo en el blog las review que vaya haciendo de los distintos productos.

2014-01-02 22.16.57Para empezar voy a hablar de “Mi primer Kit de robótica”. El Kit consiste en  las vitaminas para poder hacerte tu primer robot. Están incluidos la electrónica, varios sensores(de luz, infrarrojo, potenciometro,etc..) y unos servos. Por contra, no se incluyen las piezas impresas que conforman el chasis, tornillería o juntas para las ruedas. ¡ Las piezas impresas, tornilleria y demás se incluyen a parte en el robot RenacuajoBot que ha sacado a la venta Bq. Irán sacando más modelos para que cada uno elija el robot que más le guste.

Podemos decir que no es un kit completo de robótica, ya que si no tienes acceso a una impresora 3D el chasis es un poco dificil de conseguir, pero poco a poco las impresoras 3D se están extendiendo. Y con esto, facilitamos lo que hasta ahora, había que conseguir buscando por distintas páginas de internet.

2014-01-02 22.17.34Al abrir la caja nos encontramos con un diagrama de flujo que nos orienta sobre cómo conectar los dispositivos. Y con código de colores sabemos qué dispositivos estamos conectando. Pensando en que fuera la primera vez que montase un robot, el diagrama tan claro ayuda bastante.

Sobre los componentes que vienen incluidos, son todos de la empresa elecfreaks la placa es compatible con arduino y trae unos conectores de tres pines macho, para poder conectar de manera cómoda los servos y sensores.

2014-01-02 22.38.17Todos los sensores vienen montados en una placa especial para que la conexión con la placa controladora sea cómodo.

En definitiva, un kit muy muy básico, para iniciarse en el mundo de la róbotica y robots imprimibles. Es una lástima que no se incluyan todos los materiales necesarios para poder construir el robot de una sola vez. Pero como decía al principio, es ideal para poder comprar todos los componentes electrónicos de una sola vez y no tener que buscar por distintas páginas todos los componentes, y en ocasiones la compra se hacía un poco pesada.

Organizando Recursos

Aprovechando que ya tengo el blog y el wiki organizados, he querido organizar también un poco el repositorio en github de arduino. He borrado carpetas con programas ya repetidos que tenía, y he puesto un nombre más acorde a las carpetas de los programas.

De aquí en adelante, voy a estructurar el trabajar con el blog y el wiki de la siguiente manera:

  • En el wiki voy a intentar colocar manuales completos, y que sean de fácil acceso, por ejemplo, cómo actualizar un móvil android.
  • En el blog pondré las posibles actualizaciones del wiki, y tutoriales que no tienen cabida en el wiki

De momento me apaño bien, y espero que la nueva organización haga más fácil la búsqueda de tutoriales en un futuro.

Cambio de direccion

He tomado una decisión y me he migrado a mi propio hosting,con dominio propio.
La nueva dirección del blog será blog.darkomen.es ; esta semana también configurare un wiki y la dirección será wiki.darkomen.es
Os espero en la nueva dirección!

Falso Imap en Gmail

Cuando configuramos nuestro correo electrónico para leer a través de un programa, ya sea Mail, Thunderbird, nuestro propio movil, etc… Tenemos dos maneras POP3 e IMAP, las diferencias las explican en este blog claramente

  • POP: Comunicación en 1 sentido. Se establece comunicación con los servidores de Google y se descargan los datos; pero eso es todo. Las cosas que hagas en tu dispositivo no quedaran reflejadas en el servidor. Es decir, si lees un mensaje en tu móvil y luego accedes a tu cuenta Gmail, verás el mismo mensaje marcado como no leído.
  • IMAP: Comunicación en ambos sentidos. A diferencia de POP, se establece comunicación con el servidor y se sincronizan los cambios automáticamente. Cuando accedes a Gmail desde un navegador web, las acciones que has llevado a cabo anteriormente desde un móvil o navegador web, aparecerán en Gmail automáticamente. De esta manera no tendrás que releer o reorganizar los mensajes 2 veces. Por tanto, es realmente útil cuando accedes a Gmail desde múltiples dispositivos.

A grandes rasgos la diferencia es esa, cuando miramos el correo a través de una aplicación un correo electrónico, se lo decimos al servidor y la siguiente vez que veamos ese correo desde otro sitio, ya nos aparecerá como leido.

Gmail añade una opción a la hora de configurar su correo por POP y es marcar como leído el correo que se lea por este sistema.
Para activarlo nos vamos a la configuración de gmail y en la opción de POP/IMAP en las segundas opciones marcarmos la opción: “Marcar copia de Gmail como leida”

Captura de pantalla 2011-01-02 a las 13.52.46.png

De esta manera, por ejemplo, cuando leamos un correo desde nuestro teléfono móvil configurado, mediante POP, se lo haremos saber al servidor y ya lo tendremos leido.

VIrtualizando Xp

Hace ya mucho tiempo desde que escribí el Manual de instalar vmware. Tanto tiempo que ya no hace falta compilar vmware, está disponible en los repositorios de ubuntu. Y tanto tiempo o más que ha salido una alternativa mucho mejor. Hablo de VirtualBox, lo acabo de instalar y he vrtualizado windowsXP y ahora mismo estoy babeando. Los dos sistemas, el emulado y el que está instalado, van bien, de momento en xp no he instalado nada, todos sabemos que xp las dos primeras horas de instalarlo va de lujo.

Lo bueno que tiene este programa es un modo para virtualizar el sistema operativo a pantalla completa, dirás vaya tonteria eso lo tienen todos, dejame que te muestre un captura

Windows o Linux. mejor los dos a la vez

A eso me refiero con pantalla completa… el simular como si estuvieras ejecutando nativamente xp, y vuelvo a repetir, va muy ligero. Los mackeros me tirarán piedras parallels hace eso tiempo atras, y de mejor manera(sin mostrar la barra de herramienta de windows).

La instalación del programa es muy sencilla, nos bajamos el paquete deb de la página y lo instalamos. Quizás más adelante haga un tutorial para instalar el sitema, configuración del disco duro virtual en el programa y eesas cosas, pero la verdad que es muy intuitivo.