sábado, 30 de noviembre de 2019

Crear tutoriales grabando la pantalla en Linux

 Crear tutoriales

Vídeos de pantalla


En el proceso de crear tutoriales se necesita algún programa que capture la pantalla del ordenador.
En este sentido existe una variedad de programas que realizan esto:

Vokoscreen, Kazam, SimpleScreenRecorder, recordMyDesktop, ScreenStudio, Green Recorder, Open Broadcaster Software Studio

Recomiendo la página https://www.linuxadictos.com/grabar-pantalla.html que explica las características principales de cada uno.
Después de probar varios programas me he quedado con
Vokoscreen debido a que dispone de pausa en la grabación, una opción que me ha sido muy útil.
Dependiendo del tipo de tutorial que quieras hacer, puedes variar la velocidad de fotogramas por segundo (fps).
Para el tipo de tutorial que quería hacer, era sobre FreeCAD, no se necesitaba muchos fps, con 4 fps me sobraba, con lo cual se reduce mucho el tamaño del fichero resultante.

Configuración de Vokoscreen

Con una captura de video (4 fps, sin audio) con una duración de 37 minutos me produce un fichero de 32,4 Mbytes.
Después de editarlo con varios editores de vídeo, Kdenlive, OpenShot, Flowblade , me quede con este último
Flowblade.
Uno de los motivo de utilizar este editor de vídeo fue la posibilidad de poder crear perfiles de usuario bastante flexible.
El perfil utilizado para mi caso es de 1280x720, Paradigma de Disciplina, Fps:4.0, Pixel Orientación:1:00.
Aunque no sea el mas intuitivo, realiza muy bien su trabajo.


Flowblade trabajando.

El resultado es un fichero bastante grande 228 Mbytes.
Después de probar bastantes programas compresores descubrí el compresor de VLC.



Y el resultado sin sonido es de 15 Mbytes.



El resultado con sonido es de  34 Mbytes.

Lo curioso del caso es que el sonido se lleva mas de la mitad del fichero.

Este artículo es el resultado de muchas pruebas para reducir el tamaño de los ficheros resultantes, sin perder demasiada calidad.
Espero que les de ideas para sus tutoriales.


Saludos.
Juan Galaz



Bibliografía:
https://www.linuxadictos.com/grabar-pantalla.html
https://blog.desdelinux.net/top-5-para-screencasting-en-linux/
https://filmora.wondershare.com/es/screen-recorder/top-10-best-screen-recorder-for-linux.html
https://maslinux.es/mejores-herramientas-de-captura-de-pantalla-y-screencast-de-gnu-linux/
https://ubunlog.com/aplicaciones-para-grabar-el-escritorio-en-ubuntu/

martes, 26 de noviembre de 2019

Crear caja para Raspberry Pi con FreeCAD


Crear caja para Raspberry Pi
con
FreeCAD


En un anterior artículo  había realizado una caja para arduino con FreeCAD, ahora muestro como realizarla para la placa Raspberry Pi.
Al tener mas conexiones también tiene mas agujeros y complejidad.
También e incorporado chaflanes y texto en la caja.
Para la creación de cotas he añadido una extensión llamada Draft_Dimension.



Caja realizada con FreeCAD


Programa Creality de ENDER 3 para la creación del fichero gcode


Caja terminada.


Caja con la placa Raspberry Pi



Yo he utilizado la versión 0.18 , y puede que varíe algunas formas de realizar cosas desde la mas extendida la 0.16.

VIDEO





Saludos.
Juan Galaz



Bibliografía:

caja para arduino con FreeCAD
https://www.youtube.com/watch?v=gQ418VU0wM8
https://www.youtube.com/watch?v=g88mtT9KKP8
https://www.thingiverse.com/thing:994827

https://www.youtube.com/watch?v=rAlDqerv1RE
https://www.youtube.com/channel/UC9lXm9T3eU2z4Gy1uD8qMUQ/videos
https://www.youtube.com/user/obijuancube/videos

martes, 19 de noviembre de 2019


Crear caja para arduino
con
FreeCAD


En este artículo explico mi experiencia con una impresora 3D, no pretendo enseñar nada, soy un recién llegado a esto, solo mi experiencia.
Después de mucho pensarlo me compré una impresora 3D.
No tenía mucha idea sobre impresión de 3D, por lo que empecé a mirar por internet buscando una impresora barata.
Entre la A8 y la Ender3 me decidí por esta última, debido a que era más moderna y tenía bastante buenas críticas.
La Ender 3 tiene un precio por debajo de los 200€, y los los rollo de hilo PLA cuestan alrededor de 15€.
Como la pedí a una tienda en España me llegó en 3 días, bastante rápido y bien embalado el paquete.
Aunque el croquis de ensamblado es bueno, yo recomiendo un par de vídeos para ver antes de montarla.
https://www.youtube.com/watch?v=gQ418VU0wM8
https://www.youtube.com/watch?v=g88mtT9KKP8
Creo que tardé 1 hora, si has montado otra, seguro que tardas bastante menos.

Una vez montada, ¿que imprimir? .
Junto con la impresora venía una tarjeta SD en la cual incluían el programa para Windows y ciertos ficheros como tutoriales y algunos modelos para imprimir.
Después de investigar un poco, descubrí que los modelos estaban con la extensión  *.stl , pero la impresora utiliza el fichero *.gcode para imprimir.
Con el programa que funciona bajo Windows (CREATIVE) conviertes la el fichero con extensión *.stl a otro  con extensión *.gcode.
En programa CREATIVE puedes cambiar bastante opciones, en mi caso la primera impresión no cambie nada, luego mas tarde he quitado la opción capa de soporte.

  Después de ajustar la altura de la cama-caliente, e insertar el poco filamento de PLA que viene para probarla, me puse a imprimir.
Mi primera impresión 3D fue maze-10x10.stl , un laberinto.

