Hola! en este post os vamos a explicar cómo desarrollamos este proyecto de parking inteligente (o Smart-Parking) que hicimos durante el verano del 2019.

Empecemos, como en cualquier proyecto, con una descripción funcional que nos ayudará a detectar los puntos que hay que resolver:

Diseñar e implementar un parking inteligente con las siguientes características funcionales:

  1. Capacidad para 4 coches con entrada y salida para coches.
  2. Cada plaza de aparcamiento tiene un led bicolor (rojo/verde) que indica si la plaza está libre u ocupada. 
  3. Cuando llega o sale un coche, el parking lo detecta y la barrera correspondiente se abre. Cuando el coche ha pasado la barrera, esta se cierra. 
  4. Si las plazas disponibles son 0, entonces el parking no abre la barrera de entrada hasta que no se libera una de las plazas. 
  5. En la entrada del parking hay un display que informa de las plazas disponibles.  

Y para muestra un botón. Aquí os dejamos el video en el que Maria os enseña como funciona el parking que hemos hecho!

Antes de ver cómo hemos desarrollado cada punto, vamos a ver con que controlamos el parking. Utilizamos dos Arduino UNO, controlados por Scratch a través del programa S4A (Scratch For Arduino). Utilizamos dos Arduino porque necesitamos bastantes puertos y con un solo Arduino no teníamos suficiente. Además, por lo que sabemos, S4A solo deja controlar un sensor de infrarrojos por placa, y en el proyecto utilizamos 2. Para información de cómo instalar el firmware en los Arduino podéis visitar la página oficial de S4A http://s4a.cat/index_es.html

La forma de utilizar las dos placas con Scratch es mediante los objetos. Cada Arduino se configura como un objeto y listo!

Para el cableado hemos utilizado cables de colores para conectar cada componente a los puertos de las placas. Para ello hemos utilizado un soldador y estaño. Como los componentes van pinchados en el porexpan, el cableado puede ir por debajo, de esta manera quedan escondidos.

Vamos a ver cómo hemos ido resolviendo los requerimientos

1.- Capacidad para 4 coches con entrada y salida para coches.

Para la maqueta hemos utilizado una plancha de porexpan de 30×40 cm y de un grosor de 20 mm. El porexpan nos va perfecto para pinchar los elementos de la maqueta y además la silicona caliente se pega fácilmente para poder fijar otros elementos como los servos. En la maqueta dibujamos las plazas y marcamos donde van a ir las barreras de entrada y salida.

2.- Cada plaza de aparcamiento tiene un led bicolor (rojo/verde) que indica si la plaza está libre u ocupada. 

Para resolver este punto utilizamos 4 leds bicolor que “pinchamos” en el porexpan. Para controlar si hay un coche en la plaza usamos una resistencia sensible a la luz o LDR. Esta resistencia varía su valor según la luz que incide en ella, por lo que cuando no haya coche en la plaza tendremos luz incidiendo en la LDR, y cuando un coche esté aparcado pues la tapará. 

Entonces ya lo tenemos, usaremos una LDR y un led para cada plaza. El LED lo controlaremos mediante dos puertos digitales y para la LDR usaremos una entrada analógica, así tendremos un rango de valores según la luz que le llegue.  

El problemilla es que no podemos conectar una LDR directamente al Arduino, tenemos que utilizar un circuito electrónico llamado Divisor de Tensión. Os pasamos un link donde lo explica mejor: 

Nosotros hemos utilizado una resistencia de 10Kohms y hemos conectado el circuito según el siguiente esquema:

Hemos dividido las plazas entre los dos Arduinos, por lo que con el Arduino 1 controlamos las plazas 1 y 2, y con el Arduino 2 controlamos las plazas 3 y 4.

Ahí van los pins que hemos utilizado

Plaza 1: 

LDR: Arduino1 Analógico 1

LED Verde: Arduino1 Digital 11

LED Rojo: Arduino1 Digital 10

Plaza 2:

LDR: Arduino1 Analógico 0

LED Verde: Arduino1 Digital 13

LED Rojo: Arduino1 Digital 12

Plaza 3

LDR: Arduino2 Analógico 1

LED Verde: Arduino2 Digital 11

LED Rojo: Arduino2 Digital 10

Plaza 4

LDR: Arduino2 Analógico 0

LED Verde: Arduino2 Digital 13

LED Rojo: Arduino2 Digital 12

Atención!! Los LED no soportan el voltaje que da el Arduino en los puertos digitales (5Vcc), por lo que hay que poner una resistencia de 330 Ohms en serie en el ánodo del led (la patita larga). Si no lo hacéis ya podéis ir a comprar más.

Y este es el código que hemos utilizado para controlar el color del LED según haya coche o no aparcado. Como veis, se trata de controlar el valor que da el puerto Analógico donde está conectada la LDR y a partir de un valor hacer el cambio de color. 

3.- Cuando llega o sale un coche, el parking lo detecta y la barrera correspondiente se abre. Cuando el coche ha pasado la barrera, esta se cierra

Para detectar la llegada de un coche utilizamos un sensor de ultrasonidos HC-SR04. Quizás hay opciones mejores, pero de esta forma hemos practicado con este elemento y además ya lo teníamos en nuestra caja de herramientas, por lo que no hemos necesitado ir a comprarlo. 

Para que S4A pueda controlar este elemento hace falta instalar en nuestros Arduinos una libreria que podéis descargar desde este link https://drive.google.com/file/d/0B9gULwljYKpdYTlGMWVLTjBEQ28/view?usp=sharing

En esta página encontrareis más información sobre S4A y estos sensores: https://tecnopatafisica.com/tecno3eso/teoria/robotica/41-s4asensorultrasonidos

A estos sensores hay que alimentarlos con 5Vcc y GND en las patas correspondientes (podéis usar los puertos de voltaje del mismo Arduino). La pata Trigger hay que conectarla al pin 3 del Arduino (por requerimento de  del S4A) y la pata Echo a una entrada analógica, en nuestro caso al Analógico 5. 

De esta forma el puerto analógico 5 nos dirá la distancia a la que se encuentra un objeto delante del sensor, y podremos detectar si hay un coche esperando entrar. 

Como tenemos dos barreras, una de entrada y una de salida, necesitamos dos sensores HC-SR04 y controlar cada uno con una placa diferente, aunque mantendremos la configuración de puertos: Trigger en el puerto Digital 3 y Echo en el puerto analógico 5

Las barreras se controlan mediante dos servos. Un servo para cada barrera y conectado a un Arduino. En nuestro caso controlamos la barrera de entrada con el Arduino 2 y la de salida con el 1. Además hay que asegurarse que el servo de la barrera de entrada está conectado al Arduino donde también está conectado el sensor de ultrasonidos de la entrada y lo mismo con la salida. A ver si vais a tener un lío de barreras y sensores y se abrirá la barrera de salida cuando llegue un coche para entrar!! :DD

Para conectar el servo a la placa es muy sencillo. Se alimenta el servo con 5Vcc y con GND y el cable de control se conecta a un puerto digital, en nuestro caso al 8, representado en S4A como Motor 8. Hay una instrucción en S4A donde se le puede asignar unos grados al servo para que los ejecute y posicione la barrera donde queramos. Para esto mejor hacer algunas pruebas ya que los grados dependerán de cómo coloquemos el servo. 

En esta página encontraréis más información sobre servos y S4A: https://www.prometec.net/servo-s4a/

y este es el código. Es el mismo para cada barrera

5.- Si las plazas disponibles son 0, entonces el parking no abre la barrera de entrada hasta que no se libera una de las plazas.

Aquí empieza la diversión. Entramos en el bonito mundo de las variables. Tenemos que saber cuántos coches hay aparcados en el parking y para ello necesitamos la ayuda de variables. Tenemos varias opciones, tener una sola variable e ir restando o sumando cada vez que un coche aparca o sale de una plaza, o tener una variable para cada plaza e ir poniéndola a 1 o a 0 dependiendo de si hay coche aparcado o no. Para saber cuántos coches hay aparcados solo hay que sumar todas las variables. 

Creamos 4 variables: PLAÇA1, PLAÇA2, PLAÇA3 i PLAÇA4 y las inicializamos a 0 al inicio del programa. 

A continuación las insertamos en el código que controla el led bicolor de la plaza asignándoles 1 o 0 según corresponda (1 si la plaza está ocupada y 0 si la plaza está libre)

Finalmente, añadimos el control de la variable solo en la barrera de entrada. Es decir, el código entrará en el segundo “SI” solamente si la suma de todas las variables es menor que 4, es decir, que hay alguna plaza de aparcamiento libre. 

6.- En la entrada del parking hay un display que informa de las plazas disponibles.

Este es quizás el punto más complicado en cuanto a cableado y quizás también en cuanto a programación. 

Lo primero que necesitamos es saber cuántas plazas hay disponibles. Para ello creamos una nueva variable llamada OCUPADES donde almacenaremos la suma de las otras cuatro variables. Una vez tenemos este valor, lo tenemos que enviar al display en formato binario las plazas que quedan. Será un número binario de tres bits ya que como máximo el número a representar será 4 (cuando todas las plazas estén libres). 

Si OCUPADES = 4 plazas ocupadas habrá que enviar el número 0 (000)

Si OCUPADES = 3 habrá que enviar el número 1 (001)

Si OCUPADES = 2 habrá que enviar el número 2 (010)

Si OCUPADES = 1 habrá que enviar el número 3 (011)

Si OCUPADES = 0 habrá que enviar el número 4 (100)

Cómo? que no sabes de que te estoy hablando con lo del código binario? Échale un vistazo a este link: http://www.educadoresdigitales.org/2011/04/entendiendo-el-sistema-binario.html

Recuerda: en el mundo solo hay 10 tipos de personas, las que saben binario y las que no 😉   Obviamente esta es una broma que hacemos las que sabemos binario :DD

Y por qué tenemos que representar el número en binario? pues porque vamos a utilizar un circuito integrado que transforme ese código binario de 3 bits a los 7 segmentos que tiene un display. Para este proyecto utilizamos un Display LED de cátodo común, lo que significa que la masa es común para todos los segmentos del display y tenemos que utilizar también un circuito integrado compatible con este tipo de displays, el 7478. 

Os pasamos información, tanto del Display LED como del CI 7478. Si tenéis dudas de cómo conectarlo nos escribís un comentario y lo intentaremos resolver. 

Recordad de que hay que poner una resistencia de 330 Ohms en el cátodo del Display. Si no lo hacéis se fundirá en un momento.

DISPLAY LED

https://components101.com/7-segment-display-pinout-working-datasheet

CI 7478

La conexión del Circuito Integrado a la placa es:

A: analógico 5

B: analógico 6

C: analógico 9

Nota: usamos puertos analógicos porque ya nos hemos quedado sin puertos digitales. De todas formas, podemos emular un comportamiento digital de un puerto analógico asignando los valores 0 o 255 en la salida.

El código queda como sigue:

Bueno, hasta aquí este post donde hemos intentado explicar el proyecto. Seguro que hay otras formas de afrontar el reto y seguramente mucho mejores que la nuestra, pero esto es lo que se nos ha ocurrido y así lo hemos hecho. Estaremos encantadas de que nos sugieras otras formas o variaciones en nuestra estrategia. 

Hasta la próxima!!!

Smart Parking – IOT project
Etiquetado en:                                    

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *