Páginas

sábado, 28 de diciembre de 2013

Conectando Raspberry Pi a una protoboard

En esta nueva entrada vamos a conectar nuestra flamante Raspberry Pi a una placa de prototipado (Protoboard) para poder experimentar con distintos montajes y módulos electrónicos (sensores, actuadores, reloj en tiempo real,E/S digitales,etc).
Existe una muy amplia variedad de módulos que se venden en forma de kit, o totalmente montados, que podremos integrarlos al Rasberry Pi (en adelante, la nombraremos indistintamente RPi o RasPi) a través del conector GPIO (General Purpose Input/Output) de 26 pines.
Al disponer de mucha información técnica, de un precio muy aquilatado, de unas prestaciones muy atractivas y de una comunidad muy activa, el equipo se está extendiendo y popularizando muy rápidamente, lo que ha propiciado la creación de todo un mercado auxiliar de módulos, periféricos y accesorios de todo tipo para ser conectados al RasPi.
Para conectar una placa de prototipado al RasPi podríamos optar 1) por comprar una tarjeta de expansión mínima o 2) realizarla nosotros mismos. La segunda opción es la que hemos seleccionado y es lo que vamos a exponer en esta entrada. Pero antes comentaremos lo que podemos encontrar en el mercado.

Lo que hay en el mercado

Para los que quieran decantarse por la compra de una tarjeta de expansión existe una muy amplia variedad, fácil de encontrar si se busca en Internet. En el apartado de enlaces he puesto algunas tiendas online donde poder comprar este tipo de producto.

Los tres ejemplos de la imagen anterior corresponden a productos que se pueden comprar, los dos primeros, en forma de kit de montaje o, como el último, totalmente montado.

Material necesario

La tarjeta de expansión que vamos a implementar, similar a las que se pueden comprar en el mercado, nos permitirá conectar el puerto GPIO del RasPi  con la placa de prototipado (protoboard) mediante un cable plano de 26 conductores.
Para su implementación dispondremos de los siguientes materiales:
  • un conector macho de 2x13 pines.
  • una tira de al menos 26 pines pines.
  • un pedazo de circuito impreso para prototipado, con perforaciones.




y, también, nos hará falta un par de conectores IDC hembra de 2x13 pines que uniremos con un cable plano de 26 conductores, y de longitud adecuada ¿15 cm? la suficiente para poder manipular convenientemente la protoboard en donde insertaremos nuestra tarjeta de expansión.
Como herramientas, utilizaremos un soldador de poca potencia y estaño.

Diseño de la tarjeta de expansión

Para el diseño de dicha tarjeta hemos utilizado el programa Fritzing que nos ha servido para crear un componentes que después podremos utilizar fácilmente para hacer nuestros montajes sobre la protoboard.
La imagen es una vista del aspecto que tendrá el montaje, y una réplica del componente que se utilizará en Fritzing, en vista protoboard. También he diseñado las vistas Esquema y PCB, utilizando como vista icono la vista de protoboard. Este componente está disponible para su utilización aquí.
De la imagen, podemos observar que el circuito impreso estará formado por una matriz de 6x17 perforaciones en donde insertaremos los componentes, tamaño que resultar de incluir 2 filas de perforaciones alrededor del conector macho de 2x13 pines.

Montaje de la tarjeta de expansión

1) Separamos dos subtiras de 13 pines de la tira de pines.
2) Desplazamos totalmente todos los pines hacia el lado por donde más sobresalen.
3) Insertamos las dos subtiras en el circuito impreso, por el lado contrario al cobre, dejando libre entre ambas subtiras 4 filas de perforaciones, y 2 filas de perforaciones en sus extremos. Las 2 filas de perforaciones centrales y libres serán para insertar el conector de 2x13 pines.
4) Soldamos las dos subtiras al circuito impreso, comprobando que no se ha creado ningún cortocircuito entre pines.
5) Insertamos el conector macho de 2x13 pines por el lado contrario al cobre.
6) Soldamos todos los pines del conector macho, evitando crear cortocircuitos entre sus pines.
7) Finalmente, y con mucha paciencia, unimos cada pin del conector con su correspondiente pin de la subtira adjunta, a base de depositar el suficiente estaño que permita crear un puente entre cada par de pines asociados.
Existe otro tipo de placas de circuito impreso para prototipado en el que el cobre viene dispuesto en tiras perforadas. Utilizando este tipo de circuito impreso, nos evitaríamos el tener que soldar puenteando los pines asociados...pero yo no disponía de este tipo de placa y resultó que el montaje me resultó algo más complicado...pero lo conseguí.
Y éste es el montaje final de la tarjeta de expansión sobre la protoboard y unida por un cable plano a la tarjeta Raspberry Pi.

