Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Este proyecto se basa en la implementación, a escala, de un tren que permita a las personas que se encuentran en la estación saber qué asientos están libres. Para realizar el prototipo se utiliza el software Arduino UNO junto con el Processing para la parte gráfica.
Este concepto permitiría revolucionar el mundo del transporte público, ya que optimizaría al máximo todos los asientos del tren, asegurando el uso de todos los vagones, junto con la posibilidad de recopilar datos y realizar estudios más precisos, posteriormente. sobre.
Paso 1: Diseño del modelo 3D
En primer lugar, hemos realizado una investigación exhaustiva sobre modelos de trenes. Con toda la información recogida se ha elegido el tren GTW (producido por Stadler Rail) utilizado en FGC (Ferrocarrils de la Generalitat de Catalunya).
Posteriormente se diseñó con el software 3D PTC Creo el modelo para la posterior impresión 3D.
Paso 2: Impresión de modelos y acabados en 3D
Una vez diseñado el tren, se pasa a la impresión 3D. Una vez impresa la pieza, se debe pulir para lograr una superficie lisa.
Este proyecto también se puede realizar con modelos de trenes existentes.
Una vez impreso, se dan los acabados definitivos.
Paso 3: componentes
Para el desarrollo de este proyecto se necesitan los siguientes componentes:
- FSR 0.04-4.5LBS (sensor de presión).
- Resistencias de 1.1K ohmios
Paso 4: Codificación (Arduino y procesamiento)
Ahora es el momento de escribir el código Arduino que permitirá a los sensores enviar una señal al software de procesamiento que transmitirá la información de forma gráfica.
Como sensores tenemos 4 sensores de presión para arduino que varían su resistencia según la fuerza que se les aplique. Así que el objetivo es aprovechar la señal que envían los sensores (cuando los pasajeros se sientan) para cambiar las pantallas gráficas en Processing.
A continuación, creamos la parte gráfica en la que hemos tenido en cuenta el diseño gráfico de los Ferrocarrils de la Generalitat de Catalunya, para emular la realidad de la mejor forma posible.
En el procesamiento se ha escrito un código que se conecta directamente al software arduino, de esta manera, cada vez que alguien se sienta en un asiento cambia de color, permitiendo al usuario en la plataforma del tren conocer en tiempo real la disponibilidad de asientos del tren..
Aquí puedes ver la codificación
ARDUINO:
int pot = A0; // Conecta el pin del medio de la olla a este pinint pot2 = A1; int pot3 = A2; int pot4 = A3; int lectura1; // variable para almacenar los valores del bote;
int lectura2; int lectura3; int lectura4;
void setup () {// inicializar las comunicaciones en serie a una velocidad de 9600 baudios Serial.begin (9600); }
bucle vacío () {String s = ""; // // Llegir sensor1 lectura1 = analogRead (pot); // lectura del valor analógico if (lectura1> 10) {s = "1"; retraso (100); } else {s = "0"; retraso (100); } Serial.println (s);
}
PROCESANDO:
procesamiento de importación.serie. *; // esta biblioteca maneja la conversación serial String val = ""; PImage s0000, s0001, s0010, s0011, s0100, s0101, s0110, s0111, s1000, s1001, s1010, s1011, s1100, s1101, s1110, s1111; Serial myPort; // Crear objeto a partir de la clase serial
void setup () // esto se ejecuta solo una vez {fullScreen (); background (0); // establecer el color de fondo en negro myPort = new Serial (this, "COM5", 9600); // dar parámetros al objeto de la clase serial, poner el com al que está conectado su arduino y la velocidad en baudios
s0000 = loadImage ("0000.jpg"); s0001 = loadImage ("0001.jpg"); s0010 = loadImage ("0010.jpg"); s0011 = loadImage ("0011.jpg"); s0100 = loadImage ("0100.jpg"); s0101 = loadImage ("0101.jpg"); s0110 = loadImage ("0110.jpg"); s0111 = loadImage ("0111.jpg"); s1000 = loadImage ("1000.jpg"); s1001 = loadImage ("1001.jpg"); s1010 = loadImage ("1010.jpg"); s1011 = loadImage ("1011.jpg"); s1100 = loadImage ("1100.jpg"); s1101 = loadImage ("1101.jpg"); s1110 = loadImage ("1110.jpg"); s1111 = loadImage ("1111.jpg");
s0000.resize (displayWidth, displayHeight); s0001.resize (displayWidth, displayHeight); s0010.resize (displayWidth, displayHeight); s0011.resize (displayWidth, displayHeight); s0100.resize (displayWidth, displayHeight); s0101.resize (displayWidth, displayHeight); s0110.resize (displayWidth, displayHeight); s0111.resize (displayWidth, displayHeight); s1000.resize (displayWidth, displayHeight); s1001.resize (displayWidth, displayHeight); s1010.resize (displayWidth, displayHeight); s1011.resize (displayWidth, displayHeight); s1100.resize (displayWidth, displayHeight); s1101.resize (displayWidth, displayHeight); s1110.resize (displayWidth, displayHeight); s1111.resize (displayWidth, displayHeight);
val = trim (val);} void draw () {if (val! = null) {
if (val.equals ("0001")) {imagen (s0001, 0, 0); } else if (val.equals ("0010")) {imagen (s0010, 0, 0); } else if (val.equals ("0011")) {imagen (s0011, 0, 0); } else if (val.equals ("0100")) {imagen (s0100, 0, 0); } else if (val.equals ("0101")) {imagen (s0101, 0, 0); } else if (val.equals ("0110")) {imagen (s0110, 0, 0); } else if (val.equals ("0111")) {imagen (s0111, 0, 0); } else if (val.equals ("1000")) {imagen (s1000, 0, 0); } else if (val.equals ("1001")) {imagen (s1001, 0, 0); } else if (val.equals ("1010")) {imagen (s1010, 0, 0); } else if (val.equals ("1011")) {imagen (s1011, 0, 0); } else if (val.equals ("1100")) {imagen (s1100, 0, 0); } else if (val.equals ("1101")) {imagen (s1101, 0, 0); } else if (val.equals ("1110")) {imagen (s1110, 0, 0); } else if (val.equals ("1111")) {imagen (s1111, 0, 0); } else {imagen (s0000, 0, 0); }}}
void serialEvent (Serial myPort) // siempre que ocurre un evento serial, se ejecuta {val = myPort.readStringUntil ('\ n'); // asegúrese de que nuestros datos no estén vacíos antes de continuar if (val! = null) {// recortar los espacios en blanco y los caracteres de formato (como el retorno de carro) val = trim (val); println (val); }}
Paso 5: circuito
Después de toda la programación, es hora de conectar todos los sensores con la placa Arduino UNO.
Los sensores se colocan en 4 asientos (que luego se cubrirán con un paño) y se sueldan a cables que van directamente a la placa base de Arduino UNO. La señal recibida en la placa se envía a una computadora conectada vía USB que envía la información a Processing en tiempo real, cambiando el color del asiento.
Puede ver un esquema de las conexiones.
Paso 6: Prueba de prototipo
Una vez que se ha cargado el código en la placa arduino y se han encendido el procesamiento y el programa arduino, se prueban los sensores. En la pantalla verá los cambios en los asientos debido al cambio de imágenes en la pantalla informando sobre los asientos ocupados y no.
Paso 7: maqueta real
La aplicación real intentaría instalarla en trenes y andenes de la red FGC para dar servicio a los viajeros.
Paso 8: ¡DISFRUTA
Finalmente ha realizado un tren de sensores de fuerza (prototipo) que permite al usuario en la plataforma del tren saber qué asiento está disponible en tiempo real.
¡BIENVENIDO AL FUTURO!
Proyecto realizado por Marc Godayol & Federico Domenech