Saltar al contenido principal

Actualización [ 13 ] | Armado | Lampara UV

· Lectura de un minuto
Wolfsrudel
All the Team

Añadimos una lampara UV al proyecto

Inmediatamente añadimos los plantines nos dispusimos a añadir una lampara UV al percatarnos de la poca luz solar que entraba a la instancia, para ello decidimos utilizar el último de nuestros disparos de la placa y el mismo timer; aunque hay un problema, el timer es muy impreciso para ello. Por suerte ya planteamos una solución: utilizaremos la Raspberry para que por medio de un script tome el horario local del día y se encargué de mandar un dato vía serial al circuito que le diga si prender o no las lamparas UV.

Anteriormente habiamos utilizado el timer interno del microcontrolador, pero esto es impreciso; no tenemos garantía de sí nuestros cálculos dan en el clavo o no, porque no podemos tener en cuenta la cantidad de tiempo que tardan en ejecutarse las otras lineas de código del circuito.

Foto de la hidroponia

(es muy fachera)

Actualización [ 12 ] | Armado | Detalles

· 2 min de lectura
Wolfsrudel
All the Team

Armado

Los últimos dias anduvimos trabajando en diseñar e imprimir los modelos 3D que contendrán tanto la placa como la Raspberry Pi y a su vez solucionando problemas con la bomba; esta se prendía y apagaba por el sobrecalientamiento. Esto es un problema gigantezco en una hidroponia; si la bomba se apaga, los plantines mueren.

La bomba no debe dejar de bombear por mucho tiempo, así que como solución para que no se sobrecalentara decidimos utilizar un disparo de nuestra placa para ir prendiendola y apagandola de forma intermitente. Fue justo en esta prueba donde nuestra placa hace unos dias explotó (en el momento menos conveniente posible), pero rápidamente lo solucionamos.

Utilizamos el timer para calcular un aproximado de 5 minutos de prendido y apagado utilizando la función de GradoZero() de nuestro código. Esa función se ejecuta cada 180° de la onda senoidal, justamente al cambiar de polaridad, teniendo en cuenta dicho dato y teniendo en cuenta que cada 1ms hay un cambio de polaridad, utilizamos un contador que fuese incrementandose hasta un valor apróximado al número de veces que debe repetirse la función GradoZero() para llegar a 5 minutos. La solución funcionó perfectamente.

Finalmente añadimos los plantines.

Con el PH ya regulado, las soluciones Macro y Micro añadidas y el correcto funcionamiento de la bomba de agua, finalmente lo hicimos: añadimos los plantines. Estos se tratan solo de plantines de lechuga, nada muy extravagante, su supervivencia es la prueba de fuego de nuestro proyecto.

Plantas

Actualización [ 11 ] | Explosión y...

· 3 min de lectura
Wolfsrudel
All the Team

Explosión XD (De vuelta)

El circuito explotó nuevamente. ¿Por qué? Faltaban una serie de cambios en el PCB (solo un diodo xD) nadie entendió como no sucedió antes. En conclusión: que epico.

Placa explotada ( OTRA VEZ XD )

Representación gráfica del suceso

Representación de explosión XD

Momentos antes del desastre XD

Los pibes foto xD Los pibes foto xD

Avances

Dejamos bombeando el agua unos dias con la intención de que el cloro se evaporará y poder finalmente regular el PH del agua.

Pero... ¿Por qué todo esto? Si el lector no está familiarizado con el funcionamiento de una Hidroponia en general, le será importante leer lo que escriba a continuación:

Hidroponia

Una hidroponia es, en esencia, el arte de cultivar plantas sobre una superficie sólida a la que solo tendrá acceso una corriente de agua. Pero esto da una gran serie de problemas al no ser del todo natural; uno de ellos es el nivel de PH del agua, pero primero para ello debemos de conocer que es el PH.

El "PH" es una unidad logarítmica del 1-14 que regula el nivel de acidez y alcalinidad de "algo", siendo en este caso: agua. A menor nivel este se encuentre, mayor será el nivel de ácidez que contendrá ese "algo" y a mayor nivel se encuentre, mayor será el nivel de alcalinidad.

El nivel de PH adecuado para cada contexto depende del tipo de planta a plantar, y son muchas las soluciones que pueden afectar el nivel de PH del agua. En nuestro caso concreto quisimos plantar lechuga, siendo su valor recomendado un rango de entre un 5.8 - 6.3 de PH.

Valores Lechuga

A su vez, las soluciones nutritivas que utilizamos son las Micro y Macro de la empresa Verdeagua.

Es importante tener en cuenta también que las soluciones nutritivas que necesita cada planta, independientemente de cual sea, también alteran el PH. Así que teganlo en cuenta. En nuestro caso para regularlo fue mayormente a prueba y error.


