Vagones de metro

Introducción y funcionamiento

Metrino es un sistema autónomo de transporte de pasajeros implementado en Arduino que consiste en un módulo que circula por un carril señalizado y un sistema de detección de dicho módulo ubicado a la entrada y la salida de cada parada del recorrido.
 
Nuestro sistema se basa en un vehículo siguelíneas autónomo realizado con LEDs y LDRs, que cuenta con apertura automática de puertas con la ayuda de un servomotor y un segundo módulo de control y seguimiento de paradas que se basa dos pares detector-emisor de infrarrojos, colocados a la salida y entrada de la estación y un panel LCD en el que se visualiza la información del estado del vehículo: cuándo entra, cuándo está en la parada (pasado un tiempo preestablecido) y cuándo sale (ofreciendo información sobre el tiempo de llegada para el siguiente tren como posible futura mejora). Nuestro vehículo es capaz de detectar paradas señalizadas en el suelo mediante una línea perpendicular al recorrido, detenerse, abrir las puertas y tras cerrarlas, reanudar su marcha por el circuito.
 

1. Materiales y costes del proyecto

Para el proyecto hemos utilizado los siguientes componentes:
 
 
Cantidad
Precio unitario
Total
Arduino UNO
1 + 1 cedido
10,00€
10,00€
LCD 16×2
1
3,91€
3,91€
LEDs color (R,G,W)
8
Cedido
LEDs IR
2
0,16€
0,32€
Receptores IR
4
0,26€
1,04€
LDRs
3
Cedido
Resistencias
~20
Cedido
Diodo IN4007
2
0,08€
0,16€
Transistor 2N2222A
2
0,74€
1,49€
Servomotor
1
Cedido
Chasis + Motores
1
15,24€
15,24€
Interruptor
1
0,65€
0,65€
Protoboards varias
7
7,42€
Pack cables Macho-Hembra
40
2,56€
2,56€
Pack cables Macho-Macho
40
2,56€
2,56€
Tabla de Contrachapado 3mm
1
5,00€
5,00€
TOTAL
50,35€
 
Contamos con un presupuesto razonable para la fabricación del proyecto, siendo lo mas caro los componentes motores del vehículo.
 
2. Esquemas de conexión
Contamos con dos módulos independientes conectados cada uno a una placa Arduino distinta. A continuación especificamos el diseño del sistema de detección del vehículo mediante IR:
 
 
Esquema del módulo de detección del vehículo
 
 
 
El otro módulo es el que corresponde al vehículo motriz, realizado mediante el siguiente esquema eléctrico:
 
Esquema eléctrico del módulo del vehículo
 
Este sistema cuenta con dos LEDs blancos de alumbrado, uno para la detección de paradas, leída mediante un único LDR, y los otros dos para seguir la línea negra del suelo, tanto por la izquierda como por la derecha.
 
3. Código fuente del proyecto
 
Módulo Parada:

   #include <IRremote.h>
   #include <LiquidCrystal.h>

   #define PIN_DETECT_IN 7# define PIN_STATUS_IN 10# define PIN_DETECT_OUT 8# define PIN_STATUS_OUT 9

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

IRsend irsend;
void setup() {
   delay(1000);
   lcd.begin(16, 2);
   lcd.print(“METRINO”);
   lcd.setCursor(0, 1);
   lcd.print(“Sistema iniciado”);
   pinMode(PIN_DETECT_IN, INPUT);
   pinMode(PIN_STATUS_IN, OUTPUT);
   pinMode(PIN_DETECT_OUT, INPUT);
   pinMode(PIN_STATUS_OUT, OUTPUT);
   irsend.enableIROut(38);
   irsend.mark(0);
}

void loop() {
   if (!digitalRead(PIN_DETECT_IN)) {
      digitalWrite(PIN_STATUS_IN, HIGH);
      lcd.clear();
      lcd.print(“TREN ENTRANDO”);
      delay(3000);
      lcd.setCursor(0, 0);
      lcd.print(“TREN EN ESTACION”);
      lcd.setCursor(0, 1);
      lcd.print(“Estacion 1”);
      digitalWrite(PIN_STATUS_IN, LOW);
      delay(2000);
   }

   if (!digitalRead(PIN_DETECT_OUT)) {
      digitalWrite(PIN_STATUS_OUT, HIGH);
      lcd.clear();
      lcd.print(“TREN FUERA EST.”);
      delay(3000);
      lcd.setCursor(0, 1);
      lcd.print(“Proximo: 01 min.”); //Estimación
      digitalWrite(PIN_STATUS_OUT, LOW);
      delay(2000);
   }
}

Módulo Vehículo: 

#include <Servo.h>

#define pinMotorLeft 1
# define pinMotorRight 2
# define pinLEDverde 3
# define pinLEDrojo 11
# define pinServo 13

//analogicos
int pinLDRizdo = 0;
int pinLDRdcho = 1;
int pinParada = 2;

//variables
int valorLDRL = 0;
int valorLDRR = 0;
int parada = 0;

Servo servoMotor;

void setup() {

   pinMode(pinMotorLeft, OUTPUT);
   pinMode(pinMotorRight, OUTPUT);
   pinMode(pinLEDrojo, OUTPUT); //LED PUERTA
   pinMode(pinLEDverde, OUTPUT); //LED PUERTA
   servoMotor.attach(pinServo);

}

void loop() {

   servoMotor.write(15); //cierro puerta
   valorLDRL = analogRead(pinLDRizdo); //guardo lectura de LDR en
   valorLDRR = analogRead(pinLDRdcho); //guardo lectura de LDR en
   parada = analogRead(pinParada); //guardo lectura de ldr parada

   if (parada > 20) { //si el funcionamiento es normal
      //coloco los led en modo circulación
      digitalWrite(pinLEDrojo, HIGH);
      digitalWrite(pinLEDverde, LOW);
      
      if ((valorLDRL > 3) && (valorLDRR <= 3)) {
         digitalWrite(pinMotorRight, LOW);
         digitalWrite(pinMotorLeft, HIGH);
      } else if ((valorLDRR > 3) && (valorLDRL <= 3)) {
         digitalWrite(pinMotorLeft, LOW);
         digitalWrite(pinMotorRight, HIGH);
      } else if ((valorLDRR > 3) && (valorLDRL > 3)) {
         digitalWrite(pinMotorLeft, LOW);
         digitalWrite(pinMotorRight, LOW);
      } else {
         digitalWrite(pinMotorRight, HIGH);
         digitalWrite(pinMotorLeft, HIGH);
      }
   } else {
      digitalWrite(pinMotorRight, LOW);
      digitalWrite(pinMotorLeft, LOW);
      servoMotor.write(80); //abro puerta
      digitalWrite(pinLEDrojo, LOW);
      digitalWrite(pinLEDverde, HIGH);
      delay(5000);
      servoMotor.write(15); //cierro puerta
      digitalWrite(pinLEDrojo, HIGH);
      digitalWrite(pinLEDverde, LOW);
      digitalWrite(pinMotorRight, HIGH);
      digitalWrite(pinMotorLeft, HIGH);
      delay(500);
   }

}

 

4. Evolución del proyecto, problemas y resolución

El proyecto ha ido evolucionando modularmente, es decir, mediante el desarrollo de funcionalidades básicas que se han ido aumentando paulatinamente hasta llegar al resultado final, pudiéndose aumentar el proyecto final en mayor medida.
 
Primero nos encargamos tanto de que el vehículo fuese capaz de seguir líneas como de que los pares infrarrojos de las paradas detectasen cortes. Una vez conseguido este objetivo pasamos a detectar las paradas en el vehículo mediante un sistema similar al que usamos para seguir líneas: la detección de una línea perpendicular negra.
 
IMG_20170421_243727954.jpg
Chasis con motores del vehículo
 
IMG_20170422_021934683.jpg
Chasis con contrachapado y par
 
IMG_1588.JPG  
Sistema de detección mediante IR; primer prototipo
 
Una vez que conseguimos esto, terminamos la implementación del detector de paradas, conectando el LCD y mostrando en él el paso del vehículo. Tuvimos que conectar un LCD distinto al que usamos incialmente, ya que el primero que pusimos no funcionaba.
 
IMG_2066.JPG
 
 
IMG_2080.JPG
 
 
Tras completar y comprobar que el detector del vehículo funciona correctamente, pasamos a realizar la implementación de la puerta del vehículo mediante un servomotor y un mecanismo para su apertura y cierre.
 
IMG_20170422_031349565.jpg
 
 

 

Una vez realizado todo lo anterior procedimos a crear una cubierta de contrachapado para el vehículo así como para el módulo de detección de paradas.
 
Tras detectar problemas de estabilidad con las barras que separan el emisor del receptor de la parada, procedimos a crear unos puentes de contrachapado para pasar los cables por encima de la vía y evitar que el vehículo pudiera desestabilizarse.

La caja que porta el sistema de detección de paradas cuenta con un interruptor que finalmente no fue implementado, ya que no funcionaba como es debido por no inicializar el LCD cuando se presiona.

5. Posibles/futuras mejoras

El proyecto es ampliamente mejorable en bastantes aspectos debido a su modularidad. Una de las primeras mejoras que se podrían realizar sería la implantación de múltiples paradas y el desarrollo de un algoritmo que permita calcular el tiempo que hay entre ellas basado en experiencias previas y con sensibilidad a desviaciones, ya que ahora mismo se imprime un texto que no representa el tiempo real.

Asimismo se podría mejorar la forma en la que se siguen las líneas para que tomase curvas con mayor precisión y no se saliese de la vía, probablemente mediante la implantación de sensores IR en lugar de LDRs y LEDs, tal y como se hace con los módulos de parada, así como regular el peso del vehículo para evitar derrapes mediante el incremento del peso del vehículo o la colocación de resistencias para regular la intensidad de corriente que les llega a los motores. Otras posibles mejoras podrían incluir un sistema de ventilación con un sensor de temperatura cuando se alcance cierto valor preestablecido. De mayor utilidad sería implementar un sensor mediante IR que evitase colisiones con objetos en la vía y que hiciese detenerse al vehículo en el caso de detectarlo.

6. Conclusión

Hemos conseguido realizar un proyecto con Arduino, lo que nos ha servido para organizar un sistema propio de electrónica y programación.

Durante el desarrollo nos hemos encontrado con múltiples problemas que hemos ido solucionando, teniendo que idear alternativas para sobrepasarlos con éxito. Esto nos ha hecho darnos cuenta de que de la teoría a la práctica hay bastantes variables que no siempre se tienen en cuenta y que alteran el resultado final de forma inesperada; no obstante hemos conseguido solucionar la mayoría.

Ha sido un proyecto entretenido pero laborioso, y hemos podido descubrir todo el potencial que tienen las placas computadoras para el desarrollo de hardware/software.

7. Recursos

Vídeo: https://vimeo.com/214749497

Presentación: PDF con las diapositivas

 
 
 

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *