ORP / pH / registrador de temperatura (4 / 5 paso)

Paso 4: Código de Arduino y manipulación de datos

Definitivamente no soy un programador muy experimentado.  El pdf adjunto del código, que también se pega a continuación, fue desarrollado usando código Atlas científico para su pH y circuitos ORP; código de sensor de temperatura One-wire de Hacktronics (http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html); y otros bits y piezas obtenidas de un sinnúmero de tablas de chat y otros puestos de internet.  Gracias a Dios por la comunidad open source!  No dude en comentar sobre la forma mejor para limpiarlo y hacerlo más funcional.  Será importante ir al tutorial de Hacktronics en la búsqueda de la dirección de tu sensor de temperatura determinado, ir al código y sustituir la dirección que hay con uno para el sensor para que funcione correctamente.  Ese tutorial se puede encontrar aquí - http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html .

Como está escrito, el instrumento tendrá un ph, ORP y temperatura cada 12 segundos; ese intervalo de tiempo se ajusta fácilmente al cambiar el retraso en el programa en línea de 95.  Se mostrarán las lecturas en la pantalla LCD, y registrará los datos a la tarjeta SD en un archivo de texto llamado datalog.  Cuando estoy acabado registro de datos, abrir el archivo en Word, y se parece a la imagen.  Después hacer una búsqueda y reemplazar por "^ p," (que es una marca de párrafo y una coma) y sustituir con un "^ t" (que es un carácter de tabulación) para obtener datos delimitado.  Luego guarde el archivo y abrirlo con Excel como un archivo de texto delimitado ficha.  Esto me da una hoja de cálculo con el tiempo transcurrido desde que el programa comenzó, en milisegundos, en la primera columna; el pH en la segunda columna; la ORP en la tercera columna; y la temperatura en grados Celsius en la cuarta columna.  Si hacer un seguimiento del tiempo que el programa comenzó, se puede entonces calcular usando Excel la hora cada lectura fue tomada.  Se dan instrucciones para manipular el archivo de datos con más detalle en el archivo adjunto.

Código:
Bibliotecas
#include < LiquidCrystal.h > //LCD biblioteca
#include < SoftwareSerial.h > //SoftwareSerial biblioteca
#include < OneWire.h >
#include < DallasTemperature.h >
#include < SPI.h > //SPI biblioteca para tarjeta SD
#include < SD.h > Biblioteca de tarjeta //SD

Puertos serie
#define orprx 2 //define qué orp pin rx va a ser
#define orptx 3 //define qué orp pin Tx va a ser
SoftwareSerial orpserial (orprx, orptx); definir el puerto serie suave de ORP
#define phrx 14 //define qué pH pin rx va a ser
#define phtx 15 //define qué pH pin Tx va a ser
SoftwareSerial phserial (phrx, phtx);    definir el puerto serie suave de pH

Instalación de sonda de temperatura
#define ONE_WIRE_BUS 19 / / cable de datos esté conectado a pin 19 en Arduino
OneWire oneWire(ONE_WIRE_BUS);           Configuración de una instancia de oneWire para comunicarse con dispositivos OneWire
DallasTemperature sensors (& oneWire);     Pasar nuestra referencia oneWire a temperatura de Dallas.
DeviceAddress insideThermometer = {0x28, 0xB4, 0x6B, 0xC8, 0 x 04, 0 x 00, 0 x 00, 0x1F};     Asigne las direcciones de sus sensores de temperatura 1-Wire.

definir variables ORP
char orp_data [20];                    matriz de caracteres de 20 bytes para almacenar datos ORP
char orp_computerdata [20];            matriz de caracteres de 20 bytes para datos entrantes de un pc
byte orp_received_from_computer = 0;    Necesitamos saber cuántos caracteres se han recibido.
byte orp_received_from_sensor = 0;      Necesitamos saber cuántos caracteres se han recibido.
byte orp_startup = 0;                   utilizado para asegurarse de que el arduino asume el control ORP del circuito de la correctamente.
ORP de flotador = 0;                          utiliza para mantener una flotación número que es la ORP de punto
byte orp_string_received = 0;           sirve para identificar cuando hemos recibido una cadena desde el circuito ORP

definir las variables de pH
char ph_data [20];                    matriz de caracteres de byte 20 para mantener pH entrante
char ph_computerdata [20];            matriz de caracteres de 20 bytes para datos entrantes de un pc
byte pc_debug = 0;                   Si desea depurar el pH circuito a través de la serie monitor(pc/mac/other). Si no esta a 0.
byte ph_received_from_computer = 0;    Necesitamos saber cuántos caracteres se han recibido desde ordenador
byte ph_received_from_sensor = 0;      Necesitamos saber cuántos caracteres se han recibido de sensor de pH
byte ph_startup = 0;                   utilizado para asegurarse de que el arduino asume el control del pH del circuito correctamente.
ph del flotador = 0;                          utiliza para mantener una flotación número que es el pH de punto.
byte ph_string_received = 0;           utiliza para identificar cuando hemos recibido una cadena desde el circuito de pH.

