Sisukord:
- Samm 1:
- Samm: ostke allpool olevad osad:
- Samm: juhtmestik
- Samm: valmistage ette PH, DO ahelad, SD -kaart
- Samm: valmistage tarkvara ette
- Samm: alustage kodeerimist
- Samm: juhtmestiku (saab parandada) ja LCD -ekraani tulemused
- 8. samm: andmete importimine ja graafiku koostamine
- 9. samm: kalibreerimine
- Samm: liiga palju juhtmeid?
- 11. samm: kinnitamine:
Video: Temperatuuri, PH ja lahustunud hapniku andmesalvesti tegemine: 11 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
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:
- Arduino MEGA 2560, 35 dollarit,
- Toiteadapter Arduino plaadile, 5,98 dollarit,
- LCD -moodul I2C (ekraan), 8,99 dollarit,
- Reaalajas kella (RTC) väljalülitamine, 7,5 dollarit,
- MicroSD -kaardi purunemislaud, 7,5 dollarit,
- 4 GB SD -kaart, 6,98 dollarit,
- Veekindel DS18B20 digitaalne andur, 9,95 dollarit,
- pH-sond + komplektid + standardpuhvrid, 149,15 dollarit,
- DO sond + komplektid + standardpuhvrid, 247,45 dollarit,
- Leivalaud, hüppajakaabel, 7,98 dollarit,
- (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
- 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
- Lülitage I2C -le pH ja DO ahelate jaoks
- 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,
- Tehke sama samm DO -ahelaga
- (kui teate, kuidas näidiskoodi tahvlile üles laadida, saate seda teha jadamonitori kaudu)
- Vormindage SD -kaart FAT -vormingusse
Samm: valmistage tarkvara ette
- Laadige alla Arduino integreeritud arenduskeskkond (IDE),
- Installige raamatukogu Arduino IDE -sse:
- Enamikul neist on Arduino tarkvara. LiquidCrystal_I2C.h on saadaval GitHubi kaudu
- Installige draiver USB jaoks. Ehtsa Arduino jaoks ei pruugi teil seda vaja installida. Üldise draiveri jaoks peate installima CH340 draiveri (GitHub:
- Kontrollige, kas ühendate plaadi õigesti, käivitades vilkuva LED -testi
- 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
- 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
- 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
- Andmete importimine vahekaardilt ANDMED tekstist (Excel 2013)
- Eraldage andmed komaga (seetõttu on komade lisamine pärast iga sisestamist kasulik)
- 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
- 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.
- PH- ja DO -sondide puhul saate sonde kalibreerida kaasasolevate lahustega. Peate kasutama Atlas Scientifici näidiskoodi ja järgima selle faili juhiseid.
- 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?
- 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)
- 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:
DIY vere hapniku mõõtur: 5 sammu (piltidega)
DIY verehapniku mõõtur: aastal 2020 seisis maailm silmitsi nähtamatu koletisega, kelle nimi oli Corona Virus. See viirus tegi inimesed väga haigeks & nõrk. Paljud inimesed kaotasid oma head. Esialgu oli suur probleem, probleem oli sobivate meditsiiniseadmete, näiteks
Lahustunud hapniku lisamine WiFi hüdropoonika arvestile: 6 sammu
Lahustunud hapniku lisamine WiFi hüdropoonika mõõturile: see õpetus näitab, kuidas lisada EZO D.O vooluahel ja sond Atlas Scientifici WiFi -hüdropoonika komplekti. Eeldatakse, et kasutajal on wifi hüdropoonika komplekt töökorras ja ta on nüüd valmis lahustunud hapnikku lisama. HOIATUSED: Atlas Sci
Laheda vana roboti uuesti tegemine: 10 sammu (piltidega)
Laheda vana roboti uuesti tegemine: tutvuge Arlaniga, lõbusa robotiga, kellel on palju isikupära. Ta elab 5. klassi loodusainete klassis. Ehitasin ta ümber kooli robootikameeskonna maskottiks, ta on ka klassiruumi abiline. Lastele meeldib näha tehnoloogiat tegevuses ja Arlan kõnnib
Kuidas teha niiskust ja temperatuuri reaalajas andmesalvesti Arduino UNO ja SD-kaardiga - DHT11 andmete koguja simulatsioon Proteuses: 5 sammu
Kuidas teha niiskust ja temperatuuri reaalajas andmesalvesti Arduino UNO ja SD-kaardiga | DHT11 andmelogija simulatsioon Proteuses: Sissejuhatus: tere, see on Liono Maker, siin on YouTube'i link. Teeme Arduinoga loomingulist projekti ja töötame sisseehitatud süsteemide kallal. Andmekoguja: Andmelogija (ka andmelogija või andmesalvesti) on elektrooniline seade, mis salvestab andmeid aja jooksul
Tasku suurusega vesiniku/hapniku generaator: 5 sammu
Tasku suurusega vesiniku/hapniku generaator: vesinikuga on väga lõbus mängida, kuid kõige tõhusamad generaatorid on suured. Tahtsin teha midagi, mis oleks väike ja suudaks toota vesinikku. See õpetus näitab teile, kuidas valmistada taskusuurust vesiniku/hapniku generaatorit. Kahjuks pole see