Con los equipos ya preparados y el Arduino IDE instalado, sólo resta trabajar como un equipo cualquiera con Linux instalado, ya que de hecho el Raspbian es una distribución de Debian.
Hay que seleccionar modificar los atributos del puerto USB para poder trabajar con él en modo escritura, según se ve en la imagen:
Una vez hecho eso, ya se puede seleccionar como puerto a usar, con la placa conectada en dicho puerto:
Con los detalles hardware resueltos, se resuelven los aspectos software que cualquier proyecto tiene: librerías, código específico, dependencias…
Este post es extenso, porque trata de documentar todo el proceso desde juntar componentes sueltos hasta tener una Raspberry PI con un disco duro SSD funcionando con un monitor y teclado acoplados para usarla como instrumento de programación de microcontroladores tipo Arduino, así como la programación de ella misma. Esta documentación ha sido elaborada por un grupo de alumnos de primero de Mantenimiento Electrónico del curso 2024-2025.
ÍNDICE
Objeto
Características de la placa
Materiales
Instalación del SO en tarjeta SD
Configuración e instalación dentro de la Raspberry Pi
Configuración del disco duro M2
Ajustes de carcasas y montaje
Instalación de Arduino
Conclusiones y problemas
Objeto
Creación y puesta en marcha de puestos de trabajo compactos para programación de microcontroladores y microprocesadores empleando hardware y software libre.
Características de la placa
La Raspberry Pi 5 es un ordenador monoplaca de bajo consumo diseñado para el desarrollo de proyectos de electrónica e informática, desarrollada y fabricada por la Raspberry Pi Foundation en Reino Unido.
Las características de la placa que poseemos son las siguientes:
Procesador Broadcom BCM2712 de 2.4GHz de 64 bits ARM
GPU VideoCore VII Vulkan 1.2
Salida doble de HDMI 4K a 60FPS con soporte HDR
RAM LP DDR4X-4267 SDRAM, en este caso de 8GB
Dual-band 802.11ac Wi-Fi®
Bluetooth 5.0 / Bluetooth Low Energy (BLE)
MicroSD card slot, with support for high-speed SDR104 mode
2 puertos USB 2.0 y 2 puertos USB 3.0
Gigabit Ethernet, with PoE+ support
Materiales
Los materiales que empleamos para este proyecto son:
Kit de Inicio Raspberry Pi 5 8GB (fuente, caja con ventilador, microSD, cable mHDMI). https://www.raspipc.es/
Para el sistema operativo, Raspberry Pi nos facilita un sistema operativo llamado Raspbian. Una distribución de Linux basada en Debian que se instala de manera online mediante la aplicación Raspberry Pi Imager.
Es una herramienta que se encarga de grabar la imagen del sistema operativo en una memoria extraíble. Es muy útil ya que siempre está actualizada al momento y selecciona de manera fiable la mejor versión para nuestra placa.
Seleccionamos el modelo de nuestra placa, la Raspberry Pi 5.
Elegimos el sistema operativo, la versión de 64 Bits.
Y por último, el almacenamiento de 32 GB para la SD.
Una vez todo seleccionado, le damos a Siguiente. Nos saltará una ventana para poder realizar unos ajustes, como el nombre y contraseña de usuario que se crea, ambas las dejaremos como admin.
Le damos a Guardar y le damos a la anterior opción de Si. Esto hará que empiece la instalación.
Configuración e instalación dentro de la Raspberry Pi
Cuando termine de grabar la imagen en la SD, la colocaremos en la Raspberry Pi. Al encenderla comenzará la instalación dentro de ella. Realizaremos los pasos que nos pide hasta que entremos en el escritorio.
Configuración del disco duro M2
Una vez terminado, configuraremos la M2. Primero de todo, descargaremos la aplicación GParted, para poder formatear y crear particiones de discos conectados a la placa.
Abriremos una terminal con el atajo Ctrl + Alt + T, y ejecutaremos el comando:
sudo apt-get install gparted
Al terminar de instalar y ejecutarlo, deberá aparecer en la parte superior derecha el nombre del disco a formatear. Elegiremos la memoria de 250GB y la formateamos en el formato exFAT.
Una vez formateado, iremos al menú de la Raspberry pi, arriba a la izquierda, iremos a la sección de herramientas y ejecutaremos el programa “SD transfer”. Elegiremos la ubicación a copiar como la SD y el destino de la copia de la M2.
Una vez que termine la copia, abrimos otra terminal y escribimos:
sudo raspi-config
Sale una pantalla azul con varias opciones. Elegiremos la número 6: “Advanced option”, y de las que nos ofrece, elegiremos primero “Bootloader options” y de ahí elegiremos la opción de la versión más nueva.
De ahí se vuelve a la primera opción. Elegimos “6.Advanced option”, y la opción de “Boot order”. Elegimos la opción para que inicie primero el PCIE, donde está el disco duro conectado, antes que el SD. Haremos un reinicio para aplicar los cambios y podremos retirar la SD para comprobar que la M2 tenga el sistema operativo correctamente instalado.
Hemos de admitir que durante la instalación hemos tenido problemas a la hora de detectar la M2. Hemos probado a cambiar las velocidades de lectura, habilitar el puerto PCIe desde comandos, formatear la M2 desde otro ordenador, sin resultados concluyentes.
En principio, la Raspberry Pi funciona bien sin la M2, pero tendrá poco almacenamiento.
Bueno, mientras investigamos cómo arreglar este asunto, instalaremos las aplicaciones de Arduino IDE y Ice Studio para la programación de las placas Arduino y otros microcontroladores, así como para programar FPGAs.
Lo haremos mediante el comando:
sudo apt-get install arduino, para Arduino.
sudo apt-get install icestudio, para Ice Studio. Esto realmente da problemas, ya que no está compilado para Raspberry PI.
Y con esto concluye la instalación y configuración.
Ajustes de carcasas y montaje
Una vez todo instalado, podemos pasar al hardware. Lo primero que realizamos es unos ajustes a la tapa de la carcasa metálica, que debido a un error, no coincide con los puertos de la Raspberry PI. Con una lima y marcando con un permanente las zonas a eliminar, iremos poco a poco limando para que se ajuste a la placa.
También limamos la parte trasera para que pase el flexo del M2.
Colocaremos el flexo en el puerto de PCIe de la Raspberry PI.
Con todo a su debida medida, pondremos primero la Raspberry PI en la carcasa y la atornillamos.
Colocamos el M2 en su adaptador y lo atornillamos para que se quede fijo
Conectamos el otro extremo del flexo en el adaptador
Y a continuación atornillamos el adaptador a la caja de la Raspberry Pi, y así lo tendremos todo en un mismo bloque.
Después usando una placa de metal cortada tomamos medidas y hacemos 8 orificios para los tornillos, 4 para la caja de la Raspberry PI y otros cuatro para fijarlo en la parte trasera del monitor
Lijamos las partes sobrantes de los orificios y le damos una mano de un producto que elimina la gran mayoría del óxido para que la placa quede mucho más limpia.
Lo dejamos reposar un tiempo y después pasamos un paño para quitar la suciedad y el líquido sobrante del producto, después atornillamos la Raspberry en la placa
Una vez atornillado la caja a la placa la pondremos en la parte trasera del monitor y lo atornillaremos a este.
Como último destornillamos la tapa superior de la caja y conectaremos los cables para poder acceder a los GPIO de la Raspberry PI y con esto concluye su montaje
Instalación de Arduino
Una vez hecha la instalación del SO y el montaje físico de la Raspberry PI instalaremos los programas que usaremos, aunque en este caso solo va a ser el programa de Arduino, ya que Ice Studio es incompatible con el SO que usa la Raspberry.
Para la instalación de Arduino nos iremos a la consola de comandos y escribiremos el comando:
sudo apt install arduino
Esto lo que hará es instalar automáticamente el programa en nuestro sistema.
Una vez instalado simplemente iremos a la aplicación de Arduino y lo abriremos, y con esto estará listo para usarlo.
Conclusiones y problemas
Como problemas principales que nos hemos topado en la realización de este proyecto serían la imposibilidad de instalar el Ice Studio en nuestro sistema, ya que por incompatibilidad de software este no se puede integrar en el SO que usa Raspberry, y otra parte de la práctica que no hemos podido completar debido a fallos que hemos achacado a la combinación de adaptador y disco duro M2, el uso de este último como contenedor del SO, por lo que hemos tenido que usar la tarjeta SD como almacenamiento interno y del SO.
Como peculiaridad en uno de los 3 montajes el M2 y su adaptador si funcionan correctamente.
Como adición a futuros proyectos, se podría añadir una webcam encima del monitor.
Esto es algo que últimamente ha traído de cabeza a un alumno (y a mí de camino) para hacer funcionar algo que realmente no es nada complicado y que hemos hecho funcionar mil veces con Arduino UNO, Mega y D1 mini. Total, cosas a recordar:
TX del micro, pin 7 en nuestro caso, que se corresponde con el RX del periférico (DFPlayerMini)
RX del micro, pin 3 en nuestro caso, que se corresponde con el TX del periférico (DFPlayerMini)
Uso de HardwareSerial en lugar de SoftwareSerial, que es la forma de comunicar con UART del ESP32 (SoftwareSerial se usa con los Arduino).
UART2, que es la configurable en cualquier pin (esto es un puntazo del ESP32, tienes 3 UART, dos están fijas en dos parejas de pines y te queda una tercera para que la pongas donde quieras).
Alimentación del DFPlayer a 5V, se pueden sacar del cable directamente y luego alimentar al micro por 5Vin y GND. Esto es clave, el DFPlayer necesita 5V sí o sí y el ESP32 NO los provee. Por tanto hay que sacarlos directamente de fuente externa cortocircuitando tierras o del cable USB y luego alimentar al ESP32 por su entrada 5Vin.
El audio a reproducir en el DFPlayer se indica con un número. En nuestro caso sólo había una pista, pero va por orden alfabético; es decir, el DPPlayer mira su tarjeta SD, ordena las pistas por orden alfabético (lo sencillo es poner 0000.mp3, 0001.mp3…) y según el número que le hayas puesto, esa reproduce. Es trivial hacer una función de mapeo para que se vaya a la pista que quieres con el uso de un switch case.
Pongo por aquí el montaje de prueba:
Y pongo por aquí el código que finalmente funciona:
//PLACA ESP32-S3-USB-OTG según Arduino IDE. ESP32-S3 devKit V1
#include "HardwareSerial.h"
#include "DFRobotDFPlayerMini.h"
const int MySerialRX=3; //Pin GPIO fijado para ser RX del micro (TX del periférico, que es el DFPlayer)
const int MySerialTX=7; //Pin GPIO fijado para ser TX del micro (RX del periférico, que es el DFPlayer)
HardwareSerial mySerial(2); // UART 2, configurable por usuario en cualquier pareja de pines del ESP32
DFRobotDFPlayerMini myDFPlayer; //Periférico para reproducción de audio; nos comunicamos con él por medio de la UART
const int RETARDO = 3000; //Sólo para prueba de sonido
/* Función para arrancar el periférico de reproducción de sonido - DFPlayerMini */
void setupDFPlayer() // Función para el arranque del reproductor de audio
{
mySerial.begin(9600, SERIAL_8N1, MySerialRX, MySerialTX); // Arranque de UART 2 para comunicación con DFPlayer
Volvemos a la carga este curso y lo hacemos fuerte, con la publicación en la Web del INTEF dependiente del Ministerio de Educación y Formación profesional. Este es un artículo que enviamos a finales del curso pasado y ahora ve la luz. Aquí el enlace.
Echando la vista atrás, parece que fue ayer que hablábamos de la posibilidad de añadir información en más formatos que el visual a una maqueta. Personalmente no conocía ni siquiera la palabra tiflología, pero en el departamento de Edificación ya tenían una maqueta sobre la que podíamos trabajar y ofrecer al alumnado un objetivo de algo realizable y útil. Así, poco a poco, se llego a que, un poco por casualidad, durante el curso en que se cumplen 50 años del fallecimiento de Pablo Ruiz Picasso hemos conseguido tener operativa la primera maqueta tiflológica desarrollada íntegramente en un centro educativo no universitario de España fruto de la colaboración de profesores de los departamentos de Edificación, Electrónica e Informática del IES Politécnico Jesús Marín de Málaga.
La idea por otra parte es que cualquiera con unos conocimientos mínimos pueda aplicar los mismos conocimientos para replicar nuestro trabajo. En nuestro caso, partíamos de la escultura que tenemos en la plaza de la Merced de Málaga:
LA MAQUETA
Desde el departamento de Edificación allá por 2015, a partir de 36 fotografías sacadas con su teléfono móvil, mediante técnicas de fotogrametría, uno de nuestros alumnos consiguió obtener el modelo tridimensional del monumento dedicado a nuestro más ilustre pintor, el situado en la plaza de la Merced de la capital, realizado por Francisco López Hernández.
Con la experiencia adquirida retos anteriores, el del presente curso ha consistido en aplicar la tecnología a la maqueta de Picasso obtenida con nuestras impresoras 3D, para transformarla en tiflotecnológica.
COLABORACIÓN
Nuestro Grupo de Trabajo, denominado Industria 4.0, formado por profesores y alumnos, de los Ciclos Superiores de Proyectos de Edificación, de Mantenimiento Electrónico e Informática, llevamos trabajando desde el curso 2021-22 mediante el aprendizaje basado en proyectos (ABP) de una forma interdisciplinar, con la colaboración del CEP de Málaga y, en el caso de este tipo de proyectos, con maestras y maestros del Equipo Específico de Atención al Alumnado con Discapacidad Visual (EEAADV).
Durante el presente curso, ha habido varias reuniones entre el colectivo @equipo_educativo_visuales con alumnos y profesores de los dos departamentos colaboradores del IES Politécnico. Fruto de esos encuentros se hicieron dos jornadas de concienciación entre el alumnado de los Ciclos Superiores de Mantenimiento Electrónico y de Proyectos de Edificación. En ellas se llevaron a cabo varias prácticas, en las que nuestros alumnos participaron con antifaces tapando sus ojos, palpando diferentes maquetas didácticas de contenidos educativos. De ésta forma pudieron apreciar las dificultades que tiene cualquier persona con carencias visuales a la hora de recibir información, siendo ésta del tipo que sea.
ELECTRÓNICA Y PROGRAMACIÓN
Uno de los primeros aspectos que tuvimos que decidir fue el de realizar una maqueta conectada a internet, utilizando IoT para emitir su información o, por el contrario, la realización de una maqueta totalmente autónoma que tuviera todos los elementos integrados y que pudiera ser presentada en múltiples eventos sin depender de la fluidez de las diferentes redes informáticas para su funcionamiento. Tras ponderar cada una de las dos opciones, nos decantamos claramente por la segunda, por contar ésta con menor número de tecnologías conviviendo entre sí, lo cual produce una maqueta más sencilla, transportable y estable en su funcionamiento.
De esta forma, integrándolo como prácticas y proyectos que ayudan a conseguir los Resultados de Aprendizaje dentro del ciclo superior de Mantenimiento Electrónico se montaron prototipos a partir de las propuestas del alumnado guiadas en mayor o menor medida para que finalmente se pudiera llegar a placas de circuito impreso con un montaje y mantenimiento sencillo. Para ello era necesario probar y valorar componentes, hacer pruebas en protoboard y placas perforadas y, por otro lado, conseguir un código robusto y fácilmente mantenible y ampliable en caso necesario para programar el microcontrolador.
EL CONJUNTO
Tras varios meses de pruebas ya dispusimos de un sistema electrónico suficientemente robusto como para dar el siguiente paso. El paso siguiente ha consistido en el diseño de una plataforma-base para albergar los diferentes dispositivos y sistemas de funcionamiento de la maqueta. Éste trabajo lo han llevado a cabo los componentes del dpto. de Edificación. La base cuenta con huecos para alojar una batería, cargador de batería, circuitos impresos con sus elementos, tarjeta memoria, sensor de presencia y cableado de conexiones entre módulos.
En la siguiente fase, se optimizaron algunos elementos como la placa de circuito impreso, para hacerla más pequeña, lo cual ha permitido alojarla en los huecos del asiento y del cuerpo de Picasso. Se mejoró la conectividad USB de la batería para su recarga y también se ha implementado una locución en inglés, además de la original en castellano.
El resultado se puede ver en el siguiente vídeo:
RESULTADOS MÁS ALLÁ DE LA MAQUETA
A partir de toda esta experiencia varios alumnos de Electrónica decidieron realizar su Proyecto Integrado aplicando la tecnología desplegada en la maqueta tiflológica de Picasso a maquetas didácticas de aprendizaje de contenidos de educación primaria y/o secundaria. Todo ello, con la experiencia adquirida en cursos anteriores y la coordinación didáctica de las maestras y maestros expertos en ese apoyo educativo.
Podemos comentar el ejemplo de Christian Muñoz Cisneros y Franco Stefano Curulla Galán, alumnos del ciclo superior de Mantenimiento Electrónico, que están trabajando con una maqueta física de España. Su proyecto consiste en introducir elementos tecnológicos para ofrecer información oral a quien se encuentre palpando las diferentes zonas. De ésta forma se ofrece a los usuarios de estas maquetas tiflológicas una experiencia háptica, mucho más rica en sensaciones, haciendo más dinámico el aprendizaje e invitando a la exploración de los objetos de aprendizaje por parte de quienes lo utilizan, aumentando todo ello las cualidades didácticas de éste tipo de materiales educativos.
Si nos referimos a los alumnos del Ciclo Superior de Proyectos de Edificación, tras su experiencia momentánea como invidentes (jornada de sensibilización), realizaron el modelado 3D de 24 figuras que propusieron el colectivo @equipo_educativo_visuales, para su posterior impresión mediante impresora 3D, coordinados por la profesora del módulo de Representaciones de Construcción, Lola Sánchez Giménez. La finalidad de éstas figuras es la explicación del sistema Diédrico para la obtención de vistas de diferentes figuras. Las figuras obtenidas encajarán en las plantillas de trabajo perforadas que utilizan actualmente para el apoyo en esa materia.
La colaboración entre departamentos y entidades continuará en cursos venideros, generando más y mejores maquetas adaptadas, con ello aprenderemos todos, creciendo personal y profesionalmente.
El Grupo de Trabajo Industria 4.0 lo formamos:
Andrés ALACARAZ REY Dpto. INFORMÁTICA
José Luis GUERRERO MARÍN (Coordinador) Dpto. ELECTRÓNICA
Este contenido no es directamente fruto del grupo de trabajo, pero sí surgió de la semilla del grupo de trabajo y el contacto que mantenemos con el Equipo Específico de Atención al Alumnado con Discapacidad Visual de Málaga colaborando en la sensibilización y asesoramiento. A partir del Picasso tiflológico surgió la idea de continuar con proyectos más ambiciosos y más útiles para el día a día de los niños con deficiencias visuales. ¿Cómo puede «ver» un mapa un niño o una niña ciega?
La respuesta es con relieves, Braille y un libro que sirve para descifrar el código que hay en cada punto geográfico, pero si introducimos pulsadores en cada punto de interés, el usuario sólo necesita pulsar y escuchar. Esta fue la idea con la que trabajaron dos alumnos de 2º de Mantenimiento Electrónico (Christian Muñoz y Franco Curulla) su proyecto final.
Pedimos los mapas a profesores y profesoras que trabajan habitualmente con ese tipo de alumnado y se pusieron manos a la obra. No es intención de este post descifrar los detalles técnicos, sino ver los resultados que, si bien aún necesitan algunos retoques, ya son muy interesantes.
Siempre es mejor verlo en funcionamiento, así que dentro vídeos:
Este es el esperado vídeo de presentación de nuestra maqueta.
Ha sido un largo camino desde que en 2015 en el departamento de Edificación pensaron en reconstruir a partir de fotos una maqueta del Picasso de la plaza de la Merced de Málaga. Años después tomo un nuevo camino a partir de conversaciones de pasillo con los de Electrónica para germinar una idea que se fue materializando en prácticas con los alumnos y finalmente el diseño 3D, la fabricación y puesta a punto del dispositivo final.
Hoy ya es un juguetito que llama la atención cuando lo sacamos a pasear por los pasillos.
Código final:
//PLACA LOLIN(WEMOS) D1 R2 & mini //JSON a incluir en preferencias: http://arduino.esp8266.com/stable/package_esp8266com_index.json
// Configuraciones de sensor const int UMBRAL = 300; // Umbral para que active o no unsigned int lecturaSENSOR = 0; // Estado inicial
const int ANTIRREBOTE = 300; const int TIMER_ENG = 500; // Umbral para determinar si es short o long Tap
boolean sensor_on = false; // Booleano para detectar activacion de sensor boolean sensor_hold = false; // Booleano para detectar activacion sostenida del sensor boolean play = false; // Booleano para saber si se esta reproduciendo unsigned long startTime; unsigned long runningTime; unsigned long tapTime;
void leerSENSOR() // Función para la lectura del sensor { lecturaSENSOR = analogRead(PIN_SENSOR);
void setupDFPlayer() // Función para el arranque del reproductor de audio { mySoftwareSerial.begin(9600); Serial.println("SETUP"); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while (true) ; } Serial.println(F("DFPlayer Mini online."));
myDFPlayer.setTimeOut(500); //Set serial communication time out 500ms
//----Set volume---- myDFPlayer.volume(25); //Set volume value (0~30). //----Set different EQ---- myDFPlayer.EQ(DFPLAYER_EQ_NORMAL); //----Set device we use SD as default---- // myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK); myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); }
Cada vez que uno se mete en un proyecto hardware sabe que habrá una fase de prueba y error por muy bien que se mida… Y aquí tenemos una muestra: el interruptor necesitaba medio milímetro más. Lo corregiremos en la próxima prueba.
Como mínimo nos ha valido para comprobar que el resto de componentes encaja como un guante:
Así que nos ponemos a imprimir con los dedos cruzados (durante 12 horas y 2 minutos…)
Y aquí el resultado, la primera maqueta verdaderamente funcional y capaz de acoger la electrónica interna (aunque aún tenemos un par de fallos menores que corregir, las letras del grupo y de la palabra junio se nos han caído):
Serial.println("SETUP"); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { // Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while (true); } Serial.println(F("DFPlayer Mini online."));
myDFPlayer.setTimeOut(500); // Set serial communication time out 500ms
//----Set volume---- myDFPlayer.volume(25); // Set volume value (0~30). //----Set different EQ---- myDFPlayer.EQ(DFPLAYER_EQ_NORMAL); //----Set device we use SD as default---- // myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK); myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); }
void loop() { leerSENSOR(); if (sensor_on) { sensor_on = false; if (!play) { play = true; myDFPlayer.play(1); // Play the first mp3 } else { play = false; myDFPlayer.pause(); // Pause mp3 } delay(ANTIRREBOTE); } }