viernes, 9 de octubre de 2026

Botón On/Off para Raspberry Pi

 

Botón On/Off para Raspberry  Pi

(Basado en el tutorial de howchoo) y modificado de https://blog.elcacharreo.com/2017/07/17/boton-onoff-para-raspberry-pi/

Desgraciadamente la Raspberry Pi (ni siquiera en su versión 3) tiene un botón de encendido apagado y el conectar y desconectar el cable de alimentación USB implica un doble riesgo: el producir errores en los ficheros por apagar bruscamente y dañar el conector USB.

Por ello sería ideal si pudiedarmos añadir una manera de inducir un apagado ordenado (shutdown) y un posterior encendido.

Buscando en Internet he visto que los diseñadores ya pensaron en ello permitiendo arrancar desde el estado de Halt (al que se llega desde un shutdown).

Esta funcionalidad hardware permite arrancarla desde el mencionado estado Halt cuando se detecta un estado a 0V del GPIO 3

Por ello el arranque desde este estado Halt es fácil de resolver: basta con conectar un pulsador entre el GPIO 3 y GND (pines 5 y 6).

Para el apagado podemos usar un script que vigile (mediante interrupciones para no consumir CPU) el estado del ya usado GPIO 3 y en caso de que detecte que está a 0v ponga la Raspberry en estado Halt (en la imagen también se ve que he añadido un ventilador para mantener la raspberry fresquita en este tórrido verano)


Esta es mi modificación para evitar efectos no deseados de apagado.
Si se hace este montaje de apagado y encendido, no se puede usar el bus I2C.

El script (listen-for-shutdown.py) para detectar la pulsación del botón es muy sencillo (tomado del tutorial de howchoo )

#!/usr/bin/env python

import RPi.GPIO as GPIO
import subprocess

GPIO.setmode(GPIO.BCM)
GPIO.setup(3, GPIO.IN)
GPIO.wait_for_edge(3, GPIO.FALLING)

subprocess.call(['shutdown', '-h', 'now'], shell=False)

Ahora damos permisos de ejecución

chmod u+x listen-for-shutdown.py

Si ejecutamos el script con sudo (porque necesitas permisos de administrador para hacer el shutdown) vemos que funciona perfectamente

sudo ./listen-for-shutdown.py

Si una vez apagada volvemos a pulsar el bton veremos que arranca limpiamente.

Ahora necesitamos que el script se ejecute directamente al arrancar la Raspberry. Para ello debemos copiarlo al directorio adecuado

sudo mv listen-for-shutdown.py /usr/local/bin/

Y crear el script listen-for-shutdown.sh que lo arranque/pare como servicio

#! /bin/sh

### BEGIN INIT INFO
# Provides:          listen-for-shutdown.py
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO


# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system

case "$1" in
  start)
    echo "Starting listen-for-shutdown.py"
    /usr/local/bin/listen-for-shutdown.py &
    ;;

  stop)
    echo "Stopping listen-for-shutdown.py"
    pkill -f /usr/local/bin/listen-for-shutdown.py
    ;;

  *)
    echo "Usage: /etc/init.d/listen-for-shutdown.sh {start|stop}"
    exit 1
    ;;
esac

exit 0

Lo copiamos al directorio donde se guardan los script de arrancan (/etc/init.d)

sudo mv listen-for-shutdown.sh /etc/init.d/
sudo chmod +x /etc/init.d/listen-for-shutdown.sh

Sólo nos queda registrar el script para que se inicie en el arranque

sudo update-rc.d listen-for-shutdown.sh defaults

Para probarlo arrancamos manualmente el servicio con

sudo service listen-for-shutdown start

Al pulsar el botón por primera vez se apagará y volverá a encenderse cuando se pulse de nuevo

Veamos el consumo cuando está en estado Halt, unos 50mA

Y cuando está en funcionamiento normal, unos 420mA

Todos los scripts se pueden descargar desde el repositorio github de Howchoo


miércoles, 7 de octubre de 2026

