Arxiu de la categoria: Joanillo Productions

Amstrad PCW8256. Provant l’emulador Joyce



Aquests últims dies he reviscut l’ordinador Amstrad PCW8256 que teníem per casa els cap al 1986. El feia servir el meu pare per escriure, però també el féiem servir pels treballs de l’insti. Anava amb una pantalla monocroma verda, el teclat i la impressora d’agulles. Tota l’electrònica estava en el monitor, fins i tot la placa de l’impressora. I en el monitor també hi havia la disketera de 3”, que tenia dues cares.

He instal·lat el Joyce a la Raspberry Pi, i m’ha agradat molt reviure aquest sistema. Evidentment, s’ha d’escollir l’opció de lletres verdes, simulant la pantalla de fósfor verd.

L’ordinador venia amb dos disketes, que eren discs d’arrencada. El primer era el CP/M, el sistema operatiu, des del qual es podia accedir a l’intèrpret de Basic (Mallard Basic). El segon diskette, també bootable, era el Locoscript, que és el processador de textos amb què venia. He fet un document amb LocoScript sobre els rius de Catalunya, simulant com si fos un treball de l’insti.

També he jugat una estona al Tetris. L’emulador emula molt bé la màquina original. Si vols jugar al Tetris, has de fer eject del disket inserit (el CP/M)(el SO ja està carregat a la RAM), i ficar el disket del Tetris (Insert). Aleshores, ja des de la línia de comandes, ja es pot cridar a l’executable i jugar al Tetris, com es veu en la imatge.

Quins temps aquells! El link a la wiki:

Calibració del sensor de temperatura DS18B20

Ja tinc pràcticament enllestit el projecte IoT amb una REST Api [3][4] per llegir la temperatura d’un sensor DS18B20.

El problema (i greu) és que les temperatures que estic agafant del sensor són errònies. Per saber quina és la temperatura real en el meu barri (Gràcia-Barcelona) agafo com a referència la web de meteo.cat. L’estació meteorològica automàtica més propera és la de Zona Universitària, tot i que en realitat la temperatura no serà la mateixa ben bé. El carrer Joan Blanques, on tinc el sensor, és estret i enmig de la ciutat i el barri; la Zona Universitària és un espai més ample i obert, possiblement les temperatures mínimes tendeixen a ser més baixes…

Calibrar el sensor DS18B20 pot ser una tasca difícil. Aquí tenim un article [1] molt interessant sobre com procedir per la calibració. L’article és realment interessant, però no tinc el temps (ni les ganes) d’implementar-ho. El que sí que hauria d’haver fet, i això era fàcil, era adquirir 10 sensors DS18B20 (són baratos), descartar aquells que es desvien bastant de la temperatura real, i fer que les meves mostres siguin una mitjana dels altres sensors no-descartats, per exemple 5. Això no és cap problema, a la RPi tinc molts pins GPIO disponibles.

Una altra possibiltiat és utilitzar un altre sensor de temperatura. Per exemple, utilitizar el BMP280, que a més de la temperatura també tinc la pressió i la humitat relativa (i és barato). És molt interessant aquest article [2] on s’utilitza el BMP280 per construir una estació meteorològica alimentada per penell solar.

La conclusió és que confiar en què el sensor que tinc doni la temperatura correcta és un greu error. L’objectiu del projecte és fer un exemple didàctic de IoT, RestFul API, i gràfiques com a frontend. Això s’ha acomplert, ara només falta que la temperatura que llegeixo sigui real. Per tant, el que faré és mirar de fer una recta de regressió per aproximar-me a la temperatura real a partir de les dades que em dóna el meu sensor, suposant que la millor aproximació és una recta.

En la imatge es poden veure dues gràfiques. En la de dalt es veu la diferència entre la temperatura real i la del meu sensor. En la de baix es pot deduir la recta de regressió per convertir les dades del sensor a dades reals. De totes maneres, aquestes dades es corresponen a dos dies i mig. Esperaré una setmana més (i que pugin les temperatures del mes de maig, i així tenir més rang) per poder fer una recta de regressió.

Enllaços:

Internet of Things, Restful API amb Python i Flask, Raspberry Pi Zero i sensor de temperatura

Estic muntant un projecte acadèmic de Internet of Things. Es pretén mesurar la temperatura exterior del meu barri amb un sensor DS18B20 connectat a una Raspberry Pi Zero. Tal com es veu a la foto, he hagut de connectar un llapis Wifi USB. Idealment seria millor fer el projecte amb la nova Raspberry Pi Zero W que acaba de sortir fa un mes, i que porta wifi incorporat.

La temperatura es va gravant cada 10 minuts a una base de dades MongoDB. La part més interessant del projecte és programar una Restful API, i per fer-ho ho faré amb Python i el microframework Flask, a partir d’algun exemple que he trobat (veure els enllaços). En la versió 1 només hi havia un servei, que era bolcar totes les temperatures. La versió 2 ja fa més coses: bolcar totes les temperatures; recuperar la temperatura actual; filtrar per un dia; filtrar per varis dies al mateix temps.

Una altra part important és la capa de presentació, i per fer-ho utilitzo la llibreria Highcharts.com, que dóna uns resultats molt espectaculars. Per cada funció de la API es donarà un exemple html, per exemplificar com podem digerir les dades.

En les futures versions de la API es calcularan les mitjanes de temperatura diàries, mensuals i anuals, de manera que es puguin fer comparatives entre dies, mesos,… De moment encara no està disponible.

La API encara no és pública, estic en fase de desenvolupament. En el moment que sigui estable i pública ja ho anunciaré. De moment la tinc dins de casa, sota els efectes del termostat de la calefacció, amb la qual cosa els resultats no són interessants. Però la idea és després de Setmana Santa traslladar-ho tot al local, el sensor a l’exterior, i la Raspberry Pi dins del local. Es podrà accedir a la API en el domini http://joanqc.no-ip.biz/, però encara no està disponible.

La idea de desenvolupar aquesta API és, a part de què programar és divertit, poder utilitzar open data en format JSON a l’assignatura de Javascript (M06) en el cicle de Desenvolupament d’Aplicacions Web (DAW), a l’institut. Evidentment, hi ha molts exemples disponibles d’open data i format JSON. Però un exemple on els alumnes vegin d’on surten realment les dades, sempre serà interessant.

En el primer enllaç tenim la documentació i discussió de tota la posta a punt. És el punt de partida principal si es vol reproduir el projecte. En el segon enllaç es documenta la API, en les seves diferents versions.

Adaptació dels emuladors MAME i gngeo per limitar el temps de partida

Tenia pendent des de l’octubre aconseguir aquesta funcionalitat. Es tracta d’una màquina en que l’operació està controlada pel temps. Una moneda són 15 minuts de joc. Els emuladors MAME i gngeo (NeoGeo) tenen el botó de COIN que permet donar crèdits per jugar. Ara bé, el moneder controla el comptador de temps, i és necessari ficar monedes per donar temps a les partides. La comunicació entre el front-end i els dos emuladors es fa senzillament amb un fitxer de text on es llegeix i es grava el valor del comptador. La funcionalitat implementada és:

  • Quan estic en el front-end el temps no corre. Si es fica una moneda, suma el temps establert (15 minuts per defecte).
  • Quan entro a l’emulador (mame4all o gngeo), es llegeix el valor del temps restant, i comença a descomptar el temps, que està sempre visible.
  • Des de l’emulador puc ficar una moneda, suma el temps, i s’actualitza el comptador correctament.
  • Quan sortim de l’emulador i tornem al frontend, el temps queda ben guardat.
  • Si mentre jugo s’acaba el temps, es retorna al front-end, esperant la inserció d’una nova moneda.

Canvis en el codi i documentació:

    \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

I el video:

Màquina recreativa Big Arcade

Big Arcade

Big Arcade

Ja tinc acabada la nova màquina de peu , que anomenaré Big Arcade. El disseny ve directament d’un client que em va fer la petició (suposo que va trobar les mides per Internet), i realment m’agrada. En aquesta màquina s’ha cuidat uns quants detalls. Concretament, s’ha posat un moneder de Industrias Lorenzo, s’ha cuidat del so, una TV de 21 polzades, vidre protector, i s’ha millorat la col·locació i els acabats de la marquesina.

Quant al monitor, vaig aconseguir una TV de 21”, tot i que malauradament només té una resolució de 640x480px. Tot i que la resolució no és cap meravella, al final m’agrada aquests pixels una mica grossos, i és un consol saber que puc montar màquines amb aquesta resolució. En aquesta ocasió el cable HDMI to VGA no m’ha donat problemes, i això és un gran avanç doncs tinc una pista de per què en anteriors ocasions havia tingut tants problemes amb aquesta mena de cables.

Una altra millora que he fet en aquesta màquina és poder canviar el volum apretant dos botons, una solució totalment software, tant en el front-end com en els emuladors. Aquesta és una solució bona doncs ja no cal accedir al potenciòmetre de l’amplificador de so.

En definitiva, una nova màquina en què he implementat unes quantes millores en la construcció i en els acabats. Una màquina per disfrutar construint-la i jugant-la.

I el video:

Minesweeper-pescamines-buscaminas amb Javascript

El Pescamines (Buscaminas, Minesweeper) és un dels 1001 videojocs a què has de jugar abans de morir. Si tens una certa edat, segur que te n’has afartat, perquè el Pescamines ha vingut en les diferents versions de Windows fins al Windows 7.

Existeixen diferents versions per jugar online. Concretament, amb els alumnes hem agafat la versió en Javascript de Andrew D. Birrell, que ja té uns anys, i l’hem actualitzat en diferents aspectes. Quant a Javascript, s’ha generalitzat a NxM cel·les. Això implica crear la taula de forma dinàmica (createElement), i també els events (addEventListener). Recordar que en el pescamines hem de distingir entre el botó esquerre i el dret del ratolí.

A més, hem afegit una capa de programació amb PHP i MySQL. Ara que estem estudiant crides asíncrones amb AJAX, hem creat una taula MySQL, i podem registrar l’usuari i fer estadístiques de les millors puntuacions.

Pots provar el Pescamines a:

El video del moble de pinball

La màquina de pinball ja no em pertany, o sigui que li he fet un bon reportatge de fotos i el video. Ja tinc unes quantes millores pensades per quan n’hagi de fer una de nova. M’agradaria posar un plunger amb molla, amb un sensor de força, per disparar la bola. No és cap invent, el Virtual Pinball ja ho té previst. I també, clar, ficar un moneder.

Aquesta setmana anirá a Sant Climent de Llobregat per aconseguir un moneder de Industrias Lorenzo, que he de ficar en una màquina. Caríssim, a part de què perdré mig matí per anar-lo a buscar. Miraré de fer i documentar un moneder de 50 cts amb frontal de ferro, negre, i botó il·luminat. Crec que pot quedar bé.

Aquí va el video, i l’enllaç a Retroplaneta:

Màquina de Virtual Pinball acabada!

Ja tenim aquí la virtual pinball coffee table. Han passat 11 mesos des que vaig iniciar el projecte (amb moltes coses pel mig). Al final s’ha utilitzat PinballX com a frontend i Visual Pinball 9 com a emulador de taules pinball en format FS (fullscreen). Aquests programes corren sota Windows, no utilitzava Windows des de feia molt de temps… S’han incorporat 200 taules que s’han testejat, intentant que fossin el més representatives de les diferents èpoques i fabricants.

En molts casos s’ha hagut de tocar els scripts associats a les taules per tal de què la taula arrenqui bé i que sortís el score de forma correcta. Les taules que han portat més feina són les més antigues (EM, electro-mecàniques), on s’han hagut de reposicionar els reels dels scores.

Els high scores de quasi totes les taules són molt difícils de batre. S’ha fet la feina de rebaixar els high scores tocant en el fitxer nvram els valors hexadecimals associats al high score. En la majoria dels casos s’ha aconseguit. D’aquesta manera és fàcil batre el rècord i poder ficar les inicials en acabar la partida (JQC en el meu cas). És un bon exemple i un bon exercici de hacking de fitxers binaris.

Després de passar-me temps jugant i provant aquestes taules, puc dir que les que més m’han agradat són les taules electro-mecàniques dels anys 60 i 70. Valoro d’elles la simplicitat del joc i netedat del disseny. Millor que les taules lluminoses i estressants dels models d’estat sòlid (SS).

És impossible jugar i conèixer en profunditat totes aquestes taules. En general les regles són bastant difícils d’entendre i digerir, i jo sóc un tipus de jugador que en tinc prou amb què no em caigui la bola entre els flippers. La idea és agafar 4 ó 5 taules preferides i jugar amb aquestes, conèixer-les més a fons, i intentar batre el récord una i una altra vegada.

Hi ha taules que són molt ràpides i estressants. Però n’hi ha d’altres que són més tranquiles i on la bola no va tan ràpida. És important tenir en ment aquestes taules pensant que els nens o gent gran també s’ho puguin passar bé fent unes partidetes.

El hardware que s’ha utilitzat finalment:

    \t

  • HP Elite 8000 Dual Core 3,2GHz SFF (Small Form Factor), 4GB de RAM i 250GB de Disc Dur
  • \t

  • Gràfica: ATI 5770 DDR5
  • \t

  • 2 fonts d’alimentació (la placa base era SFF)
  • \t

  • I-PAC, 8 botons
  • \t

  • TV 32 polzades

Pressupost final: 500 euros.

S’han utilitzat 8 botons. En el frontal 4 botons il·luminats: Coin, Start, Exit, Plunger. En els laterals botons per als flippers i botons per pujar i baixar el so. A més, els botons tenen doble funció depenent de si estem en el front-end on en l’emulador.

Val a dir que jo no coneixia massa del món Pinball abans d’aquest projecte. De petit hi havia jugat alguna vegada, però molt poc, la veritat. M’ha agradat molt endinsar-me en aquest món, ara ja en sóc un fan. En resum, una màquina que promet moltes hores d’entreteniment, en format coffee table. Fantàstica per competir per parelles i passar una bona estona. Fantàstic per reviure el món dels pinballs (o petacos, màquines del millón). De totes formes, és bo de tant en tant poder fer una partida a un pinball de veritat, com el que hi ha a la Plaça Joanich (Bar De Copas).

OpenCV i C++

Un projecte per al 2017 serà una recreativa de dards. La idea no és original. Es tracta d’utilitzar una diana de dards real, de suro, i els corresponents dards de punta metàl·lica, i amb un sistema de visió artificial ser capaç de saber en quin sector hem tocat.

La solució passa per tenir dues webcams connectades a la Raspberry Pi, doncs amb una sola webcam no es pot aconseguir prou precisió. S’haurà de fer bastantes proves per tal d’aconseguir fiabilitat en la determinació de la posició del dard. En principi compto en què dues webcams barates i compatibles amb la RPi (per exemple la Logitech Quickcam Express) connectades a una sola Raspberry Pi puguin fer el fet, ja veurem si serà possible.

Mentrestant he instal·lat OpenCV a una Raspberry Pi 3 i estic fent les primeres proves amb OpenCV: capturar un frame de la webcam; diferència entre dues imatges; convertir una imatge a gris; convertir una imatge a binari a partir d’un llindar; detecció d’un color; detecció d’una forma; detecció dels contorns i centre de masses,… Tot amb C++. Realment és divertit això del OpenCV.

A edx.org hi ha un curs de OpenCV.

Esperem que tot funcioni sense massa contratemps. El següent pas seria fer la interfície d’usuari que ens permetrà jugar als jocs més populars de dards: 301, 501, Cricket,… i construir un moble. M’imagino una fusta gran amb la diana a la dreta, una pantalla de 15” (protegida per un vidre) a l’esquerra, i una marquesina retroiluminada on estan amagades les dues webcams dirigides a la diana. Ja veurem, tot està per fer.