16 dic 2012

Añadir aplicación al menú de inicio en Lubuntu (LXDE)

En nuestra distribución Lubuntu, a pesar de tener muchas cosas buenas, hay algunas tareas que deberían ser sencillas y, sin embargo no lo son. Una de ellas es la de añadir un programa al menú de inicio. Existe mucha documentación sobre cómo realizar esto, pero trasteando y combinando diferentes tutoriales he encontrado el que para mí tiene que ser el procedimiento a seguir hasta que los desarrolladores incluyan algo nuevo que lo simplifique todo. El proceso consiste en primero crear un archivo con extensión ".desktop" que habrá que incluir en el directorio "/usr/share/applications". Para crear el archivo ".desktop" nos ayudaremos del "GUI Creator". En el ejemplo a continuación voy a añadir el programa Fritzing al menú. En un principio tengo en mi carpeta Downloads otra carpeta denominada fritzing-0.7.10b.linux.i386 que contiene el archivo ejecutable "Fritzing" (que será el que se deba ejecutar cuando sea llamado desde el lanzador del menú de inicio). Para utilizar el "GUI Creator" introducimos en un terminal el siguiente comando:

sudo lxshortcut -o /usr/share/applications/fritzing.desktop

En tu caso debes reemplazar fritzing por el nombre del programa que vayas a añadir al menú. Una vez lanzado este comando nos debe aparecer algo así 
Aspecto del Gui designer

Entonces procedemos a rellenar cada una de las casillas. Como nombre podemos darle el que queramos, evidentemente que sea representativo, el icono también podemos elegir uno cualquiera, mientras que lo más importante es el comando. Las aplicaciones ejecutables se encuentran en /usr/bin. Si por ejemplo quisiésemos añadir la aplicación Xmag, pues el comando sería /usr/bin/xmag. En mi caso, el ejecutable se encuentra en otro directorio, así que mi comando es

sh /home/paco/Downloads/fritzing-0.7.10b.linux.i386/Fritzing

Para el icono, en lugar de elegir alguno de los incluidos en el sistema, he descargado el propio de Fritzing, lo he guardado en la misma carpeta que el ejecutable y seleccionado. 
Entonces pulsamos OK y comprobaremos cómo nuestro programa aún no aparece en el menú de inicio. Esto es porque aún no lo hemos incluido en ninguna categoría. Y es aquí solía yo tener problemas, ya que desconocía la lista de posibles categorías. La lista total la podemos encontrar aquí, en la que separa las categorías registradas y las adicionales. En mi caso me interesa introducirla en Electronics, aunque podríamos haber elegido Education o cualquier otra. Por último añadimos la categoría a nuestro archivo .desktop creado. Para ello, de nuevo desde terminal:

sudo leafpad /usr/share/applications/fritzing.desktop

Y añadimos al final

Categories=Electronics

O lo que proceda. Guardamos el archivo, lo cerramos y ahora sí aparece el programa en el menú de inicio.

Arranque, parada e inversión de giro en motores con Arduino

Continúo mi andadura con Arduino y más concretamente con el proyecto relacionado con el coche. Una de las piezas claves de este son los motores que lo mueven, por lo que resulta vital poder controlarlos. A simple vista, se plantea un problema, y es que, según indican en la propia web de Arduino la corriente máxima que pueden suministrar la salidas de nuestra arduino uno es de 40 mA, que resultará insuficiente para mover un motor. Tal es así que puede resultar incluso perjudicial para nuestra tarjeta arduino el intentar conectarlo directamente, pudiendo dañar partes de ésta. Es por ello que necesitamos incluir algún otro elemento. Aquí es donde entra en juego el transistor, que actúa como interruptor. En el mercado de la electrónica existen multitud de ellos, por lo que es conveniente saber elegir cuál puede valer. Los factores más importantes a tener en cuenta son el voltaje máximo que admiten y la corriente máxima. Transistores bipolares como el 2N2222A (admite hasta 800 mA) o TIP 120 (que admite hasta 5A) son suficientes para los motores pequeños que usaré. Información relativa a cómo controlarlo hay mucha. Mis referencias son ésta y ésta otra. Además, al disponer en nuestro arduino de salidas PWM, podemos controlar la velocidad del motor.
Ahora bien, ¿qué ocurre si queremos realizar inversión de giro?. Las referencias indicadas anteriormente explican cómo controlar el motor para que gire en un sólo sentido. Si queremos además inversión de giro podemos utilizar un puente en H, denominado HBridge. Uno de los puentes más populares para pequeños proyectos es el L293D, del cuál podéis encontrar un tutorial sobre cómo usarlo con arduino aquí. Como yo no disponía de ningún HBridge a mano, he decido crearlo por mi cuenta. El montaje en la breadboard lo podéis encontrar en la imagen a continuación
Esquema de conexionado para crear un HBridge

Básicamente consiste en cuatro transistores de los cuales dos de ellos estarán activos para que el motor gire en un sentido y los otros dos para que lo haga en el contrario. En la imagen también se pueden apreciar 4 diodos que son muy importantes para proteger el circuito. Tratan de evitar el efecto flyback, que básicamente consiste en unos voltajes de pico muy elevados que se producen cuando se intenta un cambio de giro en un motor. Si queréis saber más al respecto podéis consultar en la wikipedia.
A continuación os dejo un vídeo de mis montajes en funcionamiento, el primero de ellos controlando el motor remotamente y el segundo realizando inversiones de giro (perdonad por la escasa calidad)

Y por último comentar que he realizado mi primer proyecto en Fritzing. Incluyo aquí el enlace.

Aumentando el número de salidas digitales en Arduino

En la reciente entrada "primeros experimentos con Arduino" hice un montaje que utilizaba un display 7 segmentos de 4 dígitos para mostrar datos numéricos. En ese momento tuve que utilizar una salida digital para cada uno de los siete segmentos del display y dos salidas más para controlar el dígito en el que se iba a mostrar el dato numérico. Evidentemente necesitar 9 salidas digitales para mostrar datos por un display 7 segmentos no es nada eficiente, teniendo en cuenta que nuestro arduino cuenta con sólo 14. Es por esto que necesitaba de algún método para poder utilizar el display con menos salidas digitales. Y es aquí donde entró en juego el registro de desplazamiento, que permite conversión de datos serie a paralelo y viceversa. En mi caso disponía de un registro de desplazamiento de serie a paralelo 74HC164D que obtuve (al igual que el display) del despiece de un TDT estropeado. Había olvidado un poco qué misión tenían los registros de desplazamiento, así que entre la múltiple información existente en internet utilicé ésta y éste tutorial de arduino con 7 segmentos para refrescarme la memoria. Con el circuito integrado a mano y con los conocimientos de su funcionamiento sólo restaba por realizar la programación en Arduino.  Y tengo que decir que más fácil es imposible, ya que existe una función en Arduino denominada ShiftOut en la cuál indicas cuál salida vas a utilizar como pin de datos, cuál como reloj, el orden (si usando el bit más significativo o el menos) y el byte que que quieres pasar. De esta forma, en lugar de 7 salidas digitales hemos utilizado 2. Un ejemplo de código pasa a ser algo tan reducido como

int clockPin=8;
int dataPin=9;
int digito1=11;//Indica la posición en el display del número a mostrar
int digito2=12;
byte cero=255-252;/*Para pintar un 0 en un 7 segmentos hay que enviar un valor binario de 1111110. Como el registro de desplazamiento tiene 8 bits, añadimos un bit más a esa cadena (da igual el valor) y tendremos entonces 11111100, que en decimal se corresponde con el 252. Este sería en principio el valor a enviar por el registro de desplazamiento, pero para el display que estoy utilizando necesito enviar los bits invertidos (un 0 enciende el led y un uno lo apaga), así que el valor a enviar, en binario, es 00000011, que en decimal es el 3 (255-252). Esto mismo hay que hacer para el resto de valores. */
byte uno=255-96;
byte dos=255-109;
byte tres=255-121;
byte cuatro=255-102;
byte cinco=255-182;
byte seis=255-190;
byte siete=255-224;
byte ocho=255-0;
byte nueve=255-230;

void setup(){
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(digito1, OUTPUT);
  pinMode(digito2, OUTPUT);
}
void loop(){
  shiftOut(dataPin,clockPin,LSBFIRST,siete);//Pintamos el valor 7 en el primer dígito
  delay(1000);
  digitalWrite(digito1,LOW);
  digitalWrite(digito2,HIGH);
  shiftOut(dataPin,clockPin,LSBFIRST,uno);//Pintamos el valor 1 en el primer digito
  delay(1000);
  digitalWrite(digito1,HIGH);
  digitalWrite(digito2,LOW);
  shiftOut(dataPin,clockPin,LSBFIRST,cinco);//PIntamos el valor 5 en el segundo dígito
  delay(1000);
  digitalWrite(digito1,HIGH);
  digitalWrite(digito2,LOW);
  shiftOut(dataPin,clockPin,LSBFIRST,cuatro);//Pintamos el valor 4 en el segundo dígito
  delay(1000);
  digitalWrite(digito1,LOW);
  digitalWrite(digito2,HIGH);
}

