ORP / pH / température Data Logger (4 / 5 étapes)

Étape 4: Code de l’Arduino et Manipulation de données

je ne suis certainement pas un codeur expérimenté.  Le pdf ci-joint du code, aussi collé ci-dessous, a été développé en utilisant le code Atlas scientifique pour leur pH et circuits d’ORP ; code de capteur de température de 1 fil de Hacktronics (http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html) ; et des autres morceaux glanées dans une multitude de conseils de chat et autres postes internet.  Dieu merci pour la communauté open source !  S’il vous plaît n’hésitez pas à commenter sur la façon de mieux pour nettoyer et le rendre plus fonctionnel.  Il sera important d’aller vers le tutoriel de Hacktronics sur la recherche de l’adresse pour votre capteur de température particulière, puis aller le code et remplacer l’adresse que j’ai là avec celui pour votre capteur pour qu’il puisse fonctionner correctement.  Ce tutoriel peut être trouvé ici - http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html .

Comme l’écrit, l’instrument aura un ph, ORP et température toutes les 12 secondes ; cet intervalle de temps est facilement réglable en changeant le retard dans le programme en ligne 95.  Il affiche les lectures sur l’écran LCD et il enregistrera les données sur la carte SD dans un fichier texte nommé datalog.  Quand je suis fini données de journalisation, j’ouvre le fichier dans Word, et il ressemble à l’image.  Je puis faire une recherche et remplacer pour "^ p, » (c’est une marque de paragraphe et une virgule) et les remplacer par un" ^ t "(c’est un caractère de tabulation) pour obtenir les données délimité par des tabulations.  Je puis enregistrez le fichier et l’ouvrir avec Excel en format texte délimité onglet.  Cela me donne une feuille de calcul avec le temps écoulé depuis le début du programme, en millisecondes, dans la première colonne ; le pH dans la deuxième colonne ; l’ORP dans la troisième colonne ; et la température en degrés Celsius dans la quatrième colonne.  Si vous garder une trace de l’époque, que le programme a commencé, vous pouvez alors calculer à l’aide d’Excel le temps chaque lecture a été effectuée.  Instructions pour manipuler le fichier de données sont données en détail dans le fichier joint.

Code :
Bibliothèques
#include < LiquidCrystal.h > //LCD bibliothèque
#include < SoftwareSerial.h > //SoftwareSerial bibliothèque
#include < OneWire.h >
#include < DallasTemperature.h >
#include < SPI.h > //SPI bibliothèque pour carte SD
bibliothèque de carte //SD #include < SD.h >

Ports série
#define orprx 2 //define quel orp broche rx va être
#define orptx 3 //define quel orp broche Tx va être
SoftwareSerial orpserial (orprx, orptx) ; définir le port série soft ORP
#define phrx 14 //define quel pH broche rx va être
#define phtx 15 //define quel pH broche Tx va être
SoftwareSerial phserial (phrx, phtx) ;    définir le port série doux pH

Configuration de sonde de température
#define ONE_WIRE_BUS 19 / / données fil est branché sur la broche 19 sur l’Arduino
OneWire oneWire(ONE_WIRE_BUS) ;           Configurer une instance oneWire pour communiquer avec les périphériques OneWire
Capteurs DallasTemperature (& oneWire) ;     Passez notre référence oneWire à température de Dallas.
DeviceAddress insideThermometer = {0 x 28, 0xB4, 0x6B, 0xC8, 0 x 04, 0 x 00, 0 x 00, 0x1F} ;     Affectez les adresses de vos capteurs de température 1-Wire.

définir des variables de l’ORP
char orp_data [20] ;                    Tableau de caractères de 20 octets pour conserver les données de l’ORP
char orp_computerdata [20] ;            Tableau de caractères de 20 octets pour stocker les données entrantes depuis un pc
orp_received_from_computer octets = 0 ;    Nous avons besoin de savoir combien de caractères ont été reçues.
orp_received_from_sensor octets = 0 ;      Nous avons besoin de savoir combien de caractères ont été reçues.
orp_startup octets = 0 ;                   utilisé pour s’assurer que l’arduino prend contrôle du Circuit ORP correctement.
flotteur ORP = 0 ;                          utilisée pour contenir une flottante point numéro de l’ORP
orp_string_received octets = 0 ;           utilisé pour identifier quand nous avons reçu une chaîne depuis le circuit ORP