El resultado en mi opinión fue muy bueno, me sentí bastante satisfecho.
Lo único malo es el tiempo que tarda, pero eso ya lo sabía, además el propio programa CREATIVE indica el tiempo y la cantidad de filamento usado en gramos.

Otra impresión que realice fue una caja para arduino UNO, con tapa y todo.
Lo baje de la página: https://www.thingiverse.com/thing:994827

Creo que  quedó bastante bien.

Si solo quieres imprimir modelos ya diseñados por otros, con esto nos basta.
En mi caso, a mi lo que me gusta es crear cosas, por lo que me he metido en un algo que es complicado, utilizar FreeCAD, un programa multiplataforma y libre.
Para aprender me he visto bastante videos sobre FreeCAD, el diseño en 3D no es fácil, y FreeCAD tiene infinitas funciones, de las cuales utilizas unas pocas.
Serie de vídeos sobre FreeCAD:

https://www.youtube.com/watch?v=rAlDqerv1RE
https://www.youtube.com/channel/UC9lXm9T3eU2z4Gy1uD8qMUQ/videos
https://www.youtube.com/user/obijuancube/videos

Después muchas...muchas pruebas he realizado un video de como diseñar una caja para arduino (sin caja)
Es el resultado de muchas medidas del arduino UNO con el calibre.




Espero que os guste este video.
Está realizado a 4 fps, de está forma no ocupa mucho el vídeo.
Seguro que se puede hacer mejor con otras opciones de FreeCAD, así como redondear las esquinas, pero lo he realizado lo mas simple posible para que todos lo puedan realizar.
Yo he utilizado la versión 0.18 , y puede que varíe algunas formas de realizar cosas desde la mas extendida la 0.16.

VIDEO


Saludos.
Juan Galaz



Bibliografía:
https://www.youtube.com/watch?v=gQ418VU0wM8
https://www.youtube.com/watch?v=g88mtT9KKP8
https://www.thingiverse.com/thing:994827


https://www.youtube.com/watch?v=rAlDqerv1RE
https://www.youtube.com/channel/UC9lXm9T3eU2z4Gy1uD8qMUQ/videos
https://www.youtube.com/user/obijuancube/videos

miércoles, 6 de noviembre de 2019

Configurar Canon LBP2900 para Linux 64 bits Debian buster, Mint, Ubuntu

Configurar Canon LBP2900 para Linux 64 bits

Debian buster, Mint, Ubuntu


Hace tiempo realicé un tutorial de como instalar mi impresora canon LBP2900 en Debian 32 bits.
Después de tiempo de resistirme en pasar a 64 bits, me pasé con Debian 10 (buster).
Al intentar instalar mi impresora Canon LBP2900 en Debian 64 bits, me encontré que no funcionaba.
Lo curioso del tema es que en la versión de 32 bits funcionaba perfectamente.
Después de volverme loco con muchas pruebas, también descubrí que tampoco funcionaba en Ubuntu 64 bits.
Buscando y buscando, encontré esta página:
    https://riku.titanix.net/wordpress/canon-2900-working-on-linux/
El problema es que aunque los drivers son de 64 bits, utilizan librerías de 32 bits, esto no lo explican en ningún sitio.
Los pasos para instalar nuestra impresora Canon son los siguientes:

64bits

Baja los driver  de 64 bits desde Canon:
    http://support-asia.canon-asia.com/contents/ASIA/EN/0100459601.html

tar -zxvf linux-capt-drv-v271-uken.tar.gz
cd linux-capt-drv-v271-uken/64-bit_Driver/Debian
sudo dpkg -i cndrvcups-common_3.21-1_amd64.deb
sudo dpkg -i cndrvcups-capt_2.71-1_amd64.deb

/usr/sbin/lpadmin -p LBP2900 -m CNCUPSLBP2900CAPTK.ppd -v ccp://localhost:59787
/usr/sbin/ccpdadmin -p LBP2900 -o /dev/usb/lp0
/etc/init.d/ccpd start


Para Debian 10 (buster) , debido a un bug  , debemos editar /etc/init.d/ccpd y cambiar:
        #export PATH=$PATH:/usr/local/sbin:/usr/local/bin
por:
        export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin/
Para Ubuntu y derivadas no hace falta lo anterior.

if ! [[ -d /var/ccpd ]]; then mkdir /var/ccpd; fi
if ! [[ -p /var/ccpd/fifo0 ]]; then mkdir /var/ccpd/fifo0; fi
chown -R lp:lp /var/ccpd


Añadir librerías de 32 bits que utilizan los driver cndrvcups de Canon de 64 bits.

dpkg --add-architecture i386
apt-get update
apt-get install libatk1.0-0:i386 libcairo2:i386 libgtk2.0-0:i386 libpango1.0-0:i386 libstdc++6:i386 libxml2:i386 libpopt0:i386

killall ccpd
systemctl restart cups
/etc/init.d/ccpd start




Si quieres que arranque el demonio al encender el ordenador, crear enlace simbólico.

ln -s /etc/init.d/ccpd /etc/rc3.d/S01ccpd



32bits

Baja los driver  de 32 bits desde Canon:
    http://support-asia.canon-asia.com/contents/ASIA/EN/0100459601.html

tar -zxvf linux-capt-drv-v271-uken.tar.gz
cd linux-capt-drv-v271-uken/32-bit_Driver/Debian
sudo dpkg -i cndrvcups-common_3.21-1_i386.deb
sudo dpkg -i cndrvcups-capt_2.71-1_i386.deb

/usr/sbin/lpadmin -p LBP2900 -m CNCUPSLBP2900CAPTK.ppd -v ccp://localhost:59787
/usr/sbin/ccpdadmin -p LBP2900 -o /dev/usb/lp0
/etc/init.d/ccpd start

if ! [[ -d /var/ccpd ]]; then mkdir /var/ccpd; fi
if ! [[ -p /var/ccpd/fifo0 ]]; then mkdir /var/ccpd/fifo0; fi
chown -R lp:lp /var/ccpd