11 dic 2012

Comunicación infrarroja con Arduino

Del despiece del aparato TDT estropeado obtuve un sensor de infrarrojos, que era una de las piezas vitales que tenía pensado comprar (y de hecho compré) para poder llevar a cabo el proyecto del coche con control remoto con Arduino. Como aún no he recibido el receptor infrarrojos comprado, me he puesto directamente a trastear con el obtenido del TDT. En un principió me chocó no ver el tipo de receptor concreto que era para poder buscar una hoja de características (datasheet). Así que la solución por la que opté fue buscar imágenes de receptores infrarrojos en Internet hasta ver cuál podía corresponder y pronto la búsqueda resultó efectiva. Tenía ante mí a un PL-IRM0101-3. Si bien la documentación que encuentro relacionada con la recepción de infrarrojos usando Arduino no utiliza dicho sensor, sino más bien TSOP 1238 o algo por el estilo, el proceso es bastante similar. En las hojas de características se encuentra un esquemático sobre cómo montar el circuito para recibir señales. Podéis ver la imagen a continuación.
Esquema de montaje del receptor infrarrojos

Con todo listo, comencé a montar el circuito y la primera prueba fue un fracaso. Era incapaz de leer señal alguna, así que revisé el circuito, busqué diferentes librerías para recepción de infrarrojos en Arduino y seguía sin obtener absolutamente nada. Cuando llegué a pensar que el receptor estaba estropeado, pensé en alguna forma de probarlo directamente y fue entonces cuando me topé con un excelente artículo que explica los conceptos de receptores infrarrojos, cómo testearlos, cómo son las señales emitidas por el mando a distancia, cómo son interpretadas por el receptor y evidentemente cómo usarlo. El enlace al magnífico artículo lo podéis encontrar aquí. Como se encuentra en inglés, me parece interesante también destacar uno en castellano, menos detallado quizá pero muy sencillo de entender y que explica qué es el protocolo NEC aquí. Tras testear el receptor infrarrojos comprobé que funcionaba correctamente, así que decidí montar más cuidadosamente el circuito inicial (debía haber algo mal) y esta vez funcionó a la primera. 
Una vez resuelto, me decidí a realizar mi propio programa, que básicamente consiste en recibir las señales del mando a distancia, interpretarlas y mostrar por el display LCD cuál ha sido la tecla pulsada. Podéis ver el vídeo a continuación.

Por cierto, comentar que si compráis un receptor infrarrojos TSOP1838 procedente de DealExtreme (como es mi caso) debéis tener en cuenta que hay un cambio en las patillas del circuito. Más detallado aquí.
Y, aunque me parezca poco usable, cuelgo el código del programa que muestra la tecla pulsada en el display aquí.

9 dic 2012

Primeros experimentos con Arduino

Con el pedido de DealExtreme recibido he podido empezar a realizar experimentos con Arduino. Para empezar, una serie de ejemplos sencillos e incluidos en la propia aplicación de Arduino IDE. Encender un led, hacer que se encienda y apague progresivamente, y algún otro más por el estilo. Posteriormente le ha tocado el turno al display LCD con el controlador HD44780 y las librerías LiquidCrystal, que realmente hacen que programar el display sea cosa de niños. Todas las opciones de mover el cursor, desplazar el display... están incluidas en la librería. Podéis encontrar un esquema de montaje e información al respecto aquí
Arduino controlando un display LCD

Como también recibí un sensor de distancias por ultrasonidos HC-SR04, he decidido combinar ambos elementos basándome en un experimento que podéis encontrar aquí. El proceso de montaje es bastante sencillo y todo ha funcionado a la perfección a la primera. Podéis ver mi montaje en funcionamiento en la siguiente imagen.
Medida de distancia con Arduino, sensor y display LCD

Como todo esto lo he podido hacer sin programar (aunque he tratado de entender todos los programas que he utilizado), he decidido hacer una modificación, consistente en cambiar el display LCD por uno de 7 segmentos que obtuve de un aparato TDT estropeado. Para ello he tenido, en primer lugar, que buscar la hoja de características de dicho display, que resulta ser un 3942AX/BX-XX. Este display tiene 16 pines, si bien para este experimento solo he conectado los correspondientes a dos dígitos (la medida máxima del sensor de ultrasonido es inferior a 100 centímetros). Podéis ver un vídeo del montaje en funcionamiento a continuación

