Pàgines

dilluns, 8 de juny de 2015

RESULTAT FINAL DE PROYECTE (SMARTCITY)


El projecte va començar amb l'idea d'utilitzar la hidràulica per accionar el pont, però per falta de força dels servos i altres recursos no es va poder realitzar.
Finalment el nostre pont està accionat per energia mecànica directament pels servos, per tal de poder accionar el pont sense haver de vèncer la resistència del líquid.
Per falta de temps hem hagut de deixar estar les barreres.






Aquest sistema compta amb dos sensors d'ultrasons: un que acciona el mecanisme dels servos i els semàfors quan un vaixell s'apropa, pujant el pont, i un altre que detecta quan el vaixel marxa i acciona els servos per fer baixar el pont i canvia de color els semàfors,
També hem utilitzat un sensor de llum que regula la intensitat dels fanals situats a l'interior del pont.
A més hem incorporat una alarma (brunzidor) per informar a la població dels moviments del pont.

Aquest és el nostre programa, que segueix el següent esquema:

























#include <Servo.h>   //libreria

// pins a utilizar:
int rojo = 5;                     // led rojo semaforo
int amarillo = 2;                 //led amarillo semaforo
int verde = 3;                    //led verde semaforo
int envia_1 = 7;                  //trig de sensor de ultrasonido
int recibe_1 = 8;                 //echo de sensor de ultrasonido
int envia_2 = 12;                 //trig de sensor de ultrasonido
int recibe_2 = 13;                //echo de sensor de ultrasonido
int sensor_luz = A5;
int tiempo = 50;
int farolas = 9;
int x = 0;                        
Servo puenteD;
Servo puenteI;

// consignes:
int barco_llega = 25;
int barco_aprox = 10;
int barco_aleja = 30;
int lindar = 150;
int lindar_2 = 700;
int entrada = 0;
int sortida = 0;
int puente_abajo = 17;
int puente_arriba = 70;
long durada_1,distancia_1;
long durada_2,distancia_2;

void setup() {
  pinMode(rojo,OUTPUT);
  pinMode(amarillo,OUTPUT);
  pinMode(verde,OUTPUT);
  pinMode(envia_1,OUTPUT);
  pinMode(recibe_1,INPUT);
  pinMode(envia_2,OUTPUT);
  pinMode(recibe_2,INPUT);
  puenteD.attach(6);
  puenteI.attach(10);
  pinMode(farolas,OUTPUT);
  Serial.begin(9600);
}

void loop() {
  luces();
  delay(10);
  detecta_llegada();                  //deteccio del barco
  
  if (distancia_1 < barco_aprox)      //detecta el barco a menor distancia
  { acciones_aprox(); x=1; }
  else
  {
   if (distancia_1 < barco_llega)      //detecta el barco
   {acciones_llegada(); }
   else
   { detecta_alejar();                 
     if (distancia_2 < barco_aleja)   //detecta que el barco se marcha
      { acciones_alejar(); x=0; }           
     else
    {if (x==0){condiciones_iniciales();}
 else{ acciones_aprox();} } 
 }
  }
  delay(50);
  
}
// ..............................................

void detecta_llegada()
{

digitalWrite (envia_1,LOW);
delayMicroseconds (2);
digitalWrite (envia_1,HIGH);
delayMicroseconds (10);
digitalWrite (envia_1,LOW);
durada_1 = pulseIn (recibe_1,HIGH);
distancia_1 = durada_1 / 58.2;
}

void detecta_alejar()
{
  // detecció de vaixell que marxa:
  digitalWrite (envia_2,LOW);
  delayMicroseconds (2);
  digitalWrite (envia_2,HIGH);
  delayMicroseconds (10);
  digitalWrite (envia_2,LOW);
  durada_2 = pulseIn (recibe_2,HIGH);
  distancia_2 = durada_2 / 58.2;
}
void condiciones_iniciales()
{
  digitalWrite(rojo,LOW);
  digitalWrite(amarillo,LOW);
  digitalWrite(verde,HIGH);
  puenteD.write(puente_abajo);
  puenteI.write(puente_abajo);
   
}
void acciones_llegada()
{
  digitalWrite(rojo,LOW);
  digitalWrite(amarillo,HIGH);
  digitalWrite(verde,LOW);
  
}
void acciones_aprox()
{
  // semàforo rojo
  digitalWrite(rojo,HIGH);
  digitalWrite(amarillo,LOW);
  digitalWrite(verde,LOW);
  puenteD.write(puente_arriba);
  delay (10);
  puenteI.write(puente_arriba);
  
}

void acciones_alejar()
{
 
  // semàforo àmbar
  digitalWrite(rojo,LOW);
  digitalWrite(amarillo,HIGH);
  delay(100);
  digitalWrite(verde,LOW);
  puenteD.write(35);
  delay(100);
  puenteD.write(puente_abajo);
  puenteI.write(puente_abajo);
}

void luces()
{
entrada=analogRead(sensor_luz);
Serial.println(entrada);
sortida=map(entrada,lindar,lindar_2,255,0);
if(entrada<lindar)
{analogWrite(farolas,255);}
else
{if(entrada>lindar_2){
analogWrite(farolas,0);
}
else
{
analogWrite(farolas,sortida);
}}
delay(tiempo);
}

Cap comentari:

Publica un comentari a l'entrada