Sadržaj:
- Korak 1:
- Korak 2: Kupite dolje navedene dijelove:
- Korak 3: Ožičenje
- Korak 4: Pripremite PH, DO krugove, SD karticu
- Korak 5: Pripremite softver
- Korak 6: Pokrenite kodiranje
- Korak 7: Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
- Korak 8: Uvezite podatke i napravite grafikon
- Korak 9: Kalibracija
- Korak 10: Previše ožičenja?
- Korak 11: Potvrda:
Video: Kako napraviti zapisnik podataka o temperaturi, PH i otopljenom kisiku: 11 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Ciljevi:
- Napravite zapisnik podataka za ≤ 500 USD. Pohranjuje podatke o temperaturi, pH i DO s vremenskom oznakom i korištenjem I2C komunikacije.
- Zašto I2C (inter-integrirano kolo)? Može se složiti što više senzora u isti red s obzirom da svaki od njih ima jedinstvenu adresu.
Korak 1:
Korak 2: Kupite dolje navedene dijelove:
- Arduino MEGA 2560, 35 USD,
- Adapter za napajanje za Arduino ploču, 5,98 USD,
- LCD modul I2C (ekran), 8,99 USD,
- Proboj sata u realnom vremenu (RTC), 7,5 USD,
- Ploča za probijanje MicroSD kartice, 7,5 USD,
- SD kartica od 4 GB, 6,98 USD,
- Vodootporni digitalni senzor DS18B20, 9,95 USD,
- pH sonda + kompleti + standardni puferi, 149,15 USD, https://www.atlas-sci Scientific.com/product_pages/kit…
- DO sonda + kompleti + standardni puferi, 247,45 USD, https://www.atlas-sci Scientific.com/product_pages/kit…
- Oglasna ploča, prespojni kabel, 7,98 USD,
- (Opcionalno) Izolator napona, 24 USD, https://www.atlas-sci Scientific.com/product_pages/cir…
Ukupno: 510,48 USD
* Određeni dijelovi (poput opće ploče) mogli su se kupiti od drugih prodavača (eBay, kineski prodavač) po nižoj cijeni. pH i DO sonde se preporučuju za nabavku od Atlas Scientific.
* Preporučuje se multimetar za provjeru vodljivosti i napona. Košta oko 10-15 USD (https://goo.gl/iAMDJo)
Korak 3: Ožičenje
- Upotrijebite kratkospojnike/DuPont kabele za povezivanje dijelova kao što je prikazano na donjoj skici.
- Provjerite provodljivost pomoću multimetra.
- Provjerite napajanje pozitivnim naponom (VCC) i uzemljenje (GND) (lako je zbuniti ako niste upoznati sa strujnim krugom)
- Priključite adapter za napajanje i provjerite indikator napajanja na svakom dijelu. Ako ste u nedoumici, pomoću višemetara provjerite je li napon između VCC-a i GND-a (5V)
Korak 4: Pripremite PH, DO krugove, SD karticu
- Pređite na I2C za pH i DO krugove
- Proboji pH i DO isporučuju se sa serijskom komunikacijom kao zadanim načinom odašiljanja/prijema (TX/RX). Za korištenje I2C načina Satna linija (SCL) i Podatkovna linija (SDA), prebacite način rada (1): odspojite VCC, TX, RX kabele, (2): skočite TX na uzemljenje za sondu, PGND (ne GND), (3) uključite VCC u krug, (4): pričekajte da se LED promijeni iz zelene u plavu. Više detalja provjerite na stranici 39 (Tehnički list za pH krug,
- Učinite isti korak s DO krugom
- (ako znate kako prenijeti uzorak koda na ploču, to možete učiniti putem serijskog monitora)
- Formatirajte SD karticu u FAT format
Korak 5: Pripremite softver
- Preuzmite Arduino integrirano razvojno okruženje (IDE),
- Instalirajte biblioteku na Arduino IDE:
- Većina njih dolazi sa Arduino softverom. LiquidCrystal_I2C.h je dostupan putem GitHub -a
- Instalirajte upravljački program za USB. Za originalni Arduino možda ga nećete morati instalirati. Za općeniti, morate instalirati upravljački program CH340 (GitHub:
- Provjerite jeste li ispravno spojili ploču pokretanjem trepćućeg LED testa
- Kako pronaći MAC adresu digitalne temperature 18B20. Korištenje predloška skenera I2C u Arduino IDE -u sa uključenom sondom. Svaki uređaj ima jedinstvenu MAC adresu, tako da možete koristiti što više temperaturnih sondi s jednom zajedničkom linijom (#9). 18B20 koristi jednožilni I2C, pa je to poseban slučaj I2C komunikacijske metode. Ispod je jedan način za pronalaženje MAC -a - medicinska kontrola pristupa („ROM“kada pokrenete donju proceduru).
Korak 6: Pokrenite kodiranje
- Kopirajte zalijepite donji kod u Arduino IDE:
- Ili preuzmite kôd (.ino) i trebao bi se pojaviti novi prozor u Arduino IDE -u.
/*
Referentni vodiči:
1. Temperatura, ORP, pH zapisnik:
2. Zaštićeni digitalni (SD) štit:
Ovaj kôd će izlaziti podatke na Arduino serijski monitor. Upišite naredbe u Arduino serijski monitor za upravljanje EZO pH krugom u I2C načinu rada.
Izmijenjeno iz gore navedenih vodiča, uglavnom iz I2C koda od strane Atlas-Scientific
Zadnje ažuriranje: 26. jula 2017. od Binh Nguyen
*/
#include // omogući I2C.
#define pH_adrress 99 // zadani I2C ID broj za EZO pH krug.
#define DO_adrress 97 // zadani I2C ID broj za EZO DO krug.
#include "RTClib.h" // Funkcije datuma i vremena pomoću DS1307 RTC spojenog putem I2C i Wire lib
RTC_DS1307 rtc;
#include // Za biblioteku SD
#include // SD kartica za spremanje podataka
const int chipSelect = 53; // potrebno je shvatiti proboj Adafruit SD-a //
// DO = MISO, DI = MOSI, na ATmega pin#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // izmijenite logFileName da identificirate vaš eksperiment, za exampe PBR_01_02, datalog1
long id = 1; // id broj za unos naloga dnevnika
#include
LiquidCrystal_I2C LCD (0x27, 20, 4);
#include
#include
#define ONE_WIRE_BUS 9 // definirajte pin # za temperaturnu sondu
OneWire oneWire (ONE_WIRE_BUS);
Senzori temperature u Dallasu (& oneWire);
Sonda za adresu uređajaP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC adresa, jedinstvena za svaku sondu
String dataString; // glavna varijanta za spremanje svih podataka
String dataString2; // privremena varijanta za pohranu Temperature/pH/DO za ispis
char computerdata [20]; // instrukcija Atlas Scientific -a: pravimo niz znakova od 20 bajta za čuvanje dolaznih podataka sa računara/mac/drugog.
bajt primljen_od_računara = 0; // moramo znati koliko je znakova primljeno.
byte serial_event = 0; // zastava koja signalizira kada su podaci primljeni sa pc/mac/other.
bajt kod = 0; // koristi se za držanje I2C koda odgovora.
char pH_data [20]; // pravimo niz znakova od 20 bajta za čuvanje dolaznih podataka iz pH kola.
bajt in_char = 0; // koristi se kao međuspremnik od 1 bajta za pohranu u vezanim bajtovima iz pH kruga.
bajt i = 0; // brojač koji se koristi za niz ph_data.
int vrijeme_ = 1800; // koristi se za promjenu potrebnog kašnjenja ovisno o naredbi poslanoj u krug pH vrijednosti EZO klase.
plovak pH_float; // float var koji se koristi za držanje plutajuće vrijednosti pH.
char DO_data [20];
// float temp_C;
void setup () // hardverska inicijalizacija.
{
Serial.begin (9600); // omogućavanje serijskog porta.
Wire.begin (pH_adresa); // omogućuju I2C port za pH sondu
Wire.begin (DO_address);
lcd.init ();
lcd.begin (20, 4);
lcd.backlight ();
lcd.home ();
lcd.print ("Zdravo PBR!");
lcd.setCursor (0, 1);
lcd.print ("Inicijalizacija …");
Serial.print ("RTC je …");
if (! rtc.begin ())
{
Serial.println ("RTC: Sat u stvarnom vremenu … NIJE NAĐEN");
while (1); // (Serial.println ("RTC: Sat u stvarnom vremenu… NAĐEN"));
}
Serial.println ("RUNNING");
Serial.print ("Sat u stvarnom vremenu …");
if (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))));
}
Serial.println ("RADI");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("SD kartica …"); // vidjeti je li kartica prisutna i može li se inicijalizirati:
if (! SD.begin (chipSelect))
{Serial.println ("Nije uspjelo"); // ne radite ništa više:
return;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println ("SD kartica: OK");
Serial.print ("Datoteka dnevnika:");
Serial.print (logFileName);
Serial.print ("…");
Datoteka logFile = SD.open (logFileName, FILE_WRITE); // otvaranje datoteke. "datalog" i ispišite zaglavlje
if (logFile)
{
logFile.println (",,,"); // ukazuje na to da je bilo podataka u prethodnom izvođenju
String header = "Datum -Vrijeme, Temp (C), pH, DO";
logFile.println (zaglavlje);
logFile.close ();
Serial.println ("READY");
//Serial.println(dataString); // štampa i na serijski port:
}
else {Serial.println ("greška pri otvaranju dnevnika podataka"); } // ako datoteka nije otvorena, pojaviće se greška:
lcd.setCursor (0, 2);
lcd.print ("Datoteka dnevnika:");
lcd.println (logFileName);
kašnjenje (1000);
sensors.begin ();
sensors.setResolution (ProbeP, 10); // 10 je rezolucija (10bit)
lcd.clear ();
id = 0;
}
void loop ()
{// glavna petlja.
dataString = String (id);
dataString = String (',');
DateTime now = rtc.now ();
dataString = String (sada.godina (), DEC);
dataString += String ('/');
dataString += String (now.month (), DEC);
dataString += String ('/');
dataString += String (now.day (), DEC);
dataString += String ('');
dataString += String (now.hour (), DEC);
dataString += String (':');
dataString += String (now.minute (), DEC);
dataString += String (':');
dataString += String (now.second (), DEC);
lcd.home ();
lcd.print (dataString);
sensors.requestTemperatures ();
displayTemperature (ProbeP);
Wire.beginTransmission (pH_adresa); // poziva kolo prema njegovom ID broju
Wire.write ('r'); // tvrdi kod r za neprekidno čitanje
Wire.endTransmission (); // završavamo prijenos podataka I2C.
kašnjenje (vrijeme_); // čekati ispravnu količinu vremena da kolo dovrši svoju instrukciju.
Wire.requestFrom (pH_adresa, 20, 1); // pozovite kolo i zatražite 20 bajtova (ovo može biti više nego što nam treba)
while (Wire.available ()) // ima li bajtova za primanje
{
in_char = Wire.read (); // primimo bajt.
if ((in_char> 31) && (in_char <127)) // provjerite je li char upotrebljiv (za ispis)
{
pH_podaci = in_char; // učitavamo ovaj bajt u naš niz.
i+= 1;
}
if (in_char == 0) // ako vidimo da nam je poslana null naredba.
{
i = 0; // resetira brojač i na 0.
Wire.endTransmission (); // završavamo prijenos podataka I2C.
break; // izlaz iz while petlje.
}
}
serial_event = 0; // resetiranje zastavice serijskog događaja.
dataString2 += ",";
dataString2 += String (pH_data);
Wire.beginTransmission (DO_address); // poziva kolo prema njegovom ID broju
Wire.write ('r');
Wire.endTransmission (); // završavamo prijenos podataka I2C
kašnjenje (vrijeme_); // čekati ispravnu količinu vremena da kolo dovrši svoju instrukciju
Wire.requestFrom (DO_address, 20, 1); // poziva kolo i traži 20 bajtova
dok (Wire.available ()) // ima bajtova za prijem.
{
in_char = Wire.read (); // primimo bajt.
if ((in_char> 31) && (in_char <127)) // provjerite je li char upotrebljiv (ispisiv), inače in_char sadrži simbol na početku u.txt datoteci
{DO_data = in_char; // učitavamo ovaj bajt u naš niz
i+= 1; // unositi brojač za element niza
}
ako (in_char == 0)
{// ako vidimo da smo dobili null naredbu
i = 0; // resetira brojač i na 0.
Wire.endTransmission (); // završavamo prijenos podataka I2C.
break; // izlaz iz while petlje.
}
}
serial_event = 0; // resetiranje zastavice serijskog događaja
pH_plovak = atof (pH_podaci);
dataString2 += ",";
dataString2 += String (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Temperatura/ pH/ DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
Datoteka dataFile = SD.open (logFileName, FILE_WRITE); // otvaranje datoteke. imajte na umu da samo jedna datoteka može biti otvorena odjednom, pa morate zatvoriti ovu prije otvaranja druge.
if (dataFile) // ako je datoteka dostupna, napišite joj:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // štampa i na serijski port:
}
else {Serial.println ("greška pri otvaranju datoteke sa podacima"); } // ako datoteka nije otvorena, pojaviće se greška:
lcd.setCursor (0, 3);
lcd.print ("Trčanje (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // povećati sljedeću iteraciju za jedan ID
dataString = "";
kašnjenje (300000); // kašnjenje 5 minuta = 5*60*1000 ms
lcd.clear ();
} // završava glavnu petlju
void displayTemperature (DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC (deviceAddress);
if (tempC == -127.00) lcd.print ("Greška temperature");
else dataString2 = String (tempC);
} // kod završava ovdje
- Odaberite odgovarajući COM port preko Arduino IDE -a pod Tools/Port
- Odaberite pravu Arduino ploču. Koristio sam Mega 2560 jer ima više interne memorije. Arduino Nano ili Uno dobro funkcioniraju s ovom postavkom.
- Provjerite, kodirajte i učitajte kôd
Korak 7: Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
- Napomena: Naišao sam na buku od DO sonde do pH sonde nakon 2-3 mjeseca neprekidnog rada. Prema Atlas Scientific-u, linijski izolator napona preporučuje se kada pH, sonde za provodljivost rade zajedno. Više detalja je na stranici 9 (https://goo.gl/d62Rqv)
- Zabilježeni podaci (prvi ima neispisane znakove prije pH i DO podataka). Filtrirao sam u kôd dopuštajući samo znakove za štampanje.
Korak 8: Uvezite podatke i napravite grafikon
- Uvoz podataka s kartice Text Under DATA (Excel 2013)
- Odvojite podatke zarezom (zato je korisno imati zareze nakon svakog unosa podataka)
- Iscrtajte podatke. Svaki podatak u nastavku ima oko 1700 bodova. Interval mjerenja je 5 minuta (podesivo). Minimum za DO i pH krugove za očitavanje podataka je 1,8 sekundi.
Korak 9: Kalibracija
- Digitalni senzor temperature (18B20) može se kalibrirati podešavanjem razlike direktno na. U suprotnom, ako su kompenzacija i nagib potrebni kalibracija, to možete učiniti promjenom vrijednosti na retku #453, DallasTemperature.cpp u mapi / libraries / DallasTemperature.
- Za pH i DO sonde, možete kalibrirati sonde s pripadajućim otopinama. Morate koristiti uzorak koda Atlas Scientific -a i slijediti upute u ovoj datoteci.
- Slijedite stranice 26 i 50 za pH sondu (https://goo.gl/d62Rqv) za kalibraciju i temperaturnu kompenzaciju, kao i stranice 7-8 i 50 za DO sondu (https://goo.gl/mA32mp). Prvo, ponovo učitajte generički kod koji nudi Atlas, otvorite Serial Monitor i unesite odgovarajuću naredbu.
Korak 10: Previše ožičenja?
- SD karticu i modul sata u stvarnom vremenu možete ukloniti pomoću Dragino Yun Shielda za Arduino ploče (https://goo.gl/J9PBTH). Kôd je trebalo izmijeniti za rad s Yun Shieldom. Evo dobrog mjesta za početak (https://goo.gl/c1x8Dm)
- I dalje ima previše ožičenja: Atlas Scientific je napravio vodič za svoja EZO kola (https://goo.gl/dGyb12) i ploču bez lemljenja (https://goo.gl/uWF51n). Ovdje je integrirana 18B20 digitalna temperatura (https://goo.gl/ATcnGd). Morate biti upoznati s naredbama na Raspbian -u (verzija Debian Linuxa) koje se izvode na Raspberry Pi -u (https://goo.gl/549xvk)
Korak 11: Potvrda:
Ovo je moj sporedni projekt tokom mog postdoktorskog istraživanja na kojem sam radio na naprednom fotobioreaktoru za uzgoj mikroalgi. Stoga sam smatrao da je potrebno priznati da su strane osigurale uslove da se to dogodi. Prvo, grant, DE-EE0007093: “Obogaćivanje i isporuka CO2 u atmosferi (ACED)”, iz Ministarstva energetike SAD-a, Ureda za energetsku efikasnost i obnovljive izvore energije iz biogoriva i bioproizvoda iz algi. Zahvaljujem dr. Bruceu E. Rittmannu iz Biodesign Swette Centra za ekološku biotehnologiju, Državni univerzitet u Arizoni što mi je pružio priliku da se pozabavim elektronikom i Arduinom. Školovao sam se za inženjerstvo zaštite okoliša, uglavnom kemiju, malo za mikrobiologiju.
Preporučuje se:
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD-karticom - DHT11 Zapisnik podataka Simulacija u Proteusu: 5 koraka
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD-karticom | DHT11 Simulator zapisnika podataka u Proteusu: Uvod: zdravo, ovdje Liono Maker, ovdje je YouTube veza. Radimo na kreativnom projektu s Arduinom i radimo na ugrađenim sistemima. Zapisnik podataka: Zapisnik podataka (također zapisnik podataka ili snimač podataka) je elektronički uređaj koji bilježi podatke tokom vremena sa
DIY GPS zapisnik podataka za vašu sljedeću vožnju/pješačku stazu: 11 koraka (sa slikama)
DIY GPS zapisnik podataka za sljedeću vožnju/pješačku stazu: Ovo je GPS zapisnik podataka koji možete koristiti u više svrha, recimo ako želite prijaviti svoju dugu vožnju koju ste uzeli tokom vikenda kako biste provjerili boje jeseni. ili imate omiljenu stazu koju svake jeseni posjećujete i
Zapisnik podataka o praćenju izmjenične struje: 9 koraka (sa slikama)
AC Current Logger Data Logger: Zdravo svima, dobrodošli u moju prvu instrukciju! Po danu sam inženjer za testiranje u kompaniji koja isporučuje industrijsku opremu za grijanje, noću sam strastveni hobist za tehnologiju i DIY'er. Dio mog rada uključuje ispitivanje performansi grijača, o
Internetski zapisnik o temperaturi i vlažnosti sa zaslonom pomoću ESP8266: 3 koraka
Internet Logger o temperaturi i vlažnosti sa ekranom koristeći ESP8266: Htio sam podijeliti mali projekat koji će vam se svidjeti. To je mali, izdržljivi internet loger za prikaz temperature i vlažnosti sa zaslonom na Internetu. Ovo se prijavljuje na emoncms.org i opcionalno, bilo lokalno na Raspberry PI ili vaš vlastiti emoncm
Zapisnik podataka o temperaturi i vlažnosti od Arduina do Android telefona s modulom SD kartice putem Bluetootha: 5 koraka
Zapisnik podataka o temperaturi i vlažnosti od Arduina do Android telefona sa modulom SD kartice putem Bluetootha: Pozdrav svima, ovo je moj prvi instruktor ikada, nadam se da ću pomoći zajednici proizvođača jer sam od toga imao koristi. Često koristimo senzore u svojim projektima, ali pronalazimo način da prikupimo podatke, pohranimo ih i prenesemo odmah Telefoni ili drugi uređaji