Túnel de Lavado Grupo 16
|
PRÁCTICA SISTEMAS EMPOTRADOS Y DE TIEMPO REAL:
TÚNEL DE LAVADO
PEDRO HOLGUERA ROMÁN ADE + ING. INFORMÁTICA
ALEJANDRO GARCIA-CARO NOMBELA ADE + ING. INFORMÁTICA |
ÍNDICE
1.
Introducción…………………………………………………….…………………
Pág. 2
Introducción…………………………………………………….…………………
Pág. 2
2.
Esquema Hardware
– Software………………….………………………………….. Pág. 3,4,5
Esquema Hardware
– Software………………….………………………………….. Pág. 3,4,5
3.
Componentes y
Precios…………………………..……………………………….. Pág.6
Componentes y
Precios…………………………..……………………………….. Pág.6
4.
Problemas y
soluciones……………………………..……………………………. Pág.7
Problemas y
soluciones……………………………..……………………………. Pág.7
5.
Trabajo de cada
miembro del grupo…………………………..……………………. Pág.8
Trabajo de cada
miembro del grupo…………………………..……………………. Pág.8
6.
Código Fuente……………………………………………………………………. Pág.9,10,11
Código Fuente……………………………………………………………………. Pág.9,10,11
1. INTRODUCCIÓN
Nuestro proyecto consiste en una carretera que lleva a un
túnel de lavado con parking.
túnel de lavado con parking.
La primera parte del proyecto consiste en una carretera con
alumbrado, para ello hemos metido unos Leds que funcionan como farolas y
sensores, que hacen enceder los Leds. Le hemos puesto una iniciación
progresiva, por la cual cuando pase el coche estén encendidos completamente, es
decir, cuando el coche pasa por el sensor y se acerca al Led va aumentando la
intensidad luminosa, y cuando el coche se va alejando, la intensidad luminosa
va disminuyendo.
alumbrado, para ello hemos metido unos Leds que funcionan como farolas y
sensores, que hacen enceder los Leds. Le hemos puesto una iniciación
progresiva, por la cual cuando pase el coche estén encendidos completamente, es
decir, cuando el coche pasa por el sensor y se acerca al Led va aumentando la
intensidad luminosa, y cuando el coche se va alejando, la intensidad luminosa
va disminuyendo.
La siguiente parte consiste en un interruptor para dar
comienzo al lavado. Hemos utilizado un interruptor debido a que no queríamos
realizar un proyecto repetitivo, con únicamente sensores. Hemos añadido un
semáforo para comprobar si el túnel está ocupado o libre. Además, tiene una
condición de entrada, que consiste en que si el túnel está ocupado, por más que
pulses al interruptor de entrada no se abrirá la puerta ni el semáforo cambiará.
También nuestro proyecto incluye un motorreductor
casero, realizado con 3 ruedas de
madera, haciendo que nuestra puerta suba a una velocidad moderada.
comienzo al lavado. Hemos utilizado un interruptor debido a que no queríamos
realizar un proyecto repetitivo, con únicamente sensores. Hemos añadido un
semáforo para comprobar si el túnel está ocupado o libre. Además, tiene una
condición de entrada, que consiste en que si el túnel está ocupado, por más que
pulses al interruptor de entrada no se abrirá la puerta ni el semáforo cambiará.
También nuestro proyecto incluye un motorreductor
casero, realizado con 3 ruedas de
madera, haciendo que nuestra puerta suba a una velocidad moderada.
Cuando el coche entra en nuestro túnel de lavado, con un el
interruptor las turbinas se moverán comenzando a limpiar el coche. No hemos
querido meter agua para el lavado, por los posibles problemas con la
electricidad. Al término, habrá que pulsar otro interruptor de salida, que
abrirá la puerta y cambiará la condición de entrada al túnel a libre, poniéndose
el semáforo a verde para la entrada del siguiente coche.
interruptor las turbinas se moverán comenzando a limpiar el coche. No hemos
querido meter agua para el lavado, por los posibles problemas con la
electricidad. Al término, habrá que pulsar otro interruptor de salida, que
abrirá la puerta y cambiará la condición de entrada al túnel a libre, poniéndose
el semáforo a verde para la entrada del siguiente coche.
Nuestro proyecto acaba con un parking, con Leds verdes
iluminados para informar que la plaza está libre, apagándose los Leds con la
ocupación de esa plaza. Esto ocurre mediante una fotorresistencia LDR.
iluminados para informar que la plaza está libre, apagándose los Leds con la
ocupación de esa plaza. Esto ocurre mediante una fotorresistencia LDR.
2. ESQUEMA
HARDWARE – SOFTWARE
HARDWARE – SOFTWARE
1. Camino al túnel de lavado conectado por
Leds
Leds
–
Software:
Software:
o
Entradas:
Entradas:
o
Salidas:
Salidas:
§
Pin5, Pin13, Pin3…
Pin5, Pin13, Pin3…
–
Hardware:
Hardware:
o
Componentes:
Componentes:
§
Sensor
Sensor
§
Leds blancos (6): farolas.
Leds blancos (6): farolas.
2. Apertura y cierre de las puertas
–
Software:
Software:
o
Entradas:
Entradas:
§
Interruptor Pin4
Interruptor Pin4
o
Salidas:
Salidas:
§ Pin 8, Pin 9, Pin 7, Pin 6, Pin 12,
Pin 13
Pin 13
–
Hardware:
Hardware:
o
Componentes:
Componentes:
§
Interruptor
Interruptor
§
Semáforo de Leds
Semáforo de Leds
§
Motor DC
Motor DC
§
Motorreductor casero
Motorreductor casero
3. Iniciación del lavado
– Software:
o
Entradas:
Entradas:
o
Salidas:
Salidas:
§
Motores DC
Motores DC
–
Hardware:
Hardware:
o
Componentes:
Componentes:
§
Motores DC
Motores DC
4. Parking
– Software:
o
Entradas:
Entradas:
o
Salidas:
Salidas:
§
Leds
Leds
–
Hardware:
Hardware:
o
Componentes:
Componentes:
§
Fotorresistencias LDR
Fotorresistencias LDR
§
Leds
Leds
1. Camino al túnel de lavado conectado por
Leds:
Leds:
Aumento de los Leds en el camino
–
Software:
Software:
o
ledPin1 = 5; // pin PWM para el LED1
ledPin1 = 5; // pin PWM para el LED1
o
ledPin2 = 13; // pin PWM para el LED2
ledPin2 = 13; // pin PWM para el LED2
o
ledPin3 = 3; // pin PWM para el LED3
ledPin3 = 3; // pin PWM para el LED3
2. Apertura y cierre de las puertas
–
Software:
Software:
o
Entradas:
Entradas:
§
Interruptor Pin4
Interruptor Pin4
o
Salidas:
Salidas:
§ subeMotorP:
Pin 8; // +V
Pin 8; // +V
§ subeMotorN: Pin 9; // -GND
§ bajaMotorP: Pin 7 // +V
§ bajaMotorN:
Pin 6; // -GND
Pin 6; // -GND
§ ledSemaforoRojo:
Pin 12;
Pin 12;
§ ledSemáforoVerde:
Pin 13;
Pin 13;
3. Iniciación del lavado
– Software:
o
Entradas:
Entradas:
§
Interruptor
Interruptor
o
Salidas:
Salidas:
§
Motores
Motores
4. Parking
– Software:
o
Entradas:
Entradas:
o
Salidas:
Salidas:
§
Leds
Leds
–
Hardware:
Hardware:
o
Componentes:
Componentes:
§
Fotorresistencias LDR
Fotorresistencias LDR
§
Leds
Leds
1. Camino al túnel de lavado conectado por
Leds:
Leds:
2. Apertura y cierre de las puertas:
o Pin
6 = Baja el motor Negativo
6 = Baja el motor Negativo
o Pin
7 = Baja el motor Positivo
7 = Baja el motor Positivo
o Pin
8 = Sube el motor Positivo
8 = Sube el motor Positivo
o Pin
9 = Sube el motor Negativo
9 = Sube el motor Negativo
Motorreductor casero
3. Iniciación del lavado con interruptor:
3. COMPONENTES Y PRECIOS
4. PROBLEMAS Y SOLUCIONES
El primer problema que se nos planteó, fue la dificultad que
tuvimos para la subida del código al arduino. Empezamos con una prueba, un
ejemplo para que un led parpadease (Ejemplos Blink), para comprobar que todo
nos funcionaba correctamente. Probamos varios ejemplos sencillos y seguía sin
poder subirse al arduino. Nos daba el siguiente problema:
tuvimos para la subida del código al arduino. Empezamos con una prueba, un
ejemplo para que un led parpadease (Ejemplos Blink), para comprobar que todo
nos funcionaba correctamente. Probamos varios ejemplos sencillos y seguía sin
poder subirse al arduino. Nos daba el siguiente problema:
Preguntamos a más compañeros a ver si les pasaban lo mismo,
porque no sabíamos si era fallo del programa o del arduino. Nos dejaron su
arduino y nos dimos cuenta de que el nuestro tenía algún fallo y no nos dejaba
subir código. Al final, el profesor nos cambió el arduino.
porque no sabíamos si era fallo del programa o del arduino. Nos dejaron su
arduino y nos dimos cuenta de que el nuestro tenía algún fallo y no nos dejaba
subir código. Al final, el profesor nos cambió el arduino.
Otra dificultad que tuvimos fue la iniciación al elaborar
nuestro propio código en arduino. El código nos compilaba correctamente, pero
nos costó que los circuitos hiciesen exactamente todo lo que necesitábamos para
nuestro túnel de lavado. Con la utilización de Leds no fue especialmente
costoso, pero con los motores para el cambio de polaridad para la apertura y el
cierra de las puertas fue realmente difícil.
nuestro propio código en arduino. El código nos compilaba correctamente, pero
nos costó que los circuitos hiciesen exactamente todo lo que necesitábamos para
nuestro túnel de lavado. Con la utilización de Leds no fue especialmente
costoso, pero con los motores para el cambio de polaridad para la apertura y el
cierra de las puertas fue realmente difícil.
El arduino nos daba problemas en los valores de entrada de
los interruptores. Me explico mejor. Programábamos que según nos viniese un
HIGH de un pin conectado, hiciese un código implementado. Sin dar al
interruptor, numerosas veces hacía el código del valor en LOW. Como era un
bucle, recibía la mayoría de veces un HIGH, pero de vez en cuando recibía un
LOW y nos hacía el código que no debía.
los interruptores. Me explico mejor. Programábamos que según nos viniese un
HIGH de un pin conectado, hiciese un código implementado. Sin dar al
interruptor, numerosas veces hacía el código del valor en LOW. Como era un
bucle, recibía la mayoría de veces un HIGH, pero de vez en cuando recibía un
LOW y nos hacía el código que no debía.
Teníamos numerosas ideas para añadir al proyecto, pero con
las limitaciones de los pins en el arduino no pudimos llevar todas a cabo. Como
por ejemplo poner un sensor antes del funcionamiento del lavado, poner los leds
de salida del túnel incrementando su intensidad para aumentar su iluminación
según pasase el coche, una pantalla para que pusiese los sitios libres en el
parking y algunas más.
las limitaciones de los pins en el arduino no pudimos llevar todas a cabo. Como
por ejemplo poner un sensor antes del funcionamiento del lavado, poner los leds
de salida del túnel incrementando su intensidad para aumentar su iluminación
según pasase el coche, una pantalla para que pusiese los sitios libres en el
parking y algunas más.
5. TRABAJO DE CADA MIEMBRO
El trabajo fue realizado en su totalidad por ambos miembros
del grupo. Pero cómo en todos los grupos a alguien se le da mejor una cosa que
a la otra, por lo que Alejandro García-Caro se ha centrado más en la elaboración
del túnel de lavado, la pintura de la madera, el corte. Elaboró también el
código en los motores, en los que consiguió la idea final para el correcto
funcionamiento de los motores, consiguiendo invertir la polaridad de estos y
controlando la intensidad. Pedro Holguera se centró más en los circuitos, la
programación y en su elaboración para la consecución de lo que el programa
necesitaba. Las medidas y la organización de la maqueta fueron realizadas en
consenso, igual que su elaboración. Cada
vez que teníamos que comprar componentes íbamos los dos. La elaboración del
vídeo ha sido más de Alejandro y la elaboración del Power Point de Pedro.
del grupo. Pero cómo en todos los grupos a alguien se le da mejor una cosa que
a la otra, por lo que Alejandro García-Caro se ha centrado más en la elaboración
del túnel de lavado, la pintura de la madera, el corte. Elaboró también el
código en los motores, en los que consiguió la idea final para el correcto
funcionamiento de los motores, consiguiendo invertir la polaridad de estos y
controlando la intensidad. Pedro Holguera se centró más en los circuitos, la
programación y en su elaboración para la consecución de lo que el programa
necesitaba. Las medidas y la organización de la maqueta fueron realizadas en
consenso, igual que su elaboración. Cada
vez que teníamos que comprar componentes íbamos los dos. La elaboración del
vídeo ha sido más de Alejandro y la elaboración del Power Point de Pedro.
6. CÓDIGO FUENTE
//variables de nuestro
alumbrado inicial
alumbrado inicial
int ledPin1 = 5; // pin PWM
para el LED1
para el LED1
int ledPin2 = 13; // pin
PWM para el LED2
PWM para el LED2
int ledPin3 = 3; // pin PWM
para el LED3
para el LED3
boolean encenderLed;
int
MAXDIODO = 15;
MAXDIODO = 15;
int
INIDIODO = 0;
INIDIODO = 0;
//variables de nuestra
apertura de puerta
apertura de puerta
int subeMotorP = 8; // +V
int subeMotorN = 9; // -GND
int bajaMotorP = 7; // +V
int bajaMotorN = 6; // -GND
int libre = 4;
const int MAX = 150;
const int
tiempoCambioSentido = 3000;
tiempoCambioSentido = 3000;
const int tiempoMotorSubida
= 2000;
= 2000;
const int tiempoMotorBajada
= 2000;
= 2000;
//
int interruptor1 = 10;
int ledRojoSemaforo = 12;
int ledVerdeSemaforo = 11;
void setup(){
//asignacion de nuestro alumbrado
pinMode(encenderLed, INPUT);
//asignacion de la apertura de puerta
pinMode(subeMotorP, OUTPUT);
pinMode(subeMotorN, OUTPUT);
pinMode(bajaMotorP, OUTPUT);
pinMode(bajaMotorN, OUTPUT);
pinMode(libre,INPUT);
//entrada del interruptor, Led verde es LOW y Led rojo es HIGH
//entrada del interruptor, Led verde es LOW y Led rojo es HIGH
}
void loop()
{
//codigo de nuestro alumbrado inicial
delay(2000); //tiempo de espera de llegada
del coche 2 segundos
del coche 2 segundos
if (encenderLed = LOW){ //sensor infrarrojos emisor-receptor, si nota
una interferencia entre emisor receptor se pone a LOW y comienza nuestro
alumbrado
una interferencia entre emisor receptor se pone a LOW y comienza nuestro
alumbrado
for (int i=INIDIODO; i<=MAXDIODO+10;
i++) // el valor de i asciende
i++) // el valor de i asciende
{
if (i<=MAXDIODO) analogWrite(ledPin1, i); //
se escribe el valor de I en el PIN de salida del LED1
se escribe el valor de I en el PIN de salida del LED1
if
((i>=INIDIODO+5)&&(i<=MAXDIODO+5)) analogWrite(ledPin2, i-5); // se
escribe el valor de I en el PIN de salida del LED2
((i>=INIDIODO+5)&&(i<=MAXDIODO+5)) analogWrite(ledPin2, i-5); // se
escribe el valor de I en el PIN de salida del LED2
if (i>=INIDIODO+10) analogWrite(ledPin3,
i-10); // se escribe el valor de I en el PIN de salida del LED3
i-10); // se escribe el valor de I en el PIN de salida del LED3
delay(500); // pauses for 300ms
}
for (int i=MAXDIODO; i>=INIDIODO-10;
i–) // el valor de I desciendei
i–) // el valor de I desciendei
{
if (i>=INIDIODO)
analogWrite(ledPin1, i); // se escribe el valor de I en el PIN de salida
del LED1
analogWrite(ledPin1, i); // se escribe el valor de I en el PIN de salida
del LED1
if
((i<=MAXDIODO-5)&&(i>=INIDIODO-5)) analogWrite(ledPin2, i+5); // se
escribe el valor de I en el PIN de salida del LED2
((i<=MAXDIODO-5)&&(i>=INIDIODO-5)) analogWrite(ledPin2, i+5); // se
escribe el valor de I en el PIN de salida del LED2
if
((i<=MAXDIODO-10)&&(i>=INIDIODO-10)) analogWrite(ledPin3, i+10); // se
escribe el valor de I en el PIN de salida del LED3
((i<=MAXDIODO-10)&&(i>=INIDIODO-10)) analogWrite(ledPin3, i+10); // se
escribe el valor de I en el PIN de salida del LED3
delay(500); // pauses for 300ms
}
}
delay(3000);//tiempo de espera para dar al
interruptor para la apertura de la puerta
interruptor para la apertura de la puerta
//codigo de nuestra apertura de puerta
if (digitalRead(libre) == HIGH) { //El Led
está en verde y se le da al interruptor y comienza el proceso
está en verde y se le da al interruptor y comienza el proceso
digitalWrite(ledVerdeSemaforo, LOW);
digitalWrite(ledRojoSemaforo, HIGH);
delay(100);
analogWrite(bajaMotorP, 0); //
guarantee initial state
analogWrite(bajaMotorN,
0); // guarantee initial state
0); // guarantee initial state
delay(tiempoCambioSentido);
// Sube la puerta
analogWrite(subeMotorP, MAX);
analogWrite(subeMotorN, MAX);
delay(tiempoMotorSubida);
// Apagado
analogWrite(subeMotorP, 0);
analogWrite(subeMotorN, 0);
delay(tiempoCambioSentido);
// Baja la puerta
analogWrite(bajaMotorP, MAX-10);
analogWrite(bajaMotorN, MAX-10);
delay(tiempoMotorBajada);
// Apagado
analogWrite(bajaMotorP, 0);
analogWrite(bajaMotorN, 0);
//delay(tiempoCambioSentido);
}
else {
digitalWrite(ledVerdeSemaforo, HIGH);
digitalWrite(ledRojoSemaforo, LOW);
delay(100);
}
}