Registrador valores meteorológicos . Parte II . Parte Informática

Página principal
Registrador valores meteorológicos
Parte II
Parte Informática

En la primera parte del proyecto http://seta43.duckdns.org/2026/misensor/senmio.html nos quedamos en el receptor RF , que recibe los datos de temperatura, humedad y presión.
Estos datos son enviados a la Raspberry Pi por el puerto serie a través del USB.
Ahora nos toca tratar los datos para representarlos en la página WEB y mostrarlos en una gráfica.

Partimos de que ya tenemos un servidor WEB instalado en nuestra raspberry , en nuestro caso he instalado Debian 9 con el servidor nginx.
Para más información podéis visitar   http://seta43.duckdns.org/2026/servpi.html .
La versión de Raspberry que utilizo es una de las primeras con solo 512 Mb, por lo cual arranco en el modo consola, de esta forma irá más fluido.

Existe dos programas que se deben ejecutar, el programa SerialSensorWEB.py que se encarga de leer los datos que proceden del puerto serie, y un segundo programa jPlot.py que se ejecuta cada 10 minutos.
Todos los programa y la páginas web creadas se encuentran en el directorio /var/www/html/ztempera .

Empezamos con que el que arranque Linux con un usuario (seta) determinado en modo consola.
--------------EDITAMOS------------------------------------
nano /etc/systemd/system/getty@tty1.ser

Añadir:

[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin seta  --noclear %I $TERM

Una vez arrancado en modo  consola el usuario seta debemos ejecutar el programa tarea4.sh , este es un script que lanza
SerialSensorWEB.py .

-----------Añadir a  .bashrc  ....................

cd  /var/www/html/ztempera/
./tarea4.sh



Vemos cuando se reinicia o arranca la raspberry se inicia una consola ejecutando
SerialSensorWEB.py .

Automáticamente escanea los puertos serie y si encuentra la placa llamada SENSORTOTAL6 , empieza a procesar los datos recibidos.

Todos los datos recibidos los archiva cada minuto en un fichero con el nombre Temp2026_10_02.csv , donde 2026 sería el año, 10 el mes, y 2 es el día. Además cada 2 minutos se crea y actualiza la página WEB. La página creada se llama index.html con los datos actualizados de temperatura, humedad y presión.


Ahora nos toca crear los gráficos de temperatura, humedad y presión.
Anteriormente ya lo había realizado en http://seta43.duckdns.org/webgra.html utilizando la librería
matplotlib en python.
Esta librería crea un fichero de dibujo png con la gráfica de datos proporcionados.
El problema de está librería es que en la raspberry tarda hasta 3 minutos, en un ordenador normal lo hace en 1 segundo.
Creo que es debido al uso o no uso de la FPU, pero eso es especulación mía. El uso de esta librería no es viable en esta rasberry.

La otra forma es utilizar JavaScript y utilizar la librería http://www.jqplot.com/ . De esta forma la realización y los cálculos los hace en el navegador del usuario.
Anteriormente ya lo había realizado en http://seta43.duckdns.org/jsplot.html .
Para crear la página WEB  de gráficos se debe ejecutar el programa xgratem.sh , este script lanza el programa jPlot.py cada 10 minutos.
Para ejecutar un programa cada 10 minutos debemos desde un terminal del usuario seta ejecutar:
crontab -e  .

Editaremos de la siguiente forma:

  10 * * * * /var/www/html/ztempera/xgratem.sh


El programa crea con los datos almacenados en el fichero 
Temp2026_10_02.csv , la página WEB llamada index3.html , que hace uso de JavaScript para generar los gráficos.


Programas y ficheros

Este proyecto me obligó a repasar muchos proyectos anteriores, y a recordar la programación en python y
JavaScript que lo tenía algo olvidado.
Es satisfactorio ver en directo la temperatura exterior y las gráficas, como un extra de mi página WEB.
Para ver la temperatura en Palencia  (España) - http://seta43.duckdns.org/ztempera/index.html


Saludos.
Juan Galaz



Bibliografía:

http://seta43.duckdns.org/ard433.html
http://seta43.duckdns.org/termot.html
http://seta43.duckdns.org/temt3.html

martes, 6 de octubre de 2026

Registrador valores meteorológicos. Parte I. Parte Electrónica

  Página principal

Registrador valores meteorológicos
Parte I
Parte Electrónica

Hace unos 6 años había realizado un proyecto sobre un registrador de datos meteorológicos.
Aprovechado un sensor exterior comercial, leía los datos de humedad y temperatura. Estos datos se almacenaban en un servidor, y luego realizaba gráficas con estos datos  http://seta43.duckdns.org/camtem.html.
Mas tarde añadí un sensor de presión, con lo cual podía predecir el tiempo http://seta43.duckdns.org/webgra.html.
Una bajada de la presión atmosférica y un aumento de la humedad, es un seguro indicio de lluvia.
Después de un par de años funcionando, el sensor exterior dejo de funcionar. Como no tenía mas sensores de humedad/temperatura, utilicé los datos de otro sensor que solo proporcionaba temperaturas http://seta43.duckdns.org/ard433.html.
Así estuve años, registrando valores de presión y temperatura.
Estos últimos meses he estado haciendo varios proyectos sobre sensores:
25/09/2026 - Sensor de temperatura - TFA - DHT11 - SENSOR_DHT11
21/04/2026 - Sensor de temperatura - TFA - 18B20 - SENSOR_TFA_18B20
18/04/2026 - ESP32-C3 - Sensor de temperatura - Protocolo  TFA . SENSOR_TFA_C3
07/04/2026 - Arduino - Sensor de temperatura - Protocolo  TFA . SENSOR_TFA
En todos ellos incluía sensores de temperatura, humedad y presión. Pero al utilizar el protocolo TFA de solo sensor de temperatura, me puse a pensar para hacer algún cambio.
No se podía depender de sensores comerciales,  se rompe el sensor (cosa habitual) , y te encuentras en la misma situación.
Pues bien, cree mi propio sensor con medidas de
temperatura, humedad y presión.
Además cree mi propio protocolo derivado del TFA, al que añadí un Byte con el valor de la humedad.
Sensor emisor de temperatura DHT11
Protocolo SETA43   
CRC=111101 61   223-Device  80-Humedad  270-Grados  3-Canal 2-Bateria
4bits-CRC   8bits-Device    8bits-Humedad   12bits-Grados   2bits-Canal   2bits-bateria
1101 11011111 01010000 000100001110 11 10




Existen dos sensores externos:

Realizado con arduino   ->http://seta43.duckdns.org/2026/tfa/tfa.html


Realizado con ESP32-C3 ->
http://seta43.duckdns.org/2026/tfa/tfac3.html


Ahora los datos se mandan desde el sensor externo mediante Radiofrecuencia 433MHz , y los recibe el módulo receptor que tiene además un sensor de presión del tipo BMP180/280.
Todos estos datos se envían al servidor web que los trata y los muestra en una página WEB.



Receptor de RF 433MHz

SENSORTOTAL6
SENSORTOTAL6
SENSORTOTAL6
Scanning...
0-I2C device found at address 0x38 AHTxx
1-I2C device found at address 0x77 BMP280/180
done

Int433_Mode40170_BMP280


INICIO
Canal= 1
Humedad= 51
Grados= 232
BMP1= 262
BMP2= 9265
CHECKSUM= 1
FINAL


Salida por el terminal serie.

Programas

Aquí terminamos la parte de electrónica del proyecto.
Como se puede ver, del sensor externo se obtienen  los datos de temperatura y humedad, y del receptor interno se obtiene los datos de la presión.
En la siguiente parte del proyecto mostraremos como se realiza la representación en la página WEB de los datos, y la gráficas de los diferentes valores.

Saludos.
Juan Galaz



Bibliografía:

http://seta43.duckdns.org/ard433.html
http://seta43.duckdns.org/termot.html
http://seta43.duckdns.org/temt3.html

viernes, 25 de septiembre de 2026

Sensor de temperatura Protocolo TFA Arduino - DHT11

  Página principal

Sensor de temperatura
Protocolo  TFA

Arduino - DHT11

En este caso utilizo el sensor DHT11 (Temperatura-Humedad) para transmitir la señal RF  en 433MHz y protocolo TFA.




_
SENSOR433_DHT11
OK  223-Device  24-Grados  28-Humedad  3-Canal 3-Bateria
FINAL CRC=111001 57
1001 11011111 000011110000 11 11
*****


He realizado este proyecto por que era sencillo, solo he tenido que utilizar el código de anteriores montajes y añadir la librería del DHT11.
El DHT11 solo tiene una resolución de ±1°C, y en humedad de  1%RH .
Aunque en teoría su consumo puede llegar a 150uA en Standby, no he visto ningún ejemplo de como hacerlo.
Se podría utilizar la salida de cualquier pin para alimentarlo, y solo alimentarlo cuando se va a medir, pero no he querido hacerlo, quizá otro montaje.
Tal como está diseñado, el consumo está en 2mA, por lo cual la autonomía como mucho sería 31 días.

Programa DHT11


Saludos.
Juan Galaz


Bibliografía:

http://seta43.duckdns.org/ard433.html
http://seta43.duckdns.org/termot.html
http://seta43.duckdns.org/temt3.html

jueves, 24 de septiembre de 2026

Servidor WEB con Visualizador de temperaturas

  Volver

Servidor WEB
con
Visualizador de temperaturas


Cada 2 o 3 años los servidores que monto en mini-placas tipo Raspberry Pi o OrangePI-PC suelen empezar a fallar o deben ser actualizados.
Aprovechando el traspaso del servidor de Raspberry a OrangePI me he puesto a reprogramar el código de capturar la temperatura y  servirla en gráficos.
Todo esto se basa en anteriores artículos como:
http://seta43.duckdns.org/webgra.html
http://seta43.duckdns.org/jsplot.html

Los cambios son:
  • Al tener dos sensores, se muestran los valores de los dos sensores, uno está en el lado este de la casa, y otro está en el lado oeste.
  • Utilizo 2 programas para generar los gráficos,  la librería  Matplotlib (Python), y para el otro gráfico utilizo la librería jqplot ( JavaScript ).
  • En Raspberry el generar los gráficos con Matplotlib se hace pesado (3 minutos), utilizar jqplot se hace más rápida a ser generado en el ordenador cliente. En un ordenador actual es instantáneo, en OrangePI es bastante más rápido.
  • Aunque los datos se registran casi cada minuto, en los gráficos se muestran cada hora (es bastante fácil modificarlo).
Existen otros cambios, pero son a nivel de programación.
He utilizado la Rasbperry Pi Modelo B con 512 M de memoria RAM, y le he instalado Debian 9.
Como podéis imaginar con esta placa instalar un servidor X ,se le hace algo pesado funcionar, además tiene instalado un servidor WEB y un servidor FTP.
Para solucionar esto el sistema solo arranca en modo consola, que ahora mucha memoria.
También se añadió un servidor SSH para configurar todo desde otro ordenador, es bastante más práctico.
En el arranque en modo consola, el tty1 arranca el programa SerialSensorWEB.py , es el encargado de capturar los valores que le proporciona el receptor de sensores, además genera la página WEB que muestra los valores de los 2 sensores externos.
El programa está realizado en python  y muestra los valores en el terminal.


La muestra de temperaturas y gráficos se realizan de 3 formas diferentes.




Cada vez que actualizo el servidor, siempre intento retocar el código del servidor de temperatura.
Esto de ver el código escrito 3 años antes, tiene su aquel... no te acuerdas de lo que has escrito, y vuelves a reinterpretar lo que has querido hacer, es un ejercicio bastante bueno, y de paso te pones al día en programar en python. ;)

Este modelo de Rasbperry Pi tiene ya 14 años, y se nota. En cuanto pueda migraré todo a Orangepi-PC es bastante mejor.


PROGRAMAS

Saludos
Juan Galaz

Bibliografía:

http://seta43.duckdns.org/webgra.html
http://seta43.duckdns.org/jsplot.html


sábado, 5 de septiembre de 2026

Antena YAGI - 145 MHz (2m) y 438 MHz (70 cm) , con cinta métrica.

  Página principal

Antenas
Antena 145 MHz (2m) y 438 MHz (70 cm)
Yagi

Esta antena yagi es para 2m  y 70 cm, y está realizada con cinta métrica.
Se encuentra en la página :  https://www.thingiverse.com/thing:4177081  .
Todas las piezas está impresas en PLA, y tienen la forma siguiente:

Se montan de la siguiente forma:


Diseño:

Posición de la longitud El (desde el borde de 1 elemento hasta el borde del siguiente)
1  1032    0
2  337     27
3  313     158
4 1017 180 (longitud de extremo a extremo con espaciado de 5 mm)
5  312     254
6  926     313
7  298     357

Materiales:

Tubería de PVC 20 mm (espesor de la pared 1,2 mm)
Ancho de cinta de medición 12,5х0.1 mm de longitud 5m
Tornillos M3 = x9
M3 nueces = x9
Cable coaxial