La programación es básica. Leemos la distancia que nos proporciona el sensor de ultrasonidos en centímetros y comprobamos si es menor que 10, en cuyo caso se puede enviar la medida directamente al primer dígito. Si es mayor que nueve, entonces debemos configurar los dos dígitos. Para ello, con el valor obtenido, el valor a mandar al dígito más significativo es el cociente de división de enteros por 10, mientras que al dígito menos significativo se manda el resto de dicha división. Dependiendo del número a enviar se encienden un determinado conjunto de leds. Podéis descargar el código completo aquí. Si queréis más información de displays 7 segmentos clicad aquí.
Comentar también otro experimento que me ha gustado, muy simple, que consiste en una especie de sensor de aparcamiento. Lo podéis encontrar aquí.

8 dic 2012

Compra de componentes electrónicos

En una de las entradas de mi blog hablé sobre DealExtreme he hice referencia a sus bajos precios pero largos tiempos de espera hasta recibir los pedidos. Pues bien, para que tengáis una referencia indicaros que el día 8 de Noviembre realicé un pedido de 8 dólares aproximadamente, el cuál recibí ayer 7 de Diciembre, es decir, prácticamente un mes. Por contra un pedido realizado en Ebay de un sensor por ultrasonidos tardó 4 días. En las imágenes a continuación podéis ver los diferentes artículos que he recibido
Diferentes artículos de un pedido de DealExtreme

Artículo recibido desde Ebay

Durante este casi mes he estado informándome sobre dónde comprar material electrónico, las posibilidades de DealExtreme a la hora de hacer un pedido, etc, y me parece interesante indicar los siguientes enlaces:
 ¿Dónde comprar electrónica? del blog Electrónica de otoño. Este artículo hace referencia a tiendas online, internacionales, nacionales y almacenes chinos, incluso haciendo recomendaciones. El blog está relacionado con el desarrollo de productos electrónicos y me parece muy interesante, de hecho recomendaré otro artículo en un futuro próximo relacionado con recepción infrarroja.
Consejos para compras chinas del blog Made in China en el que explican la protección del comprador, garantía de llegada del producto, etc. El blog me gusta, pero el que me encanta es otro de ese mismo autor, denominado Ikkaro, donde realiza y explica inventos y experimentos caseros. Muy recomendable.
Ya le estoy echando un ojo a una Arduino Nano por 11 dólares...

Abrir Pdf's, documentos de office y enlaces magnéticos directamente en Chromium en LXDE/Lubuntu

El navegador web incluido por defecto en Lubuntu es Chromium. Si bien he probado varios de ellos, puedo decir que éste es el que más me gusta, aunque tiene para mí el gran inconveniente de que cualquier enlace magnético, archivo PDF, documento de office, etc, no es abierto directamente desde el navegador, como sí que ocurre por ejemplo en Firefox. En mi caso tiendo a descargar archivos por torrent, utilizar listas de spotify o buscar documentos pdf y resulta bastante molesto no tener esa opción. Así que buscando he encontrado soluciones que pueden ser interesantes pero requieren de unos pequeños retoques. Veamos cómo hacerlo:
1.- Abrir enlaces magnéticos
La solución la he encontrado aquí. Básicamente consiste en, primeramente manipular la configuración del Gconf y posteriormente modificar el fichero xdg-open. Para esto, en una terminal introducimos los siguientes comandos:

gconftool-2 -t string -s /desktop/gnome/url-handlers/magnet/command "transmission %s"

gconftool-2 -s /desktop/gnome/url-handlers/magnet/needs_terminal false -t bool

gconftool-2 -t bool -s /desktop/gnome/url-handlers/magnet/enabled true

Y posteriormente, para modificar el xdg-open, introducimos en una terminal

sudo leafpad /usr/bin/xdg-open

Y modificamos la parte siguiente

#--------------------------------------
# Checks for known desktop environments
# set variable DE to the desktop environments name, lowercase
detectDE()
{
 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
 elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
 elif [ x"$DESKTOP_SESSION" == x"LXDE" ]; then DE=lxde;
 else DE=""
 fi
}

Dejándola así

#--------------------------------------
# Checks for known desktop environments
# set variable DE to the desktop environments name, lowercase
detectDE()
{
# if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
# elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
# elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
# elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
# elif [ x"$DESKTOP_SESSION" == x"LXDE" ]; then DE=lxde;
# else DE=""
# fi
DE=gnome;
}

Con esto ya tenemos la opción de enlaces magnéticos activada. Si ahora por ejemplo intento abrir una lista spotify desde el navegador, aparece una ventana como la siguiente
Ventana de petición de uso de protocolo externo

