Sisukord:

Temperatuuri, PH ja lahustunud hapniku andmesalvesti tegemine: 11 sammu (piltidega)
Temperatuuri, PH ja lahustunud hapniku andmesalvesti tegemine: 11 sammu (piltidega)

Video: Temperatuuri, PH ja lahustunud hapniku andmesalvesti tegemine: 11 sammu (piltidega)

Video: Temperatuuri, PH ja lahustunud hapniku andmesalvesti tegemine: 11 sammu (piltidega)
Video: Почему в стакане воды образуются пузырьки? 2024, Juuli
Anonim
Image
Image
Pilt
Pilt

Eesmärgid:

  • Tehke andmelogija hinnaga ≤ 500 dollarit. See salvestab temperatuuri, pH ja DO andmed ajatempliga ja kasutab I2C -sidet.
  • Miks I2C (integraallülitus)? Samale reale saab koguda nii palju andureid, kuna igal neist on ainulaadne aadress.

Samm 1:

Samm: ostke allpool olevad osad:

Osta osad allpool
Osta osad allpool
  1. Arduino MEGA 2560, 35 dollarit,
  2. Toiteadapter Arduino plaadile, 5,98 dollarit,
  3. LCD -moodul I2C (ekraan), 8,99 dollarit,
  4. Reaalajas kella (RTC) väljalülitamine, 7,5 dollarit,
  5. MicroSD -kaardi purunemislaud, 7,5 dollarit,
  6. 4 GB SD -kaart, 6,98 dollarit,
  7. Veekindel DS18B20 digitaalne andur, 9,95 dollarit,
  8. pH-sond + komplektid + standardpuhvrid, 149,15 dollarit,
  9. DO sond + komplektid + standardpuhvrid, 247,45 dollarit,
  10. Leivalaud, hüppajakaabel, 7,98 dollarit,
  11. (Valikuline) Pinge isolaator, 24 dollarit,

Kokku: 510,48 dollarit

* Teatud osi (nagu üldplaat) saab osta teistelt müüjatelt (eBay, Hiina müüja) madalama hinna eest. pH ja DO sonde soovitatakse hankida Atlas Scientificilt.

