jueves, 19 de enero de 2023

Arduino - Comunicacion con wxpython

  Página principal

Arduino
Comunicacion con wxpython

En un anterior artículo había realizado una comunicación con el arduino empleando python en consola.
Ahora utilizo wxpython como inteface gráfica.


Para que se ejecute debemos tener instalado algunos paquetes:
apt-get install python3-wxgtk4.0 python3-serial

y añadir nuestro usuario a dialout
/sbin/usermod -a -G dialout usuario




El programa de arduino es sencillo.
// * seta43.duckdns.org

#include <Wire.h>
#include "ATH20.h"

ATH20 ATH;

int contador;

void setup()
{
  Serial.begin(9600); 
  while (!Serial); 
  Serial.println("ATH20 DEMO");
  ATH.begin();
}


void loop()
{
 float humi, temp;

  Serial.print(contador); 
 
  int ret = ATH.getSensor(&humi, &temp);
  if(ret)     // GET DATA OK
    {
        Serial.print(" - Humedad= ");
        Serial.print(humi*100);
        Serial.print(" %  Temperatura= ");
        Serial.print(temp); Serial.println("ºC");
    }
    else        // GET DATA FAIL
    {
        Serial.println("GET DATA FROM ATH20 FAIL");
    }
 
  delay(1500);

  contador++;
}




En la parte del ordenador con la librería wxpython, se complica un poco.
He utilizado dos formas de leer desde el puerto serie: mediante Timer e Hilos.
Mediante Timer la aplicación lee cada 200mS el puerto serie, y lo muestra en pantalla.
Para el segundo caso utilizamos Hilos (Thread), segundo programa en paralelo.
En un principio había representado directamente los datos desde el segundo hilo a la interface gráfica del primer hilo. Pero después de algunas prueba, y de aleatorias lecturas, algo fallaba y se bloqueaba el primer hilo. Al final utilicé un timer en el primer hilo para representar los datos que mandaba el segundo hilo.

Podría haber realizado un buscador automático de la puerto donde está el arduino, pero he preferido realizarlo manualmente para practicar con wxpython.


Espero que este ejemplo os sirva en vuestros proyectos.

PROGRAMA Y LIBRERÍAS


Saludos.
Juan Galaz


Bibliografía:


../pyleca/pyleca.html


domingo, 15 de enero de 2023

Arduino - Módulo XL-1278 - chip SX1278

  Página principal

Arduino
Módulo XL-1278
chip SX1278


Había leído sobre el chip SX1278 que con poca potencia podía alcanzar distancias de comunicación largas.




Cuando me llegaron los 2 módulos de comunicaciones XL-1278 monte uno como emisor y otro como receptor y me puse hacer pruebas.
Después de varías pruebas me di cuenta que no era como decían, la distancia de comunicación no llegaba a los 300m.
Algo había hecho mal, y me dispuse a estudiar los montajes.
Junto con el módulo venía una antena para soldar al módulo, y después de varías comprobaciones me di cuenta que la antena no correspondía a la frecuencia usada por el módulo 433MHz.
Yo tenía alguna antena de otros módulos que trabajaban a la frecuencia de 433MHz, y la cambie en el módulo XL-1278.
Al momento la señal recibida aumento bastante. Como solo tenía una sola antena, me he construido otra.



El primer montaje que he realizado es mandar un numero del 0 al 255 continuamente en el emisor.

En el lado del receptor he colocado un LED que cambia su intensidad dependiendo el numero que le llegue.


Como me era difícil estar mirando en el receptor los datos llegados he realizado un segundo montaje.
En el lado emisor he colocado un sensor AHT20. El modelo AHT2X dispone de sensor de humedad y temperatura.
Usa el bus I2C para la comunicación de datos con el arduino.
A4->SDA
A5->SDL
GND->GND
5V->VIN

Los datos de humedad y temperatura se leen y se mandan cada 1500mS, junto con una cabecera llamada SETA43, y un número de orden.


Como podemos observar el módulo AHT20 se alimenta a 5V, y el módulo emisor XL-1278 se alimenta a 3.3V.
Para evitar algún que otro problema en la alimentación del módulo emisor, he colocado un condensador de 100uF 5V.

En el circuito receptor he añadido un zumbador piezoeléctricos para emitir un sonido cada vez que recibe una señal.
Si los datos recibidos son buenos, (debe existe una cadena llamada SETA43), emite un tono de 1000Hz, de otro modo emitirá una señal de 500Hz a modo de error.



En la parte del receptor, además del sonido de llegada de datos correctos, he conectado un móvil donde tengo una aplicación tipo terminal, donde puedo ver los datos recibidos.


Después de montados los dos circuito, emisor y receptor, me fui a andar.
Dejando el emisor en la ventana y con visión directa, pude comprobar que la distancia de recepción superaba los 900m.
Me sorprendió que con la poca potencia que utilizaba el emisor, podía llegar tan lejos la señal, desde luego es un logro.

Hay que señalar que el módulo que:
1. La frecuencia del módulo inalámbrico SX1278 es de 433 MHz y 470 MHz, principalmente para China, el sudeste asiático, América del Sur y Europa del Este.
2. La frecuencia del módulo inalámbrico SX1276 es 868MHz y 915MHz, principalmente para Europa y América del Norte.

En un próximo montaje realizaré una comunicación bidireccional entre los dos módulos.


PROGRAMA Y LIBRERÍAS


Saludos.
Juan Galaz


Bibliografía:

https://how2electronics.com/interfacing-sx1278-lora-module-with-arduino/
https://www.electroschematics.com/rf-radio-frequency/
https://electronoobs.com/eng_arduino_tut97.php
https://cdn-shop.adafruit.com/product-files/3179/sx1276_77_78_79.pdf
https://www.semtech.com/products/wireless-rf/lora-connect/sx1278
https://oa.upm.es/44890/1/TFM_JOSE_DANIEL_RODRIGUEZ_MUNCA.pdf

https://github.com/adafruit/Adafruit_AHTX0
https://github.com/Longan-Labs/GROVE-ATH-RESOURCES

miércoles, 4 de enero de 2023

Arduino - Radar VL53L0X

  Página principal

Arduino
Radar  VL53L0X


Hace unos cuanto años realicé una especie de radar por ultrasonidos. Radar por ultrasonidos
En este montaje utilizamos el sensor VL53L0X para escanear el entorno.
En la página https://bitluni.net/3d-scanner había un montaje similar que utilizaba el ESP8266 y generaba un entorno 3D en una página WEB.
Lo bueno que tiene este proyecto es unos planos del mecanismo de colocación de los servos, estos los he imprimido en en la impresora 3D.








Para visualizar todo he creado un programa realizado en Gambas (VB para Linux)
Como vemos el resultado no es lo que esperaba, se parece demasiado al que nos encontrábamos con el montaje de ultrasonidos.
El haz de luz del láser no es demasiado estrecho, por lo cual no detecta detalles de los objetos, lo ideal sería un láser de haz fino.
También he descubierto que escanea mucho mejor en ambientes oscuros.
Esta conclusión le pasa al montaje del proyecto de donde he sacado los planos de las figuras 3D.



VIDEO DEL FUNCIONAMIENTO


PROGRAMA


Saludos.
Juan Galaz


Bibliografía:


https://github.com/pololu/vl53l0x-arduino
https://www.adafruit.com/product/3317
https://www.youtube.com/watch?v=vwUGPjQ_5t4
https://bitluni.net/3d-scanner
https://github.com/bitluni/3DScannerESP8266


jueves, 22 de diciembre de 2022

Arduino Sensor VL53L0X Medidor de distancias

  Página principal

Arduino
Sensor  VL53L0X
Medidor de distancias


El sensor VL53L0X mide distancias mediante un mini laser.
Para medir distancias el sensor lanza un pulso de luz hacia una superficie, y mide el tiempo que tarda en rebotar la luz.




Usa el bus I2C para la comunicación de datos con el arduino.

A4->SDA
A5->SDL
GND->GND
5V->VIN


La alimentación del chip es de 2.8V con un consumo de 19mA cuando hace una medida, en modo normal consume 19uA.
Para poder funcionar con el arduino el módulo dispone de un adaptador de voltaje, por lo cual se puede alimentar a 5V.










Pulso de luz durante la medida, solo se puede ver mediante cámara de teléfono móvil.



He utilizado dos librerías:
   - Adafruit_VL53L0X
   - Pololu
Personalmente me gusta la de Pololu por ser sencilla, aunque las dos funcionan bien.
En la librería Pololu es muy fácil ajustar la máxima distancia, así como la exactitud de la medida.


En próximos artículos utilizaré este sensor en algún montaje.

PROGRAMA

LIBRERÍAS


Saludos.
Juan Galaz


Bibliografía:


https://github.com/pololu/vl53l0x-arduino

https://www.adafruit.com/product/3317


Arduino Sensor AHT2X

  Página principal

Arduino
Sensor  AHT2X



Existen multitud de sensores de temperatura, pero este modelo AHT2X también dispone de sensor de humedad.
Usa el bus I2C para la comunicación de datos con el arduino.
A4->SDA
A5->SDL
GND->GND
5V->VIN


Se puede alimentar desde 2.0 V hasta 5.5V, y su consumo es de 23uA en medida.









Este sensor no necesita ningún ajuste por lo que es muy fácil de programar.
He utilizado dos librerías:
   - Adafruit_AHTX0-master
   - GROVE-ATH-RESOURCES
Personalmente me gusta la de grove por ser sencilla, aunque las dos funcionan bien.

En próximos artículos utilizaré este sensor en algún montaje.

PROGRAMA

LIBRERÍAS


Saludos.
Juan Galaz


Bibliografía:


https://github.com/adafruit/Adafruit_AHTX0
https://github.com/Longan-Labs/GROVE-ATH-RESOURCES

lunes, 12 de diciembre de 2022

Comunicación serie entre PC y Arduino, programación python.

  Página principal

Arduino
Python (PC) -> Arduino
Arduino -> Python (PC)
Comunicación serie

Aunque python no es mi lenguaje favorito, he de reconocer que es fácil realizar programas por la gran multitud de comunidad que está detrás.
El entorno de programación es Linux sobre la distribución Debian 11.

Para hacer uso de la comunicación serie, lo primero es descargar la librería serie de python.
    apt install python3
    apt install python3-pip
    pip3 install pyserial

Para la primera prueba creamos un programa en el IDE del arduino que transmita los datos del LDR al PC.





El programa es simple, al iniciar manda una clave par identificarse en la comunicación serie.
En un bucle continuo se mandan los datos cada minuto, con una secuencia numérica.

En la parte del PC, programación python, se busca entre todos los puertos serie, un dispositivo que mande la clave identificativa.
Una vez encontrado el dispositivo, empieza la lectura del puerto serie.
Cuando encuentra los comando apropiados los almacena.
En el momento que aparece el comando FINAL , se imprime todas las variables acumuladas.
He creado dos interfaces para el terminal, uno en blanco y negro y otro en color.



 También he añadido una barra a modo de gráfica , para mostrar el valor de la LDR.

Como segunda parte del proyecto , creo una comunicación desde el PC hacia el arduino.
En este caso enciendo dos LED colocados en los pins D2 y D3, cuando se pulsan las teclas 2 y 3 respectivamente.
Para este caso mando las ordenes D2on o D2off a través del puerto serie.
Interpretadas por el arduino encienden o apagan el LED colocado en el pin D2.



PROGRAMA1.     .PROGRAMA2

VIDEO DEL FUNCIONAMIENTO

Espero que este montaje os haya parecido interesante.


Saludos.
Juan Galaz



Bibliografía:

https://python-para-impacientes.blogspot.com/2016/09/dar-color-las-salidas-en-la-consola.html

miércoles, 7 de diciembre de 2022

Arduino Sensores comerciales de temperatura - rtl_433

  Página principal

Arduino
Sensores comerciales de temperatura.

rtl_433


Después de mi anterior artículo para recibir la señal de los sensores meteorológicos rec433.html , y con la espina clavada de no saber como era el modo de chequear errores, me puse a mirar por internet.
El que busca encuentra, y estaba cerca, estaba dentro de los repositorio de Debian 11, era el programa rtl_433.
Utilizando el receptor de televisión Realtek Semiconductor Corp. RTL2838 DVB-T , se podía recibir un montón de emisores comerciales de estaciones meteorológicas.
Era un filón, es muy buena la documentación que explicaba el protocolo, ahora puedo realizar el programa arduino que detecta errores.
En Debian 11, si queréis bajar las fuentes desde los repositorios, para compilar o ver sus ficheros,  tendréis que dar estas ordenes.
apt-get build-dep rtl-433
apt-get source rtl-433
cd rtl-433-20.11
dpkg-buildpackage -uc -b


seta@debian11:~$ rtl_433

rtl_433 version unknown inputs file rtl_tcp RTL-SDR SoapySDR
Use -h for usage help and see https://triq.org/ for documentation.
Trying conf file at "rtl_433.conf"...
Trying conf file at "/home/seta/.config/rtl_433/rtl_433.conf"...
Trying conf file at "/usr/local/etc/rtl_433/rtl_433.conf"...
Trying conf file at "/etc/rtl_433/rtl_433.conf"...
Registered 145 out of 175 device decoding protocols [ 1-4 8 11-12 15-17 19-21 23 25-26 29-36 38-60 63 67-71 73-100 102-105 108-116 119 121 124-128 130-149 151-161 163-168 170-175 ]
Detached kernel driver
Found Rafael Micro R820T tuner
Exact sample rate is: 250000.000414 Hz
[R82XX] PLL not locked!
Sample rate set to 250000 S/s.
Tuner gain set to Auto.
Tuned to 433.920MHz.
Allocating 15 zero-copy buffers
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : 2022-12-07 20:06:47
model     : TFA-Pool     Id        : 203
Channel   : 1            Battery   : 1             Temperature: 9.9 C        Integrity : CHECKSUM

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _


time      : 2022-12-07 20:06:47
model     : TFA-Pool     Id        : 203
Channel   : 1            Battery   : 1            
Temperature: 9.9 C        Integrity : CHECKSUM

time      : 2022-12-07 20:57:57
model     : AlectoV1-Temperature                   House Code: 51
Channel   : 3            Battery   : 1            
Temperature: 20.90 C      Humidity  : 49 %          Integrity : CHECKSUM

time      : 2022-12-07 20:51:57
model     : Prologue-TH  subtype   : 5             id        : 144
Channel   : 2            Battery   : 1            
Temperature: 20.10 C      Humidity  : 20 %          Button    : 1


time      : 2022-12-07 20:17:19                    brand     : OS
model     : Oregon-v1    SID       : 9
Channel   : 3            Battery   : 1
Temperature: 10.7 C       Integrity : CHECKSUM


time      : 2022-12-07 20:07:46
model     : Hideki-Temperature                     Rolling Code: 11
Channel   : 1            Battery   : 1            
Temperature: 9.4 C        Integrity : CRC

time      : 2022-12-07 20:17:39
model     : Hideki-TS04  Rolling Code: 0
Channel   : 2            Battery   : 1          
Temperature: 19.4 C       Humidity  : 30 %          Integrity : CRC

time      : 2022-12-07 21:07:10
model     : Prologue-TH  subtype   : 5             id        : 141
Channel   : 1            Battery   : 1            
Temperature: 20.50 C      Humidity  : 16 %          Button    : 0





Para mi modelo  TFA-Pool , el test de errores se hace mediante suma,  CHECKSUM.
TFA pool temperature sensor.

10 24 bits frames

    CCCCIIII IIIITTTT TTTTTTTT DDBF

- C: checksum, sum of nibbles - 1
- I: device id (changing only after reset)
- T: temperature
- D: channel number
- B: battery status
- F: first transmission


Es fácil de programar, y en mi caso si los datos son correctos se manda CHECKSUM=1 .

Espero que os haya gustado este artículo, y os recomiendo que probéis las señales recibidas en vuestra casa.
Lo curios del tema, es que también se reciben señales de los sensores de ciertos coches.

model     : Renault      type      : TPMS          id        : 330fb5
flags     : 36           pressure_kPa: 251.2 kPa   temperature_C: 11 C       mic       : CRC

model     : Toyota       type      : TPMS          id        : f13c3038
status    : 128          pressure_PSI: 34.500      temperature_C: 10.000     mic       : CRC

model     : Citroen      type      : TPMS          state     : c2            id        : 0f330778
flags     : 12           repeat    : 3             Pressure  : 233 kPa       Temperature: 15 C         maybe_battery: 51         mic       : CHECKSUM

model     : Nexus-T      House Code: 158
Channel   : 1            Battery   : 1             Temperature: 8.60 C


En este archivo os muestro las señales recibidas en mi casa.

En el programa del arduino he colocado un sensor de presión, por lo que si solo queréis ver los datos del sensor, debéis anular el código correspondiente al BMP180, es comentar 3 líneas.

PROGRAMA


Saludos.
Juan Galaz


Bibliografía:


https://github.com/merbanan/rtl_433
https://triq.org/rtl_433/
rec433.html