Saltar al contenido principal

Actualización [ 3 ] | MyCodo

· 2 min de lectura
Wolfsrudel
All the Team

MyCodo

Decidimos utilizar MyCodo para monitorear el envío de datos del ESP32 hacía la Raspberry Pi y este será por wifi; pensamos que podríamos crear un servidor dentro de la Raspberry Pi -puede que con Express- y que éste sea la vía de comunicación entre la App y el ESP32 y, en el transcurso del trayecto, simúltaneamente monitorear dichos datos. Pero antes de proceder a hablar sobre la comunicación entre los dispositivos -del cual se tiene un diagrama que se mostrará dentro de poco- hablaremos sobre MyCodo.

¿Qué es MyCodo?

MyCodo es un Software Open Source (es decir, de código abierto) creado especificamente para generar un servidor web (nginx) que aloje MyCodo, la cual es una aplicación web creada con Python (flask) con acceso completo a los GPIO de la Raspberry. Nuestra idea es la siguiente:

  1. Enviarle los datos del ESP32 a la Raspberry vía Wifi usando HTTP en forma de archivos JSON.
  2. Tomar la lectura de MyCodo y almacenarla en su base de datos integrada (influxDB).
  3. Crear una API con endpoints que permitan las solicitudes GET de parte de la App para así solicitar el archivo JSON con las últimas lecturas almacenadas.

Comunicación

A la comunicación entre las partes se las piensa así:

Diagrama | Comunicación

AVISO DEL FUTURO: LA COSA NO FUE ASÍ; ESTE GRÁFICO ES INCORRECTO

Comentarios | App

· 3 min de lectura
Wolfsrudel
All the Team

Notas

Muy seguramente vayamos añadiendo una sección de "Notas" para añadir actualizaciones y/o ideas nuevas respecto a qué pensamos integrar y que no; algo hablado con nuestro profesor fue integrar una aplicación que estuvimos desarrollando para el que iba a ser nuestro primer proyecto del año, pero se canceló. Este se trataba de un Indoor, el cuál iba a tener una funcionalidad muy parecida a lo que estamos haciendo con la Hidroponia al tener que, también, tener el control absoluto del ambiente para cuidar de una planta.

Ésta, al claramente haberse cancelado el proyecto, se le canceló su desarrollo; pero eso no supuso su extinción, se la quiso agregar a nuestro próximo proyecto: Herzarmband. Herzarmband iba a ser un reloj/brazalete -nunca se decidió- que tomaría la frecuencia cardíaca y, por aprovechar el código previamente creado para la aplicación. Aunque esto claramente era muy impráctico y: sin sentido.

¿Qué más aparte de mostrar la frecuencia cardíaca iba a hacer?

Era un completo sin sentido, salvo que, se pensará añadir algún tipo de algoritmo que predijera y detectará de una forma u otra problemas cardiovasculares -como los hacen muchos en el mercado- pero eso ya dejaría de ser un proyecto de Electrónica y se convertiría en uno de Software; no es la idea de la materia.

Pero afortunadamente es genuinamente práctica para integrarla en éste proyecto, sirviendo perfectamente como una interfáz gráfica para visualizar en tiempo real por wifi el estado de tus plantas e hidroponia en general.

A raíz de esto añadiremos la app al proyecto; la idea es crear una comunicación HTTP entre la Raspberry Pi y la Aplicación de celular. Para ello nuestra idea es crear un servidor con Javascript y Express (Libreria Backend de Nodejs) que tenga interacción con el recibo de datos que reciba la Raspberry del circuito -ya sea por wifi o algún diferente protocolo de comunicación- y, setear dichos datos con una API la cuál tendrá un endpoint donde la aplicación de celular, la cual también está escrita con Javascript -concretamente con el Framework de React Native se conectará. Muy posiblemente utilizando archivos JSON para almacenar la información.

Para la fecha actual, la app luce de la siguiente forma:

App Indoor

El diagrama de bloques que diseñamos para explicar su comunicación HTTP para proponerselo a nuestro profesor es:

Diagrama De Comunicación entre Servidor-Cliente | HTTP

Sí usted quiere ver más en profundidad su desarrollo, su repositorio y ramal de Github donde se programo se encuentra aquí.

Actualización [ 1 ] | Circuito - Simulación

· 4 min de lectura
Wolfsrudel
All the Team

Logramos simular y realizar el circuito correctamente en Proteus, para ello hicimos muchas cosas:

  1. Instalamos la libreria de Arduino en Proteus para así poder simular correctamente los códigos en este programa, y luego realizamos el circuito correspondiente.

¿Qué hicimos?

Quisimos también aprovechar la realización del proyecto para aprobar otra materia; Electrónica Aplicada. La cual nos daba a elegir si simular un circuito o no, así que lo realizamos aplicandolo como solución a un problema en nuestro proyecto; regular la corriente alterna.

Se trata de la realización de un disparo en la señal de alterna a través de la utilización de optoacopladores y triac's.

Ésta es una forma de manipular la onda senoidal de la corriente alterna mediante el uso de la corriente continúa. En nuestro caso se buscó utilizar optoacopladores como medida óptica de separación entre las dos corrientes y, crear un código qué, mediante interrupciones, supiera cuando la AC oscila mediante el lado contrario; pero ello suponía otro problema: se debía de saber exactamente y con gran precisión cuando la onda cruzaba por cero en primer lugar. Viniendo, recién ahora, lo interesante ⊂(◉‿◉)つ.


Explicación

En primeras antes de hablar del código debemos de hablar del circuito; consta de dos partes: una de monitoreo y otra de control, en la primera se busca tener una lectura constante de la onda senoidal para determinar sí esta cruza por cero, y en la segunda se busca "disparar" hacía la onda senoidal para cortarla, y poder así regular su intensidad

¿Cómo la parte de control logra esto?

Para poder determinar cuando disparar o no por el código, básicamente se la divide a la onda senoidal en varias partes.

  1. Primero calculando su periodo, utilizando para ello la cuenta:

    Calculo Uno

  2. Luego, se la divide en 360 partes para así tener un ciclo entero.

    Calculo Dos

  • Una vez tenidos estos datos podemos asumir diversas cosas:
  1. Un semiciclo de nuestra onda es equivalente a: 360/2.
  2. Cada 46μs recorremos 1° de nuestra onda.
  3. 46μs x (360/2) Es equivalente al recorrido total de tiempo que conlleva un solo semiciclo.

Ahora sí, comencemos con el código.

 #include <TimerOne.h>
int GradoElectrico = 0;

void GradoZero(){
GradoElectrico = 0;
}

void Disparo() {
GradoElectrico++;

// Resto de instrucciones...
// (Instrucciones de cuando disparar)

}

void setup(){
attachInterrupt(0, GradoZero, CHANGE);
Timer1.initialize(46);
Timer1.attachInterrupt(Disparo);
}

void loop(){
// Resto de instrucciones...
}

Básicamente aplicamos todo lo aprendido:

Comencemos con la función Setup:

    attachInterrupt(0,GradoZero,CHANGE);

Esta linea de código pertenece a la libreria de TimerOne, y se encarga de inicializar una entrada de datos en el pin 0 (que por default es el 2 y, que cada vez que cambie de HIGH a LOW o viceversa, ejecuta la función GradoZero(), la cual reestablece los valores de la variable GradoElectrico.

    Timer1.initialize(46);

Le indicamos al programa que inicialice un temporizador de 46μs.

    Timer1.attachInterrupt(Disparo)

Cada vez que finaliza el temporizador de 46μs se ejecuta la función Disparo()

En resumidas cuentas, el código se encarga de ejecutar un cronometro que cada 46μs ejecuta una función, la cuál aumentará una variable int; pero, recién llegado a un valor LOW en la onda, es decir 180° o, 46μs x 180° de tiempo; el cronometro volverá a reiniciarse y la variable de grados también lo hará junto con ella.

Es decir, este simple código tiene la posibilidad de manipular por completo un ciclo de nuestra onda senoidal partiendola a ésta en 180° al detectar el cruce por cero antes de terminar el ciclo completo. Pudiendo con ello ejecutar scripts de código que tan solo tengan que variar entre los valores de 1 - 180 de la variable int de GradoElectrico y, así, determinando cuando disparar dentro del semiciclo.

  • Nota: Esta es una versión muy básica del accionamiento del disparo, pero sirve.

Pero básicamente, con este principio podés hacer lo siguiente:

Simulación Proteus del Circuito

En este caso se tomó el mapeo del valor de un potenciometro el cuál fue sincronizado con un solo semiciclo de la onda senoidal, pudiendo, básicamente elegir cuando disparar.

Circuito | Proteus

Circuito simulable en Proteus

Esquemático | Kicad

Esquemático del circuito en Kicad

PCB | Kicad

PCB de Prototipo del circuito en Kicad

Componentes | Datasheet -por ahora-

  1. Optoacoplador - MOC3021
  2. Optoacoplador - 4N25
  3. Triac - BT139

Comienzo del Proyecto

· 2 min de lectura
Wolfsrudel
All the Team

Hidroponia - Project

Comenzó nuestro segundo proyecto del año como una empresa ficticia llamada Wolfsrudel. Se tratá de una Hidroponia que será -ídoneamente- un sistema de control completo donde se monitoreará cada una de las mágnitudes esenciales que debe de necesitar una planta para desarrollarse adecuadamente.

Nuestra meta es la siguiente:

  • Montar una estructura que servirá para alojar las plantas y les permita una vía de acceso a agua que está siendo bombeada por una bomba, mientras a su vez se debe desarrollar un circuito que debe regular las mágnitudes fisicas e ídoneas que requiere cada tipo de planta.

¿Cómo haremos ésto?

A ciencia cierta todavía no lo sabemos e iremos averigúandolo con el pasar del tiempo; pero nuestra propuesta es controlar una serie de sensores con un microcontrolador (mientras tanto, para las pruebas: el Arduino) y, para no gastar plata innecesariamente lo simularemos en Proteus.

¿Cómo será la estructura?

A raíz de ver diversos videos de Youtube, nuestra idea es montar una estructura con caños más finos por un lado para subir el agua por una mini bomba y, que ésta caiga, recorriendo así todos los caños donde se alojarán las plantas, los cuales serán más grandes. Para ello aprovecharemos una estructura de metal prearmada que realizaron alumnos de Electrónica en el pasado para éste mismo proyecto.

La estructura será similar a:

//Boceto


Como volvemos a repetir: no tomen éste blog como una información completamente veraz respecto a nuestro proyecto; este puede cambiar al, justamente, no tener ni idea de lo que estamos haciendo continúamente. Habla la voz de la experiencia (´・_・`)