* Juhtivuse ja pinge kontrollimiseks on soovitatav kasutada multimeetrit. See maksab umbes 10-15 dollarit (https://goo.gl/iAMDJo)

Samm: juhtmestik

Juhtmestik
Juhtmestik
  • Osade ühendamiseks kasutage hüppaja/DuPonti kaableid, nagu on näidatud alloleval visandil.
  • Kasutage juhtivuse kontrollimiseks multimeetrit.
  • Kontrollige positiivse pinge toiteallikat (VCC) ja maandust (GND) (seda on lihtne segi ajada, kui te pole vooluringiga tuttav)
  • Ühendage toiteadapter ja kontrollige iga osa toiteindikaatorit. Kui kahtlete, kasutage multimeetrit, et kontrollida pinget VCC ja GND vahel (5V)

Samm: valmistage ette PH, DO ahelad, SD -kaart

Valmistage ette PH, DO ahelad, SD -kaart
Valmistage ette PH, DO ahelad, SD -kaart
  1. Lülitage I2C -le pH ja DO ahelate jaoks
  2. PH ja DO katkestused tarnitakse koos jadakommunikatsiooniga, mis on vaikimisi edastamise/vastuvõtmise (TX/RX) režiim. I2C-režiimi kellajoone (SCL) ja andmeside (SDA) kasutamiseks lülitage režiim (1): eemaldage VCC-, TX-, RX-kaablid, (2): hüpake TX Ground for Probe, PGND (mitte GND)), (3) ühendage VCC vooluringiga, (4): oodake, kuni LED muutub rohelisest siniseks. Lisateavet leiate lk 39 (pH -ahela andmeleht,
  3. Tehke sama samm DO -ahelaga
  4. (kui teate, kuidas näidiskoodi tahvlile üles laadida, saate seda teha jadamonitori kaudu)
  5. Vormindage SD -kaart FAT -vormingusse

Samm: valmistage tarkvara ette

Valmistage tarkvara ette
Valmistage tarkvara ette
Valmistage tarkvara ette
Valmistage tarkvara ette
Valmistage tarkvara ette
Valmistage tarkvara ette
Valmistage tarkvara ette
Valmistage tarkvara ette
  1. Laadige alla Arduino integreeritud arenduskeskkond (IDE),
  2. Installige raamatukogu Arduino IDE -sse:
  3. Enamikul neist on Arduino tarkvara. LiquidCrystal_I2C.h on saadaval GitHubi kaudu
  4. Installige draiver USB jaoks. Ehtsa Arduino jaoks ei pruugi teil seda vaja installida. Üldise draiveri jaoks peate installima CH340 draiveri (GitHub:
  5. Kontrollige, kas ühendate plaadi õigesti, käivitades vilkuva LED -testi
  6. Kuidas leida digitaalse temperatuuri 18B20 MAC -aadressi. Kasutades I2C skanneri malli Arduino IDE -s, kui sond on ühendatud. Igal seadmel on ainulaadne MAC -aadress, nii et saate ühe jagatud reaga kasutada sama palju temperatuuriandureid (#9). 18B20 kasutab ühe juhtmega I2C, seega on see I2C kommunikatsioonimeetodi erijuhtum. Allpool on üks meetod MAC -i leidmiseks - meditsiiniline juurdepääsukontroll („ROM”, kui käivitate alltoodud protseduuri).

Samm: alustage kodeerimist

Alusta kodeerimist
Alusta kodeerimist
  • Kopeerige allolev kood Arduino IDE -sse:
  • Või laadige alla kood (.ino) ja Arduino IDE -s peaks ilmuma uus aken.

/*

Viiteõpetused:

1. Temperatuur, ORP, pH logger:

2. Turvatud digitaalne (SD) kilp:

See kood väljastab andmed Arduino jadamonitorile. Sisestage käsud Arduino seeriamonitori, et juhtida EZO pH -ahelat I2C -režiimis.

Muudetud ülaltoodud õpetustest, enamasti Atlas-Scientifici I2C koodist

Viimati uuendatud: 26. juulil 2017, autor Binh Nguyen

*/

#include // lubage I2C.

#define pH_address 99 // vaikimisi I2C ID -number EZO pH -ahela jaoks.

#define DO_address 97 // vaikimisi I2C ID -number EZO DO Circuit jaoks.

#include "RTClib.h" // Kuupäeva ja kellaaja funktsioonid, kasutades DS1307 RTC -d, mis on ühendatud I2C ja Wire lib kaudu

RTC_DS1307 rtc;

#include // SD raamatukogu jaoks

#include // SD -kaart andmete salvestamiseks

const int chipSelect = 53; // peate välja selgitama Adafruit SD katkestuse //

// DO = MISO, DI = MOSI, ATmega pin#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)

char logFileName = "dataLT.txt"; // muutke oma katse tuvastamiseks logFileName, näiteks PBR_01_02, datalog1

pikk id = 1; // id -number logi järjekorra sisestamiseks

#kaasake

LiquidCrystal_I2C LCD (0x27, 20, 4);

#kaasake

#kaasake

#define ONE_WIRE_BUS 9 // määrake temperatuurianduri tihvt #

OneWire oneWire (ONE_WIRE_BUS);

DallasTemperatuuri andurid (& oneWire);

DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC -aadress, unikaalne igale sondile

String dataString; // peamine variant kõigi andmete salvestamiseks

String andmedString2; // ajutine variant temperatuuri/pH/DO salvestamiseks printimiseks

sülearvuti andmed [20]; // juhend Atlas Scientificilt: me teeme 20 -baidise tähemärkide massiivi, et hoida arvuti/mac/muu sissetulevaid andmeid.

bait saadud_arvult_arvutist = 0; // me peame teadma, kui palju märke on vastu võetud.

bait serial_event = 0; // lipp, mis annab märku, kui andmed on arvutilt/mac/muult saadud.

baitkood = 0; // kasutatakse I2C vastusekoodi hoidmiseks.

süsi pH_andmed [20]; // teeme 20 -baidise märgi massiivi, et hoida pH -ahelast sissetulevaid andmeid.

bait in_char = 0; // kasutatakse 1 -baidise puhvrina pH -ahela seostatud baitides hoidmiseks.

bait i = 0; // ph_data massiivi jaoks kasutatav loendur.

int aeg_ = 1800; // kasutatakse vajaliku viivituse muutmiseks sõltuvalt EZO klassi pH -ahelasse saadetud käsklusest.

ujuk pH_float; // float var, mida kasutatakse pH ujukväärtuse hoidmiseks.

char DO_andmed [20];

// float temp_C;

void setup () // riistvara initsialiseerimine.

{

Seriaalne algus (9600); // jadaporti lubada.

Wire.begin (pH_aadress); // lubage pH -sondi I2C -port

Wire.begin (DO_address);

lcd.init ();

lcd.algus (20, 4);

lcd.taustavalgus ();

lcd.home ();

lcd.print ("Tere PBR!");

lcd.setCursor (0, 1);

lcd.print ("Initsialiseerimine …");

Serial.print ("RTC on …");

kui (! rtc.begin ())

{

Serial.println ("RTC: reaalajas kell… EI LEITUD");

while (1); // (Serial.println ("RTC: reaalajas kell … LEITUD"));

}

Serial.println ("RUNNING");

Serial.print ("Reaalajas kell …");

kui (! rtc.isrunning ())

{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));

}

Serial.println ("TÖÖ");

lcd.setCursor (0, 0);

lcd.println ("RTC: OK");

Serial.print ("SD -kaart …"); // vaadake, kas kaart on olemas ja seda saab lähtestada:

if (! SD.begin (chipSelect))

{Serial.println ("Ebaõnnestus"); // ära tee rohkem midagi:

tagasipöördumine;

}

Serial.println ("OK");

lcd.setCursor (0, 1);

lcd.println ("SD -kaart: OK");

Serial.print ("Logifail:");

Serial.print (logFileName);

Serial.print ("…");

Fail logFile = SD.open (logFileName, FILE_WRITE); // faili avamine. "datalog" ja printige päis

if (logFile)

{

logFile.println (",,"); // näitavad, et eelmisel korral oli andmeid

Stringi päis = "Kuupäev -kellaaeg, temperatuur (C), pH, DO";

logFile.println (päis);

logFile.close ();

Serial.println ("VALMIS");

//Serial.println(dataString); // prindi ka jadaporti:

}

else {Serial.println ("tõrge andmebaasi avamisel"); } // kui fail pole avatud, ilmub tõrketeade:

lcd.setCursor (0, 2);

lcd.print ("Logifail:");

lcd.println (logFileName);

viivitus (1000);

sensorid.begin ();

sensors.setResolution (ProbeP, 10); // 10 on eraldusvõime (10bit)

lcd.clear ();

id = 0;

}

tühine tsükkel ()

{// peamine silmus.

dataString = String (id);

dataString = String (',');

DateTime now = rtc.now ();

dataString = String (nüüd.aasta (), DEC);

dataString += String ('/');

dataString += String (nüüd.kuu (), DEC);

dataString += String ('/');

dataString += String (nüüd.päev (), DEC);

dataString += String ('');

dataString += String (nüüd.tund (), DEC);

dataString += String (':');

dataString += String (nüüd.minute (), DEC);

dataString += String (':');

dataString += String (nüüd.second (), DEC);

lcd.home ();

lcd.print (dataString);

sensors.requestTemperatures ();

displayTemperature (ProbeP);

Wire.beginTransmission (pH_aadress); // helistada ahelale selle ID -numbri järgi

Wire.write ('r'); // kõvakood r pidevaks lugemiseks

Wire.endTransmission (); // lõpetada I2C andmeedastus.

hilinemisaeg_); // oota õiget aega, kuni vooluahel oma juhised täidab.

Wire.requestFrom (pH_aadress, 20, 1); // helistage ahelale ja küsige 20 baiti (see võib olla rohkem kui vaja)

samas (Wire.available ()) // on vastuvõtmiseks baite

{

in_char = Wire.read (); // saada bait.

if ((in_char> 31) && (in_char <127)) // kontrollige, kas sümbol on kasutatav (prinditav)

{

pH_andmed = süsi; // laadige see bait meie massiivi.

i+= 1;

}

if (in_char == 0) // kui näeme, et meile on saadetud nullkäsk.

{

i = 0; // lähtesta loendur i 0 -le.

Wire.endTransmission (); // lõpetada I2C andmeedastus.

murda; // väljuda samasilmusest.

}

}

jada_sündmus = 0; // jadaürituse lipu lähtestamine.

dataString2 += ",";

dataString2 += String (pH_andmed);

Wire.beginTransmission (DO_address); // helistada ahelale selle ID -numbri järgi

Wire.write ('r');

Wire.endTransmission (); // lõpetada I2C andmeedastus

hilinemisaeg_); // oota õiget aega, kuni vooluahel oma juhised täidab

