Salta el contingut

Exemple de Memòria de Projecte

Què és aquest document

Aquesta pàgina recull un projecte fictici totalment desenvolupat, organitzat segons les 5 fases del M0379, per il·lustrar el nivell de detall, d'estructura i de justificació tècnica que s'espera en cadascun dels entregables del mòdul (vegeu Fase 1 a Fase 5).

No és un enunciat ni un model a copiar. El projecte triat aquí — un sistema de bitlletatge electrònic per a l'autobús urbà de Blanes — és només un exemple que compleix els criteris de selecció de projecte: té un caire social (millora un servei públic), està arrelat al territori (línia L2 de Blanes) i té relació amb el turisme de la Costa Brava.

Canvi respecte a promocions anteriors

Fins ara, el mòdul es treballava amb una sèrie de mini-projectes tancats, amb tecnologies concretes que l'alumnat no havia vist durant el curs, assignats pel professorat. A partir d'ara, és l'alumnat qui ha de pensar la seva pròpia idea, aplicant els criteris socials i de territori de la Fase 1, i triar les tecnologies que consideri més adients per resoldre-la — les que apareixen en aquest exemple, o d'altres més modernes — justificant sempre la tria a la Fase 2. Les tecnologies i versions concretes citades en aquest document eren les estables en el moment de redactar-lo; cal comprovar-ne sempre la vigència abans d'utilitzar-les en un projecte real.


Fase 1 — Document d'identificació de necessitats

Context i justificació

Blanes disposa d'una línia d'autobús urbà, la L2 Urbà Blanes, de traçat circular amb una quarantena de parades, operada per Moventis Costa Brava, amb origen i final a l'Estació d'Autobusos de Blanes. Es tracta d'un cas d'ús real i acotat (una sola línia, un nombre de parades conegut) sobre el qual es pot dissenyar un sistema complet sense haver de gestionar la complexitat d'una xarxa multimodal com la de Barcelona.

Necessitat identificada: l'operador no disposa d'un sistema de bitlletatge electrònic propi que permeti conèixer l'ús real del servei (nombre de viatges, franges horàries, fidelització) ni oferir tarifes bonificades gestionades digitalment.

Recomanació pràctica: abans de començar un projecte d'aquest tipus amb una entitat real, cal sol·licitar una reunió breu (real o simulada) amb la part interessada (en aquest cas, l'àrea de Mobilitat de l'Ajuntament de Blanes) per confirmar l'abast, el pressupost orientatiu i si ja existeix algun sistema amb el qual calgui integrar-se. Això converteix el projecte en un exercici d'enginyeria de requisits real, no només d'implementació tècnica.

Objectius didàctics

  • Dissenyar, construir, desplegar i documentar un sistema distribuït d'extrem a extrem, que integri electrònica/maquinari IoT, contenidors, orquestració i serveis de backend.
  • Construir físicament almenys un dispositiu real (no només simular-lo per programari).
  • Treballar en equip seguint una metodologia de gestió de projectes (Scrum o Kanban).
  • Aplicar criteris de seguretat, alta disponibilitat i monitorització propis del cicle ASIX.

Relació amb els mòduls del cicle

Mòdul professional Contingut que aporta al projecte
Administració de sistemes operatius Gestió de servidors Linux, usuaris, serveis systemd a les Raspberry Pi
Serveis de xarxa DNS, DHCP, servidor web, proxy invers, VPN entre seus
Seguretat i alta disponibilitat TLS, gestió de secrets, balanceig de càrrega, rèpliques, còpies de seguretat
Implantació de sistemes operatius Provisionament automatitzat d'imatges (Ansible, cloud-init)

Fase 2 — Document de disseny

Visió general del sistema

El sistema té cinc grans blocs:

  1. Màquina d'expedició i recàrrega de targetes (back-office físic): dispositiu fix on es donen d'alta targetes noves i es recarrega saldo.
  2. Màquina validadora a bord de l'autobús (edge/IoT): llegeix la targeta quan el viatger hi puja i registra el viatge.
  3. Transport de dades en temps real: comunicació entre dispositius i el backend mitjançant MQTT.
  4. Backend, persistència i explotació: API, base de dades i lògica de negoci, en contenidors orquestrats.
  5. Dashboard de seguiment: visualització de l'ús del servei per a l'ajuntament.
flowchart TB
    U[Viatger amb targeta NFC] -->|alta / recarrega| MX[Maquina d'expedicio\nRaspberry Pi + pantalla + lector NFC]
    U -->|validacio en pujar| MV[Maquina validadora al bus\nRaspberry Pi + Arduino + NFC]
    MX -->|MQTT sobre TLS| BR[Broker MQTT\nEclipse Mosquitto a k3s]
    MV -->|MQTT sobre TLS| BR
    BR --> ING[Servei d'ingesta\nsubscriptor MQTT]
    ING --> BD[(Base de dades\nPostgreSQL)]
    BD --> API[API REST]
    API --> DASH[Dashboard de seguiment\nGrafana]
    API --> MX

Tot el bloc de backend (broker, ingesta, base de dades, API, dashboard) es desplega com a contenidors orquestrats amb Kubernetes (k3s). Els dos dispositius físics són clients d'aquest sistema central i s'hi comuniquen mitjançant MQTT.

Maquinari (BOM orientatiu)

Component Model recomanat Funció
Ordinador de control Raspberry Pi 5 (4 GB) Executa el sistema operatiu i el client que parla amb el backend
Lector/escriptor NFC Mòdul PN532 (13,56 MHz, SPI/I2C) Llegeix l'UID de la targeta
Pantalla (màquina d'expedició) Pantalla tàctil oficial de 7" Interfície d'usuari
Microcontrolador de feedback (validadora) Arduino Uno/Nano Controla el LED RGB i el brunzidor de feedback immediat
Connectivitat (validadora) Mòdul 4G LTE amb GNSS integrat Connexió mentre el bus circula, amb posicionament
Alimentació (validadora) Convertidor DC-DC 12-24V a 5V/5A Alimentació estable des de la bateria del vehicle

Els preus i la disponibilitat del maquinari IoT (Raspberry Pi, mòduls electrònics) evolucionen ràpidament; cal comprovar-los sempre en el moment de comprar-los, i pressupostar amb el model més econòmic que compleixi els requisits.

Model de dades (esquema relacional)

CREATE TABLE targetes (
  uid              VARCHAR(32) PRIMARY KEY,
  tipus            VARCHAR(20) NOT NULL,  -- 'ocasional','abonament','bonificada','control'
  saldo            NUMERIC(8,2) DEFAULT 0,
  viatges_restants INTEGER DEFAULT 0,
  data_alta        TIMESTAMP NOT NULL DEFAULT now(),
  actiu            BOOLEAN DEFAULT TRUE
);

CREATE TABLE validacions (
  id          BIGSERIAL PRIMARY KEY,
  uid_targeta VARCHAR(32) REFERENCES targetes(uid),
  bus_id      VARCHAR(20) NOT NULL,
  linia       VARCHAR(10) NOT NULL,
  ts          TIMESTAMP NOT NULL,
  resultat    VARCHAR(20) NOT NULL,
  latitud     NUMERIC(9,6),
  longitud    NUMERIC(9,6)
);

Missatgeria: esquema de topics MQTT

Topic Ús
blanes/l2/{bus_id}/validacions Cada validació feta a bord d'un bus concret
blanes/l2/{bus_id}/estat Missatges periòdics d'estat del dispositiu (bateria, connexió, GPS)
blanes/expedicio/{maquina_id}/operacions Altes i recàrregues fetes a cada màquina d'expedició
blanes/config/{dispositiu_id} Topic en sentit invers: el backend envia configuració o ordres

MQTT s'ha triat per damunt d'HTTP perquè manté (quan pot) una connexió persistent i lleugera amb el broker, i inclou mecanismes de QoS i sessió persistent que faciliten no perdre missatges durant talls breus de connexió — exactament la situació d'un autobús en moviment.

Seguretat (checklist transversal)

Capa Mesures a aplicar
Dispositius (expedició i validadora) TLS en totes les comunicacions; accés SSH només amb clau pública
Broker MQTT Autenticació per usuari/dispositiu; llistes de control d'accés (ACL) per topic; certificat TLS vàlid
Backend / API Autenticació per token (JWT); validació estricta de totes les dades d'entrada
Base de dades Usuari amb permisos mínims (mai l'usuari administrador per a l'aplicació); còpies de seguretat xifrades i periòdiques
Dades personals Ús exclusiu de dades fictícies generades pels alumnes; cap vinculació real de targetes a noms o DNI reals

Aquesta taula es pot fer servir directament com a llista de verificació abans de la presentació final del projecte, i és el tipus de contingut que es demana també al pla de seguiment i control de la Fase 4.


Fase 3 — Pla d'execució

Repartiment en equips de treball

Equip Responsabilitat
A — Màquina d'expedició Munta el maquinari, en programa la interfície gràfica i la lògica d'alta/recàrrega, documenta el manual d'ús
B — Màquina validadora Munta el maquinari, programa la màquina d'estats de validació i la cua local, prova la connectivitat intermitent
C — Missatgeria i orquestració Desplega el broker MQTT, primer amb Docker i després amb k3s; en configura la seguretat
D — Backend i base de dades Dissenya el model de dades, implementa el servei d'ingesta i l'API REST
E — Explotació i dashboard Construeix el dashboard, valida la checklist de seguretat, prepara la documentació i presentació final

Cronograma orientatiu (un trimestre, 12 setmanes)

Setmanes Fita
1-2 Anàlisi de requisits, disseny de l'arquitectura, repartiment d'equips
3-4 Primers prototips aïllats de cada component, incloent el primer muntatge físic
5-6 Primera integració física: la validadora llegeix una targeta real i dona feedback; l'expedició crea una targeta nova
7-8 Connexió de totes dues màquines amb el broker MQTT; primer missatge real de cap a cap fins a la base de dades
9-10 Dashboard funcional; seguretat aplicada; proves de talls de connexió
11 Proves d'acceptació conjuntes, correcció d'errors, documentació final
12 Presentació final

Fase 4 — Pla de seguiment i control

Criteris d'avaluació orientatius (KPIs del projecte)

Criteri Pes orientatiu
Funcionament físic real de la màquina d'expedició 15%
Funcionament físic real de la màquina validadora (incloent la cua local en cas de tall de connexió) 20%
Funcionament end-to-end del sistema complet 15%
Qualitat del desplegament amb contenidors/k3s 15%
Seguretat aplicada (TLS, gestió de secrets, control d'accés) 15%
Documentació tècnica (arquitectura, manual d'instal·lació i d'usuari) 10%
Treball en equip i seguiment de la metodologia 5%
Presentació final 5%

Aquests criteris es concreten per a cada projecte real dins la rúbrica de cada fase i la rúbrica global del mòdul.

Riscos i recomanacions

  • Maquinari i pressupost: el mercat de components IoT (Raspberry Pi, mòduls electrònics) pot patir tensions de preu i subministrament; cal pressupostar amb marge i confirmar disponibilitat amb antelació. Si no hi ha prou unitats físiques per a tots els equips, els blocs que no en depenguin directament poden treballar contra un simulador en programari sense perdre valor didàctic.
  • Abast i expectatives: cal deixar clar que es tracta d'una prova de concepte educativa, no d'un sistema que substituirà un servei real sense un procés molt més llarg de validació amb l'operador.
  • Protecció de dades: si en algun moment es vincula un dispositiu a dades reals d'una persona, cal tractar-ho amb cura (RGPD); es recomana treballar només amb dades fictícies generades pel mateix alumnat.

Fase 5 — Informe d'execució

Abast de la implantació real

Donat el temps disponible, no cal implementar el sistema complet: cada equip ha d'implantar i verificar una part real i funcional del seu bloc (per exemple, l'Equip B pot limitar-se a demostrar la lectura NFC amb feedback lluminós i l'enviament d'un missatge MQTT real, sense necessitat del mòdul 4G complet).

Verificació i proves

  • Prova de lectura NFC en menys d'un segon, amb feedback visual/sonor immediat.
  • Prova de funcionament sense connexió: la cua local (per exemple, amb SQLite) ha de reenviar les dades pendents quan es recupera la connexió.
  • Prova end-to-end: una validació feta al dispositiu físic ha d'aparèixer al dashboard en temps (quasi) real.

Documentació a lliurar

  • Documentació d'administrador: com desplegar de nou el sistema, com fer i restaurar una còpia de seguretat, com consultar registres.
  • Guia d'usuari: dirigida al personal de l'oficina d'expedició, sense llenguatge tècnic.

Per anar més enllà (ampliació opcional)

Els equips que acabin amb marge poden treballar un exercici de prospectiva: com caldria redissenyar el sistema si, en lloc d'una línia i un o dos vehicles, calgués donar servei a tota una xarxa de transport de ciutat (desenes de línies i centenars de vehicles). No es tracta de construir-ho físicament, sinó de raonar i justificar els canvis d'arquitectura necessaris:

Component A escala petita (aquest exemple) A escala de ciutat
Broker de missatgeria Un sol node (Mosquitto) Broker amb clustering natiu (per exemple EMQX), en diversos nodes
Orquestració k3s en una sola Raspberry Pi Clúster Kubernetes multi-node amb autoescalat
Base de dades PostgreSQL en una sola instància PostgreSQL distribuït (per exemple amb l'extensió Citus) i rèpliques de lectura
Gestió de dispositius Configuració manual Aprovisionament automàtic i infraestructura de certificats (PKI) pròpia

Aquest exercici connecta directament amb els continguts de Seguretat i Alta Disponibilitat i és una bona manera de demostrar que un disseny "funciona en una maqueta" és una cosa diferent de "funcionaria en producció a gran escala".