Selecciona la opción lanzar aplicación y listo.
2.- Abrir documentos de pdf y office
Vamos ahora con los documentos pdf y de office. Para esto existen, dos alternativas, si bien la segunda en mi caso no ha funcionado (creo que si fuese una instalación limpia de Lubuntu sí lo haría). 
Opción 1:
La primera pasa por instalar una extensión denominada Visualizador de archivos PDF/PowerPoint. Esta extensión se encarga de abrir ese tipo de archivos con Google Docs. A mí personalmente no me gusta, de ahí que busqué otra opción, explicada a continuación.
Opción 2:
Pasa por utilizar las aplicaciones que por defecto se encargan de abrir ese tipo de archivos embebidas en nuestro navegador. Por ejemplo, abrir un pdf con evince o abrir un doc con libreoffice, todo sin salir del navegador. Para ello hay que instalar mozplugger y realizar algunas modificaciones. En un terminal

sudo apt-get install mozplugger

Si queremos utilizar evince para abrir los documentos pdf, según se explica aquí, hay que modificar el archivo mozpluggerrc. Para ello, desde terminal

sudo leafpad /etc/mozpluggerrc

Buscamos la parte de texto

### Acrobat Reader
define(ACROREAD, [repeat swallow(acroread) fill : acroread -openInNewWindow /a "$fragment" "$file"])

Y la modificamos, dejándola


### Acrobat Reader
# define(ACROREAD, [repeat swallow(acroread) fill : acroread -openInNewWindow /a "$fragment" "$file"])
define(ACROREAD, [repeat swallow(evince) fill needs_xembed : evince "$file"])

Si además tenemos libreoffice y queremos que utilice esa aplicación para documentos de office hay que, según se explica aquí, modificar la parte del archivo

### OpenOffice
define([OO],[swallow(VCLSalFrame) fill: ooffice2.0 -nologo -norestore -view $1 "$file"
swallow(VCLSalFrame) fill: ooffice -nologo -norestore -view $1 "$file"
swallow(VCLSalFrame) fill: soffice -nologo $1 "$file"])

dejándola así


### OpenOffice
define([OO],[swallow(VCLSalFrame) fill: libreoffice -nologo -norestore -view $1 "$file"
swallow(VCLSalFrame) fill: libreoffice -nologo -norestore -view $1 "$file"
swallow(VCLSalFrame) fill: libreoffice -nologo $1 "$file"])

Esta última opción de libreoffice es la que a mí no me ha funcionado. He realizado modificaciones en este archivo pero siempre obtengo el error 

Could not load MozPlugger 1.14.5 handles QuickTime and Windows Media Player Plugin

Lo cierto es que no sé muy bien el por qué de ese error, pero creo que puede ser alguna modificación previa que hice en el navegador. En Firefox funciona perfectamente. Trataré de informarme más al respecto y os mantengo informados.





4 dic 2012

Despiezando un estropeado aparato TDT

Últimamente estuve haciendo limpieza por casa y me percaté de la existencia de un estropeado TDT. Sin pensar lo que me podría encontrar dentro de él me puse ha desmontarlo. Y cuál fue mi alegría cuando descubrí diferentes partes que me podían ser muy útiles en un futuro. Al abrirlo me encontré con 3 partes principales, un circuito electrónico al que estaban anclados el TDT propiamente dicho y los euroconectores, otro circuito electrónico en la zona del frontal y una fuente de alimentación.

Interior del aparato TDT
Ésta última me viene genial a la hora de alimentar los circuitos electrónicos que tengo en mente montar, ya que ofrece salidas a 3.3, 5, 9, 12 y 30V.
Fuente de alimentación incluida en el TDT
Para la fuente de alimentación he decidido, modificando y recortando la carcasa del aparato, crear una caja que me permita acceder a sus salidas. El resultado obtenido es bastante chapucero, la verdad, pero me servirá para los propósitos que quiero darle.
Aspecto de la caja modificada para poder acceder a las salidas de la fuente de alimentación
Diferentes componentes obtenidos del TDT
En el circuito del frontal se encontraban componentes que también me pueden servir como un display 7 segmentos de 4 dígitos, un registro de desplazamiento, pulsadores y un receptor infrarrojos (que lo podré usar para el coche con control remoto). En el circuito principal había reguladores de voltaje y otros componentes varios que pueden venirme bien. 
Me parece importante destacar cómo conseguí desoldar los componentes de las placas, y es que es un método que encontré en youtube y que, al menos en mi caso me resultó muy sencillo, efectivo y que no estropeó ningún componente que desoldé. Os dejo el link del vídeo aquí.