Nuestro problema fue sencillo de resolver: el PH del agua del colegio era muy alto y teniamos que reducirlo, para ello compramos un reductor de PH, lo que en esencia es un ácido, nosotros utilizamos concretamente el Namaste PH.

Namaste PH

El mismo lo compramos en Lomas, concretamente en la tienda Estoy Verde tienda la cual recomendamos encarecidamente. Su atención es muy buena y su dueño nos resolvió una gran cantidad de dudas respecto al buen armado de una hidroponia.

Estamos muy satisfechos y nos enorgulleceria mucho el que nuestra recomendación pudiese, al menos, producirles una venta.

Actualización [ 10 ] | Comunicación con MyCodo éxitosa.

· 3 min de lectura
Wolfsrudel
All the Team

Logramos comunicar correctamente el envío de datos seriales a los Input de entrada de datos de MyCodo.

¿Cómo lo hicimos?

Exactamente de la misma forma que especificamos en la publicación anterior. Todo salió perfectamente tal y como lo planeamos.

Código

No pensamos explicar el código todavía. Pensamos refátorizarlo nuevamente para que sea más legible y más práctico. Solo queremos que el envío de datos sea una función de este. Aunque lo importante es que todo funcionó correctamente, sí alguien quiere ver el código para este punto del proyecto, este se encuentra aquí.

Luego ya cuando esté refáctorizado pensamos explicarlo con mayor detalle y su respectivo diagrama de flujo.

Por ahora nuestra siguiente acción a ejecutar es el refactorizarlo y crear un servidor con él. Más en concreto con Flask, la cuál es una libreria de Python utilizada en el Backend, para justamente, crear servidores. Nuestra intención es la siguiente:

  • Haremos que la misma variable de datos que retorne la función que recibe los datos del Arduino esté ligada a Flask en un servidor para, sí éste recibe solicitudes le devuelva el dato que hayan solicitado en una response. Nuestra intención es comenzar con la comunicación HTTP de la App. En un comienzo pensabamos utilizar Express.js, pero se vé que han cambiado las cosas; nos es más práctico seguir utilizando Python y no migrar a otro lenguaje de programación, sí hiciesemos eso, el mismo script que se comunica con MyCodo no podría ser un servidor en sí mismo, por tanto decidimos que fuese así.

Cambios | Ideas

Otro cambio a denotar es el que -muy posiblemente- utilizaremos el módulo Sense Hat de la Raspberry Pi para hacer de nuestro proyecto además de un sistema de monitoreo, hacerlo también una estación metereológica. Pensamos que, primero hará de nuestro proyecto uno más profesional y también porque estamos aburridos; ya no tenemos tantos retos como antes. De igual forma la integración con el Sense Hat se ve sencilla y la comunicación entre todos los Software ya está prácticamente hecha.

Ademas tiene una matriz led muy fachera que puede, o mostrar el logo de Wolfsrudel (nuestra empresa) o la ip del servidor en la red local así le establecemos dicha IP a la App/Programa manualmente al -seguramente- no hacerla fija.

Hablando de la matriz led y la facha; comenzamos la realización del Modelo 3D que envolverá nuestro proyecto. Pensamos que ésta puede tener un acrilico en frente así se ve toda la facha del circuito (。◕‿◕。).

Luego, otra idea que tenemos es que una vez hayamos realizado el modelo 3D de todas las partes, exportarlo junto con todos los circuitos y subirlo a la página web. Para esto podríamos utilizar Three.js. La página web de la documentación justamente está escrita con React, así que deberemos de utilizar una variante la cuál está adaptada para React. Esto ya una vez lo hemos querido hacer para proyectos pasados, y no pudimos; insertar un modelo 3D a una página web es un completo fiasco y más sí tenés muchas técnologias en tu misma web, de igual forma lo pensamos hacer por el profesionalismo, pero será mucho más tarde, muy al final del proyecto y seguramente a la vez que estemos realizando el video de Youtube del proyecto (el cuál también pensamos añadir a la página principal :p).

Somos un grupo de dementes.

Fin del comunicado.

Actualización [ 9 ] | PCB && Block Diagram

· 2 min de lectura
Wolfsrudel
All the Team

Buenas!

Hoy hemos terminado de montar el PCB y realizar el código que toma la lectura de todos los sensores y lo envía a través de serial hacia la Raspberry. Comenzando ahora, nuestro nuevo reto: la correcta interceptación de datos de parte de la Raspberry utilizando Python. Una forma de resolver este problema de forma sencilla es la que hicimos antes, y es tener el script de Python con la interceptación de datos seriales desde MyCodo, lo cual, aunque solucione nuestro problema, es muy poco práctico.

