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