24 nov 2012

¿Cursando fundamentos de programación en la UNED? Tengo un regalo para tí. Parte 2.

Hola a todos aquellos interesados y cursando la asignatura de fundamentos de programación de la UNED. Con dos días de retraso con respecto a la fecha indicada en el planning, publico una solución a la práctica 3. El programa imprime la hoja de calendario correspondiente a un mes comprendido entre Enero de 1601 y Diciembre de 3000.
El código se encuentra comentado para una fácil comprensión. Espero que os sea de ayuda. Simplemente decir que no encontré un mecanismo en condiciones para el procedimiento que imprime el calendario, así que al final me decanté por hacerlo utilizando el comando "printf" tantas veces como fuera necesario.
El código fuente lo podéis encontrar aquí.

Recordar que las dos primeras prácticas las podéis encontrar aquí

22 nov 2012

Fritzing, mucho más que software de diseño de PCB

Últimamente venía pensando que sería interesante para mí adentrarme más en el mundo del diseño de circuitos impresos. Si bien en la carrera estudiamos al respecto, no lo hicímos con gran profundización. Así que me puse manos a la obra y por el camino apareció Fritzing. En el sitio web lo definen, no solo como una herramienta software para el diseño de layouts, sino también como una iniciativa open-source hardware y una comunidad virtual que permite a los usuarios documentar, enseñar y compartir sus proyectos electrónicos. Y bien que lo han conseguido, a tenor de lo que se puede ver en el apartado de proyectos de su sitio web. Cientos y cientos de proyectos electrónicos y muchos de ellos utilizando Arduino, lo cuál me viene en este momento como anillo al dedo.
La herramienta software se encuentra en este momento en fase beta, aunque la he estado probando y no he encontrado problema alguno. Destacar que es realmente sencillo y visual el montar tu circuito virtual y obtener el layout en caso de que queramos crear u ordenar nuestra tarjeta de circuito impreso PCB. Podéis encontrar un videotutorial básico aquí, aunque hay realmente mucha documentación en Internet al respecto. Como punto negativo (a mi modo de ver bastante negativo) decir que no permite la simulación de circuitos. Según indican en su web, la idea es montar el circuito real y, una vez comprobado que funciona, documentarlo mediante Fritzing y obteniendo la PCB si así lo deseamos.
Aspecto visual de la aplicación

Crear una base de datos básica de clientes en Java

Unos pocos días atrás creé una entrada en la cuál mostraba una base de datos para clientes (por ejemplo) que había creado utilizando el software y lenguaje de programación Gambas. Si bien en aquel programa utilizaba una base de datos SQLite para almacenar los datos, en este programa se almacena en la memoria del ordenador. Quedo por lo tanto en mi lista de tareas el realizar la base de datos en Java almacenando datos en un servidor. 
La aplicación consiste en una ventana principal que contiene una tabla que muestra la lista de clientes guardados. Esa ventana permanece hasta que se realiza alguna de las tres acciones posibles, que son dar de alta a un nuevo cliente, modificar un cliente o dar de baja a un cliente previamente almacenado. Al elegir la opción de alta de un nuevo cliente aparecerá sobre la ventana principal un nuevo panel con cuadros de texto para introducir los datos y el botón de guardar. En caso de que la opción elegida sea modificar o borrar un cliente, el panel que aparecerá contendrá cuadros de texto para buscar un determinado cliente y además otros cuadros de texto que muestran el cliente sobre el que realizar la opción que se desee. Personalmente pienso que la interfaz que he creado es bastante mejorable, pero la utilidad y funcionalidad que quería darle las tiene.
Decir que la lista de clientes almacenados se guarda en un ArrayList. Encontré información muy interesante con respecto a este tipo de elementos aquí. Como de cada cliente se almacena el nombre y los dos apellidos, pues la lista está formada por conjuntos de ArrayList, teniendo por tanto una lista ArrayList<ArrayList<String>>. Para recorrer los elementos de la lista he utilizado un ListIterator, y para buscar un determinado cliente el método de ArrayList "contains". Podeis ver y descargar el código fuente en el enlace al final de la entrada.

Aspecto de la ventana principal

Aspecto al seleccionar la opción de alta de cliente

Aspecto de la ventana añadiendo nuevos clientes

Ventana de modificar cliente con cuadros de búsqueda

 Podéis descargar el código fuente desde aquí.



19 nov 2012

Tweaks estéticos para Lubuntu. Efecto exposé, shadows, aerosnap...