Nuestra idea es la siguiente:

  • Queremos que un único script de Python se encargue de manejar todos los datos enviados desde el microcontrolador y se encargue de clasificarlos para luego escribirlos en un archivo de cualquier tipo. Luego habrá scripts independientes en los widgets de MyCodo que crearán un sencillo bucle de lectura de datos de un archivo del cuál extraeran el dato a mostrar en pantalla.

Todo esto llevará a que la comunicación entre las partes quede tal que así:

Diagrama de Comunicación entre códigos

PCB

También, para concluir con el tema, les adjuntamos el PCB tanto montado como en KiCad al habernos quedado pendiente la última vez:

PCB | KiCad

PCB | Montado

Actualización [ 8 ] | Comunicación a MyCodo | Filtro

· 2 min de lectura
Wolfsrudel
All the Team

(。◕‿◕。)

Logramos comunicar correctamente la toma de datos de Python con MyCodo, esto fue realmente más fácil de lo que pensamos al no tener que interaccionar con algún otro lenguaje de programación en el proceso. El resto será cuestión de tiempo para que se logré.

Filtro

Hoy fue impreso el filtro/recipiente necesario para alojar los plantines.

Filtro

Ideas

Sí logramos unificar todo el proyecto con MyCodo rápidamente, pensamos que podríamos crear un programa de escritorio para poder muestrear los datos. Todo esto con la intención de tener más control sobre nuestro código. Realmente con MyCodo no sabemos lo que estamos haciendo, lo cual es una ayuda realmente práctica porque uno no debe de saber como funciona internamente el programa; pero no nos satisface. Sabemos utilizar una técnologia llamada Tauri. La cual es todo un ecosistema de herramientas que te permiten utilizar Webview (Microsoft) para crear un programa de escritorio con técnologia web y, manejar todo su Backend utilizando el lenguaje de bajo nivel Rust. Pensamos que haría que el proyecto se sintiera menos incompleto y que sería grandioso que tuviese un programa propio también.

Aparte, ya tenemos un código; Spectrum-IOT_WebPage

Spectrum-IOT_WebPage es una aplicación web que fue creada para monitorear la lectura de datos que ésta recibiera de una casa completamente automátizada para que unos robots se movilizarán de forma autonóma en ella; como es de imaginar, el proyecto fue cancelado. Es justamente por ello que nos gustaría reutilizar el código y adaptarlo al diseño de la App (por una cuestión de consistencia). Aunque también seria increible que pudiese ser hecho para que, a diferencia de la app, se pueda modificar alguna parte del código del microcontrolador y regular mágnitudes. Sería altamente práctico como una interfaz visual táctil que pudiese estar instalada en la Raspberry y, simplemente con un par de touch's y la misma navegación intuitiva de la aplicación web, pudiese ser controlado.

Aunque muy seguramente no lleguemos con el tiempo para ello; pero puede que sea un buen código Open Source del que se pueda sacar mucho provecho sí alguien así lo quiere.

Actualización [ 7 ] | Avances

· 2 min de lectura
Alan Barrera
Software Developer

Avances

Entre ayer y hoy comenzamos el desarrollo del segundo PCB

Este consta de más sensores incorporados y la inclusión de un nuevo disparo de triac, llevando por ende un segundo circuito de disparo (con todo lo que ello conlleva; Snubber's, Optoacopladores, Triac's, etc.) Al finalizar el PCB -y sí funciona- daremos una mayor explicación de su funcionamiento

Los sensores que vamos a usar son los siguientes:

También un detalle a añadir es que decidimos utilizar el Arduino Nano.

Hoy

Básicamente hicimos todo el esquemático y lo próximo a realizar es el PCB cuando se nos dé el aprobado del mismo. Testeamos nuevamente la comunicación serial con el Arduino Nano y funcionó correctamente, al igual que cada conexionado independiente de cada sensor con su respectiva forma de conexión, así que todo debería salir de la forma prevista. Seguramente algo salga mal, como siempre. Es parte de ser un técnico electrónico. Fotos trabajando jdawjd Foto mía jdawjd

Dato a tener en cuenta sí querés que la Raspberry Pi se comunique por USB a un microcontrolador. Tenés que permitirle a tu usuario a acceder al grupo "dialout". Es importante por una cuestión de permisos que solo el super usuario puede brindar.

Actualización [ 6 ] | Comunicación de Dispositivos

· 2 min de lectura
Wolfsrudel
All the Team

Comunicación

Raspberry Pi - Microcontrolador