Configurar LCD
LiquidCrystal lcd (8, 9, 4, 5, 6, 7); Seleccione los pines utilizados en el panel LCD

void setup() {}
Serial.Begin(38400);        habilitar el puerto serial del hardware
orpserial.Begin(38400);     habilitar el puerto serial software
phserial.Begin(38400);      habilitar el puerto serial software
Sensors.Begin();            Inicio Biblioteca sonda temp
sensors.setResolution (insideThermometer, 10);       Ajuste la resolución de la sonda temp 10 bit
LCD.Begin (16, 2);           iniciar la biblioteca lcd
SD.begin(16);
pinMode (10, salida);
}

void loop() {}
sensors.requestTemperatures();         leer sonda Temp
printTemperature(insideThermometer);

orpserial.Listen();
Delay(100);
if(orpserial.Available() > 0) {//if vemos que el circuito de ORP ha enviado un carácter.
orp_received_from_sensor=orpserial.readBytesUntil(13,orp_data,20); leemos los datos del circuito de ORP hasta vemos una < CR >. También contamos cómo muchos caracteres han recivido.
orp_data [orp_received_from_sensor] = 0; añadimos un 0 al lugar de la matriz sólo después de que el ultimo personaje recibió. Esto nos dejará de transmitir datos incorrectos que puedan haber sido dejados en el búfer.
orp_string_received = 1;                una bandera cuando el arduino controla el circuito de ORP para hacernos saber que se ha recibido una cadena completa.
}
phserial.Listen();
Delay(100);
if(phserial.Available() > 0) {//if vemos que el pH circuito ha enviado un carácter.
ph_received_from_sensor=phserial.readBytesUntil(13,ph_data,20); leemos los datos enviados de ph hasta de circuito vemos un < CR >. También contamos cómo muchos caracteres han recivido.
ph_data [ph_received_from_sensor] = 0; añadimos un 0 al lugar de la matriz sólo después de que el ultimo personaje recibió. Esto nos dejará de transmitir datos incorrectos que puedan haber sido dejados en el búfer.
ph_string_received = 1;               una bandera cuando el arduino controla el pH circuito para hacernos saber que se ha recibido una cadena completa.
}
}
void printTemperature(DeviceAddress deviceAddress)
{
int decPlaces = 0;     sets temporales decimales 0
flotador tempC = sensors.getTempC(deviceAddress);
Si (tempC ==-127.00) {}
LCD.Print ("Error al obtener la temperatura");
} else {}
lcd.setCursor(0,0);   posición en la pantalla lcd para pH
LCD.Print("pH:");
LCD.Print (ph, 1);     pH de enviar a la lcd
lcd.setCursor(7,0);   posición en la pantalla lcd para ORP
LCD.Print("ORP:");
LCD.Print (ORP, 0);    enviar ORP a lcd
lcd.setCursor(0,1);   establecer la posición en la pantalla lcd para temperatura
LCD.Print("Temp:");
LCD.Print ("C");
LCD.Print(tempC,decPlaces);     Mostrar la temperatura en grados celsius
LCD.Print ("F");
LCD.Print(DallasTemperature::toFahrenheit(tempC),decPlaces);  convertir a grados celsius a farenheit
Delay(10000);          vamos a tomar una lectura cada vez 10000ms

orpserial.Print("R\r");                     enviar el comando para tomar una lectura única.
¿if(orp_string_received==1) {//did volvemos datos del circuito de ORP?
ORP=atof(orp_data);                    convertir cadena de orp_data en flotador ORP
Si (ORP > 800){Serial.println("high\r");} //This es la prueba que se ha convertido en una cadena.
Si (ORP < 800){Serial.println("low\r");}  Esta es la prueba que se ha convertido en una cadena.
orp_string_received = 0;}                restablecer la bandera de la cadena recibida.

phserial.Print("R\r");                      enviar el comando para tomar una lectura única.
¿if(ph_string_received==1) {//did volvemos datos de ph circuito?
pH=atof(ph_data);                      convertir cadena de ph_data en ph flotación
Si (ph > = 7.5){Serial.println("high\r");} //This es la prueba que se ha convertido en una cadena.
Si (ph < 7.5){Serial.println("low\r");}   Esta es la prueba que se ha convertido en una cadena.
ph_string_received = 0;}                 restablecer la bandera de la cadena recibida.
}

currentTime largo = millis();                                Obtener la hora actual en ms (tiempo desde que inicia del programa)
Archivo de datos de archivo = SD.open ("datalog.txt", FILE_WRITE);         Abra el archivo
Si (dataFile) {/ / si está disponible el archivo, escribir en él:
dataFile.println(currentTime);                         registra el tiempo en milisegundos desde que inició el programa
dataFile.print(",");                                   inserta una coma
dataFile.println(ph);                                  registra el pH
dataFile.print(",");                                   inserta una coma
dataFile.println(ORP);                                 registros de la ORP
dataFile.print(",");                                   inserta una coma
dataFile.println(tempC);                               registra la temperatura en grados C
dataFile.print("\r");                                  inserta un carácter de retorno del
dataFile.close();
}
}

Artículos Relacionados

ESP8266 ESP-12E NodeMCU v1.0 con Arduino IDE en registrador de temperatura inalámbrico de programación

ESP8266 ESP-12E NodeMCU v1.0 con Arduino IDE en registrador de temperatura inalámbrico de programación

A finales de 2014 y 2015 temprano, su vino realmente a través deeste ingenioso ESP8266 de Chip WiFi (ESP-01) y a la batalla entre la documentación inconsistente de diversas fuentes. Para el momento del estímulo, él documentó sus frustraciones (result
Registrador de temperatura ESP8266 con alarma de correo electrónico

Registrador de temperatura ESP8266 con alarma de correo electrónico

En este tutorial mostramos cómo construir registrador de temperatura DS18B20 ESP8266 con notificación de alarma por correo electrónico. Lo conectará a una nube de EasyIoT. Sensor es Plug and Play - no configuración es necesaria para agregar el sensor
Registrador de temperatura de frambuesa Pi

Registrador de temperatura de frambuesa Pi

Aquí están las instrucciones para construir un registrador de temperatura simple utilizando un sensor de temperatura I2C de $5,00. Los datos se almacenan en la tarjeta SD y pueden ser fácilmente importados en excel. Simplemente por cambiar o añadir o
La luz de Wake-Up de 600W con registrador de temperatura

La luz de Wake-Up de 600W con registrador de temperatura

Este es un registrador de temperatura 24h altamente avanzado que registra la temperatura cada 15 segundos y que promedio durante 1 min y 12mins. El valor de 12min promediado se traza en la línea de tiempo en una pantalla OLED de 128 x 64. La media de
Registrador de temperatura

Registrador de temperatura

Un registrador de datos de temperatura, es un dispositivo de medición portátil que es capaz de grabar automáticamente temperatura durante un período definido de tiempo. Los datos pueden ser obtenidos y han consultado después de que se ha registrado.e
Registradores de temperatura rápida y fácil

Registradores de temperatura rápida y fácil

Trabajo como desarrollador de software para un laboratorio de Biología donde mi trabajo consiste en crear aplicaciones para hacer frente a la visualización de datos grandes. Recientemente sin embargo uno de mis colegas tuvieron la necesidad de tomar
Registrador de temperatura para piel

Registrador de temperatura para piel

Como parte de CSCI 7000 computación CU Boulder física para el buen curso creé una temperatura de piel medida/registro de dispositivo usable y confort térmico del usuario (caliente, tibio, neutral, fresco, frío). La meta es eventualmente desarrollar u
ESP8266 Registrador de temperatura de Wifi

ESP8266 Registrador de temperatura de Wifi

Que día he leído en hackaday (http://hackaday.com/tag/esp8266/) que estaba disponible un nuevo módulo de wifi de $5, realizo el pedido de algunos de ellos para probar. Ahora, unas semanas más tarde quiero compartir mi experiencia.Esta es una demo muy
Registrador de temperatura de frambuesa Pi por Radio

Registrador de temperatura de frambuesa Pi por Radio

Este proyecto hace uso de una frambuesa pi, para leer la temperatura de varios sensores de radio y almacenarlos en una base de datos Sqlite.El mismo frambuesa pi se utiliza para servir páginas web con la gráfica de la temperatura adquirida.Ver demost
Registrador de temperatura de Arduino y humedad DHT11 y Display I2C

Registrador de temperatura de Arduino y humedad DHT11 y Display I2C

Hace algún tiempo he encontrado una interesante instructable sobre registro de datos de temperatura. Tenía algunas de las partes poner alrededor de mi escritorio y con la ocasión de hacer el Universal Shield, dije para mis adentros ¿por qué no hacer
Registrador de temperatura Arduino Wifi

Registrador de temperatura Arduino Wifi

Esta es una simple demo con los ESP8266 y Cactus Micro (una placa compatible con arduino) para actualizar un servidor remoto (https://data.sparkfun.com/) usando un sensor de temperatura digital.Paso 1: materiales El Micro de Cactus es una placa de ar
Registrador de temperatura de Edison de Intel con RBG-LCD

Registrador de temperatura de Edison de Intel con RBG-LCD

En primer lugar, gracias mucho Instructables + Intel para el tablero de Edison y el kit grove plus!Este proyecto es lo primero que hice con la Junta para probarla y es muy fácil para cualquier persona hacerlo.De más fácil proyecto que cualquier perso
Elegante casa parte 1: registrador de temperatura de fácil nube habilitado.

Elegante casa parte 1: registrador de temperatura de fácil nube habilitado.

Siempre estuve tentado a tener una "casa inteligente". Gracias a Instructables y Intel que me envió el kit compuesto por Edison Intel con kit de arranque placa Arduino y Grove finalmente tengo la oportunidad de perseguir este sueño. Este es el p
Registrador de temperatura Arduino

Registrador de temperatura Arduino

Para mi primer instructivo, estoy compartiendo un artilugio de registro de temperatura basado en el Arduino Uno R3. Como lo tengo configurado la temperatura medida por un termopar tipo K y grabada en una tarjeta SD cada 10 minutos. Todo el hardware y