Pruebas con el NANOvna.







Pros:  La antena funciona y es bastante directiva, además se puede plegar bastante bien si problemas de romperse.

Contras:  El diseño de las piezas en PLA se pueden mejorar, si intentas meter la cinta métrica por la pequeña abertura se termina rompiendo con cualquier roce.  

Si hay poco viento la cinta métrica se mantiene recta, pero con algo de viento las cintas se van de un lado a otro.


Conclusiones:
Se debería rediseñar todas la piezas de PLA para su mejor funcionamiento, por lo demás otra antena mas.
También deberías probar a cambiar la distancia entre elementos para ajustar la antena.

Saludos.
Juan Galaz



Bibliografía:

https://www.thingiverse.com/thing:4177081 


martes, 4 de agosto de 2026

Creador de siluetas Gambas con IA

 

Creador de siluetas
Gambas (Visual Basic Linux)


El otro día necesite tener un mapa de España con valores vectorizados, pero no lo encontraba.
Cuando se tiene una necesidad de algo y no existe, se empieza a pensar y eso es bueno.
Después de alguna experiencia con la IA de Google, decidí utilizarla para crear un pequeño programa en Gambas para generar coordenadas de un mapa.
Al utilizar la IA  para crear el programa, se reduce considerablemente el tiempo de programación.
Le dices que te cree un programa gambas que tenga un menú que tu desees, unos componentes  como Botones, Áreas gráficas, ListBox, etc... ,  y genera todos los procedimientos. También le puedes pedir que en la área gráfica muestre una imagen al iniciar el programa, y todo te lo hace ella automáticamente.
Al ser Gambas un programa bastante parecido a Visual Basic, intenta algunas veces de utilizar sentencias de VB.
Este es el momento que el programador con ciertos conocimientos de Gambas empieza a rectificar bastantes errores que la IA introduce. Por lo cual debe haber siempre un programador detrás.



El programa funciona de la siguiente forma:
-Cargar un mapa con una resolución de 800x600
-Si ha cargado algún datos de coordenadas, las borras con ClearList.
-Con el botón izquierdo vas marcando el perfil del dibujo, al principio dará error de que necesita 2 puntos para dibujar una recta. Después de 2 punto veremos como dibuja la línea.
-Si el perfil de líneas es discontinuo, como saltar a unas islas, deberemos marcar el primer punto pulsando el botón derecho del ratón.
-Cuando se ha terminado , se guardan los datos de coordenadas.

Los datos guardados se pueden utilizar luego en cualquier programa.
El programa es simple, pero funciona.

VIDEO


PROGRAMA


Un saludo
SETA43