Mod de teclado CM Devastator: regular intensidad de luz con potenciómetro

34_08d159c68612a0b07f8a51627fb3eca7_1450749959[1]

El CoolerMaster Storm Devastator es un teclado que se ha hecho popular por ofrecer un funcionamiento y estética bastante decentes, a pesar de tener teclas de membrana. El teclado es retro-iluminado, y se comercializa en tres opciones de color: rojo, azul y verde.

La iluminación se consigue a partir de una tira de leds, que incluye sus propias resistencias, situada a lo largo de la parte inferior del teclado. Se consigue una iluminación de la misma intensidad en todas las teclas gracias a un plástico que refleja la luz por toda la superficie interior.

Otros motivos por los que se comercializa a bajo precio son:

  • No se puede cambiar el color de la luz. Una posible modificación sería sustituir los leds soldando otros de color distinto, o incluso añadir nuevos. Habría que considerar si el diferente consumo según el color de los leds pudiera ser un problema.
  • No se proporciona un software con el que modificar aspectos de la iluminación.
  • No incluye elementos electrónicos que permitan modificar aspectos de la iluminación.

La modificación que detallo nos permitirá regular la intensidad de la luz mediante una perilla (una ruedecilla) que sobresaldrá del mismo teclado. De este modo, podemos regular el brillo según si estemos trabajando a la luz del día o bien en la oscuridad. Un ejemplo en vídeo: https://www.instagram.com/p/BbEjnLchGH-/

Vamos a necesitar:

  • 1 potenciómetro de 10KΩ. Lo podemos identificar porque suele traer impreso <<B10K>>. Este elemento consta de tres pines, y lo podemos encontrar con ruedecilla o como un deslizador. Aquí se muestra la primera opción. Entre otros motivos, puede ocupar un menor espacio, y el disponible en el interior del teclado no es demasiado holgado.
  • Podéis comprar cables cortos en tiendas de electrónica. He utilizado algunos que tengo para Arduino, y también reciclados de las botoneras de encendido de antiguos ordenadores.
  • Método de fijación para los cables. La recomendación es un soldador y estaño, pero funciona igualmente con otros sistemas, como por ejemplo el clásico trenzado del cable o adaptando los pines hembra que ya incluyen los cables (muy posiblemente sea necesario recortarles altura, para poder cerrar el teclado).
  • Herramienta para cortar o perforar plástico. He utilizado un cúter con buenos resultados.

Para abrir el teclado retiramos los tornillos accesibles desde la parte trasera. Dos de ellos se encuentran bajo las gomas inferiores. No es necesario remover completamente las gomas; solo parcialmente la parte más inferior de estas.

Advertencia: la calidad de los materiales no es la mejor, por lo que se recomienda no manosear demasiado el plástico situado debajo de las teclas que incluye un frágil circuito impreso.

Conectaremos entre sí los tres elementos: circuito impreso situado bajo las luces de bloqueo del teclado (encima del teclado numérico), potenciómetro y tira de leds. El circuito debe quedar del siguiente modo:

mod-cmstorm-devastator

Una vez comprobado que funciona correctamente, debemos encontrar ubicación para el potenciómetro considerando el espacio disponible y la accesibilidad del lugar en que se sitúe. Recomiendo situarlo justo encima de la primera luz de bloqueo del teclado (Bloq Num). Para que sobresalga la perilla (ruedecilla o manecilla), debemos realizar una hendidura tanto en el plástico inferior del teclado como en el superior. Podemos utilizar alguna herramienta tipo Dremmel, pero siendo cuidadosos un simple cúter puede servir.

IMG_20171108_131756_HDR

Recomiendo ir cortando plástico progresivamente mientras comprobamos como se adapta el potenciómetro al espacio, para que en el resultado final no se observe un agujero más grande de lo necesario. De todos modos, esta parte del teclado en la que situamos el potenciómetro no es visible cuando lo utilizamos. Y también podemos recurrir a una arandela negra introducida en la perilla, si queremos disimular una hendidura más grande de lo necesaria.

Si la perilla no es negra se le puede acabar de dar un toque estético con un capuchón negro o alternativas como fundir plástico o cera.

Arduino: error #include

Estaba trasteando con un display LCD, requiriendo la galería LiquidCrystal_I2C. Al comprobar el código topaba con el siguiente error:

fatal error: ../Wire/Wire.h: No such file or directory

#include <../Wire/Wire.h>

Wire es una de las galerías que ya vienen por defecto incluidas, así que no tiene mucho sentido que no la encuentre. El problema reside en dónde busca LiquidCristal_I2C a esa galería. Nos dirigimos a nuestra carpeta de librerías desde el explorador de archivo «\Arduino\libraries\LiquidCrystal_I2C» y editamos el archivo I2CIO.cpp con un procesador de textos.

Buscamos la siguiente línea:

#include <../Wire/Wire.h>

Y la modificamos del siguiente modo:

#include <Wire.h>

Solo queda guardar los cambios y el error desaparece.

 

 