Como hemos citado anteriormente, Lubuntu está enfocada a ser rápida, ligera y con poco consumo de recursos. Eso tiene sus ventajas (evidentes), pero también acarrea algunos inconvenientes, como puede ser el de no tener efectos de escritorio avanzados por defecto. Hablo de efectos tales como AeroSnapExposé o Shadows, que, a mi modo de ver, no solo son efectos estéticos sino que también pueden llegar a ser prácticos (especialmente AeroSnap).
Aunque los usuarios de Linux disponemos de Compiz, este requiere bastantes recursos y se sale un poco de la filosofía de Lubuntu. Por lo tanto aquí trataré de explicar tips para poder tener efectos de escritorio que consuman pocos recursos.

  • AEROSNAP

El primero de ellos y al que más utilidad le encuentro es el efecto AeroSnap, que consiste en que dos ventanas quedan divididas ocupando cada una de ellas la mitad, lo que permite trabajar en una mientras vemos la otra. La explicación de cómo instalarlo la podéis encontrar aquí. Básicamente consiste en modificar el archivo "lubuntu-rc.xml". Para ello, abrimos LXTerminal y ejecutamos:

gksu leafpad ~/.config/openbox/lubuntu-rc.xml

En el archivo de texto que aparece se encuentra básicamente la configuración de combinaciones de teclas que realizan alguna función en nuestro sistema. Encontraremos algunas de ellas, como subir y bajar el volumen, modificar el brillo de la pantalla, etc.
Con el editor de texto abierto, buscamos la línea que contiene el siguiente texto:

<chainQuitKey>C-g</chainQuitKey>

y debajo de ella pegamos el siguiente código:

<!-- Aero Snap for Openbox Begin Code-->
    <keybind key="W-Left">        # HalfLeftScreen
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo">
        <x>0</x>
        <y>0</y>
        <height>97%</height>
        <width>50%</width>
      </action>
    </keybind>
    <keybind key="W-Right">        # HalfRightScreen
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo">
        <x>-0</x>
        <y>0</y>
        <height>97%</height>
        <width>50%</width>
      </action>
    </keybind>
    <keybind key="W-Up">        # HalfUpperScreen
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo">
        <x>0</x>
        <y>0</y>
        <width>100%</width>
        <height>50%</height>
      </action>
    </keybind>
    <keybind key="W-Down">        # HalfLowerScreen
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo">
        <x>0</x>
        <y>-0</y>
        <width>100%</width>
        <height>50%</height>
      </action>
    </keybind>
<!-- Aero Snap for Openbox End Code-->

Guardamos el archivo, cerramos la ventana y volvemos al terminal, donde introducimos:

openbox --restart

Cerramos la terminal y ya podemos comprobar nuestra nueva funcionalidad pulsando la combinación de teclas windows y botón derecho, izquierdo, arriba o abajo, en función de dónde queramos colocar nuestra ventana.
Efecto aerosnap con ventanas separadas verticalmente

Efecto aerosnap con ventanas separadas horizontalmente

  • EXPOSÉ

El segundo efecto del que os hablo es Exposé. Podéis encontrar una explicación completa de instalación y configuración aquí. Básicamente consiste en instalar el paquete Skippy-XD y volvemos a modificar el archivo "lubuntu-rc.xml" que cambiamos para el efecto anterior. Para ello, de nuevo en una terminal

gksu leafpad ~/.config/openbox/lubuntu-rc.xml

Buscamos desde el editor de texto la línea que contiene

<chainQuitKey>C-g</chainQuitKey>

y debajo de ella pegamos el código siguiente


<!-- Start Expose for LXDE-->
<keybind key="A-grave">
     <action name="Execute">
       <command>skippy-xd</command>
     </action>
   </keybind>
<!-- End Expose for LXDE-->


Guardamos el archivo, cerramos la ventana y volvemos al terminal, donde ejecutamos

openbox --restart

Ahora si introducimos la combinación de teclas Alt y la tecla justo encima del tabulador izquierdo obtendremos el efecto exposé.
Efecto exposé

  • SOMBRAS Y TRANSPARENCIAS

Otro efecto que podemos aplicar y sin apenas consumo de recursos son las sombras de las ventanas y las transparencias de estas cuando se encuentran en segundo plano. Para ello usaremos compton, el cuál podemos encontrarlo en versiones de 32bits o de 64bits. Tras instalarlo podemos configurarlo siguiendo el tutorial de Gespadas. Si queremos incluirlo como una aplicación de inicio (para que cada vez que arranquemos el sistema se encuentre en ejecución), podemos hacerlo editando el archivo "/etc/xdg/lxsession/Lubuntu/autostart". Para ello, introduce en una terminal el siguiente comando:

sudo leafpad /etc/xdg/lxsession/Lubuntu/autostart

y añade la siguiente línea al final

@compton -cC -i 0.8 -e 0.7 -fF -I 0.065 -O 0.065 -D 6 -m 0.8

Estos parámetros son los que a mí me gustan, aunque lógicamente puedes ponerlos a tu gusto.
Efectos de sombras y transparencias

  • ZOOM

Otro efecto de escritorio que podemos utilizar, y me da la impresión que es bastante desconocido para Lubuntu, es el del zoom, que consiste en aumentar una zona determinada del escritorio. Esto lo podemos hacer con la aplicación xzoom, el cuál, si bien no es tan dinámico como el efecto lupa de compiz, puede darnos resultados bastante buenos, sobre todo si quieres hacer un screencast o simplemente necesitas hacer un zoom  para leer alguna letra pequeña. Para instalarlo basta con escribir en el terminal:

sudo apt-get install xzoom

O bien entrar en el Gestor de paquetes Synaptic, buscar xzoom e instalarlo.
Al ser un programa desde consola, que puede resultar incordioso, pero tenemos la posibilidad de hacer que se ejecute mediante una combinación de teclas, de forma idéntica a como lo hacíamos con el efecto exposé. Para ello, escribe en una terminal

gksu leafpad ~/.config/openbox/lubuntu-rc.xml

Buscamos desde el editor de texto la línea que contiene:

<chainQuitKey>C-g</chainQuitKey>

y debajo de ella pegamos el código siguiente:


    <!-- Zoom in the desktop using xzoom-->
    <keybind key="A-z">
      <action name="Execute">
        <command>xzoom -source 250x150 -mag 2</command>
      </action>
    </keybind>

Guardamos el archivo y ya podemos hacer un zoom utilizando la combinación Alt-z. Por supuesto la combinación de teclas que le asignamos, el zoom, o el tamaño de la porción a aumentar son modificables. Un tutorial lo puedes encontrar aquí.
Efecto zoom de la parte inferior derecha del escritorio

  • NOTIFICACIONES

Para terminar, un último pequeño tip que consiste en modificar las preferencias de las notificaciones en Lubuntu. Por defecto, las notificaciones aparecen durante 10 segundos, en la parte superior derecha y con un tema predeterminado. Si queremos cambiar todos estos parámetros, basta con ejecutar en un terminal:

xfce4-notifyd-config

Y ya os aparecerá la ventana de preferencias, que permite modificar el tema, la posición y el tiempo de las notificaciones. Mis preferencias son el tema Smoke, la posición abajo a la derecha y el tiempo de retardo de 4 segundos. La opacidad al 72%.
Notificaciones modificadas

En los vídeos a continuación muestro cada uno de los efectos en ejecución así como el procedimiento de instalación (para aquellos no muy familiarizados con la terminal).







17 nov 2012

¿Cursando fundamentos de programación en la UNED? Tengo un regalo para tí.

Actualmente estoy cursando la asignatura Fundamentos de Programación del Grado de Ingeniería Informática de la UNED. Para el que también esté cursándolo, sabrá que hay una parte práctica de la asignatura consistente en 4 prácticas. Por si os puede servir de ayuda, voy a tratar de colgar todas, con comentarios para que puedan entenderse, aquí en mi blog. De momento, puedes encontrar las dos primeras aquí. Espero que os sirva...

Actualización 1: Ya se encuentra disponible la práctica 3. La podéis encontrar aquí.

15 nov 2012

¿Un coche con control remoto con Arduino? ¡Vamos a intentarlo!

Desde bien pequeño he tenido una gran afición por los coches teledirigidos. Recuerdo perfectamente todos y cada uno de los que he tenido, he incluso siendo ya mayor decidí comprarme uno. Siempre me había interesado por saber cómo están hechos, cómo es posible controlarlo remotamente.
Un buen día, indagando por la web de la Escuela de Ingenierías Industriales de la Unex, descubrí que unos excompañeros míos habían creado un coche con control remoto (podéis encontrar un vídeo aquí)... y me encantó. Quedó en mi recámara la idea de hacer alguno. Y con la reciente adquisición de la tarjeta arduino y unas pequeñas adquisiciones más creo que ese día se acerca. Si observáis el vídeo podréis comprobar que montaron todo desde cero. Yo no llegaré a esos extremos, mi idea está más centrada en la programación de la tarjeta, aunque es evidente que habrá que hacer algo de manualidades. Iré comentando la evolución, espero tenerlo funcionando en un par de meses...
Coche con Arduino