Wire.requestFrom (DO_address, 20, 1); // helista ahelale ja küsi 20 baiti

samas (Wire.available ()) // on vastuvõtmiseks baite.

{

in_char = Wire.read (); // saada bait.

if ((in_char> 31) && (in_char <127)) // kontrollige, kas sümbol on kasutatav (prinditav), vastasel juhul sisaldab in_char.txt -faili alguses sümbolit

{DO_andmed = süsi; // laadige see bait meie massiivi

i+= 1; // lisage massiivi elemendi loendur

}

kui (in_char == 0)

{// kui näeme, et meile on saadetud käsk null

i = 0; // lähtesta loendur i 0 -le.

Wire.endTransmission (); // lõpetada I2C andmeedastus.

murda; // väljuda samasilmusest.

}

}

jada_sündmus = 0; // jadaürituse lipu lähtestamine

pH_float = atof (pH_andmed);

dataString2 += ",";

dataString2 += String (DO_andmed);

lcd.setCursor (0, 1);

lcd.print ("Temperatuur/ pH/ DO");

lcd.setCursor (0, 2);

lcd.print (dataString2);

dataString += ',';

dataString += dataString2;

Faili andmedFail = SD.open (logFileName, FILE_WRITE); // faili avamine. pange tähele, et korraga saab avada ainult ühe faili, seega peate selle enne teise avamist sulgema.