Enlaces

- Tarjetas expansoras
- ModMyPi | Raspberry Pi Expansion and Breakout Boards
- Adafruit Pi Cobbler Breakout Kit for Raspberry Pi
- Fritzing electronic made easy
- RaspPi2 Header 13x2.fzpz

lunes, 16 de diciembre de 2013

GIMP, UFRaw y Lensfun - Reconociendo una lente por UFRaw

El formato que utilizo para tomar fotos con mi vieja cámara Nikon D80 es el que me ofrece mayor calidad, es decir, en el formato NEF (RAW) con una resolución de 3.872 × 2.592 píxeles. Descarto guardar las fotos en el modo NEF+JPEG, pues siempre me he planteado realizar un postprocesado de las fotos que tome, pero partiendo del formato de mayor calidad que me ofrezca la cámara.
Para el postprocesado utilizo GIMP (GNU Image Manipulation Program). No voy a entrar en una polémica y compararlo con el conocido Photoshop, tan popular en el mundo profesional. Solo decir que Gimp me permite realizar la mayoría de los retoques fotográficos que necesito. Si me dedicara profesionalmente al retoque fotográfico, profundizaría en conocer las ventajas de utilizar Photoshop en lugar de Gimp, no solo por su calidad sino desde un punto de vista de rentabilidad y productividad.
Dicho esto, pasemos al objeto del artículo.

UFRaw (The Unidentified Flying Raw)

Cuando intentamos abrir imágenes RAW con GIMP, y habiendo instalado UFRaw, GIMP llamará a UFRaw para que podamos ajustar ciertos parámetros de la imagen y exportarla a GIMP en el formato que utiliza.
Además de poder ajustar, entre otras cosas, la exposición y el balance de blancos de una fotografía, las versiones más recientes de UFRaw permiten corregir las distintas distorsiones que produce una lente determinada (aberraciones cromáticas y geométricas, viñeteado y distorsiones varias). Esta reciente funcionalidad de UFRaw se basa en el programa Lensfun, programa que cuenta con una extensa base de datos de lentes que se va ampliando por momentos. Pero mi lente no estaba reflejada en la base de datos, por lo que tuve que buscar en Internet si alguien había parametrizado mi lente para poder ser reconocida por Lensfun y, por tanto, por UFRaw.
Para no tener que cargar con excesivo peso cuando me voy de excursión, terminé comprándome el objetivo Tamron 18-270mm F/3.5-6.3 Di II VC PZD. Es una lente aceptable. Pero a su menor distancia focal (18mm, 28mm equivalente para 35mm) la distorsión es apreciable.  Muestra un cierto efecto de barrilado que, aunque en fotografías sin líneas rectas en sus bordes no llega a ser visible, quería aplicar estas correciones en todo el abanico de distancias focales.
Así que buscando en Internet, encontré un fichero lens.xml en lensfun-tamron-18-270mm.

Lensfun