Arduino: sensor DHT11 para leer temperatura y humedad

dh11_1Iniciándome en el mundo Arduino, recojo una sencilla aplicación: lectura de temperatura y humedad a través de un sensor DHT11 y el monitor serie del entorno de programación.

El DHT11 es un sensor que podemos encontrar con 3 o 4 pines. En la versión de 4 pines, el tercero no tiene utilidad. He encontrado variaciones en el orden de estos pines, por lo que si no te funciona un primer vistazo sería a revisar si están bien conectados. El que estoy usando es similar al de la imagen que acompaña este post: la S nos indica la conexión para la señal / datos, el VCC será la toma de corriente de 5v y el restante el GND.

He creado imagen Protoboard para el ejemplo recogido, siendo la resistencia utilizada de 330 ohms.

untitled-sketch-2_bb

Para el uso del sensor DHT11 es necesario cargar librerías específicas en el entorno de programación. Para ello vamos al menú Programa – Incluir librerías – Gestionar librerías. En la caja de búsqueda escribimos: DHT sensor library. Instalamos la librería con ese nombre, y se indica que está creada por Adafruit. He tenido problemas instalando manualmente la librería a partir de archivos ZIP recomendados en la red.

Para comprobar el funcionamiento cargamos un archivo de ejemplo: Archivo – Ejemplos – DHT Sensor library – DHTtester. Este será el código:

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include «DHT.h»

#define DHTPIN 2     // what digital pin we’re connected to

// Uncomment whatever type you’re using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println(«DHTxx test!»);

dht.begin();
}

void loop() {
// Wait a few seconds between measurements.
delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(«Failed to read from DHT sensor!»);
return;
}

// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);

Serial.print(«Humidity: «);
Serial.print(h);
Serial.print(» %\t»);
Serial.print(«Temperature: «);
Serial.print(t);
Serial.print(» *C «);
Serial.print(f);
Serial.print(» *F\t»);
Serial.print(«Heat index: «);
Serial.print(hic);
Serial.print(» *C «);
Serial.print(hif);
Serial.println(» *F»);
}

Podemos verificar y cargar posteriormente el código a la placa Arduino. Al abrir el monitor serie (la lupa, en la esquina superior derecha) nos mostrará las lecturas correspondientes:

arduino-reporte-dht11

Ramme: cliente de Instagram para Linux

ramme-crimsonlinux.png

Ramme es un cliente de código abierto que podéis descargar desde GitHub. Pretende ser visualmente simple, quedando en la bandeja del sistema como icono que permite desplegar o recoger la ventana del programa.

Otra de sus características es el funcionamiento a partir de atajos de teclado. Con Ctrl+D podemos cambiar de un tema claro a otro oscuro, o refrescar con Ctrl+R. Una vez descargado el archivo de GitHub tan solo hay que descomprimirlo y ejecutar el archivo Ramme.

Error en RetroPie: Unsupported OS

retropiewebsitelogo

RetroPie es una de las maneras más fáciles de convertir una Raspberry Pi en una máquina emuladora para videojuegos. Se instala sobre Raspbian, por lo que no es una distribución propiamente; solo un simple programa que puede ser instalador sobre Debian y derivadas.

Distribuciones derivadas de Debian hay muchas, pero el instalador de RetroPie no tiene en cuenta esta variedad y podemos encontrarnos con el mensaje «Unsupported OS» que no nos permite avanzar.

Para corregir este error, debemos añadir a uno de los scripts del instalador el nombre de nuestra distribución, que además viene indicado en el propio mensaje de error. En mi caso, y para este ejemplo, estoy usando la distribución MX.

La solución es tan sencilla como navegar hasta la carpeta scriptmodules incluida en la descarga de RetroPie, y modificar con un editor de texto el script system.sh. Usamos el buscador del editor de texto para localizar lo siguiente: Raspbian|Debian). Y utilizando la misma sintaxis, añadimos a continuación el nombre de nuestra distribución. En este ejemplo, en los dos resultados de búsqueda que se obtienen las líneas quedan de la siguiente manera:

Raspbian|Debian|MX)

Escritorio 18

captura-crimsonlinux-antix-mx

Nuevo pantallazo, nuevamente mostrando un sistema con MX Linux. El entorno de escritorio es XFCE, con un monitor Conky llamado Conky-Vision, un panel Plank e iconos Papyrus-GTK. El fondo minimalista, de la colección de Wallhaven.

theHarvester: recolectando correos (y algo más)

