Përmbajtje:
- Hapi 1:
- Hapi 2: Blini Pjesët më poshtë:
- Hapi 3: Instalimet elektrike
- Hapi 4: Përgatitni qarqet PH, DO, SD Card
- Hapi 5: Përgatitni Softuerin
- Hapi 6: Filloni Kodimin
- Hapi 7: Rezultatet në instalime elektrike (mund të përmirësohen) dhe ekran LCD
- Hapi 8: Importoni të dhëna dhe bëni një grafik
- Hapi 9: Kalibrimi
- Hapi 10: Shumë tela?
- Hapi 11: Mirënjohje:
Video: Si të bëni një regjistrues të të dhënave për temperaturën, PH dhe oksigjenin e tretur: 11 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:24
Objektivat:
- Bëni një regjistrues të të dhënave për 500 dollarë. Ai ruan të dhënat për temperaturën, pH dhe DO me një vulë kohore dhe duke përdorur komunikimin I2C.
- Pse I2C (Qarku i Integruar)? Dikush mund të grumbullojë sa më shumë sensorë në të njëjtën linjë duke pasur parasysh që secili prej tyre ka një adresë unike.
Hapi 1:
Hapi 2: Blini Pjesët më poshtë:
- Arduino MEGA 2560, 35 dollarë,
- Përshtatës energjie për bordin Arduino, 5.98 dollarë,
- Moduli LCD I2C (ekran), 8.99 dollarë,
- Ndarja e orës në kohë reale (RTC), 7.5 dollarë,
- Bordi i shpërthimit të kartës MicroSD, 7.5 dollarë,
- Kartë SD 4 GB, 6.98 dollarë,
- Sensor dixhital i papërshkueshëm nga uji DS18B20, 9.95 dollarë,
- Sonda e pH + Kits + Tamponët standardë, 149,15 dollarë,
- Bëj sondën + Kits + Tamponët standardë, 247.45 dollarë,
- Breadboard, kabllo kërcyese, 7.98 dollarë,
- (Opsionale) Izolatori i Tensionit, 24 dollarë,
Gjithsej: 510.48 dollarë
* Disa pjesë (si bordi i përgjithshëm) mund të blihen nga shitësit e tjerë (eBay, shitës kinez) për një çmim më të ulët. Rekomandohen sondat e pH dhe DO për t'i marrë ato nga Atlas Scientific.
* Rekomandohet një multimetër për të kontrolluar përçueshmërinë dhe tensionin. Kushton rreth 10-15 dollarë (https://goo.gl/iAMDJo)
Hapi 3: Instalimet elektrike
- Përdorni kabllot bluzë/DuPont për të lidhur pjesët siç tregohet në skicën më poshtë.
- Përdorni multimetrin për të kontrolluar përçueshmërinë.
- Kontrolloni Furnizimin me Tension Pozitiv (VCC) dhe Ground (GND) (është e lehtë të ngatërroni nëse nuk jeni të njohur me qarkun)
- Lidhni përshtatësin e energjisë dhe kontrolloni treguesin e energjisë në secilën pjesë. Kur jeni në dyshim, përdorni multimatrin për të kontrolluar tensionin midis VCC dhe GND të jetë (5V)
Hapi 4: Përgatitni qarqet PH, DO, SD Card
- Kaloni në I2C për qarqet pH dhe DO
- Ndarjet e pH dhe DO dërgohen me komunikim serial si mënyra e paracaktuar Transmetimi/Marrja (TX/RX). Për të përdorur linjën e orës të modalitetit I2C (SCL) dhe linjën e të dhënave (SDA), ndërroni modalitetin me (1): hiqni kabllot VCC, TX, RX, (2): hidheni TX në Ground për Probe, PGND (jo GND), (3) lidhni VCC në qark, (4): prisni që LED të ndryshojë nga jeshile në blu. Më shumë detaje kontrolloni në faqen 39 (Fleta e të dhënave për qarkun e pH,
- Bëni të njëjtin hap me qarkun DO
- (nëse e dini se si të ngarkoni kodin shembull në tabelë, mund ta bëni përmes monitorit serial)
- Formatoni kartën SD në formatin FAT
Hapi 5: Përgatitni Softuerin
- Shkarkoni Arduino Integrated Development Environment (IDE),
- Instaloni bibliotekën në Arduino IDE:
- Shumica e tyre vijnë me softuer Arduino. LiquidCrystal_I2C.h është në dispozicion përmes GitHub
- Instaloni drejtuesin për USB. Për Arduino të vërtetë, mund të mos keni nevojë të instaloni një të tillë. Për një gjenerik, duhet të instaloni drejtuesin CH340 (GitHub:
- Kontrolloni nëse e lidhni bordin si duhet duke kryer një provë LED që pulson
- Si të gjeni adresën MAC të temperaturës dixhitale 18B20. Përdorimi i modelit të skanerit I2C në Arduino IDE me sondën e lidhur. Çdo pajisje ka një adresë MAC unike, kështu që ju mund të përdorni sa më shumë sonda të temperaturës me një linjë të përbashkët (#9). 18B20 përdor një tel I2C, kështu që është një rast i veçantë i metodës së komunikimit I2C. Më poshtë është një metodë për të gjetur MAC - Kontrolli i Qasjes Mjekësore ("ROM" kur kryeni procedurën më poshtë).
Hapi 6: Filloni Kodimin
- Kopjoni ngjisni kodin më poshtë në Arduino IDE:
- Ose shkarkoni kodin (.ino) dhe një dritare e re duhet të shfaqet në Arduino IDE.
/*
Udhëzime referimi:
1. Temperatura, ORP, loger pH:
2. Mburoja e Siguruar Dixhitale (SD):
Ky kod do të nxjerrë të dhëna në monitorin serik Arduino. Shkruani komanda në monitorin serik Arduino për të kontrolluar qarkun EZO pH në modalitetin I2C.
Modifikuar nga mësimet e referuara më sipër, kryesisht nga kodi I2C nga Atlas-Scientific
Përditësuar së fundmi: 26 korrik 2017 nga Binh Nguyen
*/
#include // aktivizoni I2C.
#përcaktoni pH_adresën 99 // numri i paracaktuar I2C ID për EZO pH Circuit.
#define DO_address 97 // numri i paracaktuar I2C ID për EZO DO Circuit.
#përfshi "RTClib.h" // Funksionet e datës dhe orës duke përdorur një RTC DS1307 të lidhur nëpërmjet I2C dhe Wire lib
RTC_DS1307 rtc;
#include // Për librarinë SD
#include // Kartë SD për të ruajtur të dhënat
const int chipSelect = 53; // duhet të kuptosh për shpërthimin e Adafruit SD //
// DO = MISO, DI = MOSI, në kunjin ATmega#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // modifikoni logFileName për të identifikuar eksperimentin tuaj, për testin PBR_01_02, datalog1
id e gjatë = 1; // numri id për të futur rendin e regjistrit
#përfshi
LiquidCrystal_I2C LCD (0x27, 20, 4);
#përfshi
#përfshi
#define ONE_WIRE_BUS 9 // përcaktoni pin # për sondën e temperaturës
OneWire oneWire (ONE_WIRE_BUS);
Sensorë të temperaturës Dallas (& oneWire);
Sonda e PajisjesPd = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // Adresa MAC, unike për secilën sondë
String dataString; // varianti kryesor për të ruajtur të gjitha të dhënat
String dataString2; // një variant i përkohshëm për të ruajtur Temperatura/pH/DO për printim
të dhëna kompjuterike char [20]; // udhëzim nga Atlas Scientific: ne bëjmë një grup 20 bajtësh të karakterit për të mbajtur të dhënat hyrëse nga një kompjuter/mac/tjetër.
bajt i marrë_ nga kompjuteri = 0; // duhet të dimë se sa karaktere janë marrë.
byte serial_event = 0; // një flamur për të sinjalizuar kur të dhënat janë marrë nga pc/mac/other.
kodi i bajtit = 0; // përdoret për të mbajtur kodin e përgjigjes I2C.
karaktere pH_data [20]; // ne bëjmë një grup 20 bajtësh të karakterit për të mbajtur të dhënat hyrëse nga qarku i pH.
byte in_char = 0; // përdoret si një tampon 1 bajt për të ruajtur në bajtë të lidhur nga Qarku i pH.
bajt i = 0; // numëruesi i përdorur për grupin ph_data.
koha int_ = 1800; // përdoret për të ndryshuar vonesën e nevojshme në varësi të komandës së dërguar në qarkun pH të klasës EZO.
noton pH_float; // float var përdoret për të mbajtur vlerën e notit të pH.
char DO_data [20];
// noton temp_C;
void setup () // inicimi i harduerit.
{
Serial.filloj (9600); // aktivizoni portin serik.
Wire.fill (pH_adresa); // aktivizoni portën I2C për sondën e pH
Wire.begin (DO_adresa);
lcd.init ();
lcd.filloni (20, 4);
lcd. backlight ();
LCD. shtëpi ();
lcd.print ("Përshëndetje PBR!");
lcd.setCursor (0, 1);
lcd.print ("Fillimi…");
Serial.print ("RTC është …");
nëse (! rtc.filloj ())
{
Serial.println ("RTC: Ora në kohë reale … NUK GJETUR");
ndërsa (1); // (Serial.println ("RTC: Ora në kohë reale … GJETUR"));
}
Serial.println ("RUNNING");
Serial.print ("Ora në kohë reale …");
nëse (! rtc.isrunning ())
{rtc.adjust (DataTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("PUNA");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("Kartë SD …"); // shikoni nëse karta është e pranishme dhe mund të inicializohet:
nëse (! SD.begin (chipSelect))
{Serial.println ("Dështoi"); // mos bëni asgjë më shumë:
kthim;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println ("Karta SD: OK");
Serial.print ("Dosja e regjistrit:");
Serial.print (logFileName);
Serial.print ("…");
File logFile = SD.open (logFileName, FILE_WRITE); // hap skedarin. "datalog" dhe shtypni kokën
nëse (logFile)
{
logFile.println (",,,"); // tregoni se kishte të dhëna në ekzekutimin e mëparshëm
Titulli i vargut = "Data -Koha, Temp (C), pH, DO";
logFile.println (kokë);
logFile.close ();
Serial.println ("GATI");
//Serial.println(dataString); // printoni edhe në portin serik:
}
else {Serial.println ("gabim në hapjen e datalogut"); } // nëse skedari nuk është i hapur, shfaq një gabim:
lcd.setCursor (0, 2);
lcd.print ("Regjistro skedarin:");
lcd.println (logFileName);
vonesa (1000);
sensorë.fillojnë ();
sensorë.setResolution (ProbeP, 10); // 10 është rezolucioni (10bit)
lcd.qartë ();
id = 0;
}
lak void ()
{// lak kryesor.
dataString = String (id);
dataString = String (',');
DataTime tani = rtc.now ();
dataString = String (tani.viti (), DEC);
dataString += String ('/');
dataString += String (tani. muaj (), DEC);
dataString += String ('/');
dataString += String (tani.day (), DEC);
dataString += String ('');
dataString += String (tani. orë (), DEC);
dataString += String (':');
dataString += String (tani.minute (), DEC);
dataString += String (':');
dataString += String (tani. e dyta (), DEC);
LCD. shtëpi ();
lcd.print (dataString);
sensorë.kërkojmëTemperaturat ();
Temperatura e ekranit (ProbeP);
Wire.beginTransmission (pH_adresa); // telefononi qarkun me numrin e tij të identifikimit
Wire.write ('r'); // kodi i fortë r për të lexuar vazhdimisht
Wire.endTransmission (); // përfundoni transmetimin e të dhënave I2C.
vonesa (koha_); // prisni kohën e duhur që qarku të përfundojë udhëzimin e tij.
Tela. KërkohetNga (adresa e pH, 20, 1); // telefononi qarkun dhe kërkoni 20 bajt (kjo mund të jetë më shumë seç kemi nevojë)
ndërsa (Wire.available ()) // a ka byte për tu marrë
{
in_char = Wire.read (); // merrni një bajt.
nëse ((në_char> 31) && (në_char <127)) // kontrolloni nëse shenja është e përdorshme (e printueshme)
{
pH_data = në_char; // ngarkoni këtë bajt në grupin tonë.
i+= 1;
}
nëse (in_char == 0) // nëse shohim se na është dërguar një komandë null.
{
i = 0; // rivendosni numëruesin i në 0.
Wire.endTransmission (); // përfundoni transmetimin e të dhënave I2C.
pushim; // dilni nga laku while.
}
}
ngjarja serike = 0; // rivendos flamurin e ngjarjes serike.
dataString2 += ",";
dataString2 += String (pH_data);
Wire.beginTransmission (DO_adresa); // telefononi qarkun me numrin e tij të identifikimit
Wire.write ('r');
Wire.endTransmission (); // përfundoni transmetimin e të dhënave I2C
vonesa (koha_); // prisni kohën e duhur që qarku të përfundojë udhëzimin e tij
Tela. Kërko Nga (DO_adresa, 20, 1); // telefononi qarkun dhe kërkoni 20 byte
ndërsa (Wire.available ()) // a ka byte për tu marrë.
{
in_char = Wire.read (); // merrni një bajt.
if ((in_char> 31) && (in_char <127)) // kontrolloni nëse char është i përdorshëm (i printueshëm), përndryshe in_char përmban një simbol në fillim në skedarin.txt
{DO_data = në_char; // ngarkoni këtë bajt në grupin tonë
i+= 1; // shkaktoj numëruesin për elementin e grupit
}
nëse (in_char == 0)
{// nëse shohim se na është dërguar një komandë null
i = 0; // rivendosni numëruesin i në 0.
Wire.endTransmission (); // përfundoni transmetimin e të dhënave I2C.
pushim; // dilni nga laku while.
}
}
ngjarja serike = 0; // rivendos flamurin e ngjarjes serike
pH_float = atof (pH_data);
dataString2 += ",";
dataString2 += String (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Temperatura/ pH/ DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
File dataFile = SD.open (logFileName, FILE_WRITE); // hap skedarin. vini re se vetëm një skedar mund të jetë i hapur në të njëjtën kohë, kështu që ju duhet ta mbyllni këtë para se të hapni një tjetër.
nëse (dataFile) // nëse skedari është i disponueshëm, shkruaji atij:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // printoni edhe në portin serik:
}
else {Serial.println ("Gabim në hapjen e skedarit të datalogut"); } // nëse skedari nuk është i hapur, shfaq një gabim:
lcd.setCursor (0, 3);
lcd.print ("Vrapimi (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // rrisni një ID përsëritje tjetër
dataString = "";
vonesë (300000); // vono 5 minuta = 5*60*1000 ms
lcd.qartë ();
} // përfundoni lakin kryesor
ekran i pavlefshëm Temperatura (DeviceAddress deviceAddress)
{
float tempC = sensorë.getTempC (pajisja Adresa);
nëse (tempC == -127.00) lcd.print ("Gabim i temperaturës");
tjetër dataString2 = String (tempC);
} // kodi përfundon këtu
- Zgjidhni portën e duhur COM përmes Arduino IDE nën Tools/Port
- Zgjidhni bordin e duhur Arduino. Kam përdorur Mega 2560 sepse ka më shumë memorie të brendshme. Arduino Nano ose Uno funksionon mirë me këtë konfigurim.
- Kontrolloni dhe kodoni dhe ngarkoni kodin
Hapi 7: Rezultatet në instalime elektrike (mund të përmirësohen) dhe ekran LCD
- Njoftim: Kam hasur në zhurmën nga sonda DO në sondën e pH pas 2-3 muajsh operimi të vazhdueshëm. Sipas Atlas Scientific, një izolator i tensionit në linjë rekomandohet kur pH, sondat e përçueshmërisë veprojnë së bashku. Më shumë detaje janë në faqen 9 (https://goo.gl/d62Rqv)
- Të dhënat e regjistruara (e para ka karaktere të pa shtypura para të dhënave të pH dhe DO). U filtrova në kod duke lejuar vetëm karaktere të printueshme.
Hapi 8: Importoni të dhëna dhe bëni një grafik
- Importoni të dhëna nga teksti në skedën DATA (Excel 2013)
- Ndani të dhënat me presje (kjo është arsyeja pse të kesh presje pas çdo futjeje të të dhënave është e dobishme)
- Hartoni të dhënat. Çdo e dhënë më poshtë ka rreth 1700 pikë. Intervali i matjes është 5 minuta (i rregullueshëm). Minimumi për qarqet DO dhe pH për të lexuar të dhënat është 1.8 sekonda.
Hapi 9: Kalibrimi
- Sensori dixhital i temperaturës (18B20) mund të kalibrohet duke rregulluar ndryshimin direkt në. Përndryshe, nëse kompensimi dhe pjerrësia kërkojnë kalibrim, mund ta bëni duke ndryshuar vlerat në linjën #453, DallasTemperature.cpp në dosjen / libraries / DallasTemperature.
- Për sondat e pH dhe DO, ju mund të kalibroni sondat me zgjidhjet shoqëruese. Ju duhet të përdorni kodin shembull nga Atlas Scientific dhe të ndiqni udhëzimet nga ky skedar.
- Ju lutemi ndiqni faqet 26 dhe 50 për sondën e pH (https://goo.gl/d62Rqv) për kalibrimin dhe kompensimin e temperaturës, dhe gjithashtu faqet, 7-8 dhe 50 për sondën DO (https://goo.gl/mA32mp). Së pari, ju lutemi ngarkoni përsëri kodin e përgjithshëm të siguruar nga Atlas, hapni Monitorin Serial dhe futni një komandë të duhur.
Hapi 10: Shumë tela?
- Ju mund të eliminoni kartën SD dhe modulin e orës në kohë reale duke përdorur Dragino Yun Shield për bordet Arduino (https://goo.gl/J9PBTH). Kodi duhej të modifikohej për të punuar me Yun Shield. Këtu është një vend i mirë për të filluar (https://goo.gl/c1x8Dm)
- Ende shumë instalime elektrike: Atlas Scientific bëri një udhëzues për qarqet e tyre EZO (https://goo.gl/dGyb12) dhe bordin pa saldim (https://goo.gl/uWF51n). Integrimi i temperaturës dixhitale 18B20 është këtu (https://goo.gl/ATcnGd). Duhet të njiheni me komandat në Raspbian (një version i Debian Linux) që funksionojnë në Raspberry Pi (https://goo.gl/549xvk)
Hapi 11: Mirënjohje:
Ky është projekti im anësor gjatë kërkimit tim postdoktoral të cilin e kam punuar në një fotobioreaktor të avancuar për të kultivuar mikroalgat. Kështu që unë mendova se ishte e nevojshme të merreshin parasysh që palët kanë siguruar kushtet për ta bërë këtë të ndodhë. Së pari, granti, DE-EE0007093: "Pasurimi dhe dorëzimi i CO2 atmosferik (ACED)", nga Departamenti Amerikan i Energjisë, Zyra e Efiçiencës së Energjisë dhe Energjisë së Rinovueshme të Biokarburanteve dhe Bioprodukteve të Algatit të Synuar. Falënderoj Dr. Bruce E. Rittmann në Biodesign Swette Center për Bioteknologjinë e Mjedisit, Universiteti Shtetëror i Arizonës që më dha mundësinë të punoj me pajisje elektronike dhe Arduino. Unë jam trajnuar në inxhinieri mjedisore, kryesisht kimi, pak mikrobiologji.
Recommended:
Si të bëni lagështi dhe temperaturë Regjistruese të të dhënave në kohë reale me Arduino UNO dhe SD-Card - Simulimi DHT11 Regjistruesi i të dhënave në Proteus: 5 hapa
Si të bëni lagështi dhe temperaturë Regjistruese të të dhënave në kohë reale me Arduino UNO dhe SD-Card | Simulimi i regjistruesit të të dhënave DHT11 në Proteus: Hyrje: përshëndetje, ky është Liono Maker, këtu është lidhja në YouTube. Ne po bëjmë projekt krijues me Arduino dhe po punojmë në sisteme të ngulitura. Data-Logger: Një regjistrues i të dhënave (gjithashtu regjistrues i të dhënave ose regjistrues i të dhënave) është një pajisje elektronike që regjistron të dhëna me kalimin e kohës me
ScanUp NFC Reader/shkrimtar dhe regjistrues audio për të verbër, me dëmtim të shikimit dhe të gjithë të tjerët: 4 hapa (me fotografi)
ScanUp NFC Lexues/shkrimtar dhe regjistrues audio për të verbër, me dëmtim të shikimit dhe të gjithë të tjerët: Unë studioj dizajn industrial dhe projekti është puna e semestrit tim. Qëllimi është të mbështesë personat me shikim të kufizuar dhe të verbër me një pajisje, e cila lejon regjistrimin e audios në formatin WAV në një kartë SD dhe thirrjen e atij informacioni me një etiketë NFC. Pra në
OpenLogger: Një rezolucion i lartë, i aktivizuar Wi-Fi, burim i hapur, regjistrues portativ i të dhënave: 7 hapa
OpenLogger: Një regjistrues i të dhënave portative me një rezolucion të lartë, Wi-Fi të aktivizuar, burim i hapur, portativ: OpenLogger është një regjistrues portativ, me burim të hapur, me kosto të ulët dhe me rezolucion të lartë i krijuar për të siguruar matje me cilësi të lartë pa kërkuar softuer të shtrenjtë ose softuer shkrimi nga e para. Nëse jeni inxhinier, shkencëtar ose entuziast që nuk
Blerja e të Dhënave dhe Sistemi i Vizualizimit të të Dhënave për një Biçikletë Garash MotoStudente Elektrike: 23 hapa
Sistemi i marrjes së të dhënave dhe vizualizimi i të dhënave për një motoçikletë MotoStudent Electric Racing: Një sistem i marrjes së të dhënave është një koleksion i pajisjeve dhe programeve kompjuterike që punojnë së bashku për të mbledhur të dhëna nga sensorë të jashtëm, për t'i ruajtur dhe përpunuar ato më pas në mënyrë që të mund të vizualizohen dhe analizohen, duke lejuar inxhinierët të bëjnë
Shfaqja e temperaturës dhe lagështisë dhe mbledhja e të dhënave me Arduino dhe përpunimi: 13 hapa (me fotografi)
Shfaqja e Temperaturës dhe Lagështisë dhe Mbledhja e të Dhënave Me Arduino dhe Përpunimi: Hyrje: Ky është një Projekt që përdor një bord Arduino, një Sensor (DHT11), një kompjuter Windows dhe një Përpunim (një program pa shkarkim falas) për të shfaqur të dhënat e Temperaturës, Lagështisë në dixhital dhe forma e grafikut të shiritit, shfaqja e kohës dhe datës dhe ekzekutimi i kohës së numërimit