Decidimos finalmente comunicar la Raspberry Pi y el Microcontrolador entre sí vía USB , este cambio -aunque drástico- es mucho más conveniente para nuestro proyecto, y de igual forma no cambiará demasiado al tener que vernos obligados a utilizar wifi para comunicar la Raspberry Pi con la App.

Quedando el gráfico tal que así:

Gráfico piola

Nota: En aquel momento se pensaba utilizar el ESP WROOM, luego cambiamos al Arduino Nano al no necesitar del Wifi y, tener mayor acceso a la información de como programarlo.

Importante

Cuestión: Aquí viene lo importante:

  • Logramos enviar correctamente los datos del microcontrolador a la Raspberry Pi por USB.

¿Cómo se logró esto?

Básicamente controlando el recibo de datos con Python y dependencias de éste, en este caso de Pyserial.

import serial
import time

ser = serial.Serial('/dev/ttyACM0', 115200, timeout=1.0)
time.sleep(3)
ser.reset_input_buffer()
print("Serial OK")

try:
while True:
time.sleep(0.01)
if ser.in_waiting > 0:
line = ser.readline().decode('utf-8').rstrip()
print(line)

except KeyboardInterrupt:
print("Close Serial Communication")
ser.close()

En resumidas cuentas el código hace lo siguiente:

  • Se inicializan los modulos para manejar tiempos y datos seriales (Importante instalar pyserial) y luego se procede a generar un bucle el cual esperaría datos por un puerto USB. Siendo éste en concreto el puerto "/dev/tty/ACM0". Es el directorio donde se alojan los puertos en Raspbian (Linux).
  • Luego hace más cosas como decodificar la información en UTF-8 (para mostrar el texto correctamente) pero no son de importancia.
  • Ante una interrupción de teclado se detiene el script.

Luego el código en el microcontrolador es el siguiente:

#include <Arduino.h>

void setup(){
Serial.begin(115200);
while(!Serial) {}
}

void loop(){
Serial.println("Mensaje a Raspberry Pi");
Serial.write("Lol");
delay(1000);
}

Como ven el código es muy sencillo; los mismos print que se pueden mostrar en consola para debuguear código ya bastan para enviar datos. Lo importante aquí es el script de Python

Setup épico

Setup Épico

Por sí a alguien le interesa mi rice en Linux (alto rarito), éste se encuentra aquí

Actualización [ 5 ] | Explosión XDD

· Lectura de un minuto
Wolfsrudel
All the Team

Montamos el circuito y... EXPLOTÓ XD

Aunque la simulación en Proteus fuese éxitosa; no el montaje. De igual forma solo nos faltaba una resistencia y ningún componente (salvo una misera resistencia) salió dañada en el proceso. El problema fue solucionado en la misma placa que explotó al día siguiente, así que no resulto en un problema grave. Fue épico, nada más que añadir.

Adjuntamos pruebas:

EXPLOSIÓN EPICA WUOWOWO

Efectivamente, por sí lo pensabas: La mancha negra de la mesa es obra nuestra :p

Actualización [ 4 ] | Estructura

· 2 min de lectura
Wolfsrudel
All the Team

Hidroponia

Finalmente, lo terminamos; logramos terminar la estructura de la Hidroponia

Hoy terminamos de instalar de forma funcional la Hidroponia. La Hidroponia es, por explicarla de manera sencilla -en la foto se entiende, de igual modo- un "circuito" donde una bomba de agua se encarga de bombear el agua hacía arriba y, al llegar al tope, va bajando por fuerza de la gravedad por unos caños con una leve inclinación.

Por sí nadie sabe lo que es una hidroponia, la función de este "mecanismo" básicamente permite que, por un lado el agua no se estanque, y por el otro que las plantas esten hidratadas. Al una Hidroponia carecer de tierra justamente se le agregan minerales y/o nutrientes para compensar su carencia. Una Hidroponia -puede ser- una forma muy económica de cultivar plantas en espacios reducidos si se hace bien. Nuestra intención en nuestro proyecto es monitorear la mayor cantidad de mágnitudes físicas de ésta.

Estructura

La estructura de la Hidroponia no es más que una serie de caños termofusionados que le permiten el flujo de agua. En la parte superior de cada caño -aunque no se vea en la foto- contiene unos huecos a escala para contener unos "recipientes/filtros" que las raíces del platín a plantar.

Aunque se vea muy fácil el montaje de la estructura, realmente no lo fue; más de una vez tuvimos algún problema que ocasionó alguna pérdida de agua y tuvimos que replantear alguna parte de su diseño, así que sí alguien piensa armar una: tengalo en cuenta.

Hidroponia

Finalizando con el tema. Le agradecemos mucho a nuestro profesor por habernos ayudado en el armado.