Grabador de presión (registrador de datos)

Me pidieron que ayuda a desarrollar un programa que controla la presión y grabaría en el archivo.

El proyecto es una montaje de alguna forma Arduino para demostrar el resultado correcto programa, doome Rhode Islandpedido.

descripción

Esto no está destinado a ser maqueta de diseñoaño, Yo diría que sólo una prueba de un programa. He reunido cuatro módulos que puede haber conexo a un Arduino Nano o un UNO Arduino, como la de mi amigo.

yo módulos son una pantalla de cristal líquido, un lector para la memoria SD, un módulo de reloj con el DS3231 y uno para Bluetooth. El programa también proporciona una configuración diferente con un escudo que contiene el lector de tarjetas SD y el DS1307 RTC.

yooreover incluye un divisor para la’ entrada comunicación módulo HC-06, para la compatibilidad para 3,3 Voltios utilizado por el módulo Bluetooth.

El programa permite una gran capacidad de configuración, el cual se determina en 'inicio de la fuente de las líneas de #define, Voy a explicar los detalles a continuación.

Ha habido varias dificultades, una muy especial era entender por qué no escribir el archivo en la memoria. De hecho, como citado desde el sitio, el nombre se mantuvo en el formato 8.3. Para ello, el nombre del archivo es un número secuencial marcado en el formato ggmmayoii, que

gg Yo soy el día de la fecha

mm se informó de un mes

un es para el 'año

iiyo es un número secuencial, si existe un archivosse ya Se añade un nuevo

El proyecto incluye algunas características especiales:

  • Control automático del brillo de la pantalla.

  • La grabación de archivos proporciona un periodo programable, tanto de las muestras de escritura intervalo de tiempo y también la frecuencia de cambio del nombre de archivo.

  • La lectura del informe a través de serie o vía bluetooth. Obviamente, depende de las conexiones dispuestas.

  • Los archivos se mantienen y no se sobrescriben. Esto es para evitar la pérdida de grabaciones anteriores.

  • El programa permite que dos versiones de hardware, uno para la pantalla conectada en paralelo y uno para la conexión a través de I2C. Este último porque mi amigo tiene ese tipo y un escudo que contiene el lector reloj y SD'. Como en la foto.

  • La implementación sencilla mediante la comunicación serie. tipo clásico con Arduino o TX monitores de la pierna con niveles de 5 V, o con un partiore conectar el módulo Bluetooth.

 

 

 

Como puede verse aquí, junto con una

conexión a través de teléfono inteligente, con el programa Terminal de Serie Bluetooth.

bien, La fecha no es el que envía el programa, Más bien está incluido en el programa de Android.


Esquema eléctrico

El diagrama se describe la conexión a la pierna del control de brillo que está conectado a la clavija 15 del display. Desde la biblioteca de presentación no tiene tal representación hice alguna cuenta. Incluso con la interfaz I2C' conectado al pin 15 Se toma por este esquema. La biblioteca de la pantalla, Se proporciona sólo un control simple o desactivar la luz de fondo.

Descripción del programa

El programa fue compilado con la versión Arduino IDE 1.8.7. El archivo también contiene las librerías, para evitar malentendidos y posibles cambios en futuras versiones.

Las variables que se utilizan para configurar el siguiente:

#definir RS 7

#define EN 6

#definir D7 2

#definir D6 3

#definir D5 4

#definir D4 5

las definiciones normales para conexiones paralelas del tipo de pantalla.

 

#definir CH1 9

Pierna asignado para ajustar el brillo.

#definir SENSOR A1

Se le permite elegir el canal analógico la lectura del sensor.

#definir LDR A3

reefinisce IL canal analógico desde dónde llevar la señal de fotorresistencia.

#definir PARMODEL

Esto permite elegir la compilación dependiendo de la configuración de hardware disponibles.

Al quitar la marca de comentario, unLlora se opta por el modelo paralelas (compatiyola con conductor Hitachi HD44780) y el reloj' es el que tiene el DS3231. En el caso contrario se utiliza una interfaz I2C con un PCF8574 para el mismo tipo de pantalla, tanto a los pines de conserva para otras funciones. con estapara construir utilizando un flanco de reloj DS1307 de un escudo ya mencionado.

#definir DEBUG 0~ 1 ~2

Se establece si desea utilizar la comunicación serie. Es posible que haya 2 niveles de depuración que dan la 'oportunidad de determinar qué mensajes de presentar a la serie y la pantalla.
Si estuviera escrito 0 en lugar de uno, luego, de la serie no está incluido en la compilación del programa.

#definir LCD_ROWS 2

#definir LCD_COLUMNS 16

Se define el tamaño de la pantalla. Mediante la variación de esto también implicaría otros cambios en el programa que sólo prevé la representación en el tamaño real definido por estas dos líneas.

#definir LOG_INTERVAL 10

Esto determina la frecuencia de muestreo sensor, expresado en segundo. Lo que hace el programa en todas las 10 segundo.

#definir chipselect 10

Se determina dónde ser limpiado l 'de activación de la tarjeta SD. A pesar de las reclamaciones de la biblioteca tengan la pierna 10 como una salida. Así, cambiando esto no implica que usted tiene la pierna 10 Freed.

#definir VMIN 102

#definir VMAX 921

#definir MinScale 0

#definir MaxScale 160

Búsquedami definiciones determinar los valores de la lectura y la conversión de la canal. En este caso, el sensor Tiene el valor de 0,5 V a cero y 4,5 V pies para medida máxima.

Quindi convierte a los puntos de ADC con la fórmula

V / 5 * 1024 para el mínimo haría 102 y para el máximo 921, redondeado

tales como los anteriormente.

GRAMOellos otros dos son los valores que se presentará a la pantalla después de la conversión con la función de Arduino mapa(). Mínima y máxima respectivamente.

#definir CHANGEFILE (14400 - LOG_INTERVAL)

Búsquedao define el período de muchos segundos para escribir en un solo archivo. En el caso ruptura del poder, el programa no sobrescribir un archivo existente. Para ello existe una rutina que comprueba si hay archivos presentes.

yon esta manera se calcula la hora correctamente en múltiplos de 3600.

#definir BGTVMIN 0

#definir BGTVMAX 1024

#definir BGTMINSCALE 20

#definir BGTMAXSCALE 255

Búsqueday las líneas, determinar cuál de la control PWM de los valores de brillo de visualización. Siempre con la conversión de la función de mapa(). Ese es el valor leído de 'entrada analógica del divisor de tensión se convierte en un PWM escala entre un mínimo de 20 un 255. Queriendo hacer las cosas más finas, se puede hacer la prueba cuando la fotorresistencia está completamente oscurecida y poner lo un BGTVMAX, También viceversa para cuando está fuertemente iluminado que se detecta el valor de ser puesto BGTVMIN.

Una pequeña descripción de la función sprintf():

%0?re Se determina para escribir un número decimal con el relleno con ceros para los dígitos que faltan. Con ? Se determina el número de dígitos que representan.

la función archivo nuevo() comprueba si ya existe un archivo, y luego aumentar el contador.

Para ello se intenta un nuevo y se produce si este nombre ya está asignado a un archivo. Por ejemplo, si el sistema se reinicia con frecuencia, l último archivo' no se sobrescribe pero añade una con un aumento del valor de 0 un 255. Quería poner el número en hexadecimal, pero tal vez todavía no he entendido cómo escribir para sprintf(), porque se vuelve más complicado de interpretar.

Consideré utilizar sólo una figura para el periodo anual descivere, con el fin de garantizar que los datos de escritura 10 edad, sin eliminar los archivos de la memoria.

En el programa hay dos condiciones que restringen la representación dentro de sus extremos:

sensorVal = (sensorVal > VMIN) ? sensorVal : VMIN;

sensorVal = (sensorVal < VMAX) ? sensorVal : VMAX;

Lo que afecta a la representación más allá de los límites. Esto significa que los valores más allá de los límites no son aceptados y por lo tanto sólo se representa el mínimo o el máximo, dependiendo del caso.

última nota:

Cuando el programa encuentra un error en la SD de detección o de 'reloj, entonces no proceder y accidentes. Sólo en caso de que la serie no ha activado los mensajes de aviso puede.

Cuando se detecta que la forma del tiempo' se ha perdido, con la conexión en serie se puede tener un control más directo con el fin de establecer un tiempo o para permitir cargar el ordenador conectado.

Esta opción presenta una solicitud con 3 elecciones:

Y Se le permite introducir la fecha y la hora en el formato aa / mm / dd hh:mm:ss. No existe
una limitación real en el formato, una o 2 cifras no hace ninguna diferencia, sólo es digno de respeto
delimitadores de los campos que se encuentran / : y un espacio entre la fecha y 'ahora.

con se saltará la 'espera y continuar el programa con el' calendario sin cambios.

H Se le permite detener el proceso del programa. Con el fin de facilitar la reanudación con el botón de reinicio.

O cualquier otra tecla de espera para 3 segundo, Se le permite cargar el 'tiempo de
computadora.

Por esta razón, la elección debe realizarse en el período 3 segundo, de lo contrario el programa de decidir automáticamente para actualizar la hora. Teniendo en cuenta que el monitor serie del IDE también debe entrar al d 'botón enviar, para tomar el mando.

Por lo tanto, debe habilitarlo para esto o será capaz de ver la causa de un mal funcionamiento. Por lo tanto, yo le aconsejaría a mantener el activo de serie durante los ensayos iniciales y sólo cuando uno está seguro de la operación y luego desactivar esta opción si desea. Después de todo, no ocupa gran parte del período de trabajo de Arduino.

La pantalla se actualiza una vez por segundo, por qué incluso el proceso de escritura de la muestra vuelva al límite de la frecuencia mínima. Del resto de periodos de escritura usando la función dell 'RTC que me recuerda el valor mínimo en el segundo.

La muestra tiene una función de tomar por lo menos 10 lecturas y a media. El máximo puede ser 64, pero debe intervenir directamente a la línea de fuente. Dado que se usa una variable 2 a continuación, los bytes 64 Es el límite superior.

El programa se utiliza aquí para la conversión de presión, Sin embargo, no se limita a ese caso concreto. De hecho, los valores que se pueden configurar permiten la lectura de muchos tipos de sensores que tienen una tensión analógica en la respuesta que se pueden leer con el Arduino convertidor ADC.

El paquete se puede descargar de mi manejar.

Pongo un video en Youtube.

2 comentarios
  1. Picmicro675
    Picmicro675 Dice:

    Bluetooth está conectado directamente a la serie del hardware Arduicoso, que se conoce en el diagrama. Se podría hacer un ruido poco cuando se quiere escribir un nuevo firmware. Por lo que es recomendable poner un puente removible al escribir un boceto.

  2. gvsoft
    gvsoft Dice:

    No estoy muy convencido o tal vez leí mal: que administra los Bluetooh ? En el boceto Parece que no estoy a verlo.
    Para el resto tengo la intención de leer mejor boceto: la primera lectura no estaba convencido.
    saludos

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir

Deja una respuesta