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

lunes, 28 de noviembre de 2022

Arduino - Receptor comercial de temperatura

  Página principal

Arduino
Receptor comercial de temperatura

Después de antiguos montajes de receptores de temperatura comerciales, he decidido reescribir el código.
El mayor problema es que los sensores de humedad se estropean con el tiempo, y miden mal.
El circuito es parecido al ard433.html, aunque yo lo tengo realizado en circuito impreso.



Lo primero se estudian las hondas recibidas para ver la estructura de los datos.
Ya con cierta experiencia es fácil encontrar los bits que corresponde a cada dato de humedad, temperatura, y canal.
Lo difícil sin documentación, es encontrar la forma en que hace la comprobación de errores.









Para medir los tiempos de cada tipo de bit (0 - 1), utilizo la interrupción en el pin 2.


#define IN_READ 2

//---Interrupcion--------------

void InumPasos()
{
  time=micros();        
  diferencia=time-timeU;
  Adiferencia=diferencia>>7;
  estadoDato=1;
salto:
  timeU=time;
}
//-----------------------------

void setup()
{
pinMode(IN_READ, INPUT);
 .......
  attachInterrupt(digitalPinToInterrupt(IN_READ), InumPasos, RISING);
 ....... 
}



Espero que estudiando el código podáis realizar vuestros propios receptores.
 

PROGRAMA


Saludos.
Juan Galaz


Bibliografía:
ard433.html
termot.html
temt3.html

martes, 22 de noviembre de 2022

Arduino - Alimentador de gato

  Página principal

Arduino
Alimentador de gato

Me habían pedido un circuito para poder alimentar periódicamente a unos gatos.
Lo primero que dije es que yo me comprometía a la parte eléctrica y de programa, pero no a la parte mecánica.
He realizado con arduino un circuito que mediante potenciómetros cambiar la vueltas por toma y el tiempo por toma.
Al no utilizar un reloj de tiempo real, no se puede garantizar que la alimentación de los gatos sea a la misma hora, pero si que sea cada un determinado numero de horas.







Este circuito funciona bien, pero se podría mejorar.
Hubiese sido una buena opción haber puesto micro-interruptores para cambiar las vueltas y el tiempo, pero en ese momento no los tenía.
También pensé en programar las vueltas y el tiempo desde consola serie, para luego guardar las variables en la EEPROM, pero pensé que para hacerlo más fácil era utilizar potenciómetros, que aunque sean menos precisos, son más fácil de programar.
Cuando vea la parte mecánica incluiré imágenes.
 

PROGRAMA


Saludos.
Juan Galaz