viernes, 18 de julio de 2025

Emulador DosBox en Ubuntu

Buenas a todos!!!

Ahora estoy liado con lo retro y no puede faltar un emulador para MS-DOS con el que poder hacer funcionar software de la epoca de los 90`s.

1. ¿Qué es DOSBox?

DOSBox es un emulador:
No es una máquina virtual pesada, sino un programa que recrea el entorno de una computadora con el sistema operativo dominante en los 80 y principios de los 90, el MS-DOS.

Su propósito:
Ejecutar software antiguo diseñado para MS-DOS, principalmente juegos clásicos en sistemas operativos modernos como Windows 11, macOS, Linux (Ubuntu), e incluso en dispositivos móviles o Raspberry Pi.

Qué emula DOSBox:

  • La CPU:
    • Principalmente Intel x86 (típicamente un 486/Pentium).
  • Hardware clave:
    • Tarjeta de sonido (Sound Blaster, Adlib, Gravis Ultrasound)
    • Tarjeta gráfica (VGA, SVGA, Hercules, Tandy)
    • Puerto joystick (Game Blaster)
    • Módem
    • Impresora
    • Unidad de disquete.
    • Disco duro virtual.
  • El entorno DOS:
    • Comandos básicos. (dir, copy, cd, etc.).
    • gestión de memoria. (XMS, EMS).
    • La interfaz de línea de comandos.
  • Por qué es esencial hoy:
    El hardware moderno y los sistemas operativos (especialmente los de 64 bits) son totalmente incompatibles con el software DOS antiguo.
    DOSBox "engaña" a ese software haciéndole creer que se está ejecutando en una PC DOS real.

Por suerte para todos es un proyecto Open Source y eso siempre es un gran beneficio para la comunidad retro.


2. ¿Cómo se instala DOSBox en Ubuntu?

Instalar DOSBox es extremadamente sencillo gracias a los repositorios oficiales de Ubuntu. Tienes dos opciones principales:

  • Método recomendado desde los repositorios oficiales:
    Abrimos un Terminal (Ctrl+Alt+T) y actualizamos la lista de paquetes:
    
    	sudo apt update
        
    Ahora instalamos DOSBox:
    
        sudo apt install dosbox
        
        
    ¡Listo! Ya puedes buscar "DOSBox" en el menú de aplicaciones de Ubuntu o ejecutarlo desde la terminal tecleando dosbox.
  • Método Alternativo (Snap):
    
        sudo snap install dosbox-x
        
    Nota: dosbox-x es un fork con características adicionales. El paquete dosbox de los repositorios (apt) suele ser suficiente .

3. Parámetros de Configuración en dosbox.conf (¡El corazón de DOSBox!)

Este archivo es fundamental para personalizar el comportamiento de DOSBox. Se crea automáticamente la primera vez que ejecutas DOSBox.

  • Ubicación del archivo dosbox.conf:
    • Linux (Ubuntu): ~/.dosbox/dosbox-[versión].conf (Por ejemplo: ~/.dosbox/dosbox-0.74-3.conf)

    • ~ representa el directorio de usuario ubicado en home (/home/usuario).

    • Es un archivo oculto y empieza por punto. Puedes verlo en tu gestor de archivos activando "Mostrar archivos ocultos" o usando ls -a en la terminal dentro de ~/.dosbox.


 

Estructura del archivo "dosbox-version.conf":

El archivo está dividido en secciones entre corchetes [seccion]. Los parámetros se ajustan debajo de cada sección con el formato parametro=valor.

Parámetros Clave y Qué Hacen (Agrupados por Sección):

  • [sdl] (Simple DirectMedia Layer):
    • fullscreen=true/false:
      Iniciar DOSBox en pantalla completa o en ventana.

    • fulldouble=true/false:
      Usar doble buffer en pantalla completa (mejor fluidez, prueba si tienes tearing).

    • fullresolution=original o desktop o 1024x768:
      Resolución interna cuando está a pantalla completa. original usa la resolución nativa del juego (pixelado). desktop usa tu resolución de escritorio (puede escalar).
      Especificar como 1024x768 fuerza una resolución.

    • windowresolution=1024x768:
      Tamaño de la ventana cuando no está a pantalla completa (ej: 800x600, 1024x768).

    • output=surface/overlay/opengl/openglnb:
      Método de renderizado. surface es el más compatible. opengl o openglnb (sin buffer) pueden dar mejor rendimiento y escalado en hardware (prueba si tienes problemas).

    • autolock=true/false:
      Bloquear automáticamente el ratón dentro de la ventana de DOSBox al hacer clic (esencial para juegos).

  • [dosbox] (Comportamiento general del emulador):
    • language=: Ruta al archivo de idioma (si lo tienes).

    • machine=hercules/cga/tandy/vga:
      Tipo de máquina a emular (afecta gráficos y sonido). vga es el estándar más común.

    • captures=capturas:
      Directorio donde se guardan capturas de pantalla (F5) y vídeo (Ctrl+Alt+F5). Relativo a la carpeta de configuración de DOSBox.

  • [render] (Opciones avanzadas de renderizado):
    • frameskip=0: Número de fotogramas a saltar (0 es ninguno). Aumentar (ej: 1 o 2) puede mejorar rendimiento en juegos muy lentos, pero da tirones.

    • scaler=normal2x/advmame2x/hq2x/etc:
      Algoritmo de escalado para suavizar los píxeles al ampliar la ventana.
      Prueba normal2x, advmame2x, hq2x o super2xsai para ver cuál te gusta más.
      none muestra píxeles crudos.

  • [cpu] Ajustes críticos para rendimiento:
    • core=auto/normal/simple/dynamic:
      Motor de emulación de la CPU.

    • auto:
      DOSBox elige (generalmente dynamic si está disponible).

    • dynamic (RECOMENDADO):
      El más rápido y eficiente para la mayoría de juegos. Recompilación en tiempo de ejecución.

    • normal:
      Interprete más compatible pero más lento.

    • simple:
      Interprete básico (muy lento, solo para compatibilidad extrema).

    • cycles=auto/fixed N/max:
      Controla la velocidad de la CPU emulada.

    • auto (RECOMENDADO):
      DOSBox intenta ajustar la velocidad automáticamente (¡usa Ctrl+F11/F12!).

    • fixed 3000:
      Fija la velocidad a un número específico de ciclos (ej: 3000, 10000, 20000).
      Empieza con auto y ajusta manualmente con Ctrl+F11/F12 si un juego va demasiado rápido/lento.

      El valor mostrado al usar Ctrl+F11/F12 es el que puedes poner aquí como fixed.

    • max:
      Ejecuta a la máxima velocidad posible (útil solo para benchmarks, los juegos irán hiperrápidos).

    • cputype=auto/386/486/pentium:
      Tipo específico de CPU a emular. auto suele ser suficiente.

  • [mixer] (Sonido):
    • nosound=true/false:
      Desactiva TODO el sonido.

    • rate=44100:
      Frecuencia de muestreo del sonido (Hz). 44100 o 48000 son estándar. Valores bajos (22050) pueden mejorar rendimiento en PCs lentas.

    • blocksize=:
      Tamaño del bloque de audio. Aumentar (ej: 1024) puede reducir clics si tienes problemas de sonido, pero añade latencia.

    • prebuffer=:
      Cantidad de audio en milisegundos a pre-buffear.

  • [midi] (Salida MIDI - Música en juegos):
    • midiconfig=:
      Configuración del dispositivo MIDI. Para usar un sintetizador de software moderno (FluidSynth):
      
          	midiconfig=128:0 /ruta/a/tu/soundfont.sf2
          	
      (Busca soundfonts gratuitos como GeneralUser GS.sf2 o FluidR3_GM.sf2).

  • [sblaster] (Sound Blaster - Tarjeta de sonido esencial):
    • sbtype=sb16:
      Tipo de Sound Blaster (sb1, sb2, sbpro1, sbpro2, sb16). sb16 es el más común y compatible.

    • sbbase=220:
      Dirección de E/S (I/O address). 220 es el estándar.

    • irq=7:
      Interrupción (IRQ). 7 es el estándar.

    • dma=1:
      Canal DMA. 1 es el estándar.

    • hdma=5:
      Canal DMA de alta velocidad (para SB16). 5 es el estándar.

    • bmixer=true/false:
      Habilita el control de volumen de la Sound Blaster dentro de DOSBox.

  • [autoexec] La sección más importante:
    • No es un parámetro, sino un script:
      Aquí pones comandos de DOS que se ejecutan automáticamente al iniciar DOSBox.

    • Usos principales:
      Montar directorios: Convertir carpetas de tu Ubuntu en unidades de DOS para acceder a tus juegos/programas.
      
              
              # Montar unidad principal C:
              mount C ~/juegos_dos  
              
              # Cambia a la unidad C:
              C:                    
              # Entra en la carpeta del juego
              cd mi_juego           
              # Ejecuta el juego
              juego.exe             
      
              # Monta unidad desde USB como cdrom
              mount D /media/usb -T cdrom: Montar una imagen ISO/CD como unidad D: (tipo cdrom).
              
              # Monta una imagen ISO
              imgmount d ~/Descargas/Win311.ISO -T iso
              
              # Monta una unidad de disquete desde imagen:
              imgmount a ~/Descargas/DayoftheTentacle/DayoftheTentacleX.img -T floppy
              
              


    • Ejecutar programas/juegos automáticamente:
      Como se ve en el ejemplo anterior (cd mi_juego y juego.exe).

    • Ajustar variables de entorno de DOS:
      set BLASTER=A220 I7 D1 H5 (le dice al software la configuración de la Sound Blaster).

    • Cargar drivers residentes (TSR):
      Ejecutar mouse.com para tener soporte de ratón en programas que lo necesiten.

    • Personalizar el prompt:
      prompt $p$g.
    DOSBox - dosbox.conf personalizado

Conclusión: Píxeles Inmortales y la Batalla por el Ayer Digital

Al cerrar DOSBox después de revivir mis primeros juegos como "gorillas.bas" o "Indiana Jones y la Última Cruzada" o "Doom" en Ubuntu,  la nostalgia nos golpea: la emulación es un acto de resistencia cultural para todos los que ya tenemos una edad. Y una masterclass de como con pocos recursos se podían logar grandes proyectos.

Cada vez que montamos un directorio en C: virtual, estamos salvando mundos enteros del agujero negro de la obsolescencia.


Juegos clásicos MS-DOS


MS-DOS Turbo C++



🚨 La Trinchera: #StopKillingGames

Esta iniciativa global (stopkillinggames.com), liderada por creadores como Ross Scott (Accursed Farms), denuncia la práctica abusiva Juegos vendidos como productos completos... que mueren cuando la empresa decide desconectar los servidores.

Si no conoces la iniciativa aquí os dejo unos vídeos donde lo explican perfectamente:

BaityBait:

Alva Majo

Página oficial DOSBox

Wiki oficial DOSBox con todos los parámetros anteriormente explicados y muchos más

También te puede interesar:

Recopilación de programas en Archive.org

Instalación de RetroPie en Ubuntu

sábado, 12 de julio de 2025

Teclado Philips P2814-090 El primero...

Philips P2814-090
Hoy traigo al blog mi primer teclado... el Teclado Philips P2814-090. Siendo sinceros ha sido una inesperada alegría en una inesperada compra...

Todo empezó en una web de compra-venta por internet en el que encontré este extraño conjunto de torre, monitor y teclado. En un principio mi interés principal era la torre. Sin más datos sobre los componentes y mucha ilusión y como no tenía envío, me desplace para hacer el trato y en mi vuelta al hogar, mientras descargaba la maquina, mi atención se centro en el teclado...

Y entonces un recuerdo se dibujo claramente en mi mente... Era mi primer teclado... evidentemente no el mismo, (a saber donde andará...), pero si el mismo modelo, el Philips P2814-090.

Si bien es un teclado de membrana genérico, sus 3 leds de color verde y conector DIN-5 así como su cable de "caracolillo" lo hacen inconfundible para mi. Un de las peculiaridades es que no disponía de teclas como la de Windows o teclas de funciones. El tema multimedia no estaba aún tan popularizado por esa época.

Primer test

Primero encendí el ordenador y después de unos cuantos escandalosos pitidos, algo no andaba bien con él...

Realizadas las pruebas y viendo que no funcionaba como debería, lo de viendo no es literal, el ordenador no daba señal de vídeo y solo podía guiarme por los sonidos de la placa.

Con suficiente experiencia es fácil diferenciar entre las señales de la placa, muy estridentes, y en este caso, el sonido era como si una tecla se mantiene pulsada durante el arranque y hace un solido menos agudo y de intervalos cortos.

Inmediatamente se me vinieron a la mente las palabras del vendedor:

-Esta así de bien porque lo hemos limpiado...

Sin dudar del buen hacer de la persona que me lo vendió, comencé a sospechar que el teclado estuviera mojado o con humedad en su interior. Solo había una manera de comprobarlo...

Limpieza y puesta a punto

Primero con unas pinzas retire los 4 clips de plástico.. y que plástico... robusto y de buena calidad. Y tengo que decir que no se ha roto ninguna de estas piezas de plástico, que por lo general suelen ser bastante frágiles, ni las del interior ni las del exterior. 


teclado Philips P2814-090

Por el momento todo bien, levanto unas teclas y lo esperable, bastante pelusa noventera pero ni rastro de restos de agua o humedad.

teclado Philips P2814-090

teclado Philips P2814-090

Ya con todas las teclas fuera toca quitar otras pestañas que están entre los huecos de las teclas, hay 9 pestañas en total y presionando un poco son fáciles de quitar. Una vez que retiremos estas pestañas el plástico negro que cubre las membranas se puede retirar y quedan a la vista las membranas


teclado Philips P2814-090

Con la membrana a la vista aquí si se pueden apreciar restos de agua. Por suerte el agua solo estaba en la membrana, la parte electrónica, para mi alegría, estaba completamente seca.

Si nos fijamos en la imagen del inicio de la limpieza de la parte posterior del teclado podemos ver que hay muchas aventuras, así que muy seguramente el agua entro por ahí.


teclado Philips P2814-090

Un clásico baño con "fairis" y un poco de quita grasas. Recuerda que mojar cualquier componente requiere un buen secado posterior y retirar cualquier posible resto de humedad.

Una vez que hemos retirado toda la suciedad de décadas. Para el montaje solo quedada realizar el mismo proceso pero a la inversa:

  • Colocamos la membrana y ponemos la cobertura de goma.
  • Ajustamos el plástico negro y lo volvemos a fijar con las pestañas.
  • Ponemos cada tecla en su sitio y enchufamos los conectores a la parte electrónica.
  • Ponemos la carcasa superior.

teclado Philips P2814-090

Al conectar otra vez el teclado ya no hace el ruido y parece que todo funciona correctamente.

Podríamos decir que este teclado ha sido restaurado!!! Una alegría!!!

teclado Philips P2814-090

Conclusión

Y puede parecer tanta alegría por un simple teclado pero este teclado fue mi puerta al mundo digital: con él escribí mis primeros comandos en MS-DOS, jugué al Prince of Persia en VGA con monitor monocromo y descubrí que la tecnología podía ser mágica.

Restaurar el Philips P2814-090 no ha sido solo reparar plástico y circuitos... ha sido reconstruir un fragmento de mi infancia.

Una época en la que no había internet o al menos no como lo conocemos ahora, sin tutoriales ni PDFs ni foros. 

Una época en la solo eras tú y tu teclado frente a una pantalla donde solo se podía leer:


C:\>

Gracias por llegar hasta el final de esta nostalgica restauración! Saludos!!!

domingo, 22 de junio de 2025

Script Bash para mantenimiento de Raspberry Pi

Muy buenas a todos y todas!!

Normalmente lo más tedioso y aburrido es poner en orden todos los programas básicos para nuestra Raspberry pi, sobre todo en modelos anteriores a la Raspberry pi 4.

El problema suele se la potencia limitada con las que cuentan las Raspberry Pi2 y Raspberry Pi 3, ambos modelos unicamente cuentan con 1 Gb de RAM.

Si bien esto no impide poner un sistema gráfico, el rendimiento no es el mejor. Este articulo va dedicado a los que prefieren el uso de la terminal para el manejo de estos versátiles ordenadores.

Muchas veces llegamos y no sabemos o no recordamos los programas o comandos que más se utilizan en el entorno de la terminal, sobre todo si estas empezando la aventura del uso de la teminal.

Para eso poco fui creando este script escrito en Bash para hacer más rápido cierto tipo de gestiones comunes como la actualización del sistema, borrar logs el estado de la red o cambiar la dirección de red.

La mayoría de las funciones sirven para cualquier sistema basado en Debian y hay un apartado especifico para Raspberry Pi donde nos mostrará desde los pines que usa la placa o acceder a la propia configuración de la Raspberry Pi.

Este script lo utilizo para mi uso personal, así que hay algunas cosas que pueden no tener sentido, pero intentaré que se entienda para que puedas sustituir por el código que prefieras.

Lista de funciones del script:

  • 1) Server - Información neofetch
  • 2) Server - Volcar pagina desde zip
  • 3) Server - Recargar Dominio
  • 4) Server - Borrar logs apache2
  • 5) Server - Quien esta conectado al servidor?
  • 6) Server - Comprobar fail2ban
  • 7) Server - Últimas conexiones
  • 8) System - Iniciar rkhunter
  • 9) System - Iniciar lynis
  • 10) System - Raspberry Pi
  • 11) System - Espacio libre en la SD \(Raspberry\)
  • 12) System - Mostrar archivos mayores de 50MB"
  • 13) System - Test de stress
  • 14) Software - Actualizar el sistema (-y)
  • 15) Software - Versión de programa"
  • 16) Software - Programas instalados
  • 17) Software - Procesos con mayores consumo
  • 18) Network - Estado de mi red
  • 19) Network - Cambiar dirección de red
  • 20) Network - Escaneo de puertos nmap
  • 21) Network - Mostrar equipos conectados en rago de servidor
  • 22) Network - Mostrar carpetas compartidas
  • 23) Bluetooth - Bluetooth Manager


Programas disponibles

Como ya se ha comentado son programas básicos pero son ideales para una puesta en marcha.

Ademas de diferentes comandos también podemos instalar algunos programas que serán muy útiles para una mejor gestión de nuestra Raspberry Pi.

  • 1) Instalar Shell Fish
  • 2) Instalar compartir archivos Samba
  • 3) Instalar administrador de archivos Ranger
  • 4) Instalar Monitor de sistema btop
  • 5) Instalar Monitor de tráfico Iptraf
  • 6) Instalar Navegador de terminal w3m
  • 7) Instalar nmap
  • 8) Instalar Servicio de correo Postfix (Gmail)
  • 9) Servidor fail2ban para Apache2
  • 10) Instalar rkhunter
  • 11) Instalar lynis
  • 12) Instalar Neofetch
  • 13) Instalar I2c-tools

Algunos de los programas están enfocados a servidores como Samba, rkhunter, lynis o nmap

Otros como Ranger, Btop o Neofetch están enfocados a la gestión o información del sistema.

Comunicación Bluetooth (RPI3)

También cuenta con otro script llamado Bluetooth_manager.sh encargado de una gestión básica del bluetooth como mostrar una lista con los dispositivos disponibles o enlazar con con ellos.

  • 1. Encender/Apagar Bluetooth
  • 2. Escanear dispositivos cercanos
  • 3. Emparejar nuevo dispositivo
  • 4. Listar dispositivos emparejados
  • 5. Conectar/Desconectar dispositivo
  • 6. Información del adaptador
  • 7. Eliminar dispositivo emparejado

Con este script tenemos la opción de poder usar el Bluetooth desde la linea de comandos, así podemos emparejar y conectar desde altavoces o cascos a un ESP32 o con un Arduino con un módulo bluetooth.

Conclusión:

Mantenimiento.sh es una pequeña navaja suiza de programas y funciones para las Raspberry pi. Nos hace mucho más fácil el estar buscando programas y comandos comunes con el ahorro de tiempo que eso conlleva.

También hay que decir que es un script que solo crece ya que intento añadir las nuevas funciones que voy aprendiendo o las que más utilizo.

Descargar mantenimiento-rpi desde GitHub

Enlaces sobre algunos de los programas que podemos instalar desde el script:

Un saludo a todos!!

viernes, 13 de junio de 2025

Raspberry Pi sensor DHT11 y DHT22

DHT11
Uno de los sensores más populares utilizados en conjunto con la Raspberry Pi es el DHT11, un sensor de humedad y temperatura de bajo costo y fácil de usar.

¿Qué son los sensores DHT11 y DHT22?

Los sensores DHT11 y DHT22 son dispositivos electrónicos que mide la temperatura y la humedad relativa del aire. Es un sensor digital, lo que significa que los datos que proporciona son en formato digital y pueden ser fácilmente leídos por un microcontrolador como la Raspberry Pi.

DHT22


A pesar de su bajo costo, el DHT11 más que el DHT22, son bastante precisos y fiables, lo que los convierte en una excelente opción para una amplia gama de aplicaciones.

El DHT11 esta más indicado para Proyectos educativos o prototipos simples y ambientes interiores controlados como pueden ser habitaciones, oficinas.

Sin embargo el DHT22 será más útil en proyectos de tipo invernadero, neveras y exteriores.

Funciones del Sensor

  • Medición de temperatura
  • Medición de humedad
  • Salida digital
  • Bajo consumo
  • Fácil de usar

Comparativa: DHT11 vs DHT22

Característica DHT11 DHT22
Precisión (Temp) ±2°C ±0.5°C
Rango (Temp) 0°C a 50°C -40°C a 80°C
Precisión (Hum) ±5% RH ±2% RH
Rango (Hum) 20% a 80% RH 0% a 100% RH
Frecuencia de Muestreo 1 Hz 0.5 Hz
Resolución 1°C / 1% RH 0.1°C / 0.1% RH
Consumo Eléctrico 0.5 - 2.5 mA

Instalación y Configuración en Python:

Para utilizar los sensores DHT11 y DHT22 con una Raspberry Pi, necesitaremos un entorno de programación adecuado y una biblioteca para interactuar con el sensor. Python es uno de los lenguajes de programación más populares para la Raspberry Pi, y existen varias bibliotecas que facilitan la lectura de datos del DHT11.

Necesitamos instalar la biblioteca Adafruit. Ahora en un terminal de tu Raspberry Pi y ejecuta el siguiente comando para instalar la biblioteca adafruit-circuitpython-dht:


pip3 install adafruit-circuitpython-dht


Esta biblioteca proporciona una manera sencilla para leer datos de los sensores DHT11 y DHT22.

Ahora tenemos que conectar el sensor DHT a a la Raspberry Pi. Para esto identificaremos los pines de cada sensor y los conectamos siguiendo las serigrafias que vienen en el sensor:

  • Data: al GPIO21 (pin40)
  • VCC: al cualquier pin 5V
  • GND: al cualquier pin GND

Ahora en la terminal creamos un nuevo archivo Python llamado "dht11_test.py y escribimos el siguiente código que nos mostrará en pantalla los datos de temperatura y humedad del DHT11:



# Código para lectura del sensor DHT11
import time

import board

import adafruit_dht

#Inicia el dispositivo DHT con el pin de datos conectado a:
dhtDevice = adafruit_dht.DHT11(board.D21)

# Si no deseas usar pulseio puedes usar DHT11 use_pulseio=False
# Esto puede ser necesario en ordenadores de tipo Raspberry Pi con Linux
# Pero no funcionará en CircuitPython
# dhtDevice = adafruit_dht.DHT11(board.D18, use_pulseio=False)

while True:
    try:
        # Imprime los valores en el puerto serie
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        print(f"Temp: {temperature_f:.1f} F / {temperature_c:.1f} C    Humidity: {humidity}% ")

    except RuntimeError as error:
	# Los errores ocurren con bastante frecuencia, los DHT son difíciles de leer, 
    simplemente sigue adelante.

        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        raise error

    time.sleep(2.0)

Guarda el archivo como dht11_test.py y ejecútalo desde la terminal:


python3 dht11_test.py
o
python3 -m dht11_test


Para el caso del DHT22 es exactamente igual menos la linea "sensor = adafruit_dht.DHT11" que tenemos que cambiar por "sensor = adafruit_dht.DHT22" y se ve así:


# Código para lectura del sensor DHT22
import time

import board

import adafruit_dht

#Inicia el dispositivo DHT con el pin de datos conectado a:
dhtDevice = adafruit_dht.DHT22(board.D21)

# Si no deseas usar pulseio puedes usar DHT22 use_pulseio=False
# Esto puede ser necesario en ordenadores de tipo Raspberry Pi con Linux
# Pero no funcionará en CircuitPython
# dhtDevice = adafruit_dht.DHT22(board.D21, use_pulseio=False)

while True:
    try:
        # Imprime los valores en el puerto serie
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        print(f"Temp: {temperature_f:.1f} F / {temperature_c:.1f} C    Humidity: {humidity}% ")

    except RuntimeError as error:
	# Los errores ocurren con bastante frecuencia, los DHT son difíciles de leer,
    simplemente sigue adelante.

        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        raise error

    time.sleep(2.0)

Guardamos el archivo como dht22_test.py y ejecutamos desde la terminal:


python3 dht22_test.py
o
python3 -m dht22_test

El código de este ejemplo llamado dht_simpletest.py lo podemos encontrar en el repositorios de Adafruit_CircuitPython_DHT


Solución de errores:

uno de los errores que más comunes es el uso de la librería "board". Muchas veces podemos recibir el siguiente mensaje:


    import board
ModuleNotFoundError: No module named 'board'

O también este:


    dhtDevice = adafruit_dht.DHT11(board.D21)
                                   ^^^^^^^^^
AttributeError: module 'board' has no attribute 'D21'

Nos hace referencia a la librería board que se instala normalmente con "pip install board". Pero al estar haciendo uso de Adafruit CircuitPython necesitamos la librería que esta asociadad a Adafruit llamada "Adafruit-Blinka"

Esta librería instalara "board" y otras librerías como "pyserial" o "pyusb".

En el caso de que haya un error nos puede aparecer este mensaje:


Unable to set line 18 to input


Si aparece este error, nos hace referencia al pin, que o bien no esta activo o no es el puerto correcto donde esta conectado el sensor DHT 11.

Aplicaciones del DHT11 y Raspberry Pi

La combinación de Raspberry Pi y DHT11 o DHT22 ofrece un sinfín de posibilidades para proyectos de IoT. Algunas de las aplicaciones más comunes incluyen:

  • Estaciones meteorológicas caseras: Crea una estación meteorológica personalizada para monitorear la temperatura y humedad en tu hogar o jardín.
  • Sistemas de control de invernaderos: Automatiza el riego y la ventilación de tu invernadero en función de las condiciones ambientales.
  • Monitoreo de condiciones ambientales: Utiliza el sensor para monitorear la temperatura y humedad en espacios cerrados, como oficinas o almacenes.
  • Proyectos de domótica: Puedes integrar el sensor en sistemas de domótica para crear ambientes más cómodos y eficientes.
  • Prototipos de IoT: Utilizalos como punto de partida para desarrollar prototipos de dispositivos IoT más complejos.

Conclusión:

El sensor DHT11 es una herramienta invaluable para cualquier persona interesada en proyectos de electrónica y programación. En combinación con la Raspberry Pi, ofrece una plataforma potente y flexible para crear una amplia variedad de aplicaciones.

Con este artículo, has adquirido los conocimientos básicos para comenzar a trabajar con el DHT11 y la Raspberry Pi. ¡Anímate a experimentar y crear tus propios proyectos!

Instalación librería Adafruit-Blinka

Librería adafruit-circuitpython-dht

Aquí tienes otros enlaces de este blog relacionados con Raspberry Pi:

Programa de ejemplo de este articulo en GitHub

Raspberry Pi 3 Oled i2C

Raspberry Pi PWM

Poner Ip fija en Raspberry Pi


Un saludo a todos!!

domingo, 8 de junio de 2025

Raspberry Pi 3B+ Alimentación con LM2590

Muy buenas a todos los amantes de la informática!!!

Hace poco hemos desempolvado unas Raspberry Pi (2x3B + 1x3B+) estaban montadas en un rack y les fui dando diferentes usos hasta que ya los deje un poco de lado por que casi siempre había problemas de alimentación.

Con ellas hemos visto algunos proyectos como la pantalla oled I2C o el uso del PWM para controlar el ventilador de la Raspberry Pi.

En mucho foros y paginas de internet hay referencia al temido mensaje "low-voltage". Este error es debido a que el chip que se encarga de entregar la energía a la Raspberry Pi detecta un voltaje por debajo de los 4.65V.

En este caso usaba una fuente de 3A que iba de maravilla cuando se estaba usando solo una de ellas y aún así al conectar un disco duro sata con conexión USB. En este punto la Raspberry Pi 3B+ arrancaba con el dichoso mensaje pero el disco duro no, y muchas veces ni si quiera arrancaba.

Este mensaje aparece al llegar a los 4.65V. Sabiendo esto medimos los pines +5V y GND del puerto GPIO y si, las sospechas se confirman, incluso sin el HDD el voltaje nunca llegaba a los 5V.

Entre las diferentes soluciones pasan por un buen cargador y un buen cable de alimentación. para este caso se decidió poner una fuente de alimentación de PC Usando la salida de 5V que puede entregar hasta 30A lo que es más que suficiente para alimentar las 3 Raspberry del proyecto.

Tampoco funciono...

Para este punto la frustración era máxima. Pero entro en juego una placa basada en el integrado LM2590.

¿Que es el LM2590?

El LM2590 es un circuito integrado regulador de voltaje. Y voltaje es lo que le falta a la Raspberry. Lo más interesante es el potenciómetro con el que podemos regular hasta el voltaje que queramos. Estas son los valores de entrada y salida así como la corriente capaz de entregar:

  • Tensión de entrada: 4V - 40V
  • Tensión de salida: 1.25V - 37V
  • Corriente máxima: 3A

Así que si medimos en los puertos USB 4.80V, con el potenciómetro podremos regular esos 0.20V que nos hacen falta.

Esto no es una regla de tres, para poder conseguir el voltaje adecuado hay que tener en cuenta que solo podemos subir a un máximo de 5.3V según las especificaciones

Para esta Raspberry Pi 3B+ lo he dejado en 5.15V aunque el display muestre 5.25V. También hay que tener en cuenta que este LM2590 alimenta al HDD mecánico y, sobre todo en el arranque, necesita un extra de potencia.

Por el momento he conectado la alimentación de la Raspberry y el HDD así:


Y en la siguiente fotografía se puede ver la medición con el voltímetro del voltaje que sale hacia los dispositivos:

Como se observa son diferentes dependiendo de si tienen carga o no, en fotografía superior se ve como marca los 5.30V pero realmente salen 5.20V.

Al aplicar la carga (RPI 3B+ + HDD + ventiladores) ese valor fluctuá un poco durante el arranque, pero una que ha cargado el sistema y esta en reposo, el voltaje se mantiene a 5.25V que marca el display y los 5.15V que tenemos realmente si medimos con el voltímetro.


Conclusión:

Y ya está! Después de tantos quebraderos de cabeza el modulo LM2590 es la solución que mejor ha funcionado después de varias pruebas entre cargadores y fuentes de PC.

Estamos pendientes de recibir un par de módulos más para las otras 2 Raspberry Pi 3B que están sin funcionar por el mismo problema.

Y bueno hasta aquí hemos llegado esta semana solucionando este pequeño pero insufrible problema "Low Voltage" que estaban sufriendo las Raspberry.

Esto es aplicable a casi todas las Raspberry Pi, tanto para 3 como 4, aunque para esta ultima no hemos realizado ninguna prueba ya que no tenemos ninguna disponible. Pero en casi todos los artículos y foros en los que se ha comentado, parecen tener el mismo problema.

Con esto no queremos decir que las Raspberry tengan ningún problema, pero imagino que intentamos usar cosas que tenemos por casa, como cargadores o en mi caso una fuente de PC un poco "destartalada" y si no hay un tanto un voltaje de 5.1V como la capacidad de entregar hasta 3A, no tendremos un funcionamiento optimo del sistema.

Aquí podemos descargar las hojas de datos (datasheet) de los diferentes chips y partes como cámaras o sensores para Raspberry Pi.

Muchas gracias a todos! Saludos!

viernes, 30 de mayo de 2025

Restauración ZX Spectrum +2 Gris - Limpieza y puesta a punto

Buenas amigos y amigas de los retro!!!

Con un presupuesto de 80€ me propuse encontrar en la web de venta de segunda mano, Wallapop, algún aparato retro que tanto nos gustan.

Le tenía echado el ojo al ZX Spectrum +2 pero en unas condiciones aceptables no encontraba gran cosa por menos de 100€. Y a muchos les faltaba el transformador o no estaba muy claro su funcionamiento.

En una de estas apareció este:

ZX Spectrum desde Wallapop

Tenía una pinta un poco rara... pero incluía el transformador, un joystick SJS-1 y el manual de usuario.

Cuantas más fotos veía.. la cosa no mejoraba....

Transformador original

Joystick SJS-1

Sin duda lo que mejor estaba era el manual de usuario.

No lo pensé mucho y lo compré... ¿había sido una buena idea? El vendedor se puso en contacto conmigo y hablamos sobre la máquina. Fue sincero desde el primer momento y me comento el mal estado en el que se encontraba este ZX Spectrum +2 y que había estado por mucho tiempo en un trastero. Incluso me envío vídeos del estado. La verdad, de 10.

Después de recibir el paquete empezamos con la limpieza, es preferible tenerlo limpio antes de trabajar con el. Esto ya se ha comentado más de una vez en el blog.

Empezamos desmontando todo y comprobando el estado de las piezas.

Con las "tripas" del Spectrum a la vista todo parece estar correcto. Mucha suciedad mucha.... pero todo lo demás como se puede ver esta completo.

Lo que no es tan correcto es poner componentes encima de la protección de burbujas, esto puede crear corriente electrostática y malograr algún componente. No lo hagáis en casa ;)

Una de las partes más perjudicadas en todos los elementos del ZX Spectrum eran las carcasas. Por suerte, solo era eso, restos de décadas de olvido en un trastero.

En este caso el corazón de la bestia sigue aparentemente en buenas condiciones. No hay restos de oxido o de liquidos derramados. Los condensadores también parecen en buen estado y si falla alguno son fáciles de reemplazar (siempre que no dañen otro componente).

ZXSpectrum +2 128K placa Z70500 ISS3

El teclado también tenía mucha suciedad pero las pulsaciones eran correctas.

La casetera más de lo mismo...

Ahora empieza lo interesante... Con todos los elementos fuera procedemos a la limpieza: NOTA: El agua y la electricidad no son muy amigos, recuerda secar completamente todos los elementos de cualquier resto de humedad.

Para esta parte, mis mejores aliados son el barreño (verde), jabón de cocina y un pincel suabe. En ultima instancia podemos usar desengrasante, pero puede ser muy agresivo con la pintura y las pegatinas.

Como ya hemos comentado un buen secado es imprescindible antes de empezar a montar el equipo.

Al final la placa, una Z70500 ISS3 en cuanto a suciedad, era lo más limpio, todo lo demás tuvo dos pasadas de barreño...

Después de muchas horas de investigación la mejor opción para probar la placa, ya que no tengo ningún cable para su conexión con la TV era usar la conexión AV de la que no dispone. El ZX Spectrum +2 cuenta con salida RF y una salida RGB. Pero con una pequeña modificación podemos obtener esta señal. Solo necesitamos una resistencia de 15 ohmios.

La conexión se realiza entre el vivo del conector de RF (la parte central) y primero tenemos que retirar la resistencia que ya tiene conectada. Solo hay que desoldarla y proteger la punta de la resistencia para que no haga contacto con otro componente.

Ahora soldamos la resistencia de 15ohm en la misma posición en la questaba la otra y aprovechando un agujero que hay en un lateral de la caja de RF, la pasamos por ahí y el otro extremo le soldamos un cable que llevamos a la salida del diodo D4.

Diagrama conexión para modificación AV

Este diodo se encuentra en la parte posterior del conector 8DIN y viene desde el integrado TEA2000 en su patilla 6 COVO (Composite Video Out). Es recomendable limpiar el conector del AV ya que si hace mucho que no se usa, puede tener una película de suciedad (oxido) que hace que la conexión no sea la correcta.

Es muy interesante tener a mano el manual de servicio, no confundir con el manual de usuario. Gracias a theoldrobot.com que lo tienen disponible online.

Una vez hecho esto toca presentar todo para hacer una primera prueba de encendido. Enchufamos todo y....

ZXSpectrum +2 128K vídeo AV

Y se hace la magia ochentera!!!

La calidad de imagen no es excelente, pero por lo menos puedo comprobar que el ZX Spectrum +2 gris funciona perfectamente. Es simplemente increíble que aparatos con más de 30 años funcionen perfectamente solo con un poco de limpieza y cariño. A ver si aprenden nuestros fabricantes contemporáneos...

Antes de cerrar decidí aventurarme con otra modificación, en concreto con el mod de audio.

¿En que consiste el mod de audio para el ZX Spectrum?

El sistema de carga de este microordenador es el antiguo sistema de cintas, si como las que, si ya tiene una edad, escuchabas en tu flamante walkman o en el coche. Si bien este sistema era muy de agradecer en los 80's debido a su bajo coste, hoy en día es una rareza, como los discos de 3.5.

Por suerte a día de hoy existen bastantes alternativas basadas en Arduino y otras tantas en Android, cada una con sus ventajas e inconvenientes. Y esta modificación es valida para los dos sistemas.

En ambos casos la modificación del sistema de audio nos permitirá cargar las cintas, en este caso audios, directamente a la placa del reproductor de casete. De esta manera nos saltamos el cabezal y prácticamente no necesitaremos más la parte mecánica del reproductor.

Para esta modificación he seguido una explicación de Manuel Cuenca Chips donde explica los puntos donde es mejore o peor dicha conexión. Esta variación dependerá de si el sistema que estamos usando esta amplificado o no.

¡¡¡ATENCIÓN!!! Existen diferentes tipos de placa para la casetera, comprueba cual es la tuya.

Vamos a intentar darle un poco de luz al tema...

Primera opción

La primera opción es el conector donde se enchufa el reproductor de cintas. El problema de estos pines es que necesitamos que la fuente de la que proviene el audio tiene que estar amplificada. En este caso solo servirían reproductores de cintas con un amplificador interno. Para usarlo con dispositivos tipo TZXduino o teléfonos móviles necesitamos la segunda opción.

Y consiste en soldar el cable del + del RCA en el punto que transmite la información directamente a la placa. Este punto ya viene amplificado desde integrado de amplificación LA6324A. Al conectarlo en la salida no hacemos uso de ese integrado y la señal tiene que llegar ya amplificada.

Segunda opción:

El reproductor del ZX Spectrum lleva integrado un amplificador y en este modelo en particular es el LA6324A y esta situado en la misma placa del reproductor de casete que podemos usar si queremos utilizar los dispositivos que acabamos de comentar.

Al fina me decidí a usar la segunda opción del amplificador internoLA6324A y aún así he necesitado amplificar la señal con un LM386 que, por suerte, tenía disponible.

Hay muchos circuitos para el LM386 disponibles en internet pero he usado un pequeño módulo de apenas 0.80€ que tenía por el taller.

Con esto logramos aumentar la señal de tal manera que el ZX Spectrum "escuche mejor". Para esta operación solo necesitamos 6 cables, 4 para la alimentación y 2 para la salida de audio.

El LM386 lo podemos alimentar con los 5 voltios desde la misma casetera, igual que la salida y entrada de audio. Estas son sus conexiones:

ZXSpectrum +2 128K - conexión amplificador LM386

  • Alimentación +5V: Tomaremos los 5V desde el casete.
  • Entrada de audio +: Toma + desde el RCA.
  • Entrada de audio -: Toma - desde el RCA.
  • Masa de alimentación (GND): Tomaremos GND desde el casete.
  • Salida de audio +: A la placa del casete.
  • Salida de audio -: A la placa del casete. Es común con GND de alimentación.

En la parte de las pistas de la placa del casete solo necesitamos estos 3 puntos de conexión:

ZXSpectrum +2 128K conexión casete
  • 1-. Toma de alimentación de 5V
  • 2-. Toma de masa o GND. Aquí conectamos las lineas marcadas como GND de la entrada de alimentación y el GND salida de audio
  • 3-. Entrada de audio.

El conjunto entero queda con la siguiente configuración:


Montaje final

Ya con todo montado tocaba probar el invento. Hay que decir que probamos primero sin amplificación, es decir con el programa PlayZX en el teléfono y el cable de audio directamente al mismo punto pero, aunque se escuchaba a través de spectrum en la tv, no se movían las lineas que indican que se esta cargando una cinta.

Solo tuve que regular el volumen hasta que empezaron a moverse las lineas... en un principio dio fallo de carga, pero poco a poco fuero apareciendo las famosas lineas de carga hasta que empezó a mostrar la imagen del juego que estaba cargando (1942). No solo estaba vivo, también funcionaba perfectamente.

ZXSpectrum +2 128K

Conclusión:

Ha sido un proyecto al que le tenia muchas ganas, bueno en general le tenia ganas a estas tres joyas retro, sobre todo después de ver vídeo sobre programación del Profesor Retroman. Un profesor de la Universidad de Valencia (creo) con explicaciones de sobre programación o el uso de la memoria.

Y aunque están basados mayoritariamente en ordenadores Amstrad, y ya me pico la curiosidad. Ahora con la Gotek y con esta modificación de audio (que también llevare al CPC464) se hace más fácil hacer todo tipo de pruebas.

También puede parecer que estos sistemas obviamente obsoletos en pleno 2025 no tienen ningún uso práctico pero son una gran plataforma para empezar a entender la programación desde el bajo nivel hará que mejore nuestra programación en alto nivel.


NOTA:
Todo lo mostrado en esta entrada esta realizado con el máximo cuidado y siguiendo varios tutoriales. Todo lo que realices a tú máquina queda bajo la responsabilidad del usuario.

Os dejamos algunos enlaces en los que hay gran cantidad de información sobre el ZX Spectrum.

Saludos retro!!!