Arxiu de la categoria: GNU/Linux

Joc del Simon. Extraescolar de Robòtica al Balmes

Ja hem acabat l’extraescolar de Robòtica al Balmes. Aquest any hem programat el joc del Simon amb una Raspberry Pi. Tota la documentació (i la programació didàctica) està a la wiki [1].

Durant aquestes 13 sessions hem anat treballant sobre diferents temes, que ens portaven a l’objectiu final de fer un prototipus de Simon:

  • Hem programat el script amb Python, viatjant per les diferents versions a mida que necessitàvem incorporar noves funcionalitats.
  • Hem connectat botons i LEDs als pins GPIO de la RPi.
  • Hem vist com, utilitzant transistors, podem disparar des dels pins GPIO senyals de 12V per encendre tires de LEDs blancs.
  • Hem discutit sobre l’alimentació de tot el sistema, i alternatives.
  • Hem discutit sobre com produir el so i la seva amplificació.
  • Hem dissenyat el moble final, utilitzant eines de fabricació digital com l’impressora 3D i la fresadora CNC.

Al final ha sigut un curs molt multidisciplinar, hem tocat moltes coses, tot i que per manca de temps, coneixements i d’infraestructura, moltes coses les ha implementat el professor i les ha mostrat a classe. Però al final l’experiència ha sigut enriquidora per tots.

El resultat final es pot veure a la foto i en aquest video:

Referències:

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:

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.

Anar ràpid classificant insectes

Encara tinc per classificar fotos d’insectes d’aquest estiu i de l’anterior. Amb el temps he après a anar més ràpid classificant insectes, i a no perdre temps i encaparrar-me quan no trobo la identificació correcta. A mida d’anar fent-ho he establert un protocol bastant clar per procedir. Bàsicament necessito un editor de text amb 4 ó 5 documents; tres finestres del terminal, un dels quals és el mysql en mode comanda; tres carpetes de l’explorador d’arxius (Nautilus); i tres o quatre finestres del Firefox.

Fins ara ho feia un a un. Ara es tracta de posar-ho tot en un script i així guanyar una mica de temps i comoditat. A més, no cal ficar el password del mysql, que queda ofuscat. El script queda de la següent 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

Per cert, aquesta setmana he encetat una nova família d’escarabats: Dasytidae. Me l’han classificat a IV-biodiversidadvirtual.org, encara que no m’han dit ni el gènere. Ha sigut una mica embolic, doncs sembla ser que Dasytidae és sinònim de Melyridae. A vegades la ciència de la taxonomia pot ser molt complicada… Sort que no m’hi dedico… Jo senzillament faig fotos de cuques i miro d’apredre i meravellar-me del que ens ofereix la natura.

La meva col·lecció d’insectes online:

Portàtil de fa 13 anys amb port paral·lel

Ja estic decidit a aconseguir una màquina CNC. Segurament serà la 3040T. Han passat dos anys des que volia construir-me la màquina CNC, o sigui que al final decideixo tirar pel dret.

He repassat tots els apunts que tenia de fa dos anys, torno a mirar el projecte LinuxCNC, i veig que les coses no han canviat molt. El port paral·lel (LPT, connector DB25) continua sent necessari. Per comunicar-se amb màquines CNC el port USB no és una opció fiable, no per la velocitat, sinó per la latència i precisió en l’enviament de pulsos. Evidentment avui dia existeixen solucions basades en Raspberry Pi o Arduino, però no són solucions estàndar en el sentit de què es pugui connectar qualsevol màquina CNC. A més, si utilitzes una Raspberry Pi com a controladora, igualment necessites un ordinador per dissenyar les peces.

Tenia una torre preparada amb LinuxCNC, de fa 2 anys, però buscant una solució més confortable, he pensat en un portàtil amb port paral·lel. A l’institut en tenim uns quants al taller per desmuntar, i n’he provat un, que ha complert les expectatives. He instal·lat LUbuntu 12.04, LinuxCNC, LibreCAD i dxf2gcode, sense especials problemes. És un Pentium III a 1,6GHz i 1GB de RAM, i compleix prou bé les expectatives, encara que una mica lent, clar. Quan pugui el conectaré als drivers i motors pas a pas que tinc per comprovar que tot funciona correctament.

Finalment, Raspberry Pi Zero

Finalment tinc una Raspberry Pi Zero, comprada a pimoroni.com, per 4 lliures (llàstima que l’enviament són 7 lliures més). Com que només en deixen comprar una en cada comanda, hauré de pensar en quin projecte la faig servir. La idea inicial és provar-la en una màquina de marcianitos tipus arcade stick, doncs en aquest tipus de moble he tingut problemes d’espai, i m’anirà ideal el fet que els pins GPIO van soldats directament a la placa.

    \t

  • 1Ghz, Single-core CPU
  • \t

  • 512MB RAM
  • \t

  • Mini HDMI and USB On-The-Go ports
  • \t

  • Micro USB power
  • \t

  • HAT-compatible 40-pin header
  • \t

  • Composite video and reset headers

Enllaç oficial de la Pi-Zero