¿Pero qué hacer con este fichero? Buscando de nuevo en Internet, averigüé que la base de datos que utiliza Lensfun para hacer sus correcciones, en una plataforma Ubuntu, se encuentra ubicada en
/usr/share/lensfun
y que la base de datos consiste en una relación de ficheros con extensión xml, tantos como marcas de lentes fotográficas esté considerando Lensfun. Así que busqué un fichero con el nombre que contuviese tamron, o algo parecido, y encontré slr-tamron.xml.
Éste era el fichero que tenía que editar. ¿Pero con qué? Con el que había encontrado en la red con nombre lens.xml.
El contenido del fichero lens.xml contenía:
EL fichero consta de un bloque de datos, limitado por el par de etiquetas <lens>---</lens>. Este bloque será el que insertemos en el fichero slr-tamron.xml. Teniendo en cuenta que este fichero solo se puede editar con privilegios de root, lo editaremos desde un terminal, tecleando lo siguiente:
sudo gedit /usr/share/lensfun/slr-tamron.xml
Una vez echa la inserción, guardaremos los cambios y saldremos de la edición.
Abriremos un fichero NEF(RAW) y veremos si en la pestaña de corrección de distorsiones aparece el nuevo objetivo. Si es así, lo elegimos y veremos cómo la imagen se comba por el centro de los bordes, compensando la distorsión que produjo la lente a una distancia focal determinada.
La primera vez que lo intenté, no lo conseguí, y el problema radicaba en que no existía correspondencia entre el nombre de la lente que aparecía en el campo EXIF y el del bloque de la lente. Editando de nuevo el fichero slr-tamdon.xml y sustituyendo <model>Tamron 18.0 - 270.0 mm f/3,5-6,3 Di II VC LD Aspherical IF MACRO</model> por <model>Tamron AF 18-270mm F/3.5-6.3 Di II VC PZD</model> resolví el problema. Debo comprobar que esta nueva versión del objetivo tenga otras distorsiones. En un principio, considero que ópticamente son los mismos.

Comparando una misma fotografía sin corregir (izquierda) y corregida (izquierda) podremos notar la diferencia. Me hubiera gustado tener una fotografía con líneas rectas en los bordes para que fuera más visible la distorsión.
La lente tiene otro tipo de aberraciones, las cromáticas, pero no he encontrado (no me he puesto en ello) el modo de reflejarlo en el bloque de datos del correspondiente objetivo, con el objeto de también corregirlas.

Enlaces

- GIMP
- UFRaw
- Lensfun
- GNU (es)
- Gimptalk
- Tamron 18-270mm F/3.5-6.3 Di II VC PZD review
- lensfun-tamron-18-270mm
- 10 Reasons Why You Should Be Shooting RAW
- Cuarto oscuro digital II. Flujo de trabajo con UFRaw
 

lunes, 2 de diciembre de 2013

Viendo películas de tu plataforma Ubuntu en el monitor de televisión

Y no solamente películas. También, cualquier contenido multimedia que sea vídeo, imagen o música, incluyendo cualquier tipo de sonido, podrá ser reproducido en un monitor de televisión que 1) disponga de conexión a red local (WiFi o cable) y 2) esté dotado de DLNA (Digital Living Network Alliance).
Hoy en día, un televisor con tales prestaciones no suele ser raro encontrarlo en casa. Estos televisores, también conocidos como Smart TV, no solo vienen equipados con estas facilidades, sino que también puedes conectarles un disco Duro externo, pendrive o cualquier unidad de almacenamiento, a través de los puertos USB con los que suelen venir equipados.
Hoy voy a referirme solamente al modo de compartir el contenido multimedia que tengamos en un ordenador con sistema operativo Ubuntu, en mi caso con la versión 13.10 Saucy Salamander.
Para ello, instalaremos un servidor DLNA, miniDlna, del siguiente modo:
sudo apt-get -y install minidlna
con la opción -y asumimos responder afirmativamente a todas las preguntas que en fase de instalación vayan surgiendo.

Configuración de miniDlna

Si no surge ningún problema, el servidor se habrá instalado perfectamente, y será el momento de proceder a configurarlo, indicándole dónde se encuentra el contenido multimedia, de qué modo será identificado en el televisor, etc.
Para ello, abrimos y editamos el fichero de configuración, minidlna.conf ubicado en /etc, en modo privilegiado:
gksu gedit /etc/minidlna.conf
modificando y/o añadiendo las líneas que se muestran a continuación en negrita:
.
.
.
# Path to the directory you want scanned for media files.
#
# This option can be specified more than once if you want multiple directories
# scanned.
#
# If you want to restrict a media_dir to a specific content type, you can
# prepend the directory name with a letter representing the type (A, P or V),
# followed by a comma, as so:
#   * "A" for audio    (eg. media_dir=A,/var/lib/minidlna/music)
#   * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures)
#   * "V" for video    (eg. media_dir=V,/var/lib/minidlna/videos)
#
# WARNING: After changing this option, you need to rebuild the database. Either
#          run minidlna with the '-R' option, or delete the 'files.db' file
#          from the db_dir directory (see below).
#          On Debian, you can run, as root, 'service minidlna force-reload' instead.
media_dir=V,/myDLNAshares
.
.
.
# Name that the DLNA server presents to clients.
friendly_name=Ubuntu 13.10
.
.
.
# Automatic discovery of new files in the media_dir directory.
inotify=yes
.
.
.
# Path to the MiniSSDPd socket, for MiniSSDPd support.
#minissdpdsocket=/run/minissdpd.sock 
En principio, solo se requiere alterar tres líneas del fichero de configuración.

media_dir

Con este parámetro indicaremos al servidor miniDlna el tipo y la ubicación del contenido multimedia (en este caso, el contenido es vídeo y está situado en /myDLNAshares). Podemos poner tantas líneas como carpetas lleguemos a tener , y queramos compartir, con contenido multimedia.
En vez de tener varias líneas con el parámetro media_dir, es mejor crear en la carpeta que se indique, y que podemos crear ex profeso para este servidor, enlaces simbólicos a las carpetas donde realmente se ubiquen los contenidos multimedia. De este modo, tendremos clasificado y estructurado el contenido multimedia que se muestre por el televisor, por las carpetas físicas que tenemos en el PC. Si no lo hacemos así, se funden todas las películas en un solo listado, sin diferenciar si las tenemos agrupadas por películas, documentales, series, etc.
user1@user-desktop:~/Videos$ ls -la myDLNAshares/
total 52
drwxr-xr-x  2 user1 user  4096 dic  1 10:01 .
drwxr-xr-x 24 user1 user 45056 dic  2 18:54 ..
lrwxrwxrwx  1 user1 user    36 dic  1 10:00 Documentales -> /home/user1/Videos/Documentales
lrwxrwxrwx  1 user1 user    33 dic  1 10:01 Peliculas -> /home/user1/Videos/Peliculas
lrwxrwxrwx  1 user1 user    16 dic  1 10:01 Peliculas1 -> /disco_datos/Peliculas
lrwxrwxrwx  1 user1 user    30 dic  1 10:01 Series -> /home/user1/Videos/Series
user1@user-desktop:~/Videos$ 
Así, podemos observar que en la carpeta que nos hemos creado, myDLNAshares/, dentro de nuestra carpeta /home/user1/Videos, hemos creado 4 enlaces simbólicos a las carpetas en donde se encuentran realmente mis contenidos multimedia. Aunque podemos crear tantos como tengamos y queramos compartir.
Si tuviese otro tipo de contenido multimedia, por ejemplo, de música, me crearía en el fichero de configuración una nueva línea con el parámetro media_dir, indicando el tipo 'A' y la ubicación del contenido de audio. Y procedería de la misma manera, creando enlaces simbólicos a las carpetas que podrían corresponder a álbumes de música.
El uso de enlaces simbólicos facilita la labor de mantenimiento de la aplicación. Siempre nos será más fácil crearnos un enlace simbólico que editar el fichero de configuración.

friendly_name

Lo que pongamos a continuación es lo que aparecerá en nuestro televisor.
Yo he puesto Ubuntu 13.10.

inotify

Con este parámetro a 'yes' indicaremos al servidor que compruebe si hay nuevo contenido multimedia en las carpetas indicadas en media_dir.

Últimos pasos

Después de todos estos cambios, vamos a indicarle al servidor que los tenga en cuenta, ejecutando en un terminal las siguientes instrucciones:
sudo rm -f /var/lib/minidlna/files.db
sudo minidlna -R
sudo service minidlna restart
Con la primera línea, borramos la base de datos actual, con la segunda, la regeneramos y con la últimas reiniciamos el servidor miniDlna.

Lo que vemos en el televisor

Esto es lo que podemos ver cuando accedemos desde el televisor. Las imágenes no son de (muy) buena calidad, pero entiendo quepodrán dar una idea del procedimiento a seguir.
 

(continuación)

Esta entrada ha sido ampliada posteriormente en A vueltas con el servidor miniDLNA : Actualizando fácilmente su contenido.

Enlaces

- ReadyMedia
- Ubuntu 12.10 Media Server – HowTo – using miniDLNA
- DLNA
- Smart TV