killall ccpd
systemctl restart cups
/etc/init.d/ccpd start 




Si quieres que arranque el demonio al encender el ordenador, crear enlace simbólico.
ln -s /etc/init.d/ccpd /etc/rc3.d/S01ccpd

_________________________________________________________

Existe una utilizad para confirma que todo ha ido bien:
        captstatusui -P LBP2900

Si nos sale el error :
    *** captstatusui Socket Error ***
significa que  el demonio ccpd no está lanzado.
Para lanzarlo  teclear:
        /etc/init.d/ccpd start
Ahora volvemos a lanzar la aplicación
        captstatusui -P LBP2900
y vemos que nos sale:

Puede que no salga un error de comunicaciones con la impresora.
Para eliminarlo solo tenemos que apagar y encender la impresora y nos aparecerá: Ready to Print , que nos indica que la impresora está lista para imprimir.

Reconozco que  que es bastante lioso, pero me ha llevado mucho tiempo hacerla funcionar.
Para colmo aparece una segunda impresora llamada  LBP2900-2, esta impresora no funciona ni tiene utilidad.

Saludos.
JUAN GALAZ

Bibliografía:
https://riku.titanix.net/wordpress/canon-2900-working-on-linux/
http://wiki.webevaluation.nl/canon_lbp3010


miércoles, 16 de octubre de 2019

Arduino - COPIADOR CÓDIGOS INFRARROJOS

Página principal

Arduino

COPIADOR CÓDIGOS INFRARROJOS


En el anteriores artículos había realizado un receptor y emisor de infrarrojos  icur.html .
En estos artículos había utilizado la librería Iremote. Para este montaje no utilizo ninguna librería.
En este montaje realizo una copia de la señal digital, sin entender el código a que pertenece.

Voy a intentar explicar el funcionamiento del circuito.
-Se pulsa la pulsador 16 (es la tecla de memoria).
-Parpadea el Led testigo (PIN 13) esperando que se pulse el pulsador a memorizar.
-Se queda fijo el Led testigo, esperando a la señal infrarroja de cualquier mando.
-Cuando se pulsa la tecla de un mando cualquiera, empieza a copiar los códigos a la memoria EEPROM del arduino.
-Terminada la copia del código, el Led testigo se apaga parpadeando rápidamente.
-Si queremos emitir el código memorizado en el pulsador, solo tenemos que pulsarlo.

Debido a la capacidad reducida de la memoria EEPROM del arduino (1K), tenemos restringido la cantidad de códigos copiados.
Si hubiésemos utilizado la librería Iremore, hubiésemos podido memorizar cientos de teclas, pero como copiamos las formas de las señales digitales, necesitamos mucha mas memoria.
Para el protocolo RC5 se necesitan alrededor de 66 bytes, por lo cual se podrían almacenar 15 memorias.
Para otros protocolos  como el NEC , he utilizado 100 bytes, por lo cual se podrían almacenar 10 memorias.
Si por alguna razón queríamos mas memoria, deberíamos emplear memoria externa en el bus I2C, como las memorias 24LCxx.


Esquema del circuito.


Forma de las señales que transmite el circuito.
Se puede observar la seña digital que tiene que almacenarse en la memoria EEPROM.
Señales obtenidas con el programa PulseView en Debian10 y el osciloscopio
Hantek6022BL  

Como tenemos restringido el tamaño de la memoria (100 bytes), debemos inventar algún método para almacenar 100 unsigned int (200 bytes) en 100 bytes.
No se si ya existe, pero sobre la marcha me he invente para almacenar un 
unsigned int  en un byte, perdiendo algo de precisión.
Cuando nos fijamos en el protocolo NEC existen mucha variación entre diferentes tiempo entre pulsos, desde 0.56 mS hasta los 110 mS.
Almacenar estos datos en un byte sería imposible, por lo cual empleamos un truco.
Utilizar los bits D7 y D6 como nivel de multiplicación de los restantes bits D5-D0.


Valores para un protocolo NEC.

El resultado es muy bueno, un error menor de un 5%, para un ahorro de datos de un 50%.
Desde luego es la parte del programa del que me siento mas orgulloso.

Para obtener una frecuencia de 40 KHz he utilizado el contador 2 de ATMEGA328 con los siguientes parámetros:

// Clear Timer on Compare Match (CTC) Mode
  bitWrite(TCCR2A, WGM20, 0);
  bitWrite(TCCR2A, WGM21, 1);
  bitWrite(TCCR2B, WGM22, 0);
  //  bitWrite(TCCR2B, WGM23, 0);

  // Toggle OC1A and OC1B on Compare Match.
  bitWrite(TCCR2A, COM2A0, 1);
  bitWrite(TCCR2A, COM2A1, 0);
  bitWrite(TCCR2A, COM2B0, 1);
  bitWrite(TCCR2A, COM2B1, 0);

  // No prescaling
  bitWrite(TCCR2B, CS20, 1);
  bitWrite(TCCR2B, CS21, 0);
  bitWrite(TCCR2B, CS22, 0);

  OCR2A = 199;
  OCR2B = 199;
El valor de 199 viene de la formula:

x=(8000000/40000)-1=199

La salida de la señal 40000KHz se efectúa por el pin D3 del arduino.

Como la medida tiempo no es demasiado critico en este montaje, a nivel de programación no me he esforzado mucho en la optimización del código.
Existen muchas forma de optimizar, como por ejemplo colocar frecuON(void) y frecuOFF(void) en forma de #define, lo hace mucho mas rápido.




Circuito montado.


Detalle del circuito montado.

Lo bueno de este montaje es que se pueden mezclar diferentes tipos de protocolos en diferentes teclas.
Por ejemplo, Philips (RC5) y LG (NEC).
Me ha sorprendido lo bien que funciona este copiador de códigos infrarrojos.


PROGRAMA


Espero que les guste este montaje.

Saludos.
Juan Galaz


Bibliografía:
icur.html
ar_irb.html        ar_ira.html        ar_ir.html
https://en.wikipedia.org/wiki/RC-5
https://naylampmechatronics.com/blog/36_Tutorial-Arduino-y-control-remoto-Infrarrojo.html
https://www.sbprojects.net/knowledge/ir/rc5.php
http://lirc-remotes.sourceforge.net/
http://www.hifi-remote.com/sony/Sony_tv.htm

miércoles, 2 de octubre de 2019

Arduino - EMISOR INFRARROJOS

Página principal

Arduino

EMISOR INFRARROJOS


En el anterior artículo había realizado un receptor de infrarrojos  icur.html .
En este artículo realizo un emisor de infrarrojos. Para este montaje también utilizo la librería Iremote.
Lo primero que debo realizar es una matriz de pulsadores que lean un dato, que posteriormente se utilice para transmitir un código.
El método utilizado es el clásico de matriz de 4x4 pulsadores (16), que se leen secuencialmente.
Lo segundo a realizar es la parte de emisión de infrarrojos.
El utilizar las salidas del arduino para atacar directamente al diodo IR funciona, pero la intensidad que se necesita para los dos diodos IR (86mA) no los da el arduino.
La solución para este problema es utilizar un transistor que proporciona la intensidad necesaria.
He añadido un LED de testigo de emisión de la señal IR.

Esquema del circuito.






Forma de las señales que transmite el circuito.
Se puede observar la señal portadora de 40KHz.
Señales obtenidas con el programa PulseView en Debian10 y el osciloscopio
Hantek6022BL  


Circuito montado.

He creado dos programas.
El primero utilizo directamente la librería Iremote.
En el segundo utilizo todos las funciones de la librería Iremote, pero colocando todo en el propio programa.
Las dos funcionan bien, pero con el segundo programa no hace falta utilizar la librería Iremote, además de ocupar un poco menos.


PROGRAMA
LIBRERIA IREMOTE

Saludos.
Juan Galaz



Bibliografía:

https://en.wikipedia.org/wiki/RC-5
https://naylampmechatronics.com/blog/36_Tutorial-Arduino-y-control-remoto-Infrarrojo.html
https://www.sbprojects.net/knowledge/ir/rc5.php
http://lirc-remotes.sourceforge.net/
http://www.hifi-remote.com/sony/Sony_tv.htm

martes, 17 de septiembre de 2019

Arduino - RECEPTOR INFRARROJOS

Página principal

Arduino

RECEPTOR INFRARROJOS


Hace bastante años hice un montaje con receptor de infrarrojos, había utilizado la librería Iremote, he incluso había desarrollado mi propia rutina que no utilizaba ninguna librería.
ar_irb.html        ar_ira.html        ar_ir.html

Después de 8 años vuelvo hacer un receptor de infrarrojos, esta vez decodifica los números del 0 al 9, pero esta vez interpreta los códigos de un mando de TV Philips  y de TV LG.
Se vuelve a utilizar la librería Iremote, que funciona bastante bien, y simplifica la mucho programación.
El circuito se compone de un receptor de IR que detecta la luz infrarroja y filtra la portadora que se encuentra entre los  36KHz y 40KHz, proporcionándonos la señal digital que introducimos al PIN 11 del arduino.
El arduino interpreta la señal mediante la librería Iremote y nos devuelve los datos en una estructura de nombre   decode_results.
La estructura de datos es la siguiente:
decode_type_t          decode_type;  // UNKNOWN, NEC, SONY, RC5, ...
unsigned int           address;      // Used by Panasonic & Sharp [16-bits]
unsigned long          value;        // Decoded value [max 32-bits]
int                    bits;         // Number of bits in decoded value
volatile unsigned int  *rawbuf;      // Raw intervals in 50uS ticks
int                    rawlen;       // Number of records in rawbuf
int                    overflow;     // true iff IR raw code too long

Para el programa solo utilizo  decode_typevalue.
Dependiendo del tipo de mando y del valor devuelto, enciendo o apago un LED determinado.
El montaje es muy simple, pero bastante vistoso.
He realizado 2 programas, el uno enciende solo un LED cada vez, y el otro enciende o apaga cualquiera de los LEDs a la vez.
Para no tener que colocar una resistencia para cada LED, simplifico el montaje colocando una resistencia común a GND para todos los LEDS. Esto implica que dependiendo de los LEDS que estén encendidos, lucirán mas o menos.

Esquema del circuito



Circuito montado.



Forma de la señal con los códigos de
TV Philips  y de TV LG.



VIDEO

PROGRAMA
LIBRERIA IREMOTE






Saludos.
Juan Galaz



Bibliografía:

https://naylampmechatronics.com/blog/36_Tutorial-Arduino-y-control-remoto-Infrarrojo.html
https://www.sbprojects.net/knowledge/ir/rc5.php
http://lirc-remotes.sourceforge.net/
http://www.hifi-remote.com/sony/Sony_tv.htm

jueves, 29 de agosto de 2019

Portables Gambas

Portables Gambas

El ecosistema Linux es un tanto caótico, existen cientos de distribuciones, cada distribución varias versiones (Debian 7, Debian 8...etc), y para colmo tenemos versiones de 32 o 64 bits.
Si uno quiere crear un programa que funcione en varias distribuciones, deberá compilar este programa para las distintas distribuciones, esto puede ser un tanto laborioso y complicado.
Para salvar este problema podemos hacer uso de las aplicaciones portables, que en teoría funcionarán en todas las distribuciones.

