Sistema de riego automático (3 / 5 paso)

Paso 3: El Software

La estructura básica del software es una rutina de puesta en marcha que inicializa todos los periféricos seguidos de un bloque de estado que permite el sistema cambiar entre diferentes modos. También hay varios temporizadores y controladores de interrupción que procesan la información en un cierto intervalo o monitor fuera de periféricos de entrada. Cada uno de los sensores se dividen en módulos individuales (excepto el sensor de temperatura interna). Encontrarás los módulos como las bibliotecas en el directorio drivers. Los métodos que se utilizan públicamente fuera el inicio de módulo con los nombres de los módulos. El código debe ser muy bien comentado.

Acabo de publicar el software en mi cuenta de git que puedo publicar actualizaciones como que ampliar el sistema y corregir errores que me cruzo.

La composición básica es la siguiente:

Las zonas:

Las zonas se definen en la mendicidad de main.c. Tenemos:

#define NUMBER_OF_ZONES 4

Zona zone0 = {ZONE_OFF, OVERRIDE_INACTIVE, GPIO_PORTD_BASE, GPIO_PIN_3, 16, 53, 5};

Zona zone1 = {ZONE_OFF, OVERRIDE_INACTIVE, GPIO_PORTE_BASE, GPIO_PIN_1, 16, 54, 3};

Zona zone2 = {ZONE_OFF, OVERRIDE_INACTIVE, GPIO_PORTE_BASE, GPIO_PIN_2, 16, 59, 3};

Zona zone3 = {ZONE_OFF, OVERRIDE_INACTIVE, GPIO_PORTE_BASE, GPIO_PIN_3, 16, 57, 3};

Zona * zonas [NUMBER_OF_ZONES] = {& zone0, & zone1, & zone2, & zone3};

Todo el software que utilizamos NUMBER_OF_ZONES #define para recorrer las zonas. Utilizamos una matriz de punteros a cada una de las zonas para acceder a ellos rápidamente sin tener que hacer múltiples copias en la memoria. Las definiciones son entonces bastante sencillas. Cada zona es una estructura que contiene las propiedades: Estado, OverrideStatus, puerto, Pin, OnHour, OnMinute y OnLength. Puede añadir tantos como usted puede encontrar GPIO, añadir el puntero a la matriz y actualizar NUMBER_OF_ZONES #define para indicar el número de zonas que tiene.

Modos:

EJECUTAR:

Este es nuestro modo primario. De este modo configura el estado LED de color verde, bien tirar el tiempo actual del DS1307, y luego revisamos el estado actual de la zona basado en nuestro tiempo nuevas.

ANULACIÓN:

ANULAR modo está diseñado para reemplazar todo el sistema. Esto ocurre cuando el usuario presiona el botón capacitivo para una cantidad de tiempo. En este modo configura el estado LED de color rojo y luego verificar si el sistema ha estado funcionando en el modo de anulación durante 24 horas. Si hemos sido claro el estado de anulación y volver al modo de ejecución. Si nosotros no seguimos a dejar el sistema en el modo de anulación.

SYSTEM_SHUTDOWN:

El modo SYSTEM_SHUTDOWN está diseñado para cierre crítico de seguridad. Actualmente el único módulo que podría implementar el sistema de cierre es el sensor de temperatura interna. Cada vez que compruebe el sensor de temperatura interno hacemos una comparación con un umbral. Si pasamos el umbral de en que entrar este modo donde tenemos claro cada una de las zonas, gire el LED rojo encendido fijo, desactivar todos los timers y las interrupciones y luego ir en modo de hibernación. La única manera de salir de este modo es un usuario presiona el botón wake en el Launchpad de sí mismo.

Las interrupciones:

Botón de interrupción:

El manejador de interrupción de botón tiene dos partes. La primera maneja cuando se presiona el botón. Esto alternará una bandera diciendo: vimos un botón Presione encender el LED azul e iniciar temporizador 0 que simplemente se incrementará un contador. Cuando se suelta el botón apagará el LED azul, desactivar a temporizador 0 y evaluar la duración de la pulsación. Actualmente la única condición que se comprueba es una anulación de sistema que es una prensa del botón de 2 segundos. Si se detecta una acción de anulación del sistema que cambiar basado en el modo de ejecución actual. Para entrar en el modo de anulación de sistema flash el LED rojo para confirmar y establecer el modo de anulación. Para dejar la anulación del sistema que tenemos claro todas anulaciones de zona, flash del LED verde para la confirmación y ajuste el modo a ejecutar.

Interrupción del temporizador general 1:

Se trata de un contador de un tiempo segundo que vamos a utilizar para comprobar la entrada del sensor e imprimir al UART. Al entrar en la interrupción tenemos claro la bandera. A continuación, comprobamos el sensor de temperatura interno, el sensor de temperatura humedad/EXT y el sensor de humedad. Estos valores se salva en sus respectivas áreas. Luego imprimimos el estado de todas las medidas y zonas a la UART. Si un usuario tiene el USB debug port conectado en una PC y abierto un terminal debería ver un mensaje como el siguiente impresión cada segundo:

HORA: 18:46:27

INT TEMP: 86

TEMP EXT: 78

REL HUM: 53

HUMEDAD: 54

ZONA 0: NO ACTIVO

ZONA 1: NO ACTIVO

ZONA 2: NO ACTIVO

ZONA 3: NO ACTIVO

Antes de irnos a la interrupción de temporizador general comprobamos si nuestro un segundo temporizador ha golpeado a un múltiplo de 10. Si tiene nos cambia el estado del led encendido, si no cambiar el led apagado, y luego aumentamos el contador. Esto nos da un buen indicador para el usuario al mostrar que el sistema sigue funcionando y que modalidad es actualmente. El LED dará sólo un rápido destello cada 10 segundos

Los módulos de:

AMS:

AMS_InitSensor - AMS inicializa ADC1 secuencia 0

AMS_ReadSensor - Lee promedio valor de sensor (256 muestras)

DS1307:

DS1307_GetTime - obtiene la hora actual de DS1307

DS1307_SetTime - sistemas DS1307 al tiempo especificado

bcdToDec - convierte binario codificado decimal valor en valor decimal

decToBcd - valor decimal se convierte a binario codificado decimal valor

HIH6130:

HIH6130_UpdateData - lee datos de HIH6130

HIH6130_GetStatus - regresa HIH6130 estado

HIH6130_GetHumidity - HIH6130 devuelve humedad

HIH6130_GetTemperature - devuelve HIH6130 de temperatura

I2C:

I2C_SetupI2C3 - proceso de configuración para I2C3

I2C_SendSlaveStart - dirección de esclavo envía y start bit seguido por un bit de parada

I2C_ReadBytes - Lee n número de bytes

I2C_ReadBytesFromAddress - Lee n número de bytes de la dirección

I2C_ReadSingleByte - Lee solo byte de dirección

I2C_WriteByte - escribe solo byte a la dirección

I2C_WaitForDone - espera para que el bus I2C maestro borrar

I2C_Delay - milisegundos de retraso

UART:

UART_SetupUART0 - rutina de configuración para UART0

UART_PrintMessage - matriz de impresiones de caracteres a UART

UART_PrintLong - valor long impresiones a UART


Artículos Relacionados

Sistema de riego automático con sonda capacitiva y Arduino en el barato (y serio)

Sistema de riego automático con sonda capacitiva y Arduino en el barato (y serio)

Descargo de responsabilidad: Yo no soy un ingeniero en electrónica, por lo que no puedo ofrecer ninguna garantía para el diseño (mucho menos para su implementación). Sólo sé la presentó solución trabajada para mí por lo menos unos 5-6 meses (por lo q
Sistema de riego automático / automatización la máquina

Sistema de riego automático / automatización la máquina

En primer lugar, permítame presentarle mi proyecto.Mi dispositivo es sistema de riego automático (interruptor de encendido/apagado solenoide de agua pero también en lugar de solenoide puede cambiar cualquier cosa que utilice corriente alterna - signi
Construir un sistema de riego automático Simple de productos reciclados

Construir un sistema de riego automático Simple de productos reciclados

me gustaria una manera fácil (y barato) mis tomates mediante un sistema de goteo de agua. He construido a bebederos simple con 2 y 3 botellas de un litro y perchas de alambre. Mi total costo desembolso para este proyecto fue de $1,16 para los pedacit
Sistema de riego automático de plantas

Sistema de riego automático de plantas

hice una planta automática de riego mediante una bomba de acuario y el contador de tiempo eléctrico.Los materiales me costo unos $60 que creo que es un poco empinado. Probablemente podría hacer esto por unos 40 $, usando una bomba de aire en lugar de
Interior de hierba de jardín con riego automático

Interior de hierba de jardín con riego automático

El año pasado quería cultivar algunas hierbas de la cocina interior, sobre todo como un divertido experimento. Mi familia había plantado hierbas y hortalizas en el jardín durante varios años, y quería probar algo creciendo yo mismo pero en menor esca
Riego automático de un barril de agua

Riego automático de un barril de agua

soy perezoso.  Hace unos años que me cansé de tener que manualmente de agua las plantas en macetas de 15-20 alrededor de nuestro patio, así que puse en un sistema de riego por goteo automático.  Me hubiera gustado correr el mismo sistema al lado de n
Riego automático de jardín

Riego automático de jardín

calor de julio en Nueva Jersey puede quemar las plantas rápidamente. Olvidarse de regar el jardín un día en este calor puede afectar a algunas plantas a punto de no retorno. Tener un riego automático para cuidar del jardín puede evitar estos percance
Sistema de aparcamiento automático

Sistema de aparcamiento automático

Estoy muy emocionado crear un proyecto de IoT con arduino. Hoy voy a enseñarte chicos a hacer un impresionante coche aparcamiento sistema remoto. Pasemos al siguiente paso para encontrar más!Paso 1: introducciónHola chicos, en este tutorial que vamos
Sistema de llenado automático de agua de Keurig B40/B60/B70

Sistema de llenado automático de agua de Keurig B40/B60/B70

Este es un proyecto simple que hice para evitar la adición de agua en mi maquina cada vez que tomo una taza de café. Es un sistema bastante simple pero también requiere conocimientos básicos de plomería y habilidades eléctricas / soldaduras:-). Este
Fácil y barato casa planta riego automático

Fácil y barato casa planta riego automático

tengo plantas en mi oficina - el problema es que mis días varían violentamente y a veces olvida o no tiene tiempo para regar las plantas. Busqué una planta de la casa automática sistema de riego y eran muy caros ($49-$100) y no podía estar seguro de
Sistema de timbre automático con detección de objetos

Sistema de timbre automático con detección de objetos

este es uno de los circuitos muy interesantes y muy útiles en nuestra vida real llamado "Sistema automático de llamada de timbre". Si instalamos este timbre automático con circuito de detección de objeto, el circuito automáticamente detectará la
Sistema de vigilancia automático casero con arduino (simple y barato)

Sistema de vigilancia automático casero con arduino (simple y barato)

El objetivo de mi proyecto es lograr el sistema de vigilancia de inicio automático sin ninguna interferencia manual. En general otro sistema de vigilancia es necesario receptor en la TV y la cámara de energía cada vez. Y también necesita a cualquier
Sistema de Control automático de trenes puerta

Sistema de Control automático de trenes puerta

se trata de un circuito llamado "Regulador automático de la puerta del tren". El objetivo principal de este proyecto es operar y controlar la puerta del tren sin tripulación de la manera correcta para evitar los accidentes en el cruce de tren si
Planta de riego automático (versión simple)

Planta de riego automático (versión simple)

este Instructable le mostrará cómo hacer simplemente una agua de planta automática-er. Ideal para cuando vas de vacaciones o cuando simplemente no recuerdas regar sus plantas. Proporcionará una dosis determinada de agua en cualquier horario se establ