jueves, 21 de febrero de 2019

Arduino - Luces de navidad - Luces intermitentes


Página principal


Arduino
Luces de navidad
Luces intermitentes

Cuando empiezas a programar con arduino, lo primero que pruebas es el LED de luz intermitente que viene incorporado en el propio arduino.
Esta práctica  la he diseñado para principiantes que empiezan con arduino y quieren probar un poco de todo.
Seguro que en muchas casas tendréis las clásicas luces de navidad con un botón para cambiar el modo de parpadeo, esta práctica hace eso con arduino.
En mi caso tenía una tira de luces de LED bastante larga, por lo que decidí cortarla para hacer dos tiras y hacerlo mucho mas vistoso.
Las salidas de arduino pueden proporcionar como mucho 40mA, por lo que tenéis que ajustar el valor de las resistencias para que no superen este valor, en mi caso era de 100 ohmios, y como mucho superaba los 20mA.
Para cambiar el modo de parpadeo he utilizado un pulsador.

Esquema.

Diagrama de montaje.

El programa utiliza directivas del procesador como :
#define SALIDA1  9
Esto indica al preprocesador que si encuentra  la etiqueta SALIDA1 lo cambie por 9 antes de compilar.
Es fácil cambiar de un plumazo la puerta de salida en todo el programa.

Cuando se empieza a crear un programa es normal poner puntos de depuración para comprobar en cada momento lo que sucede.
Cuando se termina el programa sobran los puntos de depuración, pero no conviene quitarlos por si mas tarde se necesitan.
El caso que ocupan memoria y no sirven para nada. Esto se soluciona con las directivas de preprocesador: #if  y #endif  .
En mi programa he colocado una etiqueta con el nombre  #define DEBUG  0 .
Si cambiamos el 0 por el 1 , cambiamos entre el modo normal y el de depuración.
Cuando empiezo con un programa empleo la consola serie para ver distintos datos. Luego no me sirve para nada y ocupa memoria.
#if DEBUG==1
  Serial.begin(9600);
#endif 
Con esta instrucción compilo o no dependiendo del valor de DEBUG.
//Con consola serie 3898 bytes    
//Sin consola serie 2158 bytes
Además de ocupar menos memoria, es más rápido.

El programa utiliza varias técnicas:
Repartición de tiempo mediante contadores. tiempo0--;   tiempo2--;  tiempo3--;  tiempo4--;
Cambio de modo de parpadeo leyendo cada 10mS el pulsador.  HIGH==digitalRead(ENTRADA)
En muchas de las opciones se podría haber utilizado las salidas digitales normales con la orden digitalWrite(SALIDA1, LOW); , pero como debía utilizar salidas analógicas, he empleado para todo este método: analogWrite(SALIDA1, a);
Lecturas de secuencia de parpadeo desde una matriz de 10 elementos.
unsigned char secuenciaA1[10]={255,0,255,0,0,0,0,0,0,0};
unsigned char secuenciaB1[10]={0,0,0,255,255,255,255,0,0,0};

Pienso que esta práctica es sencilla y bastante vistosa.

Montaje.

El circuito se puede alimentar fácilmente mediante un POWER BANK, o a través de 3 pilas de 1.5V (4.5V) , el arduino funciona en la mayoría de las veces con tensiones de hasta 4V.

VIDEO

PROGRAMA

Saludos.
Juan Galaz


Bibliografía:

miércoles, 13 de febrero de 2019

Predicción meteorológica. Servidor wttr.in


Predicción meteorológica
Servidor wttr.in

Existen numerosas páginas de perdición del tiempo, pero el servidor wttr.in es de lo mas especial.
Este servidor proporciona la información en consola, web, o imagen png.
Si tecleamos desde consola curl wttr.in , nos devolverá la predicción de los próximos 3 días.



No es que sea demasiado vistosa, pero es práctica y rápida, además de no necesitar ningún programa añadido.
El programa busca por la IP la localización del lugar.
Si deseamos una localidad determinada tecleamos:     curl wttr.in/santander
Para que la información sea en español:    curl wttr.in/palencia?lang=es
También podemos consultarlo por aeropuertos:  curl wttr.in/MAD?lang=es
Los códigos de aeropuertos se pueden consultar en: codigos-de-los-aeropuertos-de-europa
Tipos de ubicación soportados:
    /paris                  # el nombre de una ciudad
    /~Eiffel+tower          # el nombre de cualquier sitio famoso
    /Москва                 # el nombre Unicode de cualquier sitio en cualquier idioma
    /muc                    # el código de un aeropuerto (3 letras)
    /@stackoverflow.com     # el nombre de un dominio web
    /94107                  # un código de area
    /-78.46,106.79          # coordenadas de GPS

Existe la posibilidad de que nos devuelva la información en forma de imagen:  curl wttr.in/Palencia.png?lang=es>palencia.png

Como todo el mundo no trabaja bajo consola, se puede hacer mediante el navegador.
En cualquier navegador escribir en la dirección: wttr.in ,y nos mostrará la información del lugar.
Podemos utilizar todas la opciones que se utilizan en la consola.

Recomiendo ir a la página del proyecto para ver todas la opciones.

https://github.com/chubin/wttr.in

Otras opciones:
curl wttr.in/Palencia?format="%l:%t:%w:%c:%m"
Palencia:+3°C:↖0 km/h:☀️:🌓

curl wttr.in/Palencia?1        Predicción del día actual.
curl wttr.in/Palencia?n        Predicción del día actual, pero sencilla, noche y día.



Saludos.
Juan Galaz

viernes, 8 de febrero de 2019

Puzzle SDL

Puzzle
SDL

Un puzzle parecido había realizado hace años para XWIN , con la librería SDL es mas fácil programar, además de poderse compilar para Windows.
Este puzzle tiene 3 niveles dependiendo del tamaño de la cuadrícula.
Nivel 1. - 4x4
Nivel 2. - 6x6
Nivel 3. -10x10
Cada nivel tiene su propia tabla de puntos.
Empiezas con 1500 segundos que se irán disminuyendo según pase el tiempo.
Con el botón derecho del ratón se mueven las piezas.
Con el botón central nos muestra las piezas mal colocadas.
Con el botón derecho te muestra la imagen  original.
Está realizado bajo Linux, pero también está compilado para Windows, es la ventaja de utilizar la librería SDL.
Durante el juego, pulsando F2 pasamos a pantalla completa.



PROGRAMA

Saludos.
Juan Galaz

martes, 5 de febrero de 2019

Come cocos - PacMan - SDL



Come cocos
PacMan
SDL

Desde mis comienzos en esto de la programación con el Spectrum, en cada ordenador que tuve, siempre hacia dos programas, el de la pelota rebotando en un muro de ladrillos, y el Come Cocos (PacMan).
En está ocasión programo el Come Cocos. Te obliga hacer una matriz de datos a modo de mapa, he implica tener varios personajes moviéndose por el mapa.
El mapa es de 25x29, y la matriz creada para ese mapa es de 25x32.
El ComeCocos y los fantasmas necesitan 3 movimientos para pasar de un lugar a otro.
En esta ocasión se ha pulido la velocidad respecto al anterior programa (El cocinero loco).
No se repinta todo el mapa, solo donde ha pasado cada personaje, lo que ahorra mucho tiempo.
Puliendo cada parte del código, he llegado a conseguir que el porcentaje de CPU usado este en el 6%
Está realizado bajo Linux, pero también está compilado para Windows, es la ventaja de utilizar la librería SDL.
Durante el juego, pulsando F2 pasamos a pantalla completa.



PROGRAMA

Saludos.
Juan Galaz

Cocinero loco - SDL

Hacía tiempo que no realizaba ningún juego, hay veces que necesita tu mente jugar, es humano, desde que somos pequeños aprendemos jugando.
Este juego se realiza mediante la librería SDL, es una librería que esta creada para realizar juegos, aunque se puede utilizar para otro tipo de programas.
El programa es simple, tienes que recoger diferentes alimentos, pero tienes que tener cuidado, te persiguen cuatro fantasmas.
Es un juego al estilo ComeCocos pero con 3 pantallas.
Está realizado bajo Linux, pero también está compilado para Windows, es la ventaja de utilizar la librería SDL.


PROGRAMA

Saludos.
Juan Galaz

lunes, 4 de febrero de 2019

Instalar NVIDIA GeForce 7025 / nForce 630a en MINT 19.1 o UBUNTU 18.04


Instalar NVIDIA GeForce 7025 / nForce 630a en MINT 19.1 o UBUNTU 18.04

Normalmente trabajo bajo Debian, pero me gusta probar diferentes distribuciones Linux.
Para daros una imagen de las particiones del disco duro de mi ordenador es el siguiente:
  • DATOS_FAT
  • DEB_sda10_GRUB
  • DEB_sda3_DEBIAN8
  • DEB_sda4PROGRAM1
  • DEB_sdb5_PROGRAM2
  • MINT18_PRO
  • MINT19_1
  • UBUNTU16_04
  • WIN7_sdb2
  • windows1
  • windows2
Como podéis observar parece un tanto caótico, pero todas las distribuciones funcionan.
El otro día tuve la curiosidad por instalar el MINT 19.1 64bits .Todo fué bastante bien sin ningún tipo de problemas.
La tarjeta gráfica que tengo es NVIDIA Corporation C61 [GeForce 7025 / nForce 630a] , es algo vieja, además de estar integrada en la propia placa base. Como no soy demasiado exigente con los juegos me sirve perfectamente. El problema es que el driver que instala por defecto es nouveau, es libre y en tarjetas modernas funciona sin problemas, pero en la mía produce cuelgues constantes en aplicaciones que necesitan 3D, como ejemplo es el escritorio KDE, si no desactivas el renderizado por hardware se cuelga a las primeras de cambio.
Esto me pasa también en en Debian, por lo que instalo los driver propietarios de Nvidia.
Antes en Ubuntu incorporaban en driver para mi tarjeta, el cual es nvidia-304, ahora lo han quitado y te tienes que buscar la vida.
Aunque he probado muchas opciones, incluyendo la de instalar desde PPA en Ubuntu 18.04, me he encontrado que tampoco funciona.
Buscando y buscando por la red, encontré una página donde explicar como instalar estos driver.
Lo mas curioso del caso es que fue para un 2006 iMac (iMac6,1) ;).


En este artículo explica perfectamente como compilar los driver de nvidia-304 incluyendo un parche para que se pueda compilar sin errores.

Debo de comentar que los ficheros se descargan en el usuario oem.
Los ficheros necesarios son:


Como podeis comprender debemos realizar todas las operaciones como root.
Línea de ordenes:

cat << END > /etc/modprobe.d/disable-nouveau.conf
blacklist nouveau
blacklist vga16fb
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
blacklist amd76_edac
options nouveau modeset=0
END

apt install gcc make build-essential gcc-multilib dkms mesa-utils

(el directorio donde descargamos los ficheros es /home/oem)
(cuando bajamos el fichero no es ejecutable, debemos hacerlo ejecutable)

chmod +x NVIDIA-Linux-x86_64-304.137.run

./NVIDIA-Linux-x86_64-304.137.run -x

cd /home/oem/

cd NVIDIA-Linux-x86_64-304.137/

patch -p1 < /home/oem/nvidia-304.137-bionic-18.04.patch
update-initramfs -u
reboot
/etc/init.d/lightdm stop

(pasamos a consola) CRT+Alt+F1
(entramos como ususario root)
(puede ocurrir que no podamos entrar como root, entonces tecleamos sudo passwd desde un usuario, ya entonces podremos seguir como root)

cd /home/oem/NVIDIA-Linux-x86_64-304.137/
./nvidia-installer
restart
reboot



SETA43
04/02/2019