jueves, 30 de abril de 2020

JAVA - Coordenadas en un mapa Localización de municipios


JAVA
Coordenadas en un mapa
Localización de municipios

En esta ocasión junto los dos anteriores programas:
Coordenadas en un mapa. MAPA
Municipios de España. MUNICIPIOS
Teníamos una base de datos con todos los municipios españoles, en esta base de datos venían las coordenadas de latitud y longitud.
Con esa información de coordenadas, las transformamos en pixel de pantalla, donde dibujamos un cuadrado.

También tenemos que tener en cuenta que la tierra no es plana, y los mapas no son demasiado precisos, por lo cual la traslación de las coordenadas grados decimales a pixel de pantalla, no son lo exactas que deberían ser.
Si la escala del mapa es grande, el error será grande.

Debo pedir perdón a los de las islas Canarias, debido a que el programa debía de ser simple, no están implementadas las islas.
Los grados que proporciona el programa son decimales, son los más fáciles de entender, además son los que utiliza Google Maps.
Como la base de datos de municipios es antigua, los datos de habitantes no serán demasiado exactos.


Programa funcionando.



PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


lunes, 27 de abril de 2020

JAVA-Coordenadas en un mapa


JAVA
Coordenadas en un mapa

En este intento de aprender a programar en JAVA, creo un visor de coordenadas en un mapa.
Existen  dos sistemas de notación: grados sexagesimales o grados decimales.

"
Grados sexagesimales


El sistema sexagesimal es el método tradicional usado en los mapas impresos, plegables, libros, etc.
Consiste en tres grupos de valores: grados, minutos y segundos.
Por ejemplo el Capitolio de La Habana está situado en los: 23° 08' 06'' N 82° 21' 34'' W

Grados decimales

El sistema decimal es muy empleado es programas y aplicaciones de mapas en la red como Google Maps, OpenStreetMaps, además en los sistemas de navegación por GPS.
Se separa la parte entera de la fraccionaria con una coma y se transforman los minutos y segundos en números decimales.
Por ejemplo a la misma ubicación anterior le corresponde en formato decimal: 23.134999, -82.359444  
"


https://norfipc.com/herramientas/convertir-grados-geograficos-minutos-segundos-decimales.php

También tenemos que tener en cuenta que la tierra no es plana, y los mapas no son demasiado precisos, por lo cual la traslación de las coordenadas de pantalla de una imagen plana a coordenadas en grados decimales, no son lo exactas que deberían ser.
Contra más grande sea el mapa, el error será más grande. En un mapa de España puede ser el error de hasta 20Km por pixel.

Entendiendo lo que se puede esperar en exactitud de este programa, realizo el programa que muestra las coordenadas en un punto de un mapa de España cuando se pulsa el ratón sobre un lugar de la imagen.
Debo pedir perdón a los de las islas Canarias, debido a que el programa debía de ser simple, no están implementadas las islas.
Los grados que proporciona el programa son decimales, son los más fáciles de entender, además son los que utiliza Google Maps.


Programa funcionando.

Está realizado en Debian10_64bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian9 32bits .
Tenéis que tener en cuenta, que por defecto netBeans utiliza la versión JDK 11, la versión mayor que tiene instalado el sistema.
Lo normal es que la versión que tengáis instalado en vuestro sistema sea la versión  de Java 8, la mas extendida.
Cambiar en propiedades del proyecto en netBeans  a la versión JDK 8, y vuestro programa no tendrá problemas en cualquier sistema operativo.


PROGRAMA conProyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz


jueves, 23 de abril de 2020

JAVA - Base de datos autores, SQLite

Página principal

JAVA
Base de datos autores
SQLite

Sigo con el trabajo de portar antiguos programas realizados en C a JAVA.
Esta vez es un base de datos SQLite,  para consulta de escritores.
En un antiguo programa lo había realizado en C  para Linux  dbautor.html, y para Windows autoresw.html .


En esta ocasión la programo en Java en mi intento de aprender a programar en este lenguaje.
A pesar de existir mucha documentación sobre Java y SQLite , es difícil buscar soluciones concretas , o está cortado el código, o no funciona.
Lo normal es que las dll estén instaladas en Windows, pero si tienes algún problema al respecto, se pueden bajar de: https://www.sqlite.org/index.html
Sigo pensando que es mucho mejor programar en C que en Java.
La única y gran ventaja que tiene Java sobre C, es que no tienes que tocar ni una sola línea de código para que funcione el programa en todas las plataformas.


Linux.


Windows10