if (dataFile) // kui fail on saadaval, kirjutage sellele:

{

dataFile.println (dataString);

dataFile.close ();

Serial.println (dataString); // prindi ka jadaporti:

}

else {Serial.println ("viga andmebaasi faili avamisel"); } // kui fail pole avatud, ilmub tõrketeade:

lcd.setCursor (0, 3);

lcd.print ("Jookseb (x5m):");

lcd.setCursor (15, 3);

lcd.print (id);

id ++; // järgmise iteratsiooni korral ühe ID suurendamine

dataString = "";

viivitus (300000); // viivitus 5 minutit = 5*60*1000 ms

lcd.clear ();

} // lõppahela lõpp

tühi kuva Temperatuur (DeviceAddress deviceAddress)

{

float tempC = sensor.getTempC (deviceAddress);

if (tempC == -127,00) lcd.print ("Temperatuuri viga");

else dataString2 = String (tempC);

} // kood lõpeb siin

  • Valige Arduino IDE kaudu õige COM -port tööriistade/pordi alt
  • Valige õige Arduino plaat. Kasutasin Mega 2560, kuna sellel on rohkem sisemälu. Arduino Nano või Uno töötab selle seadistusega hästi.
  • Kontrollige ja kodeerige ning laadige kood üles

Samm: juhtmestiku (saab parandada) ja LCD -ekraani tulemused

Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
Tulemused juhtmestiku (saab parandada) ja LCD -ekraani kohta
  • Märkus: DO-sondi ja pH-sondi müra tekkis pärast 2-3-kuulist pidevat tööd. Atlas Scientifici andmetel on soovitatav kasutada pinge isolaatorit, kui pH, juhtivusandurid töötavad koos. Täpsem info on leheküljel 9 (https://goo.gl/d62Rqv)
  • Logitud andmed (esimesel on trükkimata märgid enne pH ja DO andmeid). Filtreerisin koodi järgi, lubades ainult prinditavaid märke.

8. samm: andmete importimine ja graafiku koostamine

Importige andmed ja tehke graafik
Importige andmed ja tehke graafik
Importige andmed ja tehke graafik
Importige andmed ja tehke graafik
Importige andmed ja tehke graafik
Importige andmed ja tehke graafik
  1. Andmete importimine vahekaardilt ANDMED tekstist (Excel 2013)
  2. Eraldage andmed komaga (seetõttu on komade lisamine pärast iga sisestamist kasulik)
  3. Joonestage andmed. Igal allpool oleval andmetel on umbes 1700 punkti. Mõõtmisintervall on 5 minutit (reguleeritav). DO- ja pH -ahelate miinimum andmete lugemiseks on 1,8 sekundit.

9. samm: kalibreerimine

Kalibreerimine
Kalibreerimine
  1. Digitaalset temperatuuriandurit (18B20) saab kalibreerida, reguleerides erinevust otse. Vastasel juhul, kui kompensatsioon ja kalle vajasid kalibreerimist, saate seda teha, muutes väärtusi real #453, DallasTemperature.cpp kaustas / libraries / DallasTemperature.
  2. PH- ja DO -sondide puhul saate sonde kalibreerida kaasasolevate lahustega. Peate kasutama Atlas Scientifici näidiskoodi ja järgima selle faili juhiseid.
  3. Palun järgige lehekülgi 26 ja 50 pH-sondi (https://goo.gl/d62Rqv) jaoks kalibreerimiseks ja temperatuuri kompenseerimiseks, samuti lehekülgi 7-8 ja 50 DO-sondi jaoks (https://goo.gl/mA32mp). Esiteks laadige uuesti üles Atlase pakutud üldkood, avage jadamonitor ja sisestage õige käsk.

Samm: liiga palju juhtmeid?

  1. SD -kaardi ja reaalajas kella mooduli saate eemaldada, kasutades Dragino Yun Shieldi Arduino tahvlitele (https://goo.gl/J9PBTH). Yun Shieldiga töötamiseks tuli koodi muuta. Siin on hea alustada (https://goo.gl/c1x8Dm)
  2. Ikka liiga palju juhtmeid: Atlas Scientific koostas oma EZO ahelate (https://goo.gl/dGyb12) ja jooteta plaadi (https://goo.gl/uWF51n) juhendi. 18B20 digitaalse temperatuuri integreerimine on siin (https://goo.gl/ATcnGd). Peate olema tuttav Raspbiani (Debiani Linuxi versioon) käskudega, mida töötab Raspberry Pi (https://goo.gl/549xvk)

11. samm: kinnitamine:

See on minu kõrvalprojekt doktorikraadi uurimise ajal, mille käigus töötasin mikrovetikate kasvatamiseks ette nähtud fotobioreaktorit. Seega pidasin vajalikuks krediteerida, et osapooled on selle saavutamiseks tingimused loonud. Esiteks, toetus, DE-EE0007093: “Atmospheric CO2 Enrichment and Delivery (ACED)”, USA energeetikaministeeriumi energiatõhususe ja taastuvenergia sihtotstarbeliste vetikakütuste ja bioproduktide büroost. Tänan dr Bruce E. Rittmanni Biodesign Swette'i keskkonnabiotehnoloogia keskuses Arizona osariigis, et ta andis mulle võimaluse elektroonika ja Arduinoga nokitseda. Mind koolitati keskkonnainseneriks, enamasti keemiaks, natuke mikrobioloogiaks.

Soovitan: