Sisällysluettelo:
- Vaihe 1:
- Vaihe 2: Osta alla olevat osat:
- Vaihe 3: Johdotus
- Vaihe 4: Valmistele PH-, DO -piirit ja SD -kortti
- Vaihe 5: Valmistele ohjelmisto
- Vaihe 6: Aloita koodaus
- Vaihe 7: Johdotuksen (voidaan parantaa) ja LCD -näytön tulokset
- Vaihe 8: Tuo tiedot ja luo kaavio
- Vaihe 9: Kalibrointi
- Vaihe 10: Liikaa johdotusta?
- Vaihe 11: Kuittaus:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Tavoitteet:
- Tee dataloggeri hintaan ≤ 500 dollaria. Se tallentaa lämpötilan, pH: n ja DO: n tiedot aikaleimalla ja käyttää I2C -tiedonsiirtoa.
- Miksi I2C (Integroitu piiri)? Voidaan pinota niin monta anturia samalle riville, koska jokaisella niistä on yksilöllinen osoite.
Vaihe 1:
Vaihe 2: Osta alla olevat osat:
- Arduino MEGA 2560, 35 dollaria,
- Verkkolaite Arduino -kortille, 5,98 dollaria,
- LCD -moduuli I2C (näyttö), 8,99 dollaria,
- Reaaliaikainen kello (RTC), 7,5 dollaria,
- MicroSD -kortti, 7,5 dollaria,
- 4 Gt SD -kortti, 6,98 dollaria,
- Vedenpitävä DS18B20 -digitaalinen anturi, 9,95 dollaria,
- pH-anturi + sarjat + vakiopuskurit, 149,15 dollaria,
- DO-koetin + sarjat + vakiopuskurit, 247,45 dollaria,
- Leipälauta, hyppyjohto, 7,98 dollaria,
- (Valinnainen) Jännitteeneristin, 24 dollaria,
Yhteensä: 510,48 dollaria
* Tietyt osat (kuten yleiskortti) voitaisiin ostaa muilta toimittajilta (eBay, kiinalainen myyjä) halvemmalla. pH- ja DO -koettimia suositellaan niiden saamiseksi Atlas Scientificilta.
* Johtavuuden ja jännitteen tarkistamiseen suositellaan yleismittaria. Se maksaa noin 10-15 dollaria (https://goo.gl/iAMDJo)
Vaihe 3: Johdotus
- Käytä jumpperi/DuPont -kaapeleita osien liittämiseen alla olevan luonnoksen mukaisesti.
- Tarkista yleisyys yleismittarilla.
- Tarkista positiivisen jännitteen syöttö (VCC) ja maadoitus (GND) (se on helppo sekoittaa, jos et tunne piiriä)
- Kytke verkkolaite pistorasiaan ja tarkista kunkin osan virran merkkivalo. Jos olet epävarma, tarkista monimetrillä VCC: n ja GND: n välinen jännite (5V)
Vaihe 4: Valmistele PH-, DO -piirit ja SD -kortti
- Vaihda I2C -lämpötilaan pH- ja DO -piireissä
- PH- ja DO -erotukset toimitetaan sarjayhteyden kautta oletuslähetys/vastaanotto -tilassa (TX/RX). Jos haluat käyttää I2C-tilan kellolinjaa (SCL) ja datalinjaa (SDA), vaihda tila (1): irrota VCC-, TX-, RX-kaapelit, (2): siirrä TX Ground for Probe, PGND (ei GND)), (3) kytke VCC virtapiiriin, (4): odota, kunnes LED muuttuu vihreästä siniseksi. Lisätietoja on sivulla 39 (pH -piirin tietolomake,
- Tee sama vaihe DO -piirin kanssa
- (jos tiedät kuinka ladata näytekoodi taululle, voit tehdä sen Sarjamonitorin kautta)
- Alusta SD -kortti FAT -muotoon
Vaihe 5: Valmistele ohjelmisto
- Lataa Arduino Integrated Development Environment (IDE),
- Asenna kirjasto Arduino IDE: hen:
- Useimmat niistä tulevat Arduino -ohjelmiston kanssa. LiquidCrystal_I2C.h on saatavilla GitHubin kautta
- Asenna USB -ohjain. Aitoa Arduinoa varten sinun ei ehkä tarvitse asentaa sitä. Yleistä varten sinun on asennettava CH340 -ohjain (GitHub:
- Tarkista, onko kortti liitetty oikein suorittamalla vilkkuva LED -testi
- Kuinka löytää digitaalisen 18B20 -lämpötilan MAC -osoite. Käyttämällä I2C -skannerimallia Arduino IDE: ssä anturin ollessa kytkettynä. Jokaisella laitteella on yksilöllinen MAC -osoite, joten voit käyttää yhtä monta lämpötila -anturia yhdellä jaetulla rivillä (#9). 18B20 käyttää yksijohtimista I2C: tä, joten se on I2C -viestintämenetelmän erityistapaus. Alla on yksi tapa löytää MAC - Medical Access Control (”ROM”, kun suoritat alla olevan menettelyn).
Vaihe 6: Aloita koodaus
- Kopioi liitä alla oleva koodi Arduino IDE:
- Tai lataa koodi (.ino) ja uuden ikkunan pitäisi avautua Arduino IDE: ssä.
/*
Viiteoppaat:
1. Lämpötila, ORP, pH-kirjaaja:
2. Suojattu digitaalinen (SD) kilpi:
Tämä koodi lähettää tietoja Arduino -sarjamonitoriin. Kirjoita komentoja Arduino -sarjamonitoriin EZO -pH -piirin ohjaamiseksi I2C -tilassa.
Muokattu yllä olevista opetusohjelmista, lähinnä Atlas-Scientificin I2C-koodista
Viimeksi päivitetty: Binh Nguyen 26. heinäkuuta 2017
*/
#include // ota I2C käyttöön.
#define pH_address 99 // oletusarvoinen I2C -ID -numero EZO pH -piirille.
#define DO_address 97 // EZO DO -piirin I2C -oletusnumero.
#include "RTClib.h" // Päivämäärä- ja aikafunktiot käyttämällä DS1307 RTC: tä, joka on kytketty I2C: n ja Wire lib: n kautta
RTC_DS1307 rtc;
#include // SD -kirjastoon
#include // SD -kortti tietojen tallentamiseen
const int chipSelect = 53; // täytyy selvittää Adafruit SD -katkos //
// DO = MISO, DI = MOSI, ATmega -nastassa#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // muokkaa lokitiedoston nimeä kokeilusi tunnistamiseksi, esim. PBR_01_02, datalog1
pitkä id = 1; // tunnusluku lokitilauksen syöttämiseksi
#sisältää
LiquidCrystal_I2C lcd (0x27, 20, 4);
#sisältää
#sisältää
#define ONE_WIRE_BUS 9 // määritä lämpötila -anturin nasta #
OneWire oneWire (ONE_WIRE_BUS);
DallasLämpötila -anturit (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC -osoite, yksilöllinen jokaiselle koettimelle
String dataString; // tärkein vaihtoehto kaikkien tietojen tallentamiseen
Merkkijono dataString2; // väliaikainen vaihtoehto lämpötilan/pH/DO: n tallentamiseen tulostamista varten
char tietokonetiedot [20]; // Atlas Scientificin ohje: teemme 20 tavun merkkijonon, joka pitää tietokoneelta/Macilta/muulta saapuvat tiedot.
tavu vastaanotettu_tietokoneelta = 0; // meidän on tiedettävä, kuinka monta merkkiä on vastaanotettu.
tavu serial_event = 0; // lippu, joka ilmoittaa, kun tieto on vastaanotettu tietokoneelta/mac/other.
tavukoodi = 0; // käytetään I2C -vastauskoodin säilyttämiseen.
char pH_data [20]; // teemme 20 tavun merkkijonon pH -piiristä tulevien tietojen säilyttämiseksi.
tavu in_char = 0; // käytetään 1 tavun puskurina pH -piirin sitoviin tavuihin varastoimiseksi.
tavu i = 0; // ph_data -taulukon laskuri.
int aika_ = 1800; // käytetään tarvittavan viiveen muuttamiseen riippuen EZO -luokan pH -piirille lähetetystä komennosta.
kellua pH_float; // float var, jota käytetään pitämään pH: n kelluva arvo.
char DO_data [20];
// kelluva lämpötila_C;
void setup () // laitteiston alustus.
{
Sarja.alku (9600); // ota sarjaportti käyttöön.
Wire.begin (pH_osoite); // ota I2C -portti käyttöön pH -anturille
Wire.begin (DO_address);
lcd.init ();
lcd. alku (20, 4);
lcd.taustavalo ();
lcd.home ();
lcd.print ("Hei PBR!");
lcd.setCursor (0, 1);
lcd.print ("Alustetaan…");
Serial.print ("RTC on…");
jos (! rtc.begin ())
{
Serial.println ("RTC: Reaaliaikainen kello… EI FOUND");
while (1); // (Serial.println ("RTC: Real-time clock … FOUND"));
}
Serial.println ("RUNNING");
Serial.print ("Reaaliaikainen kello…");
jos (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("TYÖ");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("SD -kortti …"); // katso onko kortti läsnä ja voidaanko alustaa:
jos (! SD.begin (chipSelect))
{Serial.println ("Epäonnistui"); // älä tee mitään muuta:
palata;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println ("SD -kortti: OK");
Serial.print ("Lokitiedosto:");
Serial.print (logFileName);
Serial.print ("…");
Tiedosto logFile = SD.open (logFileName, FILE_WRITE); // avaa tiedosto. "datalog" ja tulosta otsikko
jos (logFile)
{
logFile.println (",,"); // osoittavat, että edellisessä ajossa oli tietoja
String header = "Päivämäärä -aika, lämpötila (C), pH, DO";
logFile.println (otsikko);
logFile.close ();
Serial.println ("VALMIS");
//Sarja.println(dataString); // tulosta myös sarjaporttiin:
}
else {Serial.println ("virhe avaamalla datalogin"); } // jos tiedosto ei ole auki, näyttöön tulee virheilmoitus:
lcd.setCursor (0, 2);
lcd.print ("Lokitiedosto:");
lcd.println (logFileName);
viive (1000);
anturit.begin ();
sensors.setResolution (ProbeP, 10); // 10 on resoluutio (10 bittiä)
lcd.clear ();
id = 0;
}
tyhjä silmukka ()
{// pääsilmukka.
dataString = Merkkijono (id);
dataString = Jono (',');
DateTime now = rtc.now ();
dataString = Jono (now.year (), DEC);
dataString += Jono ('/');
dataString += Jono (nyt.kuukausi (), DEC);
dataString += Jono ('/');
dataString += Merkkijono (now.day (), DEC);
dataString += Merkkijono ('');
dataString += Merkkijono (now.hour (), DEC);
dataString += Merkkijono (':');
dataString += Merkkijono (now.minute (), DEC);
dataString += Merkkijono (':');
dataString += Jono (nyt.second (), DEC);
lcd.home ();
lcd.print (dataString);
sensors.requestTemperatures ();
näyttö Lämpötila (ProbeP);
Wire.beginTransmission (pH_osoite); // soittaa piirille sen ID -numerolla
Wire.write ('r'); // kova koodi r jatkuvasti luettavaksi
Wire.endTransmission (); // lopettaa I2C -tiedonsiirron.
viiveaika_); // odota oikeaa aikaa, ennen kuin piiri suorittaa ohjeensa.
Wire.requestFrom (pH_osoite, 20, 1); // soita piirille ja pyydä 20 tavua (tämä voi olla enemmän kuin tarvitsemme)
kun taas (Wire.available ()) // ovat tavuja vastaanotettavissa
{
in_char = Wire.read (); // vastaanottaa tavun.
if ((in_char> 31) && (in_char <127)) // tarkista onko hiili käyttökelpoinen (tulostettava)
{
pH_data = hiili; // lataa tämä tavu taulukkoomme.
i+= 1;
}
if (in_char == 0) // jos näemme, että meille on lähetetty null -komento.
{
i = 0; // nollaa laskuri i arvoon 0.
Wire.endTransmission (); // lopettaa I2C -tiedonsiirron.
tauko; // poistu while -silmukasta.
}
}
sarja_tapahtuma = 0; // nollaa sarjatapahtumalippu.
dataJono2 += ",";
dataString2 += Jono (pH_data);
Wire.beginTransmission (DO_address); // soittaa piirille sen ID -numerolla
Wire.write ('r');
Wire.endTransmission (); // lopettaa I2C -tiedonsiirron
viiveaika_); // odota oikeaa aikaa, ennen kuin piiri suorittaa ohjeensa
Wire.requestFrom (DO_address, 20, 1); // soita piirille ja pyydä 20 tavua
kun taas (Wire.available ()) // ovat tavuja vastaanotettavissa.
{
in_char = Wire.read (); // vastaanottaa tavun.
if ((in_char> 31) && (in_char <127)) // tarkista, onko merkki käyttökelpoinen (tulostettava), muuten in_char sisältää symbolin.txt -tiedoston alussa
{DO_data = hiili; // lataa tämä tavu taulukkoomme
i+= 1; // lisää taulukkoelementin laskuri
}
jos (in_char == 0)
{// jos näemme, että meille on lähetetty null -komento
i = 0; // nollaa laskuri i arvoon 0.
Wire.endTransmission (); // lopettaa I2C -tiedonsiirron.
tauko; // poistu while -silmukasta.
}
}
sarja_tapahtuma = 0; // nollaa sarjatapahtumalippu
pH_float = atof (pH_data);
dataJono2 += ",";
dataString2 += Jono (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Lämpötila/ pH/ DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
Tiedoston dataFile = SD.open (logFileName, FILE_WRITE); // avaa tiedosto. Huomaa, että vain yksi tiedosto voidaan avata kerrallaan, joten sinun on suljettava tämä tiedosto ennen uuden avaamista.
if (dataFile) // jos tiedosto on saatavilla, kirjoita sille:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // tulosta myös sarjaporttiin:
}
else {Serial.println ("virhe datalog -tiedoston avaamisessa"); } // jos tiedosto ei ole auki, näyttöön tulee virheilmoitus:
lcd.setCursor (0, 3);
lcd.print ("Käynnissä (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // suurenna yhtä tunnusta seuraavassa iteraatiossa
dataString = "";
viive (300000); // viive 5 minuuttia = 5*60*1000 ms
lcd.clear ();
} // pääsilmukan lopetus
tyhjä näyttö Lämpötila (DeviceAddress deviceAddress)
{
float tempC = sensor.getTempC (deviceAddress);
if (tempC == -127,00) lcd.print ("Lämpötilavirhe");
else dataString2 = Jono (tempC);
} // koodi päättyy tähän
- Valitse oikea COM -portti Arduino IDE: n kautta Työkalut/Portti -kohdasta
- Valitse oikea Arduino -levy. Käytin Mega 2560: tä, koska siinä on enemmän sisäistä muistia. Arduino Nano tai Uno toimii hyvin tällä asetuksella.
- Tarkista ja koodata ja lataa koodi
Vaihe 7: Johdotuksen (voidaan parantaa) ja LCD -näytön tulokset
- Huomautus: DO-anturin ja pH-anturin välinen melu ilmeni 2-3 kuukauden jatkuvan käytön jälkeen. Atlas Scientificin mukaan on suositeltavaa käyttää jännitesuojaa, kun pH- ja johtavuusanturit toimivat yhdessä. Lisätietoja on sivulla 9 (https://goo.gl/d62Rqv)
- Kirjattavat tiedot (ensimmäisessä on tulostamattomia merkkejä ennen pH- ja DO -tietoja). Suodatin koodiksi sallimalla vain tulostettavat merkit.
Vaihe 8: Tuo tiedot ja luo kaavio
- Tietojen tuominen DATA -välilehden tekstistä (Excel 2013)
- Erota tiedot pilkulla (siksi pilkuista on hyötyä jokaisen syötetyn datan jälkeen)
- Piirrä tiedot. Jokaisessa alla olevassa datassa on noin 1700 pistettä. Mittausväli on 5 minuuttia (säädettävä). Minimi DO- ja pH -piireille tietojen lukemiseksi on 1,8 sekuntia.
Vaihe 9: Kalibrointi
- Digitaalinen lämpötila -anturi (18B20) voidaan kalibroida säätämällä ero suoraan. Muussa tapauksessa, jos kompensointi ja kaltevuus edellyttävät kalibrointia, voit tehdä sen muuttamalla arvoja rivillä #453, DallasTemperature.cpp / libraries / DallasTemperature -kansiossa.
- PH- ja DO -antureille voit kalibroida anturit mukana toimitetuilla liuoksilla. Sinun on käytettävä Atlas Scientificin mallikoodia ja noudatettava tämän tiedoston ohjeita.
- Noudata sivuja 26 ja 50 pH-anturin (https://goo.gl/d62Rqv) kalibrointia ja lämpötilan kompensointia varten sekä sivuja 7-8 ja 50 DO-anturin osalta (https://goo.gl/mA32mp). Lataa ensin Atlasin antama yleinen koodi uudelleen, avaa Serial Monitor ja näppäile oikea komento.
Vaihe 10: Liikaa johdotusta?
- Voit poistaa SD -kortin ja reaaliaikaisen kellomoduulin käyttämällä Dragino Yun Shield for Arduino -levyjä (https://goo.gl/J9PBTH). Koodi oli muutettava, jotta se toimisi Yun Shieldin kanssa. Tästä on hyvä aloittaa (https://goo.gl/c1x8Dm)
- Vielä liikaa johdotusta: Atlas Scientific teki oppaan EZO -piireilleen (https://goo.gl/dGyb12) ja juotetulle levylle (https://goo.gl/uWF51n). 18B20 -digitaalilämpötilan integrointi on täällä (https://goo.gl/ATcnGd). Sinun täytyy tuntea Raspbian (Debian Linux -versio) -komennot Raspberry Pi -laitteessa (https://goo.gl/549xvk)
Vaihe 11: Kuittaus:
Tämä on sivuprojektini tutkijatohtorini aikana, jonka aikana olen työskennellyt edistyksellisellä fotobioreaktorilla mikrolevien viljelemiseksi. Joten pidin välttämättömänä luottaa siihen, että osapuolet ovat antaneet edellytykset tämän toteuttamiseksi. Ensinnäkin apuraha, DE-EE0007093:”Atmospheric CO2 Enrichment and Delivery (ACED)”, Yhdysvaltain energiaministeriön, Energiatehokkuuden ja uusiutuvan energian virastolle suunnatuista leväbiopolttoaineista ja biotuotteista. Kiitän tohtori Bruce E. Rittmannia Biodesign Swette -keskuksen ympäristöbioteknologian keskuksessa Arizonan osavaltion yliopistossa siitä, että hän antoi minulle mahdollisuuden käsitellä elektroniikkaa ja Arduinoa. Minut koulutettiin ympäristötekniikkaan, lähinnä kemiaan, hieman mikrobiologiaan.