lunes, 8 de febrero de 2021

Governors - GUI

 

Para los que no conocen la aplicación cpufreq: la misma nos permite cambiar la velocidad del procesador dentro de los parámetros dentro de los que este funciona normalmente.

No es una aplicación para realizar overclocking.

Una de las opciones que más me gusta de este programa es la de poder cambiar los “governors” disponibles. Los mismos serían algo así como esquemas de potencia del CPU preconfigurados.

Reguladores disponibles:
  • Schedutil (Por defecto, ha estado incorporado desde el kernel 4.7 al kernel 4.18):
    Aprovecha los datos de utilización del planificador del núcleo en un intento de tomar mejores decisiones sobre el ajuste del estado de frecuencia / rendimiento del CPU.

  • Performance:
    El regulador de rendimiento esta empotrado en el núcleo y hace que las CPU funcionen a la máxima velocidad de reloj.

  • Ondemand:
    Incrementa/Decrementa dinámicamente la velocidad de reloj de la CPU en base la carga del sistema.

  • Conservative:
    Similar a ondemand, pero más conservador (los cambios de velocidad son más suaves)

  • Powersave:
    Hace funcionar al CPU a la velocidad mínima.

Pueden encontrar más información respecto del tema en: https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt

El GUI que hoy les presento permite configurar dichos governors (siempre y cuando esten soportados por el procesador) para la cantidad de núcleos que uds. elijan.

El GUI también muestra cuales son los governors soportados por el CPU.

Aclaración!: es necesario tener la aplicación cpufrequtils instalada para poder utilizar el GUI.
Si no la tienen instalada:

sudo apt install cpufrequtils

Les dejo el link al repositorio de GitHub donde pueden descargar el código fuente y el binario para la instalación: https://github.com/mcattani/governors_gui

Saludos y espero les sirva.
Por favor dejen un comentario diciendo que les pareció!

lunes, 25 de enero de 2021

Arduino & Gambas. Sensores y Relé

 

En un post anterior publiqué una pequeña aplicación hecha en Gambas que recogía la temperatura del CPU y GPU y las enviaba a un Arduino Uno y esté, a su vez, las mostraba en un LCD de 16x2.

En esta ocasión se me ocurrió probar lo opuesto, recibir información desde sensores conectados al Arduino (aunque también se envían comandos desde la PC).

Tal como se ve en el video se trata de una aplicación que recibe información de sensores conectados a un Arduino (en este caso utilicé un Arduino Nano, pero se puede utilizar cualquiera). Los datos que recibe la aplicación son: temperatura, humedad (ambos recogidos a través de un sensor DHT11) y nivel de luz (recogido utilizando una fotorresistencia o LDR). También hay conectado al Arduino un relé que es controlado por la aplicación, el mismo enciende/apaga una lámpara, cuando es activado/desactivado.


El programa permite también la activación/desactivación automática del relé según la cantidad de luz que el usuario establezca como límite.

Un fotorresistor o fotorresistencia es un componente electrónico cuya resistencia se modifica, (normalmente disminuye) con el aumento de intensidad de luz incidente. (de Wikipedia)
Para realizar mediciones de luz con mayor grado de precisión se utilizan otros componentes.

En un principio la conexión entre el Arduino y la PC la realicé a través de un cable USB. Pero luego me pareció más interesante que la misma se hiciera vía bluetooth para así no depender de la conexión física entre ambos. Para esto utilice un módulo bluetooth HC-06.

Esto último no es necesario, tanto el programa como el sketch de Arduino funcionan sin problema sin el módulo BT, comunicando el Arduino con la PC vía cable USB.

El único elemento que al que debemos prestar atención es al puerto de conexión que especificamos en la aplicación:
Si la conexión se realiza vía USB, el puerto será algo así:

/dev/ttyUSB0 (“0” o el número que corresponda al puerto en uso)

En cambio, al utilizar el módulo bluetooth el puerto que usaremos será algo así:

/dev/rfcomm1 (“1” o el puerto serie disponible)

En cuanto al sketch en Arduino no hay que realizar ningún cambio se use o no un módulo BT, dado que en ambos casos el envío o recepción de datos se utiliza a través de Serial().

En este link: https://www.naylampmechatronics.com/blog/15_Configuraci%C3%B3n--del-m%C3%B3dulo-bluetooth-HC-06-usa.html pueden encontrar un tutorial muy sencillo para configurar el módulo BT si es que no lo han hecho ya.

En mi caso alimenté al Arduino a través del Pin VIN con una fuente que proporciona 5V a ambos canales de la breadboard; pero puede alimentarse como se haría comúnmente, a través del puerto USB.

Un paso necesario si se utiliza el módulo BT es el de habilitarlo como Puerto Serie (Serial Port) tras emparejarlo con la PC. Esto es lo que habilitará la conexión vía /dev/rfcomm en la aplicación.


 Las conexiones realizadas son tal y como se muestran en el esquema siguiente:

Componentes Arduino
DHT11 Pin D4
Fotorresistencia Pin A7
Relé Pin D9
BT HC-06 - Pin RX Pin TX
BT HC-06 - Pin TX Pin RX
Todos los GND GND
Todos los + o VCC Línea de 5V

Espero les haya interesado este post!
Si les gustó por favor dejen un comentario y difundan!

Como siempre les dejo el link al repositorio de Github en donde pueden descargar el código fuente de la aplicación junto con el instalador para Debian y derivados y sl sketch para Arduino.

Link: https://github.com/mcattani/sensores_rele_gambas

martes, 5 de enero de 2021

Nvidia-Led-Mod


En esta ocasión traigo una aplicación muy simple.
Estuve buscando en internet alguna aplicación para controlar el brillo del LED de la placa de video (sé que esto puede hacerse sin problemas en Windows desde la aplicación de NVIDIA) pero no encontré nada parecido.
Lo único que encontré fue referencias al comando:

nvidia-settings —assign GPULogoBrightness

A partir de esto me dispuse a crear una pequeña aplicación para encender y apagar la luz de la placa. 

Como se ve en la foto me decidí finalmente por un slide para poder cambiar la intensidad del brillo (permitiendo apagar totalmente la luz si se le asigna el valor 0).

Una vez hecho esto, también agregue unos pequeños efectos… ¿por qué no?

No tengo muy en claro que placas aeptan este comando, en mi caso tengo una GeForce GTX 1050 Ti.

Como siempre dejo el link al repositorio de GitHub de donde pueden descargar el código fuente y el archivo .deb de instalación para debian y derivados.

Link: https://github.com/mcattani/nvidia-led-mod

Dejá un comentario! :)

Saludos.

sábado, 19 de diciembre de 2020

Temp2LCD (Gambas + Arduino)

Como muestra el video se trata de una pequeña aplicación hecha en Gambas y un sketch para el Arduino.

Para este ejemplo estaré usando un Arduino UNO.

La aplicación transmite las temperaturas del CPU y el GPU hacia el Arduino vía el puerto USB.
Para que funcione correctamente es necesario tener instalado lm-sensors y nvidia-smi.

Por el momento la aplicación solo funciona con tarjetas NVIDIA.

Para obtener la temperatura del CPU la aplicación utiliza un script que encontré en https://stackoverflow.com/questions/50686262/how-to-get-average-cpu-temperature-from-bash.
Lo interesante del script es que devuelve un promedio de temperatura de todos los cores disponibles. Alteré levente el script para que solo devuelva el valor numérico y la unidad en grados celsius.
Hay muchos comentarios en el código fuente del programa por si les interesa ver como funciona paso a paso.
Respecto del sketch del Arduino, es bastante sencillo. Recibe la información enviada por la aplicación y la muestra en un display LCD (16x2) conectado de la siguente manera:

LCD PIN Arduino
VCC 5V
GND GND
SCL A5
SDA A4

También hay conectado un LED en el Pin 13 (recuerden que este pin ya cuenta con una resistencia). Se puede prescindir del mismo. El led se enciende cada vez que se produce el evento Serial.available(), por lo que se encenderá cuando reciba o envíe información.
El sketch también reenvía los datos recibidos a la aplicación. Me fué bastante útil esto para observar como era transmitida la información, por eso lo dejé.
Tuve al algunos problemas al principio, la información no llegaba correctamente al Arduino y los ejemplos que encontraba en internet no eran de mucha utilidad.
Leyendo algunas entradas en el el sitio de Arduino me pareció que la solución más sencilla era enviar desde la aplicación toda la información seguida de la cadena ‘\n’ y recibir la información en el Arduino utilizando el evento Serial.readStringUntil(‘\n’).

Espero que tanto la aplicación y el stetch les sirvan de ejemplo si están investigando o quieren observan como es la comunicación entre el Arduino y la PC.
Seguramente estaré haciendo más aplicaciones parecidas probando a la inversa (recibir información del Arduino).

Dejo el link al repositorio de GitHub para bajar el instalador en formato debian, el código fuente del programa y el sketch para Arduino:
https://github.com/mcattani/temp2lcd

Saludos y si les interesó por favor dejen un comentario!.

martes, 8 de diciembre de 2020

RamDrive

 

En esta oportunidad les presento una pequeña APP que hice para poder crear unidades con memoria RAM (o RAM DRIVES).
Trabajar con estas unidades tiene sus ventajas y desventajas.

  1. La unidad solo puede almacenar información durante la sesión en curso. Si se apaga o reinicia el sistema, toda la información de la misma se borrará.
  2. La velocidad de lecto/escritura de la RAM es muchísimo mas alta que la del disco (incluidas unidades USB y discos SSD).

Normalmente estas unidades se crean mas o menos así:

mkdir /RUTA/CARPETA ( ej. /mnt/ramdisk)
mount -t [TYPE] -o size=[SIZE] [FSTYPE] [MOUNTPOINT]

Existen dos tipos de unidades.

  • ramfs
  • tmps

No voy a explicar las diferencias entre una y otra. Para el que le interese acá hay una una buena explicación de las diferencias. El programa usa por defecto tmps.

Esta pequeña APP permite crear este tipo de unidades; asignándoles tamaño y montándolas.

Estas unidades son muy útiles para realizar ciertos trabajos “pesados”, si cuentan con una buena cantidad de memoria RAM, prueben compilar un kernel alojado en una de estas unidades, ahí se va a notar mucho la diferencia de velocidad. Lo mismo si tienen que encodear un video, por ej.

Uno de los usos típicos que aparecen en internet es la de crear una de esta unidades y utilizarlas para almacenar el caché del navegador que estemos usando. De esa manera, con cada reinicio se limpia el caché y segundo, la “velocidad de navegación aumenta“, dado que tenemos guardadas la caché en una unidad de acceso veloz.

Vale la pena probar.

Link al repositorio de GitHub: https://github.com/mcattani/ramdrive

saludos!