définir des variables de pH
char ph_data [20] ;                    Tableau de caractères de 20 octets de tenir pH entrant
char ph_computerdata [20] ;            Tableau de caractères de 20 octets pour stocker les données entrantes depuis un pc
pc_debug octets = 0 ;                   Si vous souhaitez déboguer le pH Circuit par l’intermédiaire de la série monitor(pc/mac/other). Si ce n’est mettre à 0.
ph_received_from_computer octets = 0 ;    Nous avons besoin de savoir combien de caractères ont été reçues de l’ordinateur
ph_received_from_sensor octets = 0 ;      Nous avons besoin de savoir combien de caractères ont été reçues de capteur de pH
ph_startup octets = 0 ;                   utilisé pour s’assurer que l’arduino reprend le contrôle du pH Circuit correctement.
flotter à ph = 0 ;                          utilisée pour contenir une flottante point nombre qui est le pH.
ph_string_received octets = 0 ;           permet d’identifier lorsque nous avons reçu une chaîne du circuit pH.

LCD, mis en place
Innovente lcd (8, 9, 4, 5, 6, 7) ; Sélectionnez les broches sur le panneau ACL

void setup() {}
Serial.Begin(38400) ;        activez le port série du matériel
orpserial.Begin(38400) ;     activez le port série de logiciel
phserial.Begin(38400) ;      activez le port série de logiciel
sensors.Begin() ;            bibliothèque de sonde temp de démarrage
sensors.setResolution (insideThermometer, 10) ;       Réglez la résolution de la sonde temp sur 10 bits
LCD.Begin (16, 2) ;           Démarrer la bibliothèque lcd
SD.begin(16) ;
pinMode (sortie 10,) ;
}

void loop() {}
sensors.requestTemperatures() ;         lire la sonde Temp
printTemperature(insideThermometer) ;

orpserial.Listen() ;
Delay(100) ;
if(orpserial.available() > 0) {//if nous voyons que le Circuit de ORP a envoyé un personnage.
orp_received_from_sensor=orpserial.readBytesUntil(13,orp_data,20) ; On peut lire les données envoyées du Circuit de ORP jusqu'à ce que nous voyons un < CR >. Nous comptons également combien de caractères ont été recived.
orp_data [orp_received_from_sensor] = 0 ; Nous n’ajoutons un 0 à la tache dans le tableau juste après le dernier caractère nous recived. Cela ne nous empêchera pas de transmiting des données incorrectes qui peuvent avoir été laissées dans la mémoire tampon.
orp_string_received = 1 ;                un drapeau utilisé lors de l’arduino est de contrôler le Circuit de ORP pour nous faire savoir qu’une chaîne complète a été reçue.
}
phserial.Listen() ;
Delay(100) ;
if(phserial.available() > 0) {//if nous voyons que le pH Circuit a envoyé un personnage.
ph_received_from_sensor=phserial.readBytesUntil(13,ph_data,20) ; Nous avons lu les données envoyées du ph Circuit jusqu'à ce que nous voyons un < CR >. Nous comptons également combien de caractères ont été recived.
ph_data [ph_received_from_sensor] = 0 ; Nous n’ajoutons un 0 à la tache dans le tableau juste après le dernier caractère nous recived. Cela ne nous empêchera pas de transmiting des données incorrectes qui peuvent avoir été laissées dans la mémoire tampon.
ph_string_received = 1 ;               un drapeau utilisé lors de l’arduino est de contrôler le pH Circuit pour nous faire savoir qu’une chaîne complète a été reçue.
}
}
Sub printTemperature(DeviceAddress deviceAddress)
{
int decPlaces = 0 ;     la valeur décimale temp 0
flotteur NC = sensors.getTempC(deviceAddress) ;
Si (NC ==-127.00) {}
LCD.Print ("Error getting température") ;
} else {}
lcd.setCursor(0,0) ;   définir la position sur l’écran lcd pour le pH
LCD.Print("pH:") ;
LCD.Print (ph, 1) ;     Envoyer le pH à lcd
lcd.setCursor(7,0) ;   définir la position sur l’écran lcd pour ORP
LCD.Print("ORP:") ;
LCD.Print (ORP, 0) ;    Envoyer des ORP pour lcd
lcd.setCursor(0,1) ;   définir la position sur l’écran lcd de Temp
LCD.Print("Temp:") ;
LCD.Print ("C") ;
LCD.Print(tempC,decPlaces) ;     afficher la température en degrés celsius
LCD.Print ("F") ;
LCD.Print(DallasTemperature::toFahrenheit(tempC),decPlaces) ;  convertir les degrés celsius en Fahrenheit
Delay(10000) ;          Nous allons prendre une lecture jamais 10000ms

orpserial.Print("R\r") ;                     Envoyer la commande pour prendre une lecture unique.
if(orp_string_received==1) {//did nous récupérer les données du circuit de ORP ?
ORP=atof(orp_data) ;                    Convertit une chaîne d’orp_data en float ORP
Si (ORP > 800){Serial.println("high\r");} //This est la preuve qu’il a été converti en une chaîne.
Si (ORP < 800){Serial.println("low\r");}  C’est la preuve qu’il a été converti en une chaîne.
orp_string_received = 0;}                réinitialiser l’indicateur de chaîne reçue.

phserial.Print("R\r") ;                      Envoyer la commande pour prendre une lecture unique.
if(ph_string_received==1) {//did nous récupérer les données depuis le ph Circuit ?
pH=atof(ph_data) ;                      Convertit une chaîne de ph_data en ph flotteur
Si (ph > = 7.5){Serial.println("high\r");} //This est la preuve qu’il a été converti en une chaîne.
Si (ph < 7.5){Serial.println("low\r");}   C’est la preuve qu’il a été converti en une chaîne.
ph_string_received = 0;}                 réinitialiser l’indicateur de chaîne reçue.
}

currentTime long = millis() ;                                Obtenir l’heure actuelle en ms (temps étant donné que le programme démarre)
Fichier dataFile = SD.open ("datalog.txt", FILE_WRITE) ;         ouvrir le fichier
Si (dataFile) {/ / si le fichier est disponible, écrivez à elle :
dataFile.println(currentTime) ;                         enregistre le temps en millisecondes depuis le début du programme
dataFile.print(",") ;                                   insère une virgule
dataFile.println(ph) ;                                  enregistre le pH
dataFile.print(",") ;                                   insère une virgule
dataFile.println(ORP) ;                                 journaux de l’ORP
dataFile.print(",") ;                                   insère une virgule
dataFile.println(tempC) ;                               enregistre la température en degrés C
dataFile.print("\r") ;                                  insère un caractère de retour chariot
dataFile.close() ;
}
}

Articles Liés

TEG / plaque Peltier Test Rig avec température / tension / courant Logger

TEG / plaque Peltier Test Rig avec température / tension / courant Logger

Cette plate-forme était composée de deux lorsque la température et la sortie courant/tension correspondante d'une plaque TEG.Les deux thermocouples vont mesurer la différence de température et de l'enregistrer avec la tension en temps réel et les sor
Affichage de 16 x 128 indiquant les Date, heure, température, humidité

Affichage de 16 x 128 indiquant les Date, heure, température, humidité

Il s'agit de mon 1er instructable alors j'espère que vous trouvez cela utile.Je sais que les luttes de trouver le bon code pour faire ce que vous avez planifié dans votre tête.Donc, voici une de mes luttes que j'ai fini !J'utilise 2-16 x affichage à
GEO Data Logger : Arduino + GPS + SD + accéléromètre pour enregistrer, horodatage et les données des capteurs géo-tag

GEO Data Logger : Arduino + GPS + SD + accéléromètre pour enregistrer, horodatage et les données des capteurs géo-tag

mises à jour17 octobre 2013: J'ai publié un guide sur l'utilisation de votre téléphone Android pour accomplir une tâche similaire en s'appuyant sur votre Android appareil construit dans le GPS et les capteurs.6 février 2013: En vedette sur GeoAwesome
ESP8266 - enregistreur de données de température WIFI - MCP9808

ESP8266 - enregistreur de données de température WIFI - MCP9808

Dans ce projet, nous allons construire une simple, de haute précision, enregistreur de données de température de WIFI basée sur le module de ESP8266 et de la puce MCP9808, un ± 0,5 ° C précision maximale capteur numérique de température.Caractéristiq
Enregistreur de température Arduino

Enregistreur de température Arduino

Pour mon premier instructable, je partage un engin de journalisation de la température basé sur l'Arduino Uno R3. Comme je l'ai configuré la température sera mesurée par un thermocouple de type K et enregistrée sur une carte SD toutes les 10 minutes.
Sonde d’humidité (LCD, CCF, SD enregistreur, température) sur le sol

Sonde d’humidité (LCD, CCF, SD enregistreur, température) sur le sol

L'évolution de mes projets dans mon esprit, il arrive un moment pour exaucer les idées et donc le projet ci-dessous est devenu réalité. Ses une sonde d'humidité du sol Arduino basé, avec 16, x 2 LCD, horloge temps réel (qui garde le temps même si l'a
Solar Powered capteur de température

Solar Powered capteur de température

La méthode scientifique nous permet d'étudier l'univers et ses phénomènes naturels. Grâce à la collecte et l'analyse des données, nous découvrons des tendances historiques pour faire des prédictions sur les événements futurs. Un tel phénomène qui aff
Enregistrement de sonde de température (-200 ° C à + 1300 ° C) de données

Enregistrement de sonde de température (-200 ° C à + 1300 ° C) de données

J'avais besoin de prendre la température par rapport à des mesures de temps pour une pièce d'équipement de recherche afin de déterminer combien de temps à l'avance quelqu'un devrait commencer à préparer avant qu'ils veulent réellement utiliser l'équi
Raspberry Pi - humidité I2C HIH6130 & température capteur Java Tutorial

Raspberry Pi - humidité I2C HIH6130 & température capteur Java Tutorial

HIH6130 est une humidité et capteur de température à sortie numérique. Ces capteurs fournissent un niveau de précision de ±4 % RH. Avec la stabilité à long terme de pointe, véritable compensation de température numérique I2C, fiabilité inégalée, l'ef
Raspberry Pi - humidité I2C HIH6130 & température capteur Python Tutorial

Raspberry Pi - humidité I2C HIH6130 & température capteur Python Tutorial

HIH6130 est une humidité et capteur de température à sortie numérique. Ces capteurs fournissent un niveau de précision de ±4 % RH. Avec la stabilité à long terme de pointe, véritable compensation de température numérique I2C, fiabilité inégalée, l'ef
Raspberry Pi - TMP100 température capteur Python Tutorial

Raspberry Pi - TMP100 température capteur Python Tutorial

TMP100 haute précision, faible puissance, module capteur de température numérique I2C MINI. Le TMP100 est idéal pour la mesure de températures étendue. Ce dispositif offre une précision de ±1 ° C sans nécessiter d'étalonnage ou composant externe cond
Raspberry Pi - TMP100 température capteur Java Tutorial

Raspberry Pi - TMP100 température capteur Java Tutorial

TMP100 haute précision, faible puissance, module capteur de température numérique I2C MINI. Le TMP100 est idéal pour la mesure de températures étendue. Ce dispositif offre une précision de ±1 ° C sans nécessiter d'étalonnage ou composant externe cond
Raspberry Pi - TCN75A température capteur Java Tutorial

Raspberry Pi - TCN75A température capteur Java Tutorial

TCN75A est un capteur de température série bifilaire constituée avec température-to-digital converter. Il est incorporé avec les registres programmable utilisateur qui fournissent la flexibilité pour les applications de détection de température. Les
Raspberry Pi - TCN75A température capteur Python Tutorial

Raspberry Pi - TCN75A température capteur Python Tutorial

TCN75A est un capteur de température série bifilaire constituée avec température-to-digital converter. Il est incorporé avec les registres programmable utilisateur qui fournissent la flexibilité pour les applications de détection de température. Les