ORP / pH / temperatur datalogger (4 / 5 steg)

Steg 4: Arduino kod och datamanipulation




jag är definitivt inte en mycket erfaren programmerare. Bifogade PDF-filen i kodexen, även inklistrade nedan, har utvecklats med Atlas vetenskapliga kod för både pH och ORP kretsar; One-wire temperatur sensor koden från Hacktronics (http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html); och andra bitar här och erfarenheter som samlats från en myriad av chatt styrelser och andra internet-tjänster. Tack och lov för öppen källkod! Du får gärna kommentera hur bäst att städa upp och göra det mer funktionellt. Det blir viktigt att gå till den Hacktronics läraren på hitta adress för viss temperatur sensorn, och sedan gå in i koden och ersätt adressen jag har där med en för din sensor för att få det att fungera korrekt. Denna handledning kan hittas här - http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html .

Som skrivet, kommer instrumentet att vidta en ph, ORP och temperaturavläsningen varje 12 sekunder. det tidsintervallet justeras enkelt genom att ändra fördröjningen i programmet på linje 95. Avläsningarna visas på LCD-skärmen och det kommer att logga data till SD-kortet i en text arkivera benämn datalog. När jag är färdig logga data, jag öppnar filen i Word och det ser ut som på bilden. Jag sedan Sök och ersätt för "^ p," (som är ett stycketecken och ett komma) och ersätta med en "^ t" (som är ett tabbtecken) få tabbavgränsad data. Jag sedan spara filen och öppna den i Excel som en tab avgränsad textfil. Detta ger mig ett kalkylblad med förfluten tid sedan programmet startade, i millisekunder, i den första kolumnen; pH-värdet i den andra kolumnen; ORP i tredje kolumnen. och temperatur i grader Celsius i den fjärde kolumnen. Om du hålla reda på tiden programmet började, du kan sedan räkna ut med hjälp av Excel tiden varje behandlingen togs. Närmare i den bifogade filen ges instruktioner att manipulera datafilen.

Kod:
Bibliotek
#include < LiquidCrystal.h > //LCD bibliotek
#include < SoftwareSerial.h > //SoftwareSerial bibliotek
#include < OneWire.h >
#include < DallasTemperature.h >
#include < SPI.h > //SPI bibliotek för SD-kort
#include < SD.h > //SD kort bibliotek

Seriella portar
#define orprx 2 //define vad pin orp rx kommer att vara
#define orptx 3 //define vilken pin orp Tx kommer att vara
SoftwareSerial orpserial (orprx, orptx); definiera ORP mjuk serieporten
#define phrx 14 //define vilken pin pH rx kommer att vara
#define phtx 15 //define vilken pin pH Tx kommer att vara
SoftwareSerial phserial (phrx, phtx); definiera pH mjuk serieporten

Temperatur sond setup
#define ONE_WIRE_BUS 19 / / Data kabeln är ansluten till pin 19 på Arduino
OneWire oneWire(ONE_WIRE_BUS); Setup en oneWire instans att kommunicera med någon OneWire enheter
DallasTemperature sensorer (& oneWire); Passera vår oneWire referens till Dallas temperatur.
DeviceAddress insideThermometer = {0x28, 0xB4, 0x6B, 0xC8, 0x04, 0x00, 0x00, 0x1F}; Tilldela adresser till din 1-Wire temp givare.

definiera ORP variabler
char orp_data [20]. Bytematrisen 20 tecken att hålla ORP data
char orp_computerdata [20]. Bytematrisen 20 tecken att hålla inkommande data från en pc
byte orp_received_from_computer = 0; Vi behöver veta hur många tecken har tagits emot.
byte orp_received_from_sensor = 0; Vi behöver veta hur många tecken har tagits emot.
byte orp_startup = 0; används för att kontrollera tar arduino över kontrollen av ORP kretsen ordentligt.
flyta ORP = 0; används för att hålla ett flytande punkt nummer som är ORP
byte orp_string_received = 0; används för att identifiera när vi har fått en sträng från ORP kretsen

definiera pH variabler
char ph_data [20]. Bytematrisen 20 tecken att hålla inkommande pH
char ph_computerdata [20]. Bytematrisen 20 tecken att hålla inkommande data från en pc
byte pc_debug = 0; Om du vill felsöka pH krets genom den seriella monitor(pc/mac/other). om inte ange detta till 0.
byte ph_received_from_computer = 0; Vi behöver veta hur många tecken har tagits emot från dator
byte ph_received_from_sensor = 0; Vi behöver veta hur många tecken har tagits emot från pH sensor
byte ph_startup = 0; används för att kontrollera tar arduino över kontrollen av pH krets ordentligt.
flyta ph = 0; används för att hålla ett flytande punkt nummer som är pH-värdet.
byte ph_string_received = 0; används för att identifiera när vi har mottagit en sträng från pH-circuit.

LCD ställa in
LiquidCrystal lcd (8, 9, 4, 5, 6, 7); Välj stift används på LCD-panelen

void setup() {
Serial.BEGIN(38400); Aktivera hårdvara serieporten
orpserial.BEGIN(38400); Aktivera programvara serieporten
phserial.BEGIN(38400); Aktivera programvara serieporten
sensors.BEGIN(); starta upp temp sond bibliotek
sensors.setResolution (insideThermometer, 10); Ställ in upplösningen med temp sond till 10 bit
LCD.BEGIN (16, 2); Starta LCD-biblioteket
SD.begin(16);
pinMode (10, OUTPUT);
}

void loop() {
sensors.requestTemperatures(); Läs Temp sond
printTemperature(insideThermometer);

orpserial.listen();
Delay(100);
IF(orpserial.available() > 0) {//if ser vi att ORP kretsen har skickat en karaktär.
orp_received_from_sensor=orpserial.readBytesUntil(13,orp_data,20); Vi läser data som skickas från ORP Circuit, tills vi ser en < CR >. Vi också räkna hur många tecken har fått.
orp_data [orp_received_from_sensor] = 0; vi lägga till en 0 till plats i matrisen bara efter sist tecknet vi fick ta emot. Detta kommer att hindra oss från transmiting felaktiga uppgifter som kan ha varit kvar i bufferten.
orp_string_received = 1; en flagga som används när arduino kontrollerar ORP kretsen att låta oss veta att en komplett sträng har inkommit.
}
phserial.listen();
Delay(100);
IF(phserial.available() > 0) {//if ser vi att pH krets har skickat en karaktär.
ph_received_from_sensor=phserial.readBytesUntil(13,ph_data,20); Vi läser data som skickas från ph krets, tills vi ser en < CR >. Vi också räkna hur många tecken har fått.
ph_data [ph_received_from_sensor] = 0; vi lägga till en 0 till plats i matrisen bara efter sist tecknet vi fick ta emot. Detta kommer att hindra oss från transmiting felaktiga uppgifter som kan ha varit kvar i bufferten.
ph_string_received = 1; en flagga som används när arduino kontrollerar pH krets att låta oss veta att en komplett sträng har inkommit.
}
}
void printTemperature(DeviceAddress deviceAddress)
{
int decPlaces = 0; inställd temp decimaler på 0
flyta tempC = sensors.getTempC(deviceAddress);
om (tempC ==-127.00) {
LCD.Print ("fel få temperatur");
} annat {
lcd.setCursor(0,0); Ange position på lcd för pH
LCD.Print("pH:");
LCD.Print (ph, 1); Skicka pH till lcd
lcd.setCursor(7,0); Ange position på lcd för ORP
LCD.Print("ORP:");
LCD.Print (ORP, 0); Skicka ORP till lcd
lcd.setCursor(0,1); Ange position på lcd för Temp
LCD.Print("Temp:");
LCD.Print ("C").
LCD.Print(tempC,decPlaces); Visa Temp i celsius
LCD.Print "F".
LCD.Print(DallasTemperature::toFahrenheit(tempC),decPlaces); konvertera celsius till Fahrenheit
Delay(10000); Vi kommer att ta en behandling någonsin 10000ms

orpserial.Print("R\r"); Skicka det kommandot för att ta en enda behandling.
IF(orp_string_received==1) {//did vi få data tillbaka från ORP kretsen?
ORP=ATOF(orp_data); konvertera orp_data sträng ORP flyta
om (ORP > 800){Serial.println("high\r");} //This är beviset för att den har konverterats till en sträng.
om (ORP < 800){Serial.println("low\r");} //This är beviset för att den har konverterats till en sträng.
orp_string_received = 0;} återställa sträng emot flaggan.

phserial.Print("R\r"); Skicka det kommandot för att ta en enda behandling.
IF(ph_string_received==1) {//did vi få data tillbaka från ph krets?
pH=ATOF(ph_data); konvertera ph_data sträng ph flyta
om (ph > = 7.5){Serial.println("high\r");} //This är beviset för att den har konverterats till en sträng.
om (ph < 7.5){Serial.println("low\r");} //This är beviset för att den har konverterats till en sträng.
ph_string_received = 0;} återställa sträng emot flaggan.
}

långa currentTime = millis(); Få aktuell tid i ms (tid sedan startar programmet)
Fil dataFile = SD.open ("datalog.txt", FILE_WRITE); Öppna filen
om (dataFile) {/ / om filen är tillgänglig, skriva till det:
dataFile.println(currentTime); loggar tiden i millisekunder sedan programmet startade
dataFile.print(","); infogar ett kommatecken
dataFile.println(ph); loggar pH
dataFile.print(","); infogar ett kommatecken
dataFile.println(ORP); loggar ORP
dataFile.print(","); infogar ett kommatecken
dataFile.println(tempC); loggar temperatur i grader C
dataFile.print("\r"); infogar ett tecken
dataFile.close();
}
}

Se Steg
Relaterade Ämnen

ESP8266 - WIFI temperatur datalogger - MCP9808

I detta projekt kommer vi att bygga en enkel, hög precision, WIFI temperatur datalogger baserat på ESP8266 modul och MCP9808 chip, en ±0, 5 ° C maximalt precision Digital temperaturgivare.Funktioner• Noggrannhet:-±0.25 (typiskt) från-40 ° C till +125...

Skapa själv USB temperatur datalogger med ATMEGA128

Hej killar,Jag vill presentera min helg projekt använder ATMEGA128I detta projekt kommer vi att använda kabel RTC, LCD, USART, FT232RL och USB-hane till haneSteg 1: Förbered alla komponenter måste vi 1. ATMEGA128A2. PCB ombord, jag skapa mig själv fö...

Temperatur datalogger

en datalogger är alla enheter som kan användas för att lagra data. Detta inkluderar många data förvärv enheter som plug-in styrelser eller seriell kommunikationssystem som använder en dator som en verkliga tidsdata inspelning system. Mikrokontroller...

Datalogger för temperatur

En temperatur datalogger, är en bärbar mätning som kan inspelningen temperaturen under en definierad tid automatiskt. Data kan hämtas och visas när den har spelats.enhetens temperatur kommer posten var en minut i CSV-filen.Steg 1: Du behöver 1 - Ardu...

Kul med PIC församling - Episode 8

Jag har upplevt några intressanta förändringar i temperatur under min livstid inklusive en bara några år sedan där vi ställa en rekordhög en dag och sedan ange rekordlåga nästa dag. Den mest intressanta jag upplevt var länge sedan medan jag var i Son...

Arduino projekt Box

Jag leker ständigt i Arduino land arbetar med nya finnar, displayer och sensorer. Nyligen hade jag samtal att bygga en temperatur datalogger för att registrera temperaturer från 16 olika platser inne i en stor elektrisk församling skåp så jag kunde i...

Låg kostnad WIFI temperatur (DS18B20) datalogger baserad på ESP8266 med anslutning till thingspeak.com

Datalogger för temperatur baserat på ESP8266 och DS18B20 1-tråds temperaturgivare.På bara $5 ESP-01 styrelsen och DS18B20 sensor.Mjukvaran är skriven i LUA språk och körs direkt i ESP8266.Inga andra MCU!Steg 1: Del förteckning ESP-01 styrelsen - eBay...

