Archivo de la categoría: GNU/Linux

Amstrad PCW8256. Probando el emulador Joyce



Estos últimos días he revivido el ordenador Amstrad PCW8256 que teníamos en casa hacia el 1986. Lo utilizaba mi padre para escribir, pero también lo utilizábamos para los trabajos del instituto. Venía con una pantalla monocroma verde, el teclado y la impresora de agujas. Toda la electrónica estaba en el monitor, incluso la placa de la impresora. Y en el monitor también había la disketera de 3», que tenía dos caras.

He instalado el Joyce en la Raspberry Pi, y me ha gustado revivir este sistema. Evidentmente, se ha de escoger la opción de letras verdes, simulando la pantalla de fósforo verde.

El ordenador venía con dos disketes, que eran discos de arranque. El primer era el CP/M, el sistema operativo, desde el que se podía acceder al intérprete de Basic (Mallard Basic). El segudo diskette, tambié bootable, era el Locoscript, que es el processador de textos con que venía. He hecho un documento con LocoScript sobre los ríos de Catalunya, simulando como si fuese un trabajo del insti.

También he jugado un rato al Tetris. El emulador emula muy bien la máquina original. Si quieres jugar al Tetris, has de hacer eject del disket inserido (el CP/M)(el SO ya está cargado en la RAM), y meter el disket del Tetris (Insert). Entonces, ya desde la línea de comandos, ya se puede llamar al ejecutable y jugar al Tetris, com se ve en la imagen.

Qué tiempos aquéllos! El link en la wiki:

Calibración del sensor de temperatura DS18B20

Ya tengo prácticamente acabado el proyecto IoT con una REST Api [3][4] para leer la temperatura de un sensor DS18B20.

El problema (y grave) es que las temperaturas que estoy cogiendo del sensor son erróneas. Para saber cuál es la temperatura real en mi barrio (Gràcia-Barcelona) cojo como referencia la web de meteo.cat. La estación meteorológica automática más cercana es la de Zona Universitaria, aunque en realidad la temperatura no será la misma exactamente. La calle Joan Blanques, donde tengo el sensor, es estrecha y enmedio de la ciudad y del barrio; la Zona Universitaria es un espacio más ancho y abierto, posiblemente las temperaturas mínimas tiendan a ser más bajas…

Calibrar el sensor DS18B20 puede ser una tarea difícil. Aquí tenemos un artículo [1] muy interesante sobre cómo proceder para la calibración. El artículo es realmente interesante, pero no tengo el tiempo (ni las ganas) de implementarlo. Lo que sí que tendría que haber hecho, y esto era fácil, era comprar 10 sensores DS18B20 (son baratos), descartar aquéllos que se desvíen bastante de la temperatura real, y promediar la temperatura con el resto de sensores escogidos, por ejemplo 5. Esto no sería ningún problema, en la RPi tengo muchos pines GPIO disponibles.

Otra posibilidad es utilizar otro sensor de temperatura. Peo ejemplo, utilizar el BMP280, que además de la temperatura también tengo la presión y la humedad relativa (y es barato). Es muy interesante este artículo [2] donde se utiliza el BMP280 para construir una estación meteorológica alimentada per un panel solar.

La conclusión es que confiar en que el sensor que tengo dé la temperatura correcta es un grave error. El objetivo del proyecto es hacer un ejemplo didáctico de IoT, RestFul API, y gráficas como frontend. Esto ya está implementado, ahora sólo falta que la temperatura que leo sea real. Por tanto, lo que haré es encontrar una recta de regresión para aproximarme a la temperatura real a partir de los datos que me da mi sensor, suponiendo que la mejor aproximación sea una recta.

En la imagen se pueden ver dos gráficas. En la de arriba se ve la diferencia entre la temperatura real y la de misensor. En la de abajo se puede deducir la recta de regresión para convertir los datos del sensor en datos reales. De todas maneras, estos datos se corresponden a dos días y medio. Esperaré una semana más (y que suban las temperaturea del mes de mayo, y así tener más rango) para poder hacer una recta de regresió.

Enlaces:

Internet of Things, Restful API con Python y Flask, Raspberry Pi Zero y sensor de temperatura

Estoy montando un proyecto académico de Internet of Things. Se pretende medir la temperatura exterior en mi barrio con un sensor DS18B20 conectado a una Raspberry Pi Zero. Tal como se ve en la foto, he tenido que conectar un lápiz Wifi USB. Idealmente sería mejor hacer el proyecto con la nueva Raspberry Pi Zero W que acaba de salir hace un mes, y que lleva wifi incorporada.

La temperatura se va almacenando cada 10 minutos en una base de datos MongoDB. La parte más interesante del proyecto es programar una Restful API, y para hacerlo lo haré con Python y el microframework Flask, a partir de algún ejemplo que he encontrado (ver los enlaces). En la versión 1 sólo había un servicio, que era el bolcado de todas las temperaturas. La versión 2 ya hace más cosas: bolcar todas las temperaturas; recuperar la temperatura actual; filtrar por un día; filtrar por varios días al mismo tiempo.

Otra parte importante es la capa de presentación, y para ello utilizo la librería Highcharts.com, que da unos resultados muy espectaculares. Para cada función de la API se dará un ejemplo html, para ejemplificar cómo se pueden digerir los datos.

En las futuras versiones de la API se calcularán las medias de temperatura diarias, mensuales y anuales, de manera que se puedan hacer comparativas entre días, meses,… De momento todavía no está disponible.

La API todavía no es pública, estoy en fase de desarrollo. En el momento que sea estable y pública ya lo anunciaré. De momento la tengo dentro de casa, bajo los efectos del termostato de la calefacción, con lo que los resultados no son interesantes. Pero la idea es después de Semana Santa trasladarlo todo al local, el sensor en el exterior, y la Raspberry Pi dentro del local. Se podrá acceder a la API en el domini ohttp://joanqc.no-ip.biz/, pero todavía no está disponible.

La idea de desarrollar esta API es, a parte de que programar es divertido, poder utilitzar open data en formato JSON en la asignatura de Javascript (M06) en el ciclo de Desarrollo de Aplicaciones Web (DAW), en el instituto. Evidentmente, hay muchos ejemplos disponibles de open data y format JSON. Pero un ejemplo donde los alumnos vean de dónde salen realmente los datos, siempre será interesante.

En el primer enlace tenemos la documentación y discusión de toda la puesta a punto. Es el punto de partida principal si se quiere reproducir el proyecto. En el segundo enlace se documenta la API, en sus diferentes versiones.

Adaptación de los emuladores MAME y gngeo para limitar el tiempo de partida

Tenía pendiente desde octubre conseguir esta funcionalidad. Se trata de una máquina en que la operación está controlada por el tiempo. Una moneda son 15 minutos de juego. Los emuladores MAME y gngeo (NeoGeo) tienen el botón de COIN que permite dar créditos para jugar. Ahora bien, el monedero controla el contador de tiempo, y es necesario meter monedas para dar tiempo a las partidas. La comunicación entre el front-end y los dos emuladores se hace sencillamente con un fichero de texto donde se lee y se graba el valor del contador. La funcionalidad implementada es:

  • Cuando estoy en el front-end el tiempo no corre. Si se mete una moneda, suma el tiempo establecido (15 minutos por defecto).
  • Cuando entro en el emulador (mame4all o gngeo), se lee el valor del tiempo restante, y empieza a descontar el tiempo, que está siempre visible.
  • Desde el emulador puedo poner una moneda, suma el tiempo, y se actualiza el contador correctamente.
  • Cuando salimos del emulador y volvemos al frontend, el tiempo queda bien guardado.
  • Si mientras juego se acaba el tiempo, se vuelve al front-end, esperando la inserción de una nueva moneda.

Cambios en el código y documentación:

    \t

  • http://wiki.joanillo.org/index.php/M%C3%A1quina_Arcade_amb_monedes_i_limitaci%C3%B3_de_temps._MAME_i_neogeo#Introducci.C3.B3_2

Y el video:

OpenCV y C++

Un proyecto para el 2017 será una recreativa de dardos. La idea no es original. Se trata de utilizar una diana de dardos real, de corcho, y los correspondientes dardos de punta metálica, y con un sistema de visión artificial ser capaz de saber a qué sector le hemos dado.

La solución pasa por tener dos webcams conectadas a la Raspberry Pi, pues con una sola webcam no se puede conseguir suficiente precisión. Se tendría que hacer bastantes pruebas para conseguir fiabilidad en la determinación de la posición del dardo. En principio cuento en que dos webcams baratas y compatibles con la RPi (por ejemplo la Logitech Quickcam Express) conectadas a una sola Raspberry Pi sean suficientes, ya veremos si será posible.

Mientras hemos instalado OpenCV en una Raspberry Pi 3 y estoy haciendo las primeras pruebas con OpenCV: capturar un frame de la webcam; diferencia entre dos imágenes; convertir una imagen a gris; convertir una imagen a binario a partir de un umbral; detección de un color; detección de una forma; detección de los contornos y centro de masas,… Todo con C++. Realmente es divertido esto del OpenCV.

En edx.org hay un curso de OpenCV.

Esperemos que todo funcione sin demasiados contratiempos. El siguiente paso sería hacer la interficie de usuario que nos permitirá jugar a los juegos más populares de dardos: 301, 501, Cricket,… y construir un mueble. Me imagino una madera grande con la diana a la derecha, una pantalla de 15» (protegida per un vidrio) a la izquierda, y una marquesina retroiluminada donde están escondidas las dos webcams dirigidas a la diana. Ya veremos, todo esá por hacer.

Ir rápido clasificando insectos

Todavía tengo por clasificar fotos de insectos de este verano y del anterior. Con el tiempo he aprendido a ir más rápido clasificando insectos, y a no perder tiempo y ofuscarme cuando no encuentro la identificación correcta. A medida de ir haciéndolo he establecido un protocolo bastante claro para proceder. Básicamente necesito un editor de texto con 4 ó 5 documentos; tres ventanas del terminal, una de las cuales es el mysql en modo comando; tres carpetas del explorador de archivos (Nautilus); y tres o cuatro ventanas del Firefox.

Hasta ahora lo hacía una por una. Ahora se trata de ponerlo todo en un script y así ganar un poco de tiempo y comodidad. Además, no es necesario poner el password del mysql, que queda ofuscado. El script queda de la siguiente manera:

#!/bin/bash

MY=$(echo "7878Mx33xicdg444aaiJ5888aba" | tr -d "78" | tr -s "4" | tr -d "cd" | tr -d "b" | tr -s "a" | tr -d "x3" | tr -d "58" | tr -s "8")

#nautilus
/usr/bin/nautilus /home/joan/arthropoda/fotosarthropoda/fotos_que_falten
/usr/bin/nautilus /home/joan/arthropoda/fotosarthropoda/fotos_prov
/usr/bin/nautilus /home/joan/arthropoda/fotosarthropoda/fotos_prov2

#firefox
/usr/bin/firefox http://localhost/arthropoda/ www.flickr.com http://www.biodiversidadvirtual.org/insectarium/ www.google.es &

#gedit
/usr/bin/gedit /home/joan/arthropoda/script_mysql.txt
/usr/bin/gedit /home/joan/arthropoda/per_classificar.txt
/usr/bin/gedit /home/joan/arthropoda/pixtuffarthro/inserts.sql
/usr/bin/gedit /home/joan/arthropoda/pixtuffarthro/updates.sql

#gnome-terminal:
/usr/bin/gnome-terminal --working-directory=/home/joan/arthropoda/scripts
/usr/bin/gnome-terminal --working-directory=/home/joan/arthropoda/pixtuffarthro
mysql -u root -p$MY arthropoda

done

Por cierto, esta semana he abierto una nueva familia de escarabajos: Dasytidae. El bicho me lo han clasificado en IV-biodiversidadvirtual.org, aunque no me han dicho ni el género. Ha sido un poco de lío, pues parece ser que Dasytidae es sinónimo de Melyridae. A veces la ciencia de la taxonomía puede ser muy complicada… Suerte que no me dedico a ello… Yo sencillamente hago fotos de bichos y miro de aprender y maravillarme de lo que nos ofrece la naturaleza.

Mi colección de insectos online:

Portátil de 13 años con puerto paralelo

Ya estoy decidido a conseguir una máquina CNC. Seguramente será la 3040T. Han pasado dos años desde que quería construirme la máquina CNC, o sea que al final me decido por la solución práctica.

He repasado todos los apuntes que tenía de hace dos años, vuelvo a mirar el proyecto LinuxCNC, y veo que las cosas no han cambiado mucho. El puerto paralelo (LPT, conector DB25) continúa siendo necesario. Para comunicarse con máquinas CNC el puerto USB no es una opción fiable, no por la velocidad, sino por la latencia y precisión en el envío de pulsos. Evidentmente hoy día existen soluciones basadas en Raspberry Pi o Arduino, pero no son soluciones estandar en el sentido de que se pueda conectar cualquier máquina CNC. Además, si utilizas una Raspberry Pi como controladora, igualmente necessites el ordenador para diseñar las piezas.

Tenía una torre preparada con LinuxCNC, de hace 2 años, pero buscando una solución más confortable, he pensado en un portátil con puerto paralelo. En el instituto tenemos unos cuantos en el taller para desmontar, y he probado uno, que ha cumplido las expectativas. He instalado LUbuntu 12.04, LinuxCNC, LibreCAD y dxf2gcode, sin especiales problemas. Es un Pentium III a 1,6GHz y 1GB de RAM, y cumple bien las expectativas, un poco lento, claro. Cuando pueda le conectaré los drivers y motores paso a paso que tengo para comprobar que todo funciona correctamente.

Finalmente, Raspberry Pi Zero

Finalmente tengo una Raspberry Pi Zero, comprada en pimoroni.com, por 4 libras (lástima que el envío son 7 ibras más). Como sólo dejan comprar una en cada pedido, tendré que pensar en qué proyecto la utilizaré. La idea inicial es probarla en una máquina de marcianitos tipo arcade stick, pues en este tipo de mueble he tenido problemas de espacio, y me irá ideal el hecho de que los pines GPIO vayan soldados directamente a la placa.

  • 1Ghz, Single-core CPU
  • 512MB RAM
  • Mini HDMI and USB On-The-Go ports
  • Micro USB power
  • HAT-compatible 40-pin header
  • Composite video and reset headers

Enlace oficial de la Pi-Zero

Extraescolar de Robótica en el INS Jaume Balmes

Este curso hemos estado haciendo una extraescolar de Robòtica en el IES Jaume Balmes. En el primer trimestre se vio programación con Python y RUR-PLE. Y este segundo trimestre hemos estado trabajando con Arduino, programación con el robot Zowi, y impresora 3D. Al acabar el curso los alumnos han imprimido unas piezas que han diseñado, y también hemos imprimido una nueva cabeza orejona para el Zowi.

La wiki de la extraescolar:
Extraescolar de Robótica en el IES Jaume Balmes