INHOUDSOPGAWE:
- Stap 1:
- Stap 2: Koop die onderdele hieronder:
- Stap 3: Bedrading
- Stap 4: Berei die PH, DO -stroombane, SD -kaart voor
- Stap 5: Berei sagteware voor
- Stap 6: Begin met kodering
- Stap 7: Resultate oor bedrading (kan verbeter word) en LCD -skerm
- Stap 8: Voer data in en maak 'n grafiek
- Stap 9: Kalibrasie
- Stap 10: Te veel bedrading?
- Stap 11: Erkenning:
Video: Hoe om 'n datalogger te maak vir die temperatuur, PH en opgeloste suurstof: 11 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Doelwitte:
- Maak 'n datalogger vir ≤ $ 500. Dit stoor data vir temperatuur, pH en DO met 'n tydstempel en met behulp van I2C -kommunikasie.
- Waarom I2C (geïntegreerde stroombaan)? 'N Mens kan soveel sensors in dieselfde lyn stapel, aangesien elkeen 'n unieke adres het.
Stap 1:
Stap 2: Koop die onderdele hieronder:
- Arduino MEGA 2560, $ 35,
- Kragadapter vir Arduino -bord, $ 5,98,
- LCD -module I2C (skerm), $ 8,99,
- Real-time Clock (RTC) breakout, $ 7.5,
- MicroSD kaart -uitbreekbord, $ 7,5,
- 4 GB SD -kaart, $ 6,98,
- Waterdigte DS18B20 digitale sensor, $ 9,95,
- pH-sonde + kits + standaard buffers, $ 149,15,
- DOEN sonde + kits + standaard buffers, $ 247,45,
- Broodbord, springkabel, $ 7,98,
- (Opsioneel) Spanningsisolator, $ 24,
Totaal: $ 510,48
* Sekere onderdele (soos die generiese bord) kan teen 'n laer prys by ander verkopers (eBay, Chinese verkoper) gekoop word. Dit word aanbeveel om pH- en DO -ondersoeke by Atlas Scientific te kry.
* 'N Multimeter word aanbeveel om geleiding en spanning na te gaan. Dit kos ongeveer $ 10-15 (https://goo.gl/iAMDJo)
Stap 3: Bedrading
- Gebruik jumper/DuPont -kabels om die onderdele aan te sluit soos in die skets hieronder getoon.
- Gebruik die multimeter om die geleiding na te gaan.
- Kontroleer die positiewe spanningsvoorsiening (VCC) en die aarding (GND) (dit is maklik om te verwar as u nie die stroombaan ken nie)
- Koppel die kragadapter aan en kyk na die kragaanwyser in elke deel. As u twyfel, gebruik die multimeter om die spanning tussen VCC en GND te bepaal (5V)
Stap 4: Berei die PH, DO -stroombane, SD -kaart voor
- Skakel oor na I2C vir pH- en DO -stroombane
- Die pH- en DO -uitbrekings word gestuur met seriële kommunikasie as die standaardmodus Transmit/Receive (TX/RX). Om die I2C-modus kloklyn (SCL) en datalyn (SDA) te gebruik, skakel modus deur (1): ontkoppel VCC-, TX-, RX-kabels, (2): spring TX na grond vir sonde, PGND (nie GND nie), (3) koppel VCC aan die stroombaan, (4): wag totdat LED van groen na blou verander. Meer besonderhede op bladsy 39 (Gegevensblad vir pH -stroombaan,
- Doen dieselfde stap met die DO -kring
- (as u weet hoe u die voorbeeldkode na die bord kan oplaai, kan u dit via die seriële monitor doen)
- Formateer SD -kaart in FAT -formaat
Stap 5: Berei sagteware voor
- Laai Arduino Integrated Development Environment (IDE) af,
- Installeer biblioteek op Arduino IDE:
- Die meeste van hulle het Arduino -sagteware. LiquidCrystal_I2C.h is beskikbaar via GitHub
- Installeer die bestuurder vir USB. Vir egte Arduino hoef u moontlik nie een te installeer nie. Vir 'n generiese een moet u die CH340 -bestuurder installeer (GitHub:
- Kyk of u die bord korrek verbind deur 'n knipperende LED -toets uit te voer
- Hoe om die MAC -adres van die 18B20 digitale temperatuur te vind. Gebruik die I2C -skandeerder -sjabloon in Arduino IDE met die sonde ingeprop. Elke toestel het 'n unieke MAC -adres, sodat u soveel temperatuurmeters met een gedeelde lyn (#9) kan gebruik. 18B20 gebruik 'n eendraad I2C, dus dit is 'n spesiale geval van I2C -kommunikasiemetode. Hieronder is 'n metode om MAC - Mediese Toegangsbeheer ("ROM" te vind as u die onderstaande prosedure uitvoer).
Stap 6: Begin met kodering
- Kopieer plak die onderstaande kode in Arduino IDE:
- Of laai die kode (.ino) af, en 'n nuwe venster verskyn in Arduino IDE.
/*
Verwysingsstudies:
1. Temperatuur, ORP, pH-logger:
2. Secured Digital (SD) Shield:
Hierdie kode sal data na die Arduino -seriële monitor stuur. Tik opdragte in die Arduino seriële monitor om die EZO pH -stroombaan in die I2C -modus te beheer.
Gewysig uit die tutoriale hierbo, meestal uit die I2C-kode deur Atlas-Scientific
Laaste opgedateer: 26 Julie 2017 deur Binh Nguyen
*/
#include // aktiveer I2C.
#define pH_address 99 // default I2C ID number for EZO pH Circuit.
#define DO_address 97 // standaard I2C ID -nommer vir EZO DO Circuit.
#sluit "RTClib.h" // Datum- en tydfunksies in met behulp van 'n DS1307 RTC wat via I2C en Wire lib gekoppel is
RTC_DS1307 rtc;
#include // Vir SD -biblioteek
#include // SD -kaart om data te stoor
const int chipSelect = 53; // moet uitvind vir Adafruit SD breakout //
// DO = MISO, DI = MOSI, op ATmega -pen#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // wysig logFileName om u eksperiment te identifiseer, byvoorbeeld PBR_01_02, datalog1
lang id = 1; // die ID -nommer om die logbestelling in te voer
#insluit
LiquidCrystal_I2C lcd (0x27, 20, 4);
#insluit
#insluit
# definieer ONE_WIRE_BUS 9 // definieer die pen # vir temperatuursonde
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperatuur sensors (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC -adres, uniek vir elke sonde
String dataString; // die hoofvariant om alle data te stoor
String dataString2; // 'n tydelike variant om temperatuur/pH/DO op te slaan om uit te druk
char computerdata [20]; // instruksie van Atlas Scientific: ons maak 'n 20 -byte karakterreeks om inkomende data van 'n rekenaar/mac/ander te hou.
byte ontvang_van_rekenaar = 0; // ons moet weet hoeveel karakters al ontvang is.
byte serial_event = 0; // 'n vlag om aan te dui wanneer data van die pc/mac/other ontvang is.
greepkode = 0; // gebruik om die I2C -reaksiekode te hou.
char pH_data [20]; // ons maak 'n 20 byte karakterreeks om inkomende data uit die pH -kring te hou.
byte in_char = 0; // gebruik as 'n buffer van 1 byte om in gebonde grepe vanaf die pH -kring op te slaan.
byte i = 0; // teller wat gebruik word vir ph_data -skikking.
int tyd_ = 1800; // word gebruik om die benodigde vertraging te verander, afhangende van die opdrag wat na die EZO Klas pH -stroombaan gestuur word.
float pH_dryf; // float var word gebruik om die vlotwaarde van die pH te hou.
char DO_data [20];
// vlot temp_C;
leemte -opstelling () // hardeware -inisialisering.
{
Serial.begin (9600); // aktiveer reekspoort.
Draad. begin (pH_adres); // aktiveer I2C -poort vir pH -sonde
Wire.begin (DO_adres);
lcd.init ();
lcd.begin (20, 4);
lcd.backlight ();
lcd.home ();
lcd.print ("Hallo PBR!");
lcd.setCursor (0, 1);
lcd.print ("Initialiseer …");
Serial.print ("RTC is …");
as (! rtc.begin ())
{
Serial.println ("RTC: Real-time klok … NIE GEVOND");
terwyl (1); // (Serial.println ("RTC: Real-time klok … GEVOND"));
}
Serial.println ("RUNNING");
Serial.print ("Real-time klok …");
as (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("WERKEND");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("SD -kaart …"); // kyk of die kaart teenwoordig is en geïnisialiseer kan word:
as (! SD.begin (chipSelect))
{Serial.println ("misluk"); // doen niks meer nie:
terugkeer;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println ("SD -kaart: OK");
Serial.print ("Log File:");
Serial.print (logFileName);
Serial.print ("…");
File logFile = SD.open (logFileName, FILE_WRITE); // maak die lêer oop. "datalog" en druk die opskrif
as (logFile)
{
logFile.println (",,,"); // dui aan dat daar data in die vorige lopie was
String header = "Datum -tyd, temperatuur (C), pH, DO";
logFile.println (kop);
logFile.close ();
Serial.println ("GEREED");
//Serial.println(dataString); // druk ook na die seriële poort:
}
anders {Serial.println ("fout tydens die opening van 'n logboek"); } // as die lêer nie oop is nie, verskyn 'n fout:
lcd.setCursor (0, 2);
lcd.print ("Log file:");
lcd.println (logFileName);
vertraging (1000);
sensors.begin ();
sensors.setResolution (ProbeP, 10); // 10 is die resolusie (10bit)
lcd.clear ();
id = 0;
}
leemte lus ()
{// die hooflus.
dataString = String (id);
dataString = String (',');
DateTime nou = rtc.now ();
dataString = String (nou.jaar (), DEC);
dataString += String ('/');
dataString += String (now.month (), DEC);
dataString += String ('/');
dataString += String (now.day (), DEC);
dataString += String ('');
dataString += String (nou.uur (), DEC);
dataString += String (':');
dataString += String (nou.minute (), DEC);
dataString += String (':');
dataString += String (nou.sekonde (), DEC);
lcd.home ();
lcd.print (dataString);
sensors.versoekTemperature ();
vertoningstemperatuur (sondeP);
Wire.begin Transmissie (pH_adres); // bel die kring met sy ID -nommer
Wire.write ('r'); // harde kode r om voortdurend te lees
Wire.endTransmission (); // beëindig die I2C -data -oordrag.
vertraging (tyd_); // wag die korrekte tyd totdat die kring die instruksie voltooi het.
Wire.requestFrom (pH_adres, 20, 1); // bel die kring en versoek 20 grepe (dit kan meer wees as wat ons nodig het)
terwyl (Wire.available ()) // daar grepe is om te ontvang
{
in_char = Wire.read (); // ontvang 'n greep.
if ((in_char> 31) && (in_char <127)) // kyk of die char bruikbaar is (drukbaar)
{
pH_data = in_char; // laai hierdie byte in ons skikking.
ek+= 1;
}
as (in_char == 0) // as ons sien dat ons 'n null -opdrag gestuur is.
{
ek = 0; // stel die teller i terug op 0.
Wire.endTransmission (); // beëindig die I2C -data -oordrag.
breek; // verlaat die while -lus.
}
}
reeks_gebeurtenis = 0; // stel die reeksgebeurtenisvlag terug.
dataString2 += ",";
dataString2 += String (pH_data);
Wire.beginTransmission (DO_adres); // bel die kring met sy ID -nommer
Wire.write ('r');
Wire.endTransmission (); // beëindig die I2C -data -oordrag
vertraging (tyd_); // wag die korrekte tyd totdat die kring die instruksie voltooi het
Wire.requestFrom (DO_adres, 20, 1); // bel die kring en versoek 20 grepe
terwyl (Wire.available ()) // daar grepe is om te ontvang.
{
in_char = Wire.read (); // ontvang 'n greep.
as ((in_char> 31) && (in_char <127)) // kyk of die char bruikbaar is (drukbaar), anders bevat die in_char 'n simbool aan die begin in die.txt -lêer
{DO_data = in_char; // laai hierdie byte in ons skikking
ek+= 1; // die toonbank vir die skikking -element aangaan
}
as (in_char == 0)
{// as ons sien dat ons 'n nulopdrag ontvang het
ek = 0; // stel die teller i terug op 0.
Wire.endTransmission (); // beëindig die I2C -data -oordrag.
breek; // verlaat die while -lus.
}
}
reeks_gebeurtenis = 0; // stel die reeksgebeurtenisvlag terug
pH_vloei = atof (pH_data);
dataString2 += ",";
dataString2 += String (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Temperatuur/ pH/ DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
Lêer dataFile = SD.open (logFileName, FILE_WRITE); // maak die lêer oop. Let daarop dat slegs een lêer op 'n slag oop kan wees, dus moet u hierdie lêer sluit voordat u 'n ander een oopmaak.
as (dataFile) // as die lêer beskikbaar is, skryf daaraan:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // druk ook na die seriële poort:
}
anders {Serial.println ("fout tydens die opening van die dataloglêer"); } // as die lêer nie oop is nie, verskyn 'n fout:
lcd.setCursor (0, 3);
lcd.print ("Hardloop (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // verhoog een ID volgende iterasie
dataString = "";
vertraging (300000); // vertraag 5 minute = 5*60*1000 ms
lcd.clear ();
} // eindig hooflus
leegte vertoning Temperatuur (DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC (deviceAddress);
if (tempC == -127.00) lcd.print ("Temperatuurfout");
anders dataString2 = String (tempC);
} // die kode eindig hier
- Kies die regte COM -poort via Arduino IDE onder Tools/Port
- Kies die regte Arduino -bord. Ek het Mega 2560 gebruik omdat dit meer interne geheue het. Arduino Nano of Uno werk goed met hierdie opstelling.
- Kontroleer en kodeer en laai kode op
Stap 7: Resultate oor bedrading (kan verbeter word) en LCD -skerm
- Let op: ek het die geraas van die DO-sonde na die pH-sonde teëgekom na 2-3 maande aaneenlopende werking. Volgens Atlas Scientific word 'n in-line spanningsisolator aanbeveel wanneer pH-, geleidingsondes saam werk. Meer besonderhede is op bladsy 9 (https://goo.gl/d62Rqv)
- Die aangetekende data (die eerste het ongedrukte karakters voor pH- en DO -data). Ek het na kode gefiltreer deur slegs drukbare karakters toe te laat.
Stap 8: Voer data in en maak 'n grafiek
- Voer data uit teks in onder die tabblad GEGEWENS (Excel 2013)
- Skei die data deur die komma (daarom is dit nuttig om komma's na elke data -invoer te hê)
- Skets die data. Elke gegewens hieronder het ongeveer 1700 punte. Die meetinterval is 5 minute (verstelbaar). Die minimum vir DO- en pH -stroombane om die data te lees, is 1,8 sekondes.
Stap 9: Kalibrasie
- Die digitale temperatuursensor (18B20) kan gekalibreer word deur die verskil direk aan die. Andersins, as die kompensasie en die helling kalibrasie vereis, kan u dit doen deur die waardes op reël #453, DallasTemperature.cpp in die map / libraries / DallasTemperature te verander.
- Vir pH- en DO -probes kan u die probes kalibreer met gepaardgaande oplossings. U moet die voorbeeldkode van Atlas Scientific gebruik en die instruksies in hierdie lêer volg.
- Volg bladsy 26 en 50 vir pH-sonde (https://goo.gl/d62Rqv) vir kalibrasie en temperatuurkompensasie, en ook bladsye 7-8 en 50 vir DO-sonde (https://goo.gl/mA32mp). Laai eers die generiese kode wat Atlas verskaf weer op, laai die Serial Monitor oop en voer die regte opdrag in.
Stap 10: Te veel bedrading?
- U kan die SD -kaart en die real -time klokmodule uitskakel deur Dragino Yun Shield te gebruik vir Arduino -borde (https://goo.gl/J9PBTH). Die kode moes gewysig word om met Yun Shield te werk. Hier is 'n goeie plek om te begin (https://goo.gl/c1x8Dm)
- Nog steeds te veel bedrading: die Atlas Scientific het 'n gids gemaak vir hul EZO -stroombane (https://goo.gl/dGyb12) en soldeerlose bord (https://goo.gl/uWF51n). Die integrasie van 18B20 digitale temperatuur is hier (https://goo.gl/ATcnGd). U moet vertroud wees met opdragte op Raspbian ('n weergawe van Debian Linux) wat op Raspberry Pi werk (https://goo.gl/549xvk)
Stap 11: Erkenning:
Dit is my byprojek tydens my postdoktorale navorsing wat ek aan 'n vooraf fotobioreaktor gewerk het om mikroalge te kweek. Ek het dus gedink dat dit nodig is om te erken dat die partye voorwaardes verskaf het om dit te laat gebeur. Eerstens die toekenning, DE-EE0007093: “Atmospheric CO2 Enrichment and Delivery (ACED)” van die Amerikaanse departement van energie, kantoor vir energie-doeltreffendheid en hernubare energie, gerig op algemene biobrandstof en bioprodukte. Ek bedank dr Bruce E. Rittmann by Biodesign Swette Center for Environmental Biotechnology, Arizona State University dat ek my die geleentheid gebied het om aan elektronika en Arduino te dink. Ek is opgelei in omgewingsingenieurswese, meestal chemie, 'n bietjie mikrobiologie.
Aanbeveel:
Hoe om opgeloste suurstof by die WiFi -hidroponika -meter te voeg: 6 stappe
Hoe om opgeloste suurstof by die WiFi -hidroponika -meter te voeg: hierdie tutoriaal sal demonstreer hoe u die EZO D.O -kring en sonde by die WiFi -hidroponika -kit van Atlas Scientific kan voeg. Daar word aanvaar dat die gebruiker die wifi -hidroponika -kit werk en nou gereed is om opgeloste suurstof by te voeg. WAARSKUWINGS: Atlas Sci
Musiekreaktiewe lig -- Hoe om 'n super -eenvoudige musiekreaktiewe lig te maak vir die maak van 'n tafelblad: 5 stappe (met foto's)
Musiekreaktiewe lig || Hoe om 'n super -eenvoudige musiekreaktiewe lig te maak om lessenaars te maak: Hallo ouens, vandag bou ons 'n baie interessante projek. Vandag gaan ons musiek reaktiewe lig bou. Die LED sal sy helderheid verander volgens die bas wat eintlik 'n lae-frekwensie klanksein is. Dit is baie eenvoudig om te bou. Ons sal
Hoe om die temperatuur van die bierfermentasie en die swaartekrag van u slimfoon te beheer: 4 stappe (met foto's)
Hoe om die temperatuur van die bierfermentasie en -gravitasie vanaf u slimfoon te beheer: as bier fermenteer, moet u die erns en temperatuur daarvan daagliks monitor. Dit is maklik om te vergeet om dit te doen, en as u weg is, is dit onmoontlik. Na 'n bietjie gegoogle het ek verskeie oplossings gevind vir outomatiese swaartekragmonitering (een, twee, drie). Een van die
Instruksies vir die maak van 'n vierstaaf -koppeling vir voetsteun in die middel: 9 stappe (met foto's)
Instruksies vir die maak van 'n viertrekstang vir voetsteun in die middel: middelwielaangedrewe rolstoele (PWC) het die afgelope paar jaar gewilder geword. As gevolg van die plasing van die voorste wiele, is die tradisionele voetstutte aan die sykant egter vervang deur 'n enkele voetsteun in die middel. Ongelukkig is die sentrum
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: 9 stappe (met foto's)
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: die middelste voetsteunhysers moet goed onder die sitplek geberg word en laer om te ontplooi. 'N Meganisme vir die onafhanklike werking van die opberging en ontplooiing van voetsteun is nie ingesluit by rolstoele op die mark nie, en PWC -gebruikers het die behoefte uitgespreek