miércoles, 23 de junio de 2021

WS2812B - ARDUINO - Reloj

 

Página principal

WS2812B

ARDUINO

Reloj


Estaba yo el otro día navegando por la red y vi un vídeo de como hacer un reloj con una tira de LED.
El vídeo está realizado por MIRANDA, un español que hace vídeo en inglés, desde luego podemos observar que los vídeos en ingles tienen bastantes más visualizaciones. Al principio no sabía de donde era Miranda, pero el acento de su inglés le delató. Hace unos vídeos muy buenos y bien explicados.
Como no sabía de este tipo de diodos LED, me sorprendió el poder manejar un montón de LED con solo una línea de comunicaciones. Este diodo WS2812B tiene los dos pins de alimentación, y dos pins para los datos, uno de entrada y otro de salida.
Todos los diodos se colocan en serie, por lo cual los datos se transmiten desde el primer diodo hasta el último. Cada diodo se queda con los primeros 3 bytes que le llegan por el pin de entrada (DIN), y transmite los siguientes bytes al siguiente diodo mediante el pin de salida (DOUT).
Después de haber pasado un tiempo, si no se genera ninguna señal se visualizan los datos en los diodos.






Como se puede observar en la línea de tiempos, cada diodo se queda con los primeros 3 bytes que le llegan por el pin de entrada (DIN), y transmite los siguientes bytes al siguiente diodo mediante el pin de salida (DOUT).


Transmisión de 1 byte.



Transmitiendo bit 1.



Transmitiendo bit 0.

Los diodos se disponen en conjuntos de 7, cada dígito se compone de 7 elementos.
La disposición de los diodos es de 3 lineas:
    1ª línea de dos diodos, dirección de arriba hacia abajo.
    2ª línea de tres diodos, dirección de abajo hacia arriba.
    3ª línea de dos diodos, dirección de arriba hacia abajo.
Como son 4 dígitos se colocan en serie los 4 dígitos.

Una vez que se ha construido el circuito de los diodos, no toca construir el armazón de los diodos.
Cada tira de LED tiene un ancho de 10 mm, como son 3 tiras, la anchura de cada segmento es de 30 mm. Entre los dígitos de horas y minutos se colocan un LED que serán los dos puntos que parpadean cada segundo.

Todo el conjunto se une con un armazón que junta los 4 dígitos y los puntos.

Se diseña en 3D y se imprime en PLA.
Si colocásemos solo los segmentos, veríamos que no se ven bien definidos los dígitos. Para solucionar esto, colocamos un papel vegetal o semitransparente que perfila los dígitos.
Si ahora tuviese que volver a construir todo de nuevo, lo haría de una sola pieza.
También emplearía PLA blanco, refleja mejor la luz de los diodos.


Una vez construidos los display del reloj, nos toca pasar a la parte de programación.
En esta ocasión vamos a utilizar el Arduino, y empleamos la librería Adafruit NeoPixel library.
Esta librería es simple y fácil de utilizar, solo debemos de indicar el pin de salida de datos, en nuestro caso hemos utilizado el pin 13, además debemos indicar el numero de LED de la tira, y el tipo de modelo de la tira.
Adafruit_NeoPixel pixels(29,13, NEO_GRB + NEO_KHZ800);
Iniciamos la librería.
pixels.begin();
Indicamos el color de cada LED.
pixels.setPixelColor(2, pixels.Color(BRIr,BRIg,BRIb));
Una vez indicados todos los colores de cada LED, debemos indicar a la librería que mande la información a la tira de LED.
pixels.show();

He añadido 3 botones, 2 para cambiar la hora y los minutos, y el 3º para indicar el color y el brillo.
Debido a que estos modelos de diodos están pensados para verse durante el día, deben producir mucha luminosidad. El problema de este montaje es el alto consumo de los 29 LED.

En modo de luminosidad alta en color blanco, la intensidad es de 660mA, en intensidad baja es de 110.
Si queremos colores, verde, rojo o azul, el consumo va desde los 270 mA con luminosidad alta, a los 60 mA a luminosidad baja.
Debemos recordar que el USB 2.0 solo proporciona una corriente máxima de 500mA, por lo cual deberíamos utilizar una fuente externa.

La exactitud de este reloj no es precisamente buena, el montaje es solo una prueba del diodo WS2812B.
Para los que requieran un reloj preciso, les recomiendo uno de mis anteriores montajes:

remson.html

marelo.html




No he querido realizar el esquema debido a su simplicidad.
El pin 13 del arduino al DATAIN de la tira de LEDs.
Y los tres botones a los pins A0, A1, A3 del arduino.
La alimentación de 5V y GND a los pins del arduino.

Este montaje también se puede cambiar para hacer un marcador deportivo.

PROGRAMA_LIBRERÍAS

VIDEO

Saludos.
Juan Galaz

Bibliografía:

https://github.com/adafruit/Adafruit_NeoPixel

https://www.youtube.com/watch?v=4z82I-032zs

remson.html

marelo.html

miércoles, 9 de junio de 2021

Instalación de android-studio-ide en Debian10 y adt-bundle-linux en Debian9

  Página principal

Instalación
android-studio-ide en Debian10
y
adt-bundle-linux en Debian9


En un momento dado tenía que realizar un programa android, Balanza con XFW-HX711 ESP32 - Bluetooth, Interface Android.
Hacía 5 años que no programaba nada en android, y para colmo había formateado el Debian 9 donde lo había programado.
Desde entonces habían cambiado muchas cosas, el paquete adt-bundle se había dejado en el olvido y la última versión databa del 2014
Me tocó dos cosas, instalar en una partición Debian 9, para luego instalar adt-bundle-linux-x86-20140702.zip , y actualizarlo con el ADT-23.0.6.zip .
Y lo peor de todo, acordarme de como se programaba, aunque tenía mis ejemplos anteriores de hace 5 años.
Intenté instalar
adt-bundle-linux en Debian 10, pero fué imposible, creo que por la versión que tiene de Java.
También intenté instalar
android-studio-ide en Debian 9, pero también fue imposible.
He realizado 3 video-tutoriales, el primero es la instalación de adt-bundle-linux en Debian 9, el segundo la instalación de android-studio-ide 17 en Debian 10, y la tercera android-studio-ide 20 en Debian 10.
He instalado dos versiones de android-studio-ide en Debian 10 debido a que mi ordenador es modesto 8G y procesador A6 (2 núcleos), y la versión 20 es bastante pesada, en mi ordenador se ralentiza mucho.
En Debian 10 debemos preparar el equipo con los programas necesarios:
Instalar Java en su última versión
    sudo apt install openjdk-11-jre
Habilitar la arquitectura 32 bits para sistemas de 64 bits
    sudo dpkg --add-architecture i386
    apt update

Instalar las siguientes librerías para sistemas de 64 bits
    sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
Estas instrucciones las he sacado de: https://www.gestionatuweb.net/android-studio-en-debian-10-buster-y-derivadas-no-snap-ni-flatpak/

Para la instalación de adt-bundle-linux-x86  recomiendo ver el tutorial que hice hace 6 años:
15/04/2016 - Instalando SDK de android para programar aplicaciones. Instalación

Espero que le guste estos 3 pequeños tutoriales.
La duración real de los vídeos se ha recortado para que no se haga pesada su visión.
En vídeos de tutoriales suelo realizarlos a 6fps, de esta forma se reduce mucho su tamaño, y quedan bastante bien.

Instalación de adt-bundle-linux en Debian 9. VIDEO1
Instalación de android-studio-ide-173.4819257 en Debian 10. VIDEO2
Instalación de android-studio-ide-202.7351085 en Debian 10. VIDEO3

En general muchos de estos vídeos los he realizado para mí, de esta forma no tengo que volverme loco en pensar cuando tenga que volver a trabajar en Android.

 
Saludos.
Juan Galaz

Bibliografía:
android.html
https://www.gestionatuweb.net/android-studio-en-debian-10-buster-y-derivadas-no-snap-ni-flatpak/
https://developer.android.com/studio/archive



viernes, 4 de junio de 2021

INTERFACE ETHERNET CON UNA VIEJA TARJETA DE RED (NIC) ISA 3Com (3c509) Y EL MICROCONTROLADOR 16F877A


INTERFACE ETHERNET CON UNA VIEJA TARJETA DE RED (NIC) ISA
 3Com (3c509)
Y EL MICROCONTROLADOR 16F877A

Ing. Alfredo Segura
México, 2017


Hace algunos años pude realizar el proyecto planteado por jean-pierre MANDON en 2001 “Interfac IP sur carte reseau ISA” y luego modificado y reacondicionado por Tomáš Lorenc OK1VCF en 2005, para finalmente quedar como a continuación se describe:

Es cierto que hoy día (2021) existen muchos dispositivos electrónicos para desarrollar proyectos tipo IoT, tales como el ESP8266, el ESP32, WizNet, etc., sin embargo el reto era incorporar una vieja tarjeta ISA de Computadora de Escritorio la 3Com 3C509 la cual tiene una interface Ethernet y ser controlada por un microcontrolador.

En este proyecto, como en el original he usado el PIC16F877A, el cual tiene las suficientes terminales para controlar los pins del puerto ISA de la tarjeta 3Com.

Al conectar por cable de red el proyecto terminado a a un HUB Ethernet, se adquirirá la IP que ha sido grabada en el conjunto PIC-NIC, por ejemplo 192.168.0.7 y es conveniente dejarla como reservada en el Modem que proporciona la conexión Internet a la residencia del entusiasta electrónico. Lo mismo ocurre con la Máscara de Red y con la Puerta de acceso.

El PIC 16F877A admite las señales de 3 sensores: Humedad, Temperatura y Presión Atmosférica. Éstas señales se deben procesar en un módulo electrónico separado y luego ser enviadas al PIC a través del puerto serial RS232, mediante un pack debidamente construido, para que sea incorporado a la pequeña página web que se construye en el PIC haciendo uso de un archivo incluido “wx₂.inc” y la cual muestra en un navegador los datos de la Temperatura, Humedad y Presión.

Otro archivo incluido, el “p3c_4bsm.inc” proporciona el icono para la página web, diseñado por su creador original.


Para fines de funcionalidad inmediata, yo he simulado esos 3 sensores usando una pequeña tarjeta electrónica donde incorporé un PIC16fF28A el cual genera el pack en intervalos regulares y los envía a las entradas Tx y Rx del PIC16F877A.

Estoy anexando los programas en ASM del PIC16F877A denominado Pic3C3.asm y el del PIC16F628A (16f628A_wx1.c), los diseños PCB de ambas, diagramas y fotos del proyecto terminado.

También se anexa el PDF de la tarjeta NIC 3Com.

La tarjeta se alimenta con 12VCD, y cuenta con un regulador de 5VCD (LM7805), para alimentar ambos PIC y la tarjeta 3Com.

Cuenta también con un CI RTC (Reloj de Tiempo Real DS1302), el cual proporciona la fecha y lo hora de la zona donde se están tomando los datos meteorológicos.

No se usa un convertidor de niveles RS-232 a TTL/CMOS, tal como el MAX32, puesto que se usa la interface directa entre ambos PIC’s, el 16F628A y el 16F877A desde sus respectivas terminales Tx/Rx.

Así que si hay algún entusiasta que desee proporcionar esos datos desde una interface serial RS-232 de +12/-12V deberá adicionar el convertidor de niveles correspondiente.




Tablilla Funcional


Diagrama Pic3C3


PCB Pic3C3



 
PCB 16F628A_wx2

Ing. Alfredo Segura
México, 2017

 

jueves, 3 de junio de 2021

Balanza con XFW-HX711 - ESP32 - Bluetooth - Interface Android


Balanza con XFW-HX711
ESP32 - Bluetooth
Interface Android


Hace unos años (6) , había trabajado con dispositivos  Bluetooth, utilizaba arduino y el módulo HC05.
Marcador controlado por bluetooth.
El módulo HC05 transmite señales con protocolo serie mediante el bluetooth.
Al disponer el ESP32 de interface interna  bluetooth, se puede utilizar para transmitir datos.
Había realizado una balanza con arduino, y posteriormente con el ESP32, en los dos casos la representación se hacía en un OLED.
Se me vino a la cabeza la idea de transmitir el peso mediante bluetooth, para luego representar los datos en un móvil tipo android. Además me servía de practicas con el ESP32 y el bluetooth.
En cuanto a la programación en la parte del ESP32 fue bastante fácil, existen muchos ejemplos.
Para no complicar mucho la programación, no he colocado contraseña en la báscula.


Circuito montado.

//_____HX711______________
#include "HX711.h"
const int DOUT=16;
const int CLK=17;
HX711 balanza;

float peso;
#define AJUSTE 1977700
char L4_peso[25];

//_____Bluetooth____________
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;


#define PIN_LED 2

char VARI[100];
char mibuffer[20];
char TITULO[]="PESO_BT_seta";
int timePeso=TPESO;
......
 SerialBT.begin(TITULO); //Bluetooth device name
......
Le damos el nombre de  "PESO_BT_seta"   como nombre de la red Buetooth


Las pruebas se hicieron con el programa Serial Bluetooth

Antes de conectarse con el programa debemos sincronizar el Dispositivo Bluetooth en ajustes de android.
Como podemos observar se retransmiten los datos del peso cada 0.5 segundos.

La explicación de la calibración del módulo de peso se encuentra en bmp180.html .
Viendo que todo funcionaba correctamente, la segunda parte era la programación en el android.
Esta parte me ha costado bastante, hacía 5 años que no programaba nada en android, y para colmo había formateado el Debian 9 donde lo había programado.
Me tocó dos cosas, instalar en una partición Debian 9, luego instalar adt-bundle-linux-x86-20140702.zip , y actualizarlo con el ADT-23.0.6.zip .
Y lo peor de todo, acordarme de como se programaba, aunque tenía mis ejemplos anteriores de hace 5 años.
Después de arduo trabajo me salió este pequeño programa.


En la aplicación balanza seleccionamos el adaptador.


El programa balanza funcionando.



Circuito y programa balanza funcionando
.

Espero que les guste este programa y que les sirva para los suyos.

Programa Arduino ESP32
Programa Android APK  y fuentes ( Eclipse - Linux Debian9 32bits)


Saludos.
Juan Galaz

Bibliografía:
https://www.industrialshields.com/es_ES/blog/blog-industrial-open-source-1/post/esp32-wifi-bluetooth-133
https://www.juanjobeunza.com/esp32-ble/
https://www.prometec.net/esp32-serial-bluetooth/
http://kio4.com/arduino/180_Wemos_Bluetooth_LED_Pulsadores.htm
http://kio4.com/arduino/150_Wemos_BluetoothClasico.htm
espgrs.html
android.html
androg.html
http://cursoandroidstudio.blogspot.com/2015/10/conexion-bluetooth-android-con-arduino.html
http://solderer.tv/data-transfer-between-android-and-arduino-via-bluetooth/