***************************************************
*                                                 *
*    /\  /\__ _ _ ____   _____  ___| |_ ___ _ __  *
*   / /_/ / _` | '__\ \ / / _ \/ __| __/ _ \ '__| *
*  / __  / (_| | |   \ V /  __/\__ \ ||  __/ |    *
*  \/ /_/ \__,_|_|    \_/ \___||___/\__\___|_|    *
*                                                 *
***************************************************

theHarvester es un programa escrito en Python para recolectar cuentas de correo, subdominios, virtual hosts… y algunas cosas más que pueden utilizarse para un uso dañino. La herramienta es popular al estar incluida en la distribución destinada a la seguridad Kali Linux. A mi me ha resultado útil para completar e identificar un pequeño listado de contactos que he perdido, todos de una misma organización: compartían el dominio en sus direcciones de correo (@organización.com). Y ese va a ser el uso que aquí se expone.

Si no estamos utilizando una distribución que incluya el programa, lo descargamos desde GitHub (botón verde «Clone or Download»), y posteriormente descomprimimos el archivo. Modificaremos los permisos del programa desde un terminal:

sudo chmod 755 theHarvester.py

La sintaxis para ejecutar el programa es la siguiente:

python theHarvester.py -d ORGANIZACIÓN.COM -l 500 -b SERVICIO -f /RUTA/ARCHIVO-DE-SALIDA.HTM

La opción -d es para indicar el dominio a buscar. En el ejemplo he puesto «organización.com».

La opción -l limita el número de resultados con los que el programa trabaja a la vez. Propongo 500, aunque algunos de los servicios tienen su propio límite.

La opción -b indica el servicio con el que realizar la búsqueda: google, googleCSE (es el «Custom Search» del buscador), bing, bingapi, pgp, linkedin, google-profiles, jigsaw, twitter, googleplus. Con la opción -b all buscamos en todos ellos, aunque me ha dado algún problema y he tenido que probar uno por uno.

Por último, la opción -f permite indicar la ruta y el nombre de archivo, con extensión htm, que genera un documento web con los resultados.

· Solucionar el error Request library not found, please install it before proceeding

Si obtenemos este error al ejecutar el programa, debemos instalar la librería Request. Descargamos este script desde este enlace, y lo ejecutamos con los siguientes comandos:

sudo python get-pip-py

sudo pip install requests

Fuente: Instalación PIP

Rotar pantalla con Raspberry Pi

En algunos escenarios es más útil contar con un monitor en vertical: dashboard, lectura / edición o incluso para matar marcianos en máquinas recreativas. Habitualmente utilizo xrandr desde la línea de comandos para rotar la imagen, pero en Raspbian esta opción no me daba resultados.

portrait_lcd_polarization

La solución es sencilla. Editamos el archivo config.txt ubicado en la carpeta /boot. Para ello, podemos utilizar nano desde la terminal:

sudo nano /boot/config.txt

Al final del archivo añadimos la siguiente línea:

display.rotate=1

El valor numérico puede ser 1, 2 o 3, según queramos rotar la pantalla 90º, 180º o 260º, respectivamente. Solo queda guardar el archivo y reiniciar.

Detectando memoria RAM dañada

Los problemas que ocasiona una RAM dañada pueden dar muchos dolores de cabeza, al ser variados y de difícil diagnóstico. Sirvan como ejemplos sistemas que se reinician, sin lograr encontrar un error de software que produzca tal efecto.

Para poder detectar si la RAM se encuentra dañada contamos con Memtest86+ que, a diferencia de otras herramientas similares, es de código abierto.

14310866_1239345202782871_1302168633_n

Es probable que puedas acceder a Memtest86+ desde tu gestor de arranque (GRUB, BURG, LILO…): entre los diferentes sistemas operativos / kernels a elegir, puedes encontrar una línea para ejecutarlo.

Pero si no es así, o tienes problemas para acceder al gestor de arranque, puedes descargar Memtest86+ desde su web, en la que encontrarás imágenes ISO para pasarlas a un CD o USB, e incluso un instalador (solo para Windows) que grabará la imagen en un USB.

El programa ejecuta pruebas de estrés a los módulos de memoria RAM. Cada vez que finaliza un paquete de pruebas lo contabiliza (Pass). Pueden ser necesarios varios Pass hasta que se detecta si la memoria está dañada, por lo que podemos dejar una noche entera ejecutándose el programa.

Añadir diccionarios a WPS Office

googleplay_wps-office_originalLe estoy dando una oportunidad a WPS Office, por si me permitiera un trabajo más cómodo del que llevo haciendo estos años con Libre Office.

Cambiar el idioma de la suite ofimática es sumamente sencillo, desde el icono que incluye una letra «A» en la parte superior derecha. Algo más laborioso es incluir diccionarios de idiomas, para poder corregir mientras escribimos.

Los diferentes paquetes de diccionario los descargamos de la siguiente URL:

http://wps-community.org/download/dicts

Encontramos, por ejemplo, es_ES para «Español – España»o ca-ES para «Catalán – España». Una vez descargados, descomprimimos los archivos y copiamos su contenido en la siguiente ruta:

/opt/kingsoft/wps-office/office6/dicts

Podemos hacerlo desde una terminal, o más cómodamente abriendo nuestro explorador de archivos como superusuario. Por ejemplo:

gksudo thunar

En todo caso, substituimos «thunar» por nuestro explorador: Nautilus, PcManFM, Rox