-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
123 lines (101 loc) · 4.79 KB
/
main.py
File metadata and controls
123 lines (101 loc) · 4.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from flask import Flask, render_template
app = Flask(__name__)
#### proyecto de penguin bootcamp
"""
ESTO DEBE CORRER EN LA RASPBERRY PARA QUE FUNCIONE
Tutores Claves: Willi Bobadilla @WilliBobadilla y Lorena Zalazar @Lorelulen
Objetivo:
en el presente archivo se intentara realizar una pagina web para el monitoreo de vacancias
de estacionamientos funcional en un local determinado utilizando raspberry, que responda en
una web basica diseñada por nosotros
Diseño:
se necesitaran por lugar de estacionamiento 1 sensor de ultrasonido, que estaran conectados
a una misma raspberry pi, que correra una pagina web para el contacto con el cliente sobre
la disponibilidad del estacionamiento
Consideraciones:
1)Para la consideracion de lugares vacios con los sensores de ultrasonidos, se tomara la
distancia de 1.95 metros como vacion (teniendo la altura real de piso a techo en el estacionamiento
de 2.10 metros). Otra medida recibida se tomara como espacio ocupado actualmente
2)El dato sera enviado por la raspberry pi a la web que se correra en la misma
3)El cliente recibira una pantalla que le indicara por lugar el estatus de cada estacionamiento de
bateria dentro del local como ( texto libre+ mas color verde) o (texto ocupado + color rojo)
"""
import time #se necesita para usar las funciones de tiempo
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD) #definimos la configuracion de la raspberry para utilizar la numeracion de los pines
disparador1 = 11
Eco1 = 13
disparador2 = 3
Eco2 = 5
#Hay que configurar ambos pines del HC-SR04 para ambos sensores
GPIO.setup(disparador1, GPIO.OUT)
GPIO.setup(Eco1, GPIO.IN)
GPIO.setup(disparador2,GPIO.OUT)
GPIO.setup(Eco2,GPIO.IN)
#definimos la funcion para el sensor numero 1
def detectar_lugar1():
GPIO.output(disparador1, False) #apagamos el pin disparador1
time.sleep(2*10**-6) #esperamos dos microsegundos
GPIO.output(disparador1, True)#encendemos el pin
time.sleep(10*10**-6) #esperamos diez microsegundos
GPIO.output(disparador1, False)#y lo volvemos a apagar
#empezaremos a contar el tiempo cuando el pin Eco1 se encienda
while GPIO.input(Eco1) == 0:
start_1 = time.time()
while GPIO.input(Eco1) == 1:
end_1 = time.time()
#La duracion del pulso del pin Eco sera la diferencia entre
#el tiempo de inicio y el final
duracion_1 = end_1-start_1
#Este tiempo viene dado en segundos. Si lo pasamos
#a microsegundos, podemos aplicar directamente las formulas
#encontradas en los ejemplos extraidos
duracion1 = duracion_1*10**6
medida1 = duracion1/58 #hay que dividir por la constante que pone en la documentacion,
#nos dara la distancia en cm
return medida1
#definimos la funcion para el lugar2
def detectar_lugar2():
GPIO.output(disparador2, False) #apagamos el pin dispardor y seguimos los mismos pasos del lugar 1
time.sleep(2*10**-6)
GPIO.output(disparador2, True)
time.sleep(10*10**-6)
GPIO.output(disparador2, False)
#empezaremos a contar el tiempo cuando el pin Eco2 se encienda
while GPIO.input(Eco2) == 0:
start_2 = time.time()
while GPIO.input(Eco2) == 1:
end_2 = time.time()
#La duracion del pulso del pin Eco2 sera la diferencia entre
#el tiempo de inicio2 y el final2
duracion_2 = end_2-start_2
#Este tiempo viene dado en segundos. Si lo pasamos
#a microsegundos, podemos aplicar directamente las formulas
#de la documentacion
duracion2 = duracion_2*10**6
medida2 = duracion2/58 #hay que dividir por la constante que pone en la documentacion,
#nos dara la distancia en cm
return medida2
@app.route("/")
def index2():
datos = {'sensor1':d1,
'sensor2':d2}
return render_template("index2.html",msg = datos)
#Bucle principal del programa, lee el sensor. Se sale con CTRL+C
while True:
try:
d1=detectar_lugar1() #ahora guardamos los valores retornados al llamar las funciones
d2=detectar_lugar2() # para luego con los if relacionar para definir si esta o no libre
if d1>=14.5: #para esta maqueta se hara en miniatura por lo cual los valores son
print("libre espacio 1") #realmente muy pequeños pero si es para un estacionamiento estandar
else: #se deben usar los valores de la descripcion
print("ocupado espacio 1")
if 14.5<=d2:
print("libre espacio 2")
else:
print("ocupado espacio 2")
time.sleep(2.0) #por ultimo le damos un sleep para reinicir la funcion
except KeyboardInterrupt:
break #ponemos un break para detener el programa
if __name__ == "__main__":
app.run(debug=True)