Ya que el sistema que se requiere es algo complejo, en primer lugar se construye un diagrama de bloques para dividir el proyecto en partes mas pequeñas y así trabajar de forma más cómoda; Se dividió el sistema en 4 bloques: entradas, control, visualización de procesos y motor; El bloque de entradas recibe los datos enviados por el sensor de luz, el sensor de humedad y el teclado matricial, el bloque de control estaría conformado por el microcontrolador, el cual almacena los datos recibidos, evalúa los casos y controla los bloques de visualización de procesos y motor. El bloque de visualización de procesos despliega un menú para realizar ciertas configuraciones del sistema (mediante el teclado matricial) además muestra los valores que entregan los sensores. Por último, el módulo bloque del motor enciende o apaga la bomba de agua para que el cultivo sea regado cuando el nivel de humedad este por debajo del valor establecido.
Inicialmente se diseñó el código para probar por separado cada uno de los módulos (lcd, teclado y sensores) después de realizar varias pruebas y al comprobar su correcto funcionamiento se procede a unir todo el código, al usar este método se puede detectar mas fácilmente los posibles errores tanto de lógica como de funcionamiento.
En primer lugar se probó el módulo LCD, el cual puede trabajar con 4 u 8 bits de entrada, en este caso se conectaron los 8 bits, luego se colocó el sensor de luz, que tiene una salida digital, es decir, entrega un 0 o 1 lógico dependiendo de si hay luz o no, por tanto, se lee su estado con el comando digitalRead(), cuando se probo el módulo de forma separada funcionaba perfectamente, pero al trabajar con dos módulos, por alguna razón no se detectaba las señales digitales, así que fue necesario leer los datos con analogRead() y comprobar si ese valor estaba por arriba o por abajo del valor promedio entregado por el sensor, con eso se garantiza tener un cero ó un uno lógico. Por otro lado el sensor de humedad entregaba datos de tipo analógico que variaban entre 0 y 1023, así que obligatoriamente deben leerse los datos de forma analógica para poder ser comparados; Para el caso de los modos A,B y C el valor de humedad requerido para que el sistema se active es de 200, 400 y 800 respectivamente, hay que tener en claro que una lectura de humedad de 1023 indica que el suelo esta extremamente seco y una humedad de cero indica que el suelo esta completamente mojado, tomando el caso del cultivo B, cuando hay una humedad mayor a 400, el suelo estará seco y la bomba de agua deberá activarse, poco a poco el suelo se ira humedeciendo y cuando el nivel detectado este por debajo de ese valor el suelo se habrá humedecido y dejara de fluir agua, pero para que se encienda la bomba debe tenerse en cuenta otro factor, la luz, en este caso cuando se detecta luz (día) el sensor envía un cero lógico, por tanto cuando no hay luz (noche) se tiene un uno lógico (estos son los valores entregados por el sensor de luz adquirido, es posible que con otro modelo los valores entregados cambien); La bomba se activara si y solo si el nivel de humedad esta por encima del valor fijado y el sensor de luz detecta si es de día o de noche, según lo haya escogido el usuario. Suponiendo que se haya elegido el modo B y trabajo nocturno, la bomba únicamente trabajara en la noche cuando el nivel detectado por el sensor de humedad sea mayor que 400, en cualquier otro caso la bomba se apagara. En la siguiente figura puede verse las conexiones realizadas, debe aclararse que en los dibujos las conexiones se hacen con fines ilustrativos y no aparecen todas para no saturar la imagen.
Al encender el sistema, en el lcd se despliega un menú, el cual le dice al usuario que existen 4 opciones para elegir, mediante las letras A,B,C,D del teclado, el usuario puede ingresar los datos, para ello, en el código se usa una función llamada menú, por medio de condicionales se evalúa la opción elegida, una vez que se ha escogido el tipo de cultivo, el sistema le preguntara si quiere que funcione únicamente en el día o en la noche, para ello el usuario debe presionar la tecla A o la tecla B respectivamente, después de esto el sistema pasara a evaluar el valor de las entradas, se ejecuta la función riego la cual compara los valores recibidos con los valores guardados, si las condiciones se cumplen, el sistema encenderá el motor, en caso contrario se apagara; Si se escoge el cultivo D, mediante las teclas A,B se podrá subir ó bajar el nivel de la humedad pero existen límites, por abajo el mínimo valor que se puede tomar es de 100 y por arriba el máximo valor será de 1000, el usuario no podrá exceder dichos límites. Una vez que se ejecuta la función riego, esta entra en un bucle infinito, comparando una y otra vez los valores guardados con los datos entregados por los sensores, de esta forma se encenderá o se apagara el motor según el caso, para realizar esta actividad el motor se activara por medio de un relé.
Adicionalmente se colocaron dos fuentes para alimentar el sistema, al principio todo estaba conectado a una sola pero cuando se activaba el motor, este consumía mucha corriente, la pantalla LCD parpadeaba y los demás componentes posiblemente hayan tenido inconvenientes para trabajar, por ello se colocó una fuente de 5.0 V y 500 mA para alimentar el microcontrolador y los módulos, al motor se le coloco una fuente mas poderosa, dado que el microcontrolador activa un relé, se puede controlar motores de baja, media y alta potencia para cubrir las necesidades del usuario.
Inicialmente se diseñó el código para probar por separado cada uno de los módulos (lcd, teclado y sensores) después de realizar varias pruebas y al comprobar su correcto funcionamiento se procede a unir todo el código, al usar este método se puede detectar mas fácilmente los posibles errores tanto de lógica como de funcionamiento.
En primer lugar se probó el módulo LCD, el cual puede trabajar con 4 u 8 bits de entrada, en este caso se conectaron los 8 bits, luego se colocó el sensor de luz, que tiene una salida digital, es decir, entrega un 0 o 1 lógico dependiendo de si hay luz o no, por tanto, se lee su estado con el comando digitalRead(), cuando se probo el módulo de forma separada funcionaba perfectamente, pero al trabajar con dos módulos, por alguna razón no se detectaba las señales digitales, así que fue necesario leer los datos con analogRead() y comprobar si ese valor estaba por arriba o por abajo del valor promedio entregado por el sensor, con eso se garantiza tener un cero ó un uno lógico. Por otro lado el sensor de humedad entregaba datos de tipo analógico que variaban entre 0 y 1023, así que obligatoriamente deben leerse los datos de forma analógica para poder ser comparados; Para el caso de los modos A,B y C el valor de humedad requerido para que el sistema se active es de 200, 400 y 800 respectivamente, hay que tener en claro que una lectura de humedad de 1023 indica que el suelo esta extremamente seco y una humedad de cero indica que el suelo esta completamente mojado, tomando el caso del cultivo B, cuando hay una humedad mayor a 400, el suelo estará seco y la bomba de agua deberá activarse, poco a poco el suelo se ira humedeciendo y cuando el nivel detectado este por debajo de ese valor el suelo se habrá humedecido y dejara de fluir agua, pero para que se encienda la bomba debe tenerse en cuenta otro factor, la luz, en este caso cuando se detecta luz (día) el sensor envía un cero lógico, por tanto cuando no hay luz (noche) se tiene un uno lógico (estos son los valores entregados por el sensor de luz adquirido, es posible que con otro modelo los valores entregados cambien); La bomba se activara si y solo si el nivel de humedad esta por encima del valor fijado y el sensor de luz detecta si es de día o de noche, según lo haya escogido el usuario. Suponiendo que se haya elegido el modo B y trabajo nocturno, la bomba únicamente trabajara en la noche cuando el nivel detectado por el sensor de humedad sea mayor que 400, en cualquier otro caso la bomba se apagara. En la siguiente figura puede verse las conexiones realizadas, debe aclararse que en los dibujos las conexiones se hacen con fines ilustrativos y no aparecen todas para no saturar la imagen.
Al encender el sistema, en el lcd se despliega un menú, el cual le dice al usuario que existen 4 opciones para elegir, mediante las letras A,B,C,D del teclado, el usuario puede ingresar los datos, para ello, en el código se usa una función llamada menú, por medio de condicionales se evalúa la opción elegida, una vez que se ha escogido el tipo de cultivo, el sistema le preguntara si quiere que funcione únicamente en el día o en la noche, para ello el usuario debe presionar la tecla A o la tecla B respectivamente, después de esto el sistema pasara a evaluar el valor de las entradas, se ejecuta la función riego la cual compara los valores recibidos con los valores guardados, si las condiciones se cumplen, el sistema encenderá el motor, en caso contrario se apagara; Si se escoge el cultivo D, mediante las teclas A,B se podrá subir ó bajar el nivel de la humedad pero existen límites, por abajo el mínimo valor que se puede tomar es de 100 y por arriba el máximo valor será de 1000, el usuario no podrá exceder dichos límites. Una vez que se ejecuta la función riego, esta entra en un bucle infinito, comparando una y otra vez los valores guardados con los datos entregados por los sensores, de esta forma se encenderá o se apagara el motor según el caso, para realizar esta actividad el motor se activara por medio de un relé.
Adicionalmente se colocaron dos fuentes para alimentar el sistema, al principio todo estaba conectado a una sola pero cuando se activaba el motor, este consumía mucha corriente, la pantalla LCD parpadeaba y los demás componentes posiblemente hayan tenido inconvenientes para trabajar, por ello se colocó una fuente de 5.0 V y 500 mA para alimentar el microcontrolador y los módulos, al motor se le coloco una fuente mas poderosa, dado que el microcontrolador activa un relé, se puede controlar motores de baja, media y alta potencia para cubrir las necesidades del usuario.

Comentarios
Publicar un comentario