En este artículo explico como crear aplicaciones portables de programas realizados con Gambas.
Debemos entender que Gambas ha crecido bastante, la amplitud de librerías usadas es grande, y con cada nueva versión se aumenta. Explico esto para entender el motivo de por qué utilizo una versión de Gambas que se encuentra en Debian 7.  El mismo programa Clock que viene como ejemplo en Gambas, al transformarlo a portable en Debian 9 nos ocupa 50 Megas, si lo creamos utilizando Debian 7 nos ocupa 25 Megas , la mitad.
En teoría, después de creado, se puede ejecutar en distintas distribuciones, e incluso  en 64 bits sin retocar nada.
Para terminar utilizo makeself, crea un ejecutable compacto. Se auto descomprime en el directorio tmp y se ejecuta. Este último paso no es obligatorio, pero queda muy presentable.

Como ejemplo voy ha utilizar el programa Clock que viene como ejemplo en Gambas de Debian 7.
El entorno de ejecución de Debian 7 se realiza sobre una máquina virtual con VirtualBox.

Una vez cargado y ver que funciona bien, creamos el fichero ejecutable llamado Clock.gambas.
Para comprender el entorno, he creado un usuario llamado portable, y dentro de este usuario el directorio bin, es donde guardo el ejecutable  Clock.gambas.

cde
El verdadero protagonista de este artículo es  cde_2011-08-15_32bit ,
    http://www.pgbovine.net/cde.html
este pequeño programa de 900 Kbytes crea directorio donde recrea todo el entorno de librerías y demás programas que utiliza el programa que queremos que sea portable.
Colocamos el programa  cde_2011-08-15_32bit en el directorio /home/portable/bin  junto con  Clock.gambas.
Entramos en una consola y tecleamos:
cd /home/portable/bin
./cde_2011-08-15_32bit gbr3 Clock.gambas


Después  de ejecutar el programa y cerrarlo, veremos que nos ha creado un directorio llamado cde-package , lo cambiamos de nombre con la orden:  mv cde-package  clock

En el directorio clock creamos un fichero llamado programa con lo siguiente:

#!/bin/sh
cd cde-root/home/portable/bin
./gbr3.cde  Clock.gambas


Damos permiso de ejecución con chmod ugo+x  programa
Ahora podemos probar el programa ejecutando el fichero programa.

En alguna ocasiones gambas busca iconos y directorios en el sistema , no hacen falta, por lo que conviene mirar el directorio que genera cde, para eliminar algún que otro archivo que no hace falta y tienen un gran tamaño. Para este caso no ha hecho falta, pero para otro que hice BarCode, eliminé 25 Megas.

Para trasladarlo a otro ordenador lo comprimimos con la orden:  tar -czvf  clock.tar.gz  clock
En otro ordenador lo descomprimimos con:    tar -xzvf clock.tar.gz
Y lo podemos ejecutar con el ejecutable programa.

Entorno 32 bits

Entorno 64 bits

makeself
Esta opción de tener el ejecutable portable en un directorio esta bien, pero algunos pensarán que se vería mejor si fuese un solo fichero que se ejecutara directamente.
Para esta opción tenemos el programa makeself , está en la mayoría de las distribuciones, y sirve para hacer un fichero ejecutable auto extraíble .
Con la orden:

makeself clock  clock.run "Clock" ./programa

creamos un fichero comprimido ejecutable con en nombre clock.run.
El único inconveniente es que crea un terminal junto con el programa.
También he visto que si se intenta ejecutar el programa en un entorno de 64 bits, debes hacerlo desde consola, no he querido averiguar el motivo.


Como podéis ver, puede resultar un poco laborioso al principio, pero al ver funcionar el programa en diferentes distribuciones sin problemas de librerías, nos da muchas alegrías.
También he realizado otros dos programas portables. Uno es de Gambas, BarCode, y el otro xcalc, un clásico del entorno Xwindows.

PROGRAMAS


Espero que les haya gustado el artículo.

Saludos.
Juan Galaz









lunes, 29 de julio de 2019

Instalación de Debian 10 desde usb


Instalación de Debian 10 desde usb

29/07/2019

Voy a intentar explicar todos los pasos que he seguido para crear un USB que sea arrancable para poder instalar  Debian 10 .
Para las versiones Debian 9 y 8 hice sendos artículos:  Debian9   -   Debian8
En cada nueva versión existe algún cambio, pero por lo general es el mismo procedimiento.

La forma normal que tiene la gente de hacer un USB arrancable es:
Siendo administrador.
su
Localizar donde está la memoria usb
fdisk -l
Desmontamos la memoria usb
umount /dev/sdc
Cuando estemos seguro de donde está (cuidado si nos equivocamos formateamos el disco duro)
mkfs.vfat -F 32 /dev/sdc -I
Copiamos la ISO en nuestra memoria usb
dd if=ImagenDebian.iso of=/dev/sdc
Terminamos de copiar los datos que puedan quedar en cache por si las moscas...
sync


A la hora de copiar la iso a nuestra memoria usb existen varios métodos:
dd if=ImagenDebian.iso of=/dev/sdc
dd if=/ruta/debian.iso of=/dev/sdb bs=1M; sync
cat debian.versión.iso > /dev/sdX ; sync
dd if=/your/path/debian-7.5.0-i386-netinst.iso of=/dev/sdX bs=4M sync

Todos los métodos de copiado hacen lo mismo, aunque algunos sean mas rápidos.

Esta forma está bien, pero tiene sus inconvenientes:
La memoria de 8G solo queda grabada con 4.5G el resto se inutiliza.
La memoria se queda en modo de solo lectura.
En algunos casos ni siquiera se monta en windows, tiene formato extraño.
En muchos casos después de instalar Debian, si queremos instalar mas cosas no podemos instalar desde el USB, debemos emplear la red o un DVD.

A modo de ejemplo he utilizado al usuario seta como usuario desde donde se monta el USB.
El nombre del usb donde se encuentran todo los ficheros de instalación se llama DEBIAN100

Para este tutorial debemos de utilizar el  programa rufus, que solo funciona en Windows :( .
Empecemos con bajar la imagen de la primera ISO de Debian 10, en mi caso utilizo la versión de 32bits.
https://cdimage.debian.org/debian-cd/current/i386/iso-dvd/debian-10.0.0-i386-DVD-1.iso
Debemos ir a la página de rufus y descargar el programa rufus. https://rufus.ie/
En las últimas pruebas debíamos daba error al no poder descargar Syslinux desde internet por eso he creado un archivo comprimido con rufus portable y los Syslinux que se necesitan. RUFUS.7Z





Debemos de esperar hasta 20 minutos , dependiendo de la velocidad de nuestra USB.
Cambiar de nombre del USB, sin espacios, ejemplo: DEBIAN100

Reiniciamos el ordenador para poder arrancar desde el USB.
Aclaremos que para poder arrancar desde el USB debemos pulsar una tecla (F9 al F12 dependiendo de nuestro ordenador)  cuando arranca el ordenador, en mi caso es F11.
Por no repetir todos los pasos para instalar Debian 10  recomiendo unas buenas páginas:
https://www.comoinstalarlinux.com/como-instalar-debian-10-ahora/
https://www.forosla.com/como-instalar-debian-10-buster-ilustrado-paso-a-paso/

Cuando hayamos instalado Debian 10, arrancamos.
Veremos que todo funciona bien y entramos con nuestro usuario, a partir de ahora el usuario por defecto será seta para todas la pruebas.
Montamos la USB que tendrá por nombre  DEBIAN100 .
Entramos en una consola y tecleamos los siguientes comandos:

cd /media/seta/DEBIAN100/dists/buster/main/binary-i386/
gunzip -k Packages.gz
bzip2 -k Packages

cd /media/seta/DEBIAN100/dists/buster/contrib/binary-i386/
gunzip -k Packages.gz
bzip2 -k Packages

cd /media/seta/DEBIAN100/dists/buster/main/i18n/
gunzip -k *.gz
bzip2 -k Packages

cd /media/seta/DEBIAN100/dists/buster/contrib/i18n/

gunzip -k *.gz
bzip2 -k Packages

Con esto transformamos los ficheros Packages   en tres formatos diferentes.

Editar /etc/apt/sources.list  , debemos ser  root y lo dejamos como sigue:

deb [allow-insecure=yes] file:/media/seta/DEBIAN100/ buster main contrib

Podemos también cambiarlo con la orden:

echo deb [allow-insecure=yes] file:/media/seta/DEBIAN100/ buster main contrib  >> /etc/apt/sources.list

Actualizamos la base de datos de los paquetes:

 apt-get update

Ya podemos entrar en el programa synaptic para instalar los programas que no instalamos al principio.



Crear repositorios deb en disco duro o USB.

El tener que meter una y otra vez los disco de instalación de Debian, o utilizar la red donde no es muy rápida, es un tanto molesto.
Crear nuestro propio repositorio en un disco duro o USB es muy práctico,  y bastante veloz a la hora de instalar paquetes.
Puedes hacer una selección de paquetes desde synaptic , instalándolos o solo bajarlos, y los almacena en /var/cache/apt/archives/  . Ahora los copias en el directorio de la memoria USB que quieras , yo los copio a /media/seta/DEBIAN100/debian100/archives/   .
Con el programa dpkg-scanpackages creas un archivo comprimido Packages.gz donde se encuentran el listado de todos los paquetes. Este debe ser colocado con los paquetes que has añadido.
Ejemplo de como se crea el paquete comprimido y su colocación junto a los paquetes:

cd /media/seta/DEBIAN100/debian100
rm  archives/Packages.gz

dpkg-scanpackages archives /dev/null | gzip >archives/Packages.gz

cd archives/
rm  Packages
rm  Packages.bz2

gunzip -k Packages.gz
bzip2 -k Packages

Editar /etc/apt/sources.list  , debemos ser  root y añadimos:

deb [allow-insecure=yes]  file:/media/seta/DEBIAN100/debian100/ archives/

Podemos también cambiarlo con la orden:

echo deb [allow-insecure=yes]  file:/media/seta/DEBIAN100/debian100/ archives/  >> /etc/apt/sources.list

Actualizamos la base de datos de los paquetes:

apt-get update


He estado haciendo todas las pruebas con la versión Debian 10.0 funcionando a la perfección.


Saludos.
Juan Galaz

Bibliografía:

https://www.comoinstalarlinux.com/como-instalar-debian-10-ahora/
https://www.forosla.com/como-instalar-debian-10-buster-ilustrado-paso-a-paso/

https://pulpolibre.wordpress.com/2019/05/04/guia-basica-despues-de-instalar-debian-10/

https://www.debian.org/releases/stable/i386/ch04s03.html.es
https://elbauldelprogramador.com/iniciar-debian-desde-usb/
https://diariodeunalinuxera.com/2015/10/20/crear-un-usb-booteable-de-cualquier-distribucion-gnulinux-desde-la-terminal/
https://exdebian.org/foro/instalar-debian-8-desde-usb-solucionado

http://www.elmundoenbits.com/2013/02/crear-un-repositorio-local-para.html#.VWmjIBcg1B0
http://blog.desdelinux.net/no-tienes-internet-aprende-como-llevarte-tus-repositorios-a-casa/

jueves, 25 de julio de 2019

LCD - DSP840 - GAMBAS

Página principal

LCD  DSP840
GAMBAS

Como saben que yo reciclo casi todo, me dieron un Display de una caja registradora.
Lo conecté y encendió bien, proporcionando los datos de una configuración serie 9600,8,1.
Con esta información, me puse  hacer un programa en Gambas para programar el display.
Como he realizado muchos montaje con gambas que utilizan el puerto serie, me puse a programar una aplicación que probase el DSP840.

El DSP840 tiene una alimentación de 12V, y un conector RS232 para programar el display.
En mi equipo dispongo de un conector RS232, pero la mayoría de los ordenadores actuales no lo trae.
Me imagino que ya exista el modelo DSP840 con USB.
El que no disponga de conector RS232, puede utilizar un adaptador de RS232->USB, funciona perfectamente y son baratos.

Adaptador RS232->USB.

Conexión de la base del DSP840.

Mirando el tutorial que existe sobre DSP840, podemos encontrar la forma de programar el display.
Lo cierto que he intentado probar diferentes comandos de control para el DSP840, pero solo me han funcionado unos pocos, debe ser que existen diferentes versiones para este display, y en este caso solo funcionan pocos de los que vienen en el manual.
Pero solo utilizando un comando de control, borrado de display, podemos representar texto en el display.
El display del DSP840 dispone de 2 lineas de 20 caracteres.
El programa en Gambas solo hace que borrar los 40 caracteres, para luego mandarle los 40 caracteres nuevos con el texto.
Solo tenemos que seleccionar el puerto serie donde se conecta del DSP840, normalmente es el /dev/ttyS0 si se conecta al conector RS232, o al /dev/ttyUSB0 si se conecta mediante el adaptado RS232->USB.


Programa en Gambas (VB para Linux)


DSP840 funcionando con el programa.


PROGRAMA

Este artículo se ha realizado en un par de horas, es simple y sencillo, no pretendo mucho mas.


Saludos.
Juan Galaz

miércoles, 24 de julio de 2019

Debian 10 Buster sin soporte para tarjeta NVIDIA Corporation C61 [GeForce 7025 / nForce 630a. Modo VESA.


Debian 10  Buster sin soporte para tarjeta
NVIDIA Corporation C61 [GeForce 7025 / nForce 630a] (rev a2)


Hasta Debian 9.x el soporte para la tarjeta gráfica GeForce 7025 / nForce 630a se hacía mediante los driver propietarios nvidia-legacy-304xx-driver . Ahora NVIDIA ya no soporta está tarjeta, ya no se pueden encontrar en los repositorios Debian.
Ya se sabe , depender del fabricante para que continué el soporte de tarjetas antiguas siempre termina en lo mismo, esto no da dinero, lo elimino.
Peor fue cuando salió Windows 7 sin soporte para muchas impresoras, en muchos centros educativos tuvieron que tirar impresoras que funcionaban perfectamente en XP.


El proyecto nouveau https://nouveau.freedesktop.org/wiki/ intenta soportar tarjetas NVIDIA de forma libre.
Nunca NVIDIA fue el buen compañero de linux, que se lo digan a Linus  Torvalds, dijo “la peor empresa con la que habían tratado” y“foco de continuos problemas para Linux”.
Pero los desafortunados como yo que tienen esta tarjeta, habrán comprobado que con los driver nouveau el ordenador se cuelga a a los pocos minutos, no es utilizable.

Ahora con la salida de Debian 10 buster, nos encontramos que no tenemos los driver propietarios de NVIDIA, el driver libre nouveau no es funcional.
Solo tenemos dos opciones, o nos gastamos el dinero comprando una tarjeta con soporte Linux, o utilizamos el driver VESA sin aceleración 3D.

En este artículo explico como configurar nuestro Linux para que funcione la tarjeta GeForce 7025 / nForce 630 con los driver de VESA.
Lo primero es arrancar en un escritorio que no utilice alguna aceleración gráfica, como por ejemplo LXDE o Xfce.
Como utilicéis Mate, Gnome o KDE, lo normal es que no arranque o se bloquee la pantalla, quedando así:
 



Hay veces que este paso no hace falta , pero lo recomiendo.
Con un editor, por ejemplo mousepad, editar el fichero

sudo mousepad /etc/modprobe.d/blacklist.conf

y añadir lo siguiente:

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off




También debemos impedir que se carguen los drivers nouveau en el arranque de Kernel.

Existen dos formas de hacerlo:

--La primera es editar el fichero de configuración de GRUB

sudo mousepad /etc/default/grub

Editamos la siguiente línea con la con:

GRUB_CMDLINE_LINUX_DEFAULT="quiet nouveau.modeset=0"

Actualizamos grub con:

sudo update-grub


--La segunda forma es editar directamente la configuración de grub.
sudo mousepad /boot/grub/grub.cfg

Busca la línea donde carga el kernel y añadir  nouveau.modeset=0
Quedando así:

linux    /boot/vmlinuz-4.19.0-5-686-pae root=UUID=981a74b9-e5f5-4524-a630-3ccacf03c0bc ro  quiet nouveau.modeset=0




Ahora nos queda crear un fichero de configuración xorg.conf para poder cambiar las resoluciones.

mousepad /etc/X11/xorg.conf

y lo dejamos como sigue:

Section "Device"
    Identifier             "Device0"
    Driver                 "vesa"
EndSection

Section "Monitor"
    Identifier    "Monitor0"
    HorizSync       30.0-62.0
    VertRefresh     50.0-70.0
EndSection

Section "Screen"
    Identifier             "Screen0"
    Device                 "Device0"
    Monitor                "Monitor0"
    DefaultDepth           24
    SubSection "Display"
        Depth  24
        Modes "1920x1080"  "1280x1024" "1024x768" "800x600"
    EndSubSection
EndSection


Esta configuración depende de vuestro monitor.

Ya solo nos queda reiniciar nuestro ordenador y esperando que todo funcione bien, aunque sin aceleración 3D.





Saludos
Juan Galaz

https://nouveau.freedesktop.org/wiki/

viernes, 19 de julio de 2019

Arduino - Gambas - Control entradas salidas - Navegador.

Página principal

Arduino
Gambas
Control entradas salidas.
Control mediante navegador.


En el anterior montaje solo se podía ver los estados de pin a través del navegador.
Ahora ya se puede cambiar los estados desde el navegador del PC o Móvil.

Circuito montado.


Programa gambas. 5 entradas analógicas, 12 salidas digitales.


Versión con textos. Arsetav3.


Versión con botones. Arsetav3b.

El mayor problema de controlar mediante navegador, es que en algún caso se ven diminutos los botones.
Que cada uno elija la versión que le resulte mas útil a su proyecto.

Como podéis observar en el montaje he utilizado un arduino nano, y para la representación el arduino uno.
Las pruebas las he realizado en las dos placa de arduino, funcionando perfectamente en ambas.
Aunque el arduino nano tiene A6 y A7 no las he empleado por compatibilidad con el arduino uno

La actualización de los datos desde que se cambia un valor hasta que se ve reflejado es de 1 segundo.
Se puede mejorar aumentando la velocidad en Baudios y el tiempo de retardo, para este montaje no hace falta mucha velocidad, por lo que lo he dejado así.
En el navegador web si queremos ver los datos actualizados, debemos actualizar la página web, aunque se actualiza automáticamente cada 120 segundos.


PROGRAMA

Saludos.
Juan Galaz



Bibliografía:

Arduino_Uno 1.0.1  programado por Rolfdahl-skogstade

miércoles, 17 de julio de 2019

Arduino - Gambas - Control entradas salidas

Página principal

Arduino
Gambas
Control entradas salidas


 Hace unos 5 años había realizado una serie de montajes donde controlaba una placa de arduino mediante un programa ejecutado en un PC o RaspberryPi.
Lo había realizado en C y con la librería SDL, funcionaba tanto en Linux como en Windows.
    25/06/2012 - ARDUINO - Control de 12 salidas y 6 entradas analógicas mediante rs232-Librería SDL. aseriea
    19/06/2012 -
ARDUINO - Control de entradas mediante rs232 - Librería SDL. aseriee
    10/06/2012 - ARDUINO - Control de salidas mediante rs232 -Librería SDL. aserie

El otro día probando el nuevo Debian 10, se me ocurrió instalar gambas y probar un programa que se encontraba en la granja de programas.
Era Arduino_Uno 1.0.1  programado por Rolfdahl-skogstade, además de controlar el arduino a través del PC, tenía la posibilidad de ver el estado de las entradas o salidas en un navegador web. Nunca se me ocurrió el hacer un servidor web con Gambas.
También se posibilitaba el poder cambiar las salidas a través de un navegador, desde el PC o teléfono.

En este montaje realizo algo parecido, pero en 3 montajes diferentes.
-17 salidas.
-17 entradas.
-12 salidas y 5 entradas analógicas.


También se puede visualizar en un navegador el estado de los pins del arduino, o los valores de la señales analógicas.
Para otro proyecto se podrá cambiar el estado de los pins a través del navegador.

En el programa realizado en gambas, he utilizado partes de código realizado por Rolfdahl-skogstade , sobre todo en la parte del servidor web, he interface gráfico. En cuanto al resto del código se ha rehecho totalmente, los cambios en la comunicación con el arduino son completamente nuevos, basados en mis viejos montajes.

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

    ANA 0            Se solicita el valor de pin ANALOG 0
    El arduino devolverá el valor de ANAGOL-A0:     VAL 0,350


Desde cualquier terminal serie, cutecom, o del propio terminal de arduino se pueden ejecutar las ordenes.
Podemos entender que el programa en gambas hace el control mucho mas fácil, a través de su interface gráfica.
Además busca automáticamente el puerto donde está conectado el arduino.

Circuito montado. Modelo 17 salidas.
Para no tener que colocar una resistencia para cada LED, simplifico el montaje colocando una resistencia común a GND para todos los LEDS. Esto implica que dependiendo de los LEDS que estén encendidos, lucirán mas o menos.

Programa gambas. 17 salidas.


Programa gambas. 17 entradas.


Programa gambas. 5 entradas analógicas, 12 salidas digitales.

Visualización en navegador. 5 entradas analógicas, 12 salidas digitales.

Como podéis observar en el montaje he utilizado un arduino nano, y para la representación el arduino uno.
Las pruebas las he realizado en las dos placa de arduino, funcionando perfectamente en ambas.
Aunque el arduino nano tiene A6 y A7 no las he empleado por compatibilidad con el arduino uno

La actualización de los datos desde que se cambia un valor hasta que se ve reflejado es de 1 segundo.
Se puede mejorar aumentando la velocidad en Baudios y el tiempo de retardo, para este montaje no hace falta mucha velocidad, por lo que lo he dejado así.
En el navegador web si queremos ver los datos actualizados, debemos actualizar la página web, aunque se actualiza automáticamente cada 120 segundos.


PROGRAMA

Saludos.
Juan Galaz



Bibliografía:

Arduino_Uno 1.0.1  programado por Rolfdahl-skogstade

martes, 2 de julio de 2019

Arduino-TM1638-Medidor de inductancia V3

Página principal

Arduino
TM1638
Medidor de inductancia
V3


Este artículo  es una continuación del medidor de indu.html.
En este artículo utilizo un contador de frecuencias mucho más exacto, y el oscilador funciona con todos los modelos de CHIP 4049.

La frecuencia de oscilación se calcula con la siguiente formula.

En este modelo oscilador,  existen 2 condensador de 150nF en serie.
La fórmula de dos condensadores en serie es la siguiente:  C=(C*C)/(C+C)= 75 nF
Para medir la frecuencia de un circuito LC , montamos un oscilador mediante una puerta inversora CMOS  4049.
Ahora funciona con todos los modelos, MC14049, TC4049, CD4049, CD4049UBF.
En el anterior montaje solo funcionaba con algunos modelos.

Esquema del circuito oscilante.


Diagrama del montaje.


Circuito montado.

La medida de la inductancia se manda por el terminal serie y se representa en el módulo TM1638.
Como medidor de frecuencia utilizamos una librería FreqCounter, probada en un montaje anterior, con unos resultados  buenos.

Espero que os de ideas para vuestros montajes.

PROGRAMA


Saludos.
Juan Galaz



Bibliografía:

http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/
http://interface.khm.de/index.php/lab/interfaces-advanced/theremin-as-a-capacitive-sensing-device/