Temperatur och luftfuktighet Datalogger + Webserver

i detta instructable (min första instructable) kommer vi att skapa en temperatur och luftfuktighet datalogger lägga posibility för att komma åt data av webben.Den nya arduino ethernet gör allt så lätt som det ser ut som magi. I samma styrelse får du:...

Temperatur och ljussensor datalogger

I denna tutorial göra jag en temperatur och ljussensor datalogger med en Arduino så att jag kan testa olika platser för växter eller ställen att sova utomhus i sommar som inte får mycket solSteg 1: Saker du behöver1 Arduino ombord1 set av brödunderlä...

Analog stil temperatur mätaren och DataLogger med Intel Edison

I detta instructable du lära dig att ta data från olika sensorer och logga in dem på ett SD-kort, och sedan Visa aktuell temperatur på en servo-driven analog stil mätare. Stort tack till Intel, Instructables och Grove för giveaway!Du behöver:Intellek...

Bygga en datalogger för din trådlösa sensornätverk

vi behövde en datalogger som tillhandahålls en tidsstämpel, och som skulle senaste 2 veckorna i skogen. Använder en bärbar dator skulle kräva en generator eller humongous batteri. Detta Instructable visar hur man gör en datalogger från en Arduino och...

Data logga temperatur sond (200 ° C till +1300 ° C)

Jag behövde ta temperaturen vs tidmått för forskning utrustning för att avgöra hur mycket tid i förväg någon bör börja prepping innan de faktiskt avser att använda utrustningen. I det här fallet innebär prepping att kyla ner en metall termisk massa m...

Solar Power datalogger

Någonsin velat veta hur mycket solenergi som du kunde avkastning genom att sätta solceller på en viss plats på eller runt ditt hus?Detta Instructable visar dig hur man bygger en datalogger baseras på en Arduino (eller Genuino) Uno med data-logger-shi...

ESP8266 WiFi temperatur och luftfuktighet sensor

I den här guiden kommer vi att bygga ESP8266 WiFi Arduino datalogger för temperatur och luftfuktighet. Data lagras på EasyIoT server och visas i webbläsare på fjärrdatorn eller mobiltelefon. Med ESP8266 EasyIoT Arduino bibliotek kan du bygga sensor m...

Arduino raket datalogger

Har du någonsin velat analysera varje enskild aspekt av din modell raketer flygning för bara £15?I detta instructable jag inkludera kod och instruktioner för en Arduino raket datalogger kan mäta raket höjd, acceleration, temperatur och varvtal (med e...

Arduino IOT: Temperatur och luftfuktighet (med ESP8266 WiFi)

Hej alla! Jag är Michalis Vasilakis från www.ardumotive.com och i detta Instructables kommer jag visa dig hur du gör din egen Internet av saker (IOT) termometer med hjälp av Arduino uno styrelsen.Du kan använda den hemma, på kontoret, eller var som h...

Bygga en "blackbox" datalogger för att lägga på skärm display mätare till dina videor

Detta projekt innehåller instruktioner om hur att bygga enheten samt en länk till projektet koden på github som måste laddas att köra.En Arduino baserat datalogger för att synkronisera data med video för att skapa en på skärmen.Med andra ord, du ride...

Snabb & lätt temperatur Loggers

Jag arbetar som systemutvecklare för en biologi lab där mitt jobb består av att skapa program för att hantera stora data visualisering. En av mina kolleger hade nyligen emellertid behovet av regelbundna temperatur mätningar form ett antal burkar av v...

Arduino BLE temperatur/luftfuktighet logger med DHT11 och iOS-skärm

I detta projekt kommer vi att bygga en enkel temperatur/luftfuktighet datalogger utifrån BlueDuino R2 och display på iOS. Det är lätt att bygga och hålla liten storlek.Steg 1: material BlueDuino Rev2 är en Arduino kompatibel microcontroller utvecklin...