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



jueves, 17 de noviembre de 2022

Mis Cámaras IP Cámaras de vigilancia

  Página principal

Mis Cámaras IP
Cámaras de vigilancia

Este es un recopilatorio de cámaras que me han dado, o cámaras que compro en un baratillo.
La mayoría son antiguas, por lo que sus características están desfasadas.


DCS-932LB1


Not shown: 998 closed ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Este modelo es bastante viejo y su resolución ya está desfasada.
Tiene conector de red y wifi.
En los modelos nuevos sus características han mejorado mucho.




YI HOME 12CN

Not shown: 996 closed ports
PORT    STATE SERVICE
21/tcp  open  ftp
23/tcp  open  telnet
80/tcp  open  http
554/tcp open  rtsp

El modelo 12CN  (resolución 720) está anticuado y no permite muchas opciones que los nuevo modelos tiene. Su conexión es mediante WIFI.
Al ser una cámara del modelo antigua y además es el modelo chino, no funciona con la aplicación de la APP android,  debemos bajar una versión antigua para poder configurar la cámara. Dispone de ranura SD para la grabación, y detector de movimiento.
Tiene visión nocturna al disponer de diodos de infrarrojos, al ser este modelo antiguo no se pueden apagar desde la APP.

Foto de desconexión para este modelo de los diodos IR para la visión nocturna.
La calidad es buena tanto en modo nocturno como en modo normal, además me imagino que los modelos actuales sean mucho mejores.




TL-SC2020N


Not shown: 996 closed ports
PORT      STATE SERVICE
80/tcp    open  http
443/tcp   open  https
554/tcp   open  rtsp
49153/tcp open  unknown

Este modelo es bastante viejo y su resolución ya está desfasada.
Tiene conector de red y wifi.
En los modelos nuevos sus características han mejorado mucho.
A pesar de que el puerto 554 esta abierto, no he conseguido que funcione la transmisión directa de video en modo rtsp.



e-CamView IP Camera

PORT     STATE SERVICE
23/tcp   open  telnet
81/tcp   open  hosts2-ns
8600/tcp open  asterix

Este modelo es bastante viejo y su resolución ya está desfasada.
Tiene conector de red y wifi, además de estar motorizada.
En los modelos nuevos sus características han mejorado mucho.

Este modelo tiene una resolución de 640x480, los modelos nuevos la resolución es HD y disponen de ranura SD.
Se configura bien en la APP o mediante navegador WEB.
Me gusta el modelo, pero su resolución es baja.




anyka


Bus 004 Device 003: ID 0525:a4a5 Netchip Technology,
Inc. Pocketbook Pro 903 / Mobius 2 Action Cam

Incluyo esta cámara, aunque es una cámara espía, para que tengáis cuidado, es un peligro.
Es una especie de colgador que tiene una cámara con buena resolución, y dispone de ranura SD para grabación.
Se conecta mediante wifi, ya sea directo al teléfono móvil, o mediante router.
El problema que tuve con esta cámara comprada en el rastro fue código QR, estaba dañado, y me costó configurar.
Se configura mediante la APP SIPC en el móvil, y su calidad de vídeo el buena.



Saludos.
Juan Galaz




miércoles, 2 de noviembre de 2022

Debian 9 y 11. Radio por internet - Icecast - darkice - Mixxx - Butt

  Página principal


Debian 9 y 11
Radio por internet
Icecast - darkice - Mixxx - Butt
 


Debian 9 y Debian 11

Lo primero es instalar el servidor icecast que gestiona los flujos de audio que se transmiten a través de la red.
    apt-get install icecast2
En su instalación se nos pedirá el las contraseñas necesarias para la emisión, administración, repetidor, y source.
Si una vez instalado queremos cambiar algo en la configuración.
    sudo editor /etc/icecast2/icecast.xml
En mi caso estas son los principales puntos de mi configuración:

<clients>100</clients>
<hostname>localhost</hostname>
<port>8000</port>
<source-password>calamar</source-password>
<relay-password>calamar</relay-password>
<admin-password>calamaradmin</admin-password>


Para saber si el servicio icecast2 está funcionando, deberemos comprobarlo con:
    systemctl status icecast2
Si está funcionado no saldrá algo parecido a esto:

● icecast2.service - LSB: Icecast2 streaming media server
   Loaded: loaded (/etc/init.d/icecast2; generated; vendor preset: enabled)
   Active: active (running) since Wed 2022-11-02 11:39:13 CET; 1h 37min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 584 ExecStart=/etc/init.d/icecast2 start (code=exited, status=0/SUCCESS)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/icecast2.service
           └─610 /usr/bin/icecast2 -b -c /etc/icecast2/icecast.xml

Si no esta funcionando o queremos reiniciarlo debido a que hemos cambiado la configuración, arrancamos el servicio con:
    sudo /etc/init.d/icecast2 restart
También podemos arrancar icecast configurando el siguiente fichero
/etc/default/icecast2:
    sudo editor  /etc/default/icecast2
     y poner:
    ENABLED=true

Lo siguiente es instalar darkice.
    apt-get install darkice
Este programa captura todo lo que sale por nuestra tarjeta de audio y lo manda al servidor icecast.
Una vez instalado editamos su configuración.
El fichero de configuración lo vamos a crear en nuestro directorio de usuario. Yo lo hago con el editor pluma, vosotros podéis utilizar el que os guste.
   pluma
    ~/darkice.config

Mi configuración es la siguiente:

    [general]
    duration = 0 # duration of encoding, in seconds.
    bufferSecs = 2 # size of internal slip buffer, in seconds
    reconnect = yes # reconnect to the server(s) if disconnected
    realtime = yes # run the encoder with POSIX realtime priority
    rtprio = 3 # scheduling priority for the realtime threads

    [input]
    device = default
    sampleRate = 22050 # sample rate in Hz. try 11025, 22050 or 44100
    bitsPerSample = 16 # bits per sample. try 16
    channel = 2     # channels. 1 = mono, 2 = stereo

    [icecast2-0]
    bitrateMode = abr # average bit rate
    format = mp3 # format of the stream
    bitrate = 96 # bitrate of the stream sent to the server
    server = localhost
    port = 8000 # port of the IceCast2 server, usually 8000
    password = calamar # source password to the IceCast2 server
    mountPoint = radio # mount point of this stream on the IceCast2 server
    name = radio # name of the stream
    description = This is a streaming


Como usuario arrancamos darkice.
     darkice -c ~/darkice.config
Si queremos ver si funciona la radio, tecleamos en el navegador la siguiente dirección:
    http://localhost:8000/


Como yo he elegido en:
    device = default
En preferencias de sonido, en mi caso tengo:


El siguiente paso es instalar la mesa de mezclas mixxx.
    apt-get install mixxx
Desde la aplicación mixxx podemos transmitir nuestra radio.
En mi caso he añadido un micrófono USB y he tenido que hacer algún cambio en la configuración.
En dispositivo de salida Principal, elegimos default.
Debido a algunos problemas con la grabación del micrófono he tenido que cambiar algunas configuración, como por ejemplo Búffer de audio.


Intente configurar el micro de USB en las pestañas de Micrófono, pero funcionaba mal, o no funcionaba.
Después de bastantes pruebas, lo instalé en Auxiliar, ahora podía mezclar mi voz con la música.


Prueba con mi teléfono android, dentro de mi red, el funcionamiento de la radio.

Si queremos oir nuestra radio desde fuera de nuestra red local, deberemos configurar nuestro router y redireccionar el puerto 8000 hacia el ordenador servidor de la radio.




Debian 11

En Debian 11 existe un GUI para darkice llamado darksnow.
Se instala con:
   

apt-get install darksnow

Es bastante simple la configuración, y muy fácil de modificar.
Mi configuración es la siguiente:




butt
Los que no quieran utilizar darkice puede utilizar el programa
butt.
Se instala con:

apt-get install butt

Este programa funciona en modo gráfico y es fácil su configuración.









Después de todas las instrucciones para crear vuestra radio por internet, queda lo difícil, crear contenido.
Espero que os haya parecido interesante este artículo.



Saludos.
Juan Galaz



Bibliografía:

https://icecast.org/
http://www.darkice.org/
https://mixxx.org/
https://danielnoethen.de/butt/

https://www.sing-group.org/~lipido/blog/2012/01/10/hacer-streaming-de-spotify-en-ubuntu-1104-con-icecast2-darkice-y-pulseaudio/
https://federicosayd.wordpress.com/2007/10/12/una-radio-en-linux/
https://wiki.radioreference.com/index.php/Live_Audio/Ubuntu_Darkice