Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 2
Treball de Fi de Grau
Grau en Enginyeria en Tecnologies Industrials
Disseny d’un sistema de gestió intel·ligent d’aparcament públic urbà
ANNEX
Autor: Víctor Jordà i Ferreres Director: Jordi García Boixes Convocatòria: 2021/2022 Q2
Escola Tècnica Superior
d’Enginyeria Industrial de Barcelona
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 4
Índex
1 Annex 1: Caracterització sensor Infraroig GP2Y0A21YK0F ... 6 2 Annex 2: Caracterització sensor ultrasons HC-SR04 ... 8 3 Annex 3: Codi del microcontrolador ... 10
Índex d’il·lustracions
Il·lustració 1: Sensor GP2Y0A21YK0F. Font: Amazon ... 6 Il·lustració 2: Gràfic caracterització del sensor infraroig (valor analògic en funció de la distància). Font: Pròpia... 7 Il·lustració 3:Gràfic caracterització del sensor infraroig (distància en funció del valor analògic). Font: Pròpia ... 7 Il·lustració 4: Sensor d'ultrasons HC-SR04. Font: Amazon ... 8 Il·lustració 5: Programa de caracterització del sensor HC-SR04 ... 9
Índex de taules
Taula 1: Taula de valors de l'experimentació del sensor infraroig. Font: Pròpia ... 6 Taula 2: Relació entre distància real i la descrita per el programa ... 9
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 5
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 6
1 Annex 1: Caracterització sensor Infraroig GP2Y0A21YK0F
Per tal de caracteritzar el funcionament exacte del sensor d’Infrarojos GP2Y0A21YK0F s’assaja i es va recollint el valor de la sortida analògica del sensor amb la distància a la que està l’obstacle.
Il·lustració 1: Sensor GP2Y0A21YK0F. Font: Amazon
Com que tampoc es necessita que sigui molt precís s’agafen 7 distàncies en el seu rang de detecció (en aquest sensor és de 10 a 80 cm). Com que els baixos dels cotxes no arriben a 80 cm es fa fins a 70 i així evitar procés de càlcul i posterior complexitat metemàtica. Com que la variable analògica presentava diferències entre diferents mesures, es decideix fer 3 cops l’experiment i determinar la línia de comportament a partir de la mitjana d’aquest valors. En la següent taula es pot observar la distància a la que està l’objecte a detectar i les 3 experimentacions fetes (columna Mesura1, Mesura2, Mesura3) i a l’ultima fila la mitja d’aquests darrers valors (Mitjana):
Distància [m] Mesura1 Mesura2 Mesura3 Mitjana
0.1 482 493 493 489
0.2 267 269 269 268
0.3 190 189 193 191
0.4 150 150 158 153
0.5 137 142 138 139
0.6 120 121 129 123
0.7 108 108 108 108
Taula 1: Taula de valors de l'experimentació del sensor infraroig. Font: Pròpia
Un cop determinat el valor analògic que correspon a cada una de les distàncies seleccionades s’ha de passar d’una variable discreta a una continua per tal de determinar el valor analògic per a qualsevol distància de dins del rang. En aquest cas és una funció polinòmica de 3r grau com es pot observar a continuació (Il·lustració 2: Gràfic caracterització del sensor infraroig (valor analògic en funció de la distància). Font: Pròpia), es dona per bona l’equació VA del gràfic ja que el coeficient de determinació R2 dona 0,9941.
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 7
Il·lustració 2: Gràfic caracterització del sensor infraroig (valor analògic en funció de la distància). Font: Pròpia
Concretament ens serà més útil trobar l’expressió de la distància en funció del valor analògic amb la seva equació continua, i és el que es troba a continuació:
Il·lustració 3:Gràfic caracterització del sensor infraroig (distància en funció del valor analògic). Font: Pròpia
On la funció continua d és:
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 8
2 Annex 2: Caracterització sensor ultrasons HC-SR04
Aquest cop per a la caracterització del sensor s’utilitzarà un programa ja fet i es corroborarà amb el sensor real.
Il·lustració 4: Sensor d'ultrasons HC-SR04. Font: Amazon
En concret el programa és el següent i està fet per l’empresa peruana NaylampMechatronics.
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 9
Il·lustració 5: Programa de caracterització del sensor HC-SR04
A la següent taula es pot veure la relació entre la distància real i la distància que dona el programa.
Per lo tant es considera ben modelat ja que les diferències són mínimes.
Distància real [cm]
Distància del programa [cm]
10 11
20 20
30 30
40 39
50 50
60 60
70 71
80 82
90 90
100 100
110 110
Taula 2: Relació entre distància real i la descrita per el programa
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 10
3 Annex 3: Codi del microcontrolador
A continuació, hi ha el codi complet carregat en el microcontrolador en la seva versió definitiva. Per ser utilitzat nomes s’hauria de enganxar el següent codi i muntar el prototip segons les entrades i tot descrit en la memòria d’aquest treball.
//Pins d'entrades i sortides de dades:
const int Trigger = 2; //Pin digital 2 per el Trigger del sensor US const int Echo = 3; //Pin digital 3 per el Echo del sensor US const int IR=A0; //Pin analogic A0 entrada sensor IR const int Vermell=9; //Pin digital PWM 9 per el vermell const int Verd=10; //Pin digital PWM 10 per el verd const int Blau=11; // Pin digital PWM 11 per el verd //Variables necessàries del codi
int mostra=0; //Variable que controla el cicle while
float llista[20]={1.5 , 56.5 , 67.5 , 167.5 , 199.5 , 154.5 , 671.5 , 677.5 , 899.5 , 44.5 , 46878 , 234.5 , 564.22 , 3466 , 456 , 2344 , 4566 , 1244 , 234 , 3455 }; //llista de valors
float llistaUS[20]={1.5 , 56.5 , 67.5 , 167.5 , 199.5 , 154.5 , 671.5 , 677.5 , 899.5 , 44.5 , 46878 , 234.5 , 564.22 , 3466 , 456 , 2344 , 4566 , 1244 , 234 , 3455 }; //llista de valors
char missatge = 'n'; // Variable iniciada que emmagatzema el que arriba per el port serie float limit= 15; // Limit de cm a que es posa
int estat=0; // estat en que està la plaça; 1:cotxe; 0:no cotxe
int adjudicada=0; // diu si la plaça ha estat adjudicada o no 1:adjudicada; 0: NO adjudicada float t; // Temps que tarda a arribar el so al Echo
float mesura_US; // variable que pren el valor mesurat pel sensor US float mesura_analog_IR; // variable que pren el valor mesurat pel sensor IR
float mitjana_diferencia; // variable que pren com a valor la diferència entre les dos mesures dels sensors
float mitjanaUS;
float mitjanaIR;
void setup() {
pinMode(Trigger, OUTPUT); //Es defineix el pin on hi ha el Trigger com a sortida pinMode(Echo, INPUT); //Es defineix el pin on hi ha el Echo com a entrada digitalWrite(Trigger, LOW); //S'inicia el pin del Trigger a 0V
pinMode(IR,INPUT); //definim que A0 sera un pin d'entrada del sensor IR
pinMode(Vermell,OUTPUT); //pin Vermell es defineix com a sortida pinMode(Verd,OUTPUT); //pin Verd es defineix com a sortida pinMode(Blau,OUTPUT); //pin Vlau es defineix com a sortida
Serial.begin(38400); //iniciailzamos la comunicación Serial Serial.println("Començem: codi nou2!");
}
void loop(){
//s'inicia el cicle de mesurar while(mostra < 20){
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 11
//Si reb un missatge per el port serial el llegeix, si no rep res no llegeix if(Serial.available() != 0){
missatge=Serial.read();
if(missatge == 's'){
adjudicada=1;
}
if(missatge == 'n'){
adjudicada=0;
} }
//__________Sensor_US___________________________________
digitalWrite(Trigger, HIGH); //Encenem el emisor delayMicroseconds(10); //deixen ences 10 us digitalWrite(Trigger, LOW); //apaguem l'emisor
t = pulseIn(Echo, HIGH); //obtenim l'amplada de pols (entrada PWM) mesura_US = t/58.9; //obtenim el valor de la mesura
llistaUS[mostra]=mesura_US;
//__________Sensor_IR______
mesura_analog_IR=analogRead(A0); //obtenim el valor analògic del sensor IR float mesura_IR=19364*pow(mesura_analog_IR,-1.224); // convertim el valor analogic a cm llistaIR[mostra]=mesura_IR;
//____Mesura la diferencia entre les dos mesures i emmagatzema a la llista______
llista[mostra]=abs(mesura_US-mesura_IR);
mostra++;
delay(60);
}
mostra=0; //iniciem a 0 la variable mostra per que el seguent cicle while es faci //es mesura la mitjana:
mitjana_diferencia=(llista[0]+llista[1]+llista[2]+llista[3]+llista[4]+llista[5]+llista[6]+llista[7]+llista[8]+llist a[9]+llista[10]+llista[11]+llista[12]+llista[13]+llista[14]+llista[15]+llista[16]+llista[17]+llista[18]+llista[1 9])/20;
mitjanaUS=(llistaUS[0]+llistaUS[1]+llistaUS[2]+llistaUS[3]+llistaUS[4]+llistaUS[5]+llistaUS[6]+llista US[7]+llistaUS[8]+llistaUS[9]+llistaUS[10]+llistaUS[11]+llistaUS[12]+llistaUS[13]+llistaUS[14]+llista US[15]+llistaUS[16]+llistaUS[17]+llistaUS[18]+llistaUS[19])/20;
mitjanaIR=(llistaIR[0]+llistaIR[1]+llistaIR[2]+llistaIR[3]+llistaIR[4]+llistaIR[5]+llistaIR[6]+llistaIR[7]+lli staIR[8]+llistaIR[9]+llistaIR[10]+llistaIR[11]+llistaIR[12]+llistaIR[13]+llistaIR[14]+llistaIR[15]+llistaIR[
16]+llistaIR[17]+llistaIR[18]+llistaIR[19])/20;
//Serial.print(mitjana_diferencia); Serial.print("-"); Serial.print(mitjanaUS); Serial.print("-");
Serial.println(mitjanaIR);
if(mitjana_diferencia<(limit) and mitjanaUS<45){ //si la mitjana es inferior al limit vol dir que hi ha un cotxe a sobre, per lo tant es posa led vermell, estat=1 i adjudicada=0
estat=1;
adjudicada=0;
Serial.print(estat); Serial.print("-"); Serial.print(mitjana_diferencia); Serial.print("-");
Serial.print(mitjanaUS);Serial.print("-"); Serial.println(mitjanaIR);
Disseny d’un projecte de gestió intel·ligent d’aparcament públic urbà Pàg. 12
analogWrite(Vermell,255);
analogWrite(Verd,0);
analogWrite(Blau,0);
}
else{ //si la mitjana es superior al limit vol dir que NO hi ha un cotxe a sobre, per lo tant es posa led blau o verd (adjudicada 1 o 0), estat=0
estat=0;
Serial.print(estat); Serial.print("-"); Serial.print(mitjana_diferencia); Serial.print("-");
Serial.print(mitjanaUS);Serial.print("-"); Serial.println(mitjanaIR);
if(adjudicada==1){ //Si està lliure (estat=0) i adjudicada=1 --> led blau analogWrite(Vermell,0);
analogWrite(Verd,0);
analogWrite(Blau,255);
}
else{ //Si està lliure (estat=1) i adjudicada=0 --> led verd analogWrite(Vermell,0);
analogWrite(Verd,255);
analogWrite(Blau,0);
} } }