Está realizado en Debian10_64bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian9 32bits, .


PROGRAMA con Proyecto netBeans

PROGRAMA_EXE

Saludos.
Juan Galaz

Bibliografía:

https://javapuntes.wordpress.com/2014/01/31/instalar-y-usar-driver-jdbc-sqlite-en-netbeans/
https://serprogramador.es/como-conectar-y-utilizar-java-con-sqlite/
https://professor-falken.com/programacion/java/como-conectar-java-a-una-base-de-datos-sqlite/

domingo, 19 de abril de 2020

JAVA - Municipios de España


JAVA
Municipios de España

En mi intento de coger el gusto al Java, y mira que le pongo ganas, sigo con un anterior programa realizado para android,  androj.html .
Este programa es una especie de base de datos que busca los municipios de España.
El fichero con la base de datos de municipios se llama municipios0.txt que se incluye en el propio programa dentro de la carpeta de recursos internos llamada datos.
En esta carpeta interna  datos, incluyo también un icono de representación del programa, y un fondo para que quede más estético el programa.
Al no saber mucho de Java, y provenir de C o Basic, el manejo de ficheros se hace de lo mas lioso.
En Java necesitas abrir un descriptor de ficheros FileReader , y un BufferedReader . En C con openFile vale, se pensarán los diseñadores de Java que los sistemas operativos no tienen como mínimo dos buffer para que el acceso sea rápido, además de el de el propio disco.
También te obligan a comprobar con try que la operación no tuvo errores.
Otras de las sorpresas que tuve y que me llevo tiempo encontrar el error fue la función substring.
Esta función extrae un trozo de una cadena, en mi caso era xtmp=tmp.substring(0,25); , para que los campos largos me los acortara.
El problema era que unas veces me funcionaba y otras no. Estuve tiempo hasta que descubrí que no comprobaba el tamaño de la cadena de origen. Entonces para que sirven los String, si en cosas como esta no comprueban el tamaño.
Tuve que solucionarlo con: int z=tmp.length();         if(z>25) z=25;         xtmp=tmp.substring(0,z); .
Creo a mi parecer que en Java se complican demasiado utilizando para todo herencias y clases. Pero esto es lo que hay.
Pero dejémonos de quejas sobre Java y continuemos.

He realizado dos programas que hacen lo mismo.
El primero utiliza referencias para colocar los diferentes elementos gráficos en la ventana principal.
El segundo utiliza coordenadas absolutas para colocar los elementos gráficos. Esto es debido a que quería colocar un fondo en la aplicación para que quedara más estética. También  implica utilizar absolutelayout que debes incluir en el programa.
El botón de Maps solo funciona en Linux, debido a que abre el navegador firefox con la coordenadas, en Windows se podrá hacer, pero lo he dejado como tarea para otros.



Normal.
Con absolutelayout y fondo.

Está realizado en Debian9_32bits comprobado en Windows10_64bits , Windows7_32bits, WindowsXP y Debian10 64bits, .


PROGRAMA


Saludos.
Juan Galaz


viernes, 17 de abril de 2020

JAVA - Cálculo bobinas núcleo de aire



JAVA
Cálculo bobinas núcleo de aire


En un programa anterior  androi.html  había realizado un programa que calculaba la inductancia de una bobina con núcleo de aire.
Estaba realizado para la plataforma Android, y como es normal en Java.
Como estaba en la época de programar en Java, y  es  fácil pasar de Android a PC, en un rato lo he pasado.


Lo mas difícil fue insertar la imagen en el programa, pero después de ver unos videos que empleaba un texto con imagen de fondo, la programación se hizo rápida.

Una cosa que me ha pasado y que quiero comentar, es el problema de que cuando genero el archivo *.jar desde netBeans 11 , solo me funciona en Debian10.
Pero si lo genero tanto en Windows10_64bits como en Debian9_32bits, me funciona en cualquier plataforma, incluso WindowsXP.
Aunque la tendencia es pasar todas las aplicaciones a 64bits, tengo la sensación de que funciona todo mejor y mas rápido en las plataformas de 32bits.

PROGRAMA


Saludos.
Juan Galaz

Bibliografía:
https://www.youtube.com/watch?v=xGzeEUHcsj8

martes, 14 de abril de 2020

Arduino. Control salidas realizado con JAVA y NetBeans


Arduino

Control salidas

JAVA - NetBeans


En el montaje anterior javled.html había realizado un controlador de salidas mediante una placa Arduino.
Estaba realizado en JAVA, había salido bastante frustrado en su realización.
Me había prometido no tocar durante bastante tiempo el JAVA, pero no pude resistir el probar el IDE netBeans para mitigar mi frustración.
Después de unos cuanto vídeos sobre este IDE, decidí hacer un video propio demostrando como portar mi anterior montaje a netBeans.
Lo difícil ya estaba realizado, la programación serie, solo me faltaba copiar y pegar parte del código de un proyecto a otro.
Le resultado ha sido bastante satisfactorio, además de útil para próximas aplicaciones.


Interface del programa.


Programa funcionando.

El programa esta realizado a base de botones, y no como en el anterior proyecto que eran JRadioButton.
Quizás los JRadioButton son en este caso mas intuitivos, pero mi intención era hacerlo de otro modo.








VIDEOTUTORIAL

PROGRAMA-JAVA-ARDUINO


Espero que les sirva este video tutorial para vuestros proyectos.

Saludos.
Juan Galaz

Bibliografía:

http://josedeveloper.com/2012/01/28/comunicacion-serial-java-y-arduino/

lunes, 13 de abril de 2020

Arduino control salidas con JAVA


Arduino
Control salidas

JAVA


En un montaje anterior arseta.html había realizado un controlador de salidas mediante una placa Arduino.
Estaba realizado en Gambas (VB Linux), en esta ocasión lo realizo en JAVA.
Normalmente o trabajo en C, C++, y Basic.
El trabajo que he tenido que realizar para programarlo en JAVA a sido increíble.
Intentar encontrar fuentes donde existan ejemplos sobre la programación de los puertos serie en JAVA a sido muy difícil.
Cuando encontraba algo, estaba semicompletado o no funcionaba realmente.
En una de mis múltiples búsquedas encontré:
    http://josedeveloper.com/2012/01/28/comunicacion-serial-java-y-arduino/
Además de proporcionar los programas completos, enseñaba como compilar los programas sin errores.


Circuito.


Programa JAVA funcionando.


En cuanto al programa realizado para el arduino, los códigos se basan en anteriores montajes míos, son del tipo: petición de dato a través del interface serie, y respuesta por parte del arduino a través del mismo interface serie.
Por ejemplo:
     SET 8,0          Apagar pin 8  

    SET 8,1          Encender pin 8
El que quiera puede mandar los comandos por el teminal y mandarlos con SEND, harán el mismo efecto.
En la parte del Arduino, está preparado para que entienda desde los pin 14 al 19, que corresponden a A0 - A5 , pero no están implementados en la interface JAVA.
El cansancio de programar este programa en JAVA, me hizo que no realizara la comprobación del estado real de las salidas, estaba harto.
Para colmo, en teoría se puede empaquetar todo en un único fichero *.jar, pero yo no lo he conseguido.
Para hacer mas fácil la compilación y ejecución del programa, he realizado dos ficheros de comandos BASH   ./copile y ./run .
Lo que parece fácil de C o C++ , se hace muy complicado en JAVA, como el manejo de ficheros o puertos serie.
Está realizado en el entorno de Debian 10 , por lo cual el arduino debe encontrarse en /dev/ttyUSB0 , lo normal es que  buscase automáticamente donde está conectado el arduino, pero lo he simplificado.
Si por casualidad estuviese en otro sitio, deberemos indicarlo en la línea de comandos. ./run /dev/ttyUSB1 .

Espero que les sirva este programa para vuestros proyectos.

PROGRAMA-JAVA-ARDUINO

Saludos.
Juan Galaz

Bibliografía:
http://josedeveloper.com/2012/01/28/comunicacion-serial-java-y-arduino/

domingo, 5 de abril de 2020

Osciloscopio Arduino JAVA - Processing - 183000 M/S


Osciloscopio

Arduino

JAVA - Processing


En uno de mis artículos anteriores había mostrado varios analizadores digitales - analógicos .
Entre ellos mostraba Arduinoscope que era un visualizador de 6 señales analógicas utilizando el arduino.

Era bastante útil para visualizar señales en baja velocidad, pero el arduino podía convertir señales A/D bastante mas rápido.
El programa arduinoscope estaba programado en JAVA utilizando una biblioteca llamada Processing. processing
Processing es un potente software dedicado a la producción de imágenes, animaciones e interactivos.
Processing está compuesto de todo un entorno de programación en JAVA, (muy similar al del arduino), incluidas un montón de librerías para el tratamiento de imágenes.
Se puede descargar de su própia página, y funciona en Windows, Linux y Mac, además de ser Open Source.

Mis conocimientos en JAVA son bastante limitados, y en muchos casos me vuelvo loco utilizando funciones que en C o C++ están permitidas y en JAVA no.
Me puse manos a la obra para transformar el Arduinoscope en un Osciloscopio de un solo canal, pero con muestreo de 180000 m/S.
En varios artículos había realizado un osciloscopio similar realizado en diferentes lenguajes de programación, Gambas, SDL, Xwin, wxwidgets.
Para mi es un reto programar en JAVA, pero los retos me gustan.

Como soy un tanto particular en la programación, he utilizado el editor Geany y la línea de comandos linux (Debian 10) para compilación (copile) y ejecución (run).
También he colocado todos los archivos en un solo directorio, incluidas las fuentes (un formato de fuentes de lo mas particular formato vlw) .
Los purista me meterían a la cárcel, pero bueno soy autodidacta, y se me puede perdonar.
Forma de onda en mi osciloscópio. En un oscilocópio comercial.

Señal de 5000 Hz.

El muestreo máximo que permite el arduino en modo Fast es de 183000 m/S , con una resolución de 8 bits.
A esta velocidad la exactitud de la conversión A/D no es muy precisa, pero suficiente.



Como se puede ver he colocado una resistencia entre la entrada A1 y los 3,3V, y esto tiene un motivo.
Resultaba que al hacer pruebas de medida en DC, las medidas no eran correctas, eran algo inferiores.
Revisando voltajes por el circuito descubrí que la tensión en el arduino nano  no era de 5V , era de 4,7V y alteraba todas las mediciones.
Mirando los esquemas del arduino UNO y el arduino NANO , había diferentes formas de alimentar el micro. El primero utilizaba un transistor sin caída de tensión, y el segundo un diodo que hacia caer la tensión entre 0,3V a 0,7V . Este cambio en la alimentación produce errores de lectura .
Para solucionar este problema, realizo una lectura de referencia de los 3,3V en el pin A1. Con esta lectura de referencia calculo la lectura real de la entrada A0.

Espero que le haya gustado este proyecto.
Ha sido mas una lucha por aprender JAVA que por realizar el osciloscopio.

VIDEO

PROGRAMA

Saludos.
Juan Galaz




Bibliografía:
https://github.com/konsumer/arduinoscope
https://processing.org/download/

viernes, 3 de abril de 2020

ARDUINO - Lector de código de barras


ARDUINO

Lector de código de barras



Intentado utilizar el montaje del tacómetro, se me vino a la cabeza hacer un lector de código de barras.
Debía ser fácil  pero no fue así.


Imprimí unas etiquetas con un tamaño bastante grande.
Además utilicé una impresora láser para que las definiciones y los contrastes fueran mayores.







Después de muchas pruebas, el mejor resultado de las ondas son las de las imágenes anteriores.
Los problemas son varios:
-El láser que debería ser un punto fino, en nuestro caso es una línea, no muy gruesa, que debes colocar en vertical, y aún así es demasiado ancha para leer barras normalizadas.
-Al utilizar un fototransistor que no tiene óptica de enfoque, el resultado no es muy preciso.
-La distancia entre el lector y el papel con el código de barras es variable, lo que dificulta su lectura al pasar el papel manualmente.

Comercialmente se utilizan pequeños espejos que se mueven para mover el láser y efectuar la lectura del código.
Con los nuevo modelos de códigos de barras, Código QR, la lectura se realiza con sensores CCD que leen los códigos como imágenes, para luego un programa decodifica el código.

No a sido un montaje exitoso, pero lo expongo como práctica de experimento fallido.



Saludos.
Juan Galaz




miércoles, 1 de abril de 2020

TACÓMETRO láser con Arduino


ARDUINO

TACÓMETRO


En el anterior artículo había usado un láser y un fototransistor para transmitir datos.
Tenía todo montado y debía de dar otra utilidad para estos componentes,  se me vino la idea de hacer un tacómetro.
La idea es la siguiente, lanzar el rayo láser sobre un motor girando, que depende la superficie donde incida, revota una cantidad de luz que es detectado por un fototransistor.
Se podría colocar cualquier tipo de LCD, pero tenía a mano una pantalla OLED 128x64, SSD1306Z, GM009605 , y la añadí a montaje.

Circuito eléctrico.


Circuito en protoboard.


Prueba del montaje.
Detalle del papel pegado.

Motor girando.


Pantalla indicadora del tacómetro.



PROGRAMA


Saludos.
Juan Galaz


Bibliografía:
  https://aprendiendoarduino.wordpress.com/2016/11/08/entradas-y-salidas-arduino/