Skip to content

ePresence es un sistema IoT para gestionar las aulas de cualquier centro de estudios.

Notifications You must be signed in to change notification settings

AlbertoMGV/ePresence

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 

Repository files navigation

ePresence 🎓

Tabla de Contenidos

Sobre el proyecto

ePresence es un sistema IoT para gestionar las aulas de cualquier centro de estudios. Consiste en saber cuántas personas entran, permanecen y salen del aula a tiempo real, así sabremos si una clase está ocupada o libre. Mediante un semáforo led sabremos si la clase está abierta (verde), ocupada (amarillo) o cerrada (rojo). Para saber si una clase esta cerrada bastará con saber si está fuera del horario establecido a ese aula.

Hecho con

Documentación

Server

El backend del servidor web, que tambien esta corriendo en la Raspberry, aunque no es la decisión más óptima. Lo hemos desarrollado con Django todo ello en Python. El servidor unicamente se encarga de recibir los datos y guardarlos en la base de datos, así como mostrarlos en un web para la comodidad de los usuarios.

Bueno dando por sabidos los conocimientos básicos de Django, hemos creado las 3 views necesarias para la web, es decir el Login, Home y Aula. Las cuales cargan los datos respectivos a cada una. Por otro lado con DJango RestFrameWork, nos crea las urls necesarias para cada aula, en las que nos devolvera un JSON con todos los datos del aula elegida.

def login(request):
    return render(request, 'login.html')

def home(request):
	aulas = Aula.objects.all()
	return render(request, 'home.html', {'aulas': aulas})

def aula(request, id):
	aula = Aula.objects.get(id=id)
	return render(request, 'aula.html', {'aula': aula})

Hemos creado 5 Views especiales para gestionar los datos, entre ellas aulaAdd y aulaRemove para añadir y quitar una persona respectivamente de las aulas y los metodos aulaVerde, aulaAmarillo y aulaRojo para cambiar entre estados de las aulas. En las 5 VIews hay que añadir un slash y el numero del aula, para que elegir el aula.

def aula_p_add(request, id):
	aula = Aula.objects.get(id=id)
	aula.personas = aula.personas+1
	aula.save()
	return HttpResponse('ok')

def aula_p_remove(request, id):
	aula = Aula.objects.get(id=id)
	aula.personas = aula.personas-1
	aula.save()
	return HttpResponse('ok')

def aula_e_verde(request, id):
	aula = Aula.objects.get(id=id)
	aula.estado = 0
	aula.save()
	return HttpResponse('ok')

def aula_e_rojo(request, id):
	aula = Aula.objects.get(id=id)
	aula.estado = 2
	aula.save()
	return HttpResponse('ok')

def aula_e_amarillo(request, id):
	aula = Aula.objects.get(id=id)
	aula.estado = 1
	aula.save()
	return HttpResponse('ok')

IoT

En cuanto al hardware, hemos utilizado una Raspberry Pi 3 junto con una Grove Base Hat que nos permite añadir varios componentes como tres LED Sockets que hemos utilizado para hacer un semáforo y dos botones que hemos utilizado para sumar y restar en el contador de personas.

Para hacer uso de los componentes así como desarrollar sus funcionalidades, hemos creado la clase mainController en lenguaje python donde hemos desarrollado todo el código para poder hacer uso del hardware.

Hemos inicializado 3 leds uno para cada color del semáforo (ledV, ledA y ledR) donde asignaremos el número de puerto al que está concectado en la Raspberry Pi.

ledV = GroveLed(5)
ledA = GroveLed(16)
ledR = GroveLed(18)

También hemos inicializado los 2 botones, uno tiene el método de añadir una persona y el otro de restar una persona

btn_in = GroveButton(22)
btn_out = GroveButton(24)

def on_press_in(t):
	aula_add()

def on_press_out(t):
	aula_remove()

btn_in.on_press = on_press_in
btn_out.on_press = on_press_out

El probrama principal se basa en un bucle de los métodos check() y update() que explicaremos a continuación.

#Main Program
while True:
	check()
	update()

El método check() comprueba constantemente mediante una petición a la URL del aula. Para definir en que estado debe estar el aula debemos comprobar en primer lugar si estamos dentro del horario, para ello hemos creado 3 variables de tiempo : la hora de entrada (h_in), la hora de salida (h_out) y la hora actual (h_act). De esta manera, sabremos si la hora actual está dentro o fuera del horario establecido a ese aula.

def check():
	res = requests.get('http://localhost:8000/api/Aula/1/')
	testJson = json.loads(res.text)
	global estado
	if estado!=testJson['estado']:
		estado = testJson['estado']

	h_in = datetime.strptime(testJson['hora_in'],'%H:%M:%S').time()
	h_out = datetime.strptime(testJson['hora_out'],'%H:%M:%S').time()
	h_act = datetime.now().time()

	if h_out > h_in:
		if h_act > h_in and h_act < h_out:
			if testJson['personas']==0:
				aula_estado(0)
			else:
				aula_estado(1)
		else:
			aula_estado(2)
	else:
		if h_act > h_in or h_act < h_out:
			if testJson['personas']==0:
				aula_estado(0)
			else:
				aula_estado(1)
		else:
			aula_estado(2)

Las condiciones que hemos creado para establecer el estado del aula son: si la hora actual está dentro del horario y el número de personas que hay dentro es 0, el estado será aula_estado(0); si dentro del horario hubiese alguna persona sería aula_estado(1); si no se cumple ninguna de estas condiciones el estado será aula_estado(2).

Los diferentes casos para aula_estado() son los siguientes:

def aula_estado(st):
	if st==0:
		requests.get('http://localhost:8000/aulaVerde/1/')
	elif st==1:
		requests.get('http://localhost:8000/aulaAmarillo/1/')
	elif st==2:
		requests.get('http://localhost:8000/aulaRojo/1/')

Donde aula_estado(0) sería para el verde, aula_estado(1) para el amarillo y aula_estado(2) para el rojo.

En cuanto al método update(), actualiza constantemente el estado de los leds comprobando el estado del aula ( aula_estado() ) y dependiendo del estado del aula enciende su led correspondiente.

def update():
	global estado
	if estado == 0:
		ledV.on()
		ledA.off()
		ledR.off()
		#abrir puerta
	elif estado == 1:
		ledV.off()
		ledA.on()
		ledR.off()
		#abrir puerta
	elif estado == 2:
		ledV.off()
		ledA.off()
		ledR.on()
		#bloquear puerta

Contribuidores

Creditos

About

ePresence es un sistema IoT para gestionar las aulas de cualquier centro de estudios.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published