Obsah:
- Krok 1:
- Krok 2: Kupte si níže uvedené součásti:
- Krok 3: Zapojení
- Krok 4: Připravte si obvody PH, DO, SD kartu
- Krok 5: Příprava softwaru
- Krok 6: Začněte kódovat
- Krok 7: Výsledky týkající se zapojení (lze zlepšit) a displeje LCD
- Krok 8: Importujte data a vytvořte graf
- Krok 9: Kalibrace
- Krok 10: Příliš mnoho kabeláže?
- Krok 11: Potvrzení:
Video: Jak vytvořit záznamník dat pro teplotu, PH a rozpuštěný kyslík: 11 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
Cíle:
- Vytvořte záznamník dat za ≤ 500 $. Ukládá data pro teplotu, pH a DO s časovým razítkem a pomocí komunikace I2C.
- Proč I2C (Inter-Integrated Circuit)? Jeden může naskládat tolik senzorů na stejný řádek, protože každý z nich má jedinečnou adresu.
Krok 1:
Krok 2: Kupte si níže uvedené součásti:
- Arduino MEGA 2560, 35 $,
- Napájecí adaptér pro desku Arduino, 5,98 $,
- LCD modul I2C (displej), 8,99 $,
- Průlom hodin v reálném čase (RTC), 7,5 $,
- Deska pro odlomení karty MicroSD, 7,5 $,
- 4 GB SD karta, 6,98 $,
- Vodotěsný digitální senzor DS18B20, 9,95 $,
- pH sonda + soupravy + standardní pufry, 149,15 $,
- Sonda DO + soupravy + standardní nárazníky, 247,45 $,
- Breadboard, propojovací kabel, 7,98 $,
- (Volitelné) Izolátor napětí, 24 $,
Celkem: 510,48 $
* Některé součásti (jako generická deska) lze zakoupit u jiných prodejců (eBay, čínský prodejce) za nižší cenu. Doporučuje se získat sondy pH a DO od společnosti Atlas Scientific.
* Ke kontrole vodivosti a napětí se doporučuje použít multimetr. Stojí to asi 10-15 $ (https://goo.gl/iAMDJo)
Krok 3: Zapojení
- Pomocí propojovacích kabelů/kabelů DuPont připojte součásti podle obrázku níže.
- Pomocí multimetru zkontrolujte vedení.
- Zkontrolujte napájení s kladným napětím (VCC) a uzemnění (GND) (snadno se zaměníte, pokud nejste obeznámeni s obvodem)
- Zapojte napájecí adaptér a zkontrolujte indikátor napájení v každé části. V případě pochybností zkontrolujte pomocí multimetru napětí mezi VCC a GND na (5V)
Krok 4: Připravte si obvody PH, DO, SD kartu
- Přepněte na I2C pro obvody pH a DO
- Průlomky pH a DO jsou dodávány se sériovou komunikací jako výchozím režimem vysílání/příjem (TX/RX). Chcete-li použít taktovací linku (SCL) a datovou linku (SDA) v režimu I2C, přepněte režim pomocí (1): odpojte kabely VCC, TX, RX, (2): přeskočte TX na Ground for Probe, PGND (ne GND), (3) zapojte VCC do obvodu, (4): počkejte, až se LED změní ze zelené na modrou. Další podrobnosti naleznete na straně 39 (Datový list pro obvod pH,
- Stejný krok proveďte s obvodem DO
- (pokud víte, jak nahrát ukázkový kód na desku, můžete to provést pomocí sériového monitoru)
- Formátujte kartu SD do formátu FAT
Krok 5: Příprava softwaru
- Stáhněte si Arduino Integrated Development Environment (IDE),
- Nainstalujte si knihovnu do Arduino IDE:
- Většina z nich je dodávána se softwarem Arduino. LiquidCrystal_I2C.h je k dispozici prostřednictvím GitHub
- Nainstalujte ovladač pro USB. U originálního Arduina možná nebudete muset žádné instalovat. Pro obecný je třeba nainstalovat ovladač CH340 (GitHub:
- Spusťte test blikající LED a zkontrolujte, zda je deska připojena správně
- Jak zjistit MAC adresu digitální teploty 18B20. Použití šablony skeneru I2C v Arduino IDE se zapojenou sondou. Každé zařízení má jedinečnou adresu MAC, takže můžete použít tolik teplotních sond s jednou sdílenou linkou (#9). 18B20 používá jednovodičovou I2C, jde tedy o speciální případ komunikační metody I2C. Níže je jeden způsob, jak najít MAC - Medical Access Control („ROM“, když spustíte níže uvedený postup).
Krok 6: Začněte kódovat
- Zkopírujte níže uvedený kód do Arduino IDE:
- Nebo si stáhněte kód (.ino) a v Arduino IDE by se mělo objevit nové okno.
/*
Referenční návody:
1. Záznamník teploty, ORP, pH:
2. Zabezpečený digitální (SD) štít:
Tento kód přenese data na sériový monitor Arduino. Zadejte příkazy do sériového monitoru Arduino pro ovládání obvodu EZO pH v režimu I2C.
Upraveno z výše uvedených referenčních výukových programů, většinou z kódu I2C společností Atlas-Scientific
Poslední aktualizace: 26. července 2017 od Binh Nguyen
*/
#include // povolit I2C.
#define pH_address 99 // výchozí I2C ID číslo pro EZO pH Circuit.
#define DO_address 97 // výchozí I2C ID číslo pro EZO DO Circuit.
#include "RTClib.h" // Funkce data a času pomocí RTC DS1307 připojeného přes I2C a Wire lib
RTC_DS1307 rtc;
#include // Pro SD libarary
#include // SD karta pro ukládání dat
const int chipSelect = 53; // potřeba vymyslet Adafruit SD breakout //
// DO = MISO, DI = MOSI, na kolíku ATmega#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // úprava logFileName k identifikaci vašeho experimentu, například PBR_01_02, datalog1
dlouhé id = 1; // číslo ID pro zadání pořadí protokolů
#zahrnout
LiquidCrystal_I2C lcd (0x27, 20, 4);
#zahrnout
#zahrnout
#define ONE_WIRE_BUS 9 // definujte pin # pro teplotní sondu
OneWire oneWire (ONE_WIRE_BUS);
Senzory teploty Dallas (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC adresa, jedinečná pro každou sondu
Řetězec dataString; // hlavní varianta pro uložení všech dat
Řetězec dataString2; // dočasná varianta pro uložení teploty/pH/DO pro tisk
char počítačová data [20]; // instrukce od společnosti Atlas Scientific: vytvoříme 20bajtové znakové pole pro uložení příchozích dat z počítače/mac/jiného.
byte receive_from_computer = 0; // potřebujeme vědět, kolik znaků bylo přijato.
byte serial_event = 0; // příznak signalizující přijetí dat z počítače/mac/jiného.
byte kód = 0; // slouží k uložení kódu odpovědi I2C.
char pH_data [20]; // vytvoříme 20bajtové znakové pole pro uchování příchozích dat z obvodu pH.
byte in_char = 0; // používá se jako 1bajtový buffer k ukládání do vázaných bytů z obvodu pH.
byte i = 0; // čítač používaný pro pole ph_data.
int čas_ = 1800; // slouží ke změně potřebného zpoždění v závislosti na příkazu odeslaném do obvodu pH třídy EZO.
float pH_float; // float var slouží k udržení floatové hodnoty pH.
char DO_data [20];
// float temp_C;
void setup () // inicializace hardwaru.
{
Serial.begin (9600); // povolit sériový port.
Wire.begin (pH_adresa); // povolit I2C port pro pH sondu
Wire.begin (DO_address);
lcd.init ();
lcd.begin (20, 4);
lcd.backlight ();
lcd.home ();
lcd.print („Ahoj PBR!“);
lcd.setCursor (0, 1);
lcd.print ("Inicializace …");
Serial.print („RTC je …“);
if (! rtc.begin ())
{
Serial.println ("RTC: Hodiny reálného času … NENÍ NALEZENO");
while (1); // (Serial.println ("RTC: hodiny reálného času … NALEZENÉ"));
}
Serial.println („BĚHÁ“);
Serial.print („Hodiny v reálném čase…“);
if (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))));
}
Serial.println ("PRÁCE");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print („SD karta…“); // zjistěte, zda je karta přítomna a lze ji inicializovat:
if (! SD.begin (chipSelect))
{Serial.println ("Selhalo"); // nedělej nic víc:
vrátit se;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println („SD karta: OK“);
Serial.print ("Soubor protokolu:");
Serial.print (logFileName);
Serial.print ("…");
Soubor logFile = SD.open (logFileName, FILE_WRITE); // otevřete soubor. „datalog“a vytiskněte záhlaví
if (logFile)
{
logFile.println (",,,"); // označte, že v předchozím běhu byla data
Záhlaví řetězce = "Datum -Čas, Teplota (C), pH, DO";
logFile.println (záhlaví);
logFile.close ();
Serial.println ("READY");
//Serial.println(dataString); // tisk i na sériový port:
}
else {Serial.println ("chyba při otevírání protokolu dat"); } // pokud soubor není otevřen, vyskočí chyba:
lcd.setCursor (0, 2);
lcd.print ("Soubor protokolu:");
lcd.println (logFileName);
zpoždění (1000);
sensor.begin ();
sensor.setResolution (ProbeP, 10); // 10 je rozlišení (10bit)
lcd.clear ();
id = 0;
}
prázdná smyčka ()
{// hlavní smyčka.
dataString = String (id);
dataString = String (',');
DateTime now = rtc.now ();
dataString = String (now.year (), 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);
sensor.requestTemperatures ();
displayTemperature (ProbeP);
Wire.beginTransmission (pH_address); // volání obvodu podle jeho ID čísla
Wire.write ('r'); // tvrdý kód r pro nepřetržité čtení
Wire.endTransmission (); // ukončení přenosu dat I2C.
zpoždění_); // počkejte správný čas, než obvod dokončí své instrukce.
Wire.requestFrom (pH_address, 20, 1); // zavolejte obvod a požádejte o 20 bajtů (to může být více, než potřebujeme)
while (Wire.available ()) // existují bajty k přijetí
{
in_char = Wire.read (); // obdrží bajt.
if ((in_char> 31) && (in_char <127)) // zkontrolujte, zda je znak použitelný (tisknutelný)
{
pH_data = in_char; // načtěte tento bajt do našeho pole.
i+= 1;
}
if (in_char == 0) // pokud vidíme, že nám byl zaslán nulový příkaz.
{
i = 0; // reset počítadla i na 0.
Wire.endTransmission (); // ukončení přenosu dat I2C.
přestávka; // opuštění cyklu while.
}
}
serial_event = 0; // resetujte příznak sériové události.
dataString2 += ",";
dataString2 += String (pH_data);
Wire.beginTransmission (DO_address); // volání obvodu podle jeho ID čísla
Wire.write ('r');
Wire.endTransmission (); // ukončení přenosu dat I2C
zpoždění_); // počkejte správný čas, než obvod dokončí své instrukce
Wire.requestFrom (DO_address, 20, 1); // volání obvodu a požadavek 20 bytů
while (Wire.available ()) // are bytes to receive.
{
in_char = Wire.read (); // obdrží bajt.
if ((in_char> 31) && (in_char <127)) // check if the char is usable (printable), otherwise the in_char contains a symbol at the begin in the.txt file
{DO_data = in_char; // načtěte tento bajt do našeho pole
i+= 1; // vyvolání čítače pro prvek pole
}
pokud (in_char == 0)
{// pokud vidíme, že nám byl zaslán nulový příkaz
i = 0; // reset počítadla i na 0.
Wire.endTransmission (); // ukončení přenosu dat I2C.
přestávka; // opuštění cyklu while.
}
}
serial_event = 0; // resetujte příznak sériové události
pH_float = atof (pH_data);
dataString2 += ",";
dataString2 += String (DO_data);
lcd.setCursor (0, 1);
lcd.print („Teplota/ pH/ DO“);
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
Soubor dataFile = SD.open (logFileName, FILE_WRITE); // otevřete soubor. Všimněte si, že současně lze otevřít pouze jeden soubor, takže tento musíte před otevřením dalšího zavřít.
if (dataFile) // pokud je soubor k dispozici, zapište do něj:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // tisk i na sériový port:
}
else {Serial.println ("chyba při otevírání souboru datalog"); } // pokud soubor není otevřen, vyskočí chyba:
lcd.setCursor (0, 3);
lcd.print ("Běží (x5 m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // další iteraci zvětšit o jedno ID
dataString = "";
zpoždění (300 000); // zpoždění 5 minut = 5*60*1000 ms
lcd.clear ();
} // konec hlavní smyčky
void displayTemperature (DeviceAddress deviceAddress)
{
float tempC = sensor.getTempC (deviceAddress);
if (tempC == -127.00) lcd.print ("Chyba teploty");
else dataString2 = String (tempC);
} // zde kód končí
- Vyberte správný COM port přes Arduino IDE v části Nástroje/Port
- Vyberte si správnou desku Arduino. Použil jsem Mega 2560, protože má více vnitřní paměti. Arduino Nano nebo Uno s tímto nastavením funguje dobře.
- Zkontrolujte a kódujte a nahrajte kód
Krok 7: Výsledky týkající se zapojení (lze zlepšit) a displeje LCD
- Upozornění: S hlukem ze sondy DO na pH sondu jsem se setkal po 2-3 měsících nepřetržitého provozu. Podle společnosti Atlas Scientific se při měření pH a vodivosti sondy doporučuje použít in-line napěťový izolátor. Další podrobnosti jsou na straně 9 (https://goo.gl/d62Rqv)
- Zaznamenaná data (první má nepotištěné znaky před údaji pH a DO). Filtroval jsem na kód povolením pouze tisknutelných znaků.
Krok 8: Importujte data a vytvořte graf
- Import dat z textu na kartě DATA (Excel 2013)
- Oddělte data čárkou (proto je užitečné mít čárky po každém zadání dat)
- Vykreslete data. Každá níže uvedená data mají přibližně 1700 bodů. Interval měření je 5 minut (nastavitelný). Minimum pro DO a pH obvody pro čtení dat je 1,8 s.
Krok 9: Kalibrace
- Digitální teplotní senzor (18B20) lze kalibrovat nastavením rozdílu přímo na. V opačném případě, pokud kompenzace a sklon vyžadují kalibraci, můžete to provést změnou hodnot na řádku #453, DallasTemperature.cpp ve složce / libraries / DallasTemperature.
- U sond pH a DO můžete sondy kalibrovat pomocí doprovodných roztoků. Musíte použít ukázkový kód od společnosti Atlas Scientific a řídit se pokyny v tomto souboru.
- Pro kalibraci a teplotní kompenzaci prosím sledujte strany 26 a 50 (https://goo.gl/d62Rqv) a také stránky 7-8 a 50 pro sondu DO (https://goo.gl/mA32mp). Nejprve znovu nahrajte generický kód poskytovaný společností Atlas, otevřete Serial Monitor a zadejte správný příkaz.
Krok 10: Příliš mnoho kabeláže?
- SD kartu a modul hodin v reálném čase můžete eliminovat pomocí Dragino Yun Shield pro desky Arduino (https://goo.gl/J9PBTH). Kód bylo potřeba upravit, aby fungoval s Yun Shield. Zde je dobré začít (https://goo.gl/c1x8Dm)
- Stále příliš mnoho kabeláže: Atlas Scientific vytvořil průvodce pro své obvody EZO (https://goo.gl/dGyb12) a bezspájkovou desku (https://goo.gl/uWF51n). Integrace digitální teploty 18B20 je zde (https://goo.gl/ATcnGd). Musíte být obeznámeni s příkazy na Raspbian (verze Debian Linux) běžícím na Raspberry Pi (https://goo.gl/549xvk)
Krok 11: Potvrzení:
Toto je můj vedlejší projekt během mého postdoktorandského výzkumu, na kterém jsem pracoval na pokročilém fotobioreaktoru na kultivaci mikrořas. Takže jsem si myslel, že je nutné připsat stranám, že poskytly podmínky, aby se to stalo. Za prvé, grant DE-EE0007093: „Obohacení a dodávka atmosférického CO2 (ACED)“od amerického ministerstva energetiky, Úřadu pro energetickou účinnost a biopaliva a bioprodukty zaměřené na řasy. Děkuji Dr. Bruceovi E. Rittmannovi z Biodesign Swette Center for Environmental Biotechnology, Arizona State Univesity, že mi poskytl příležitost hrát si s elektronikou a Arduinem. Byl jsem vyškolen v environmentálním inženýrství, většinou chemii, trochu mikrobiologii.
Doporučuje:
Jak přidat rozpuštěný kyslík do měřiče hydroponie WiFi: 6 kroků
Jak přidat rozpuštěný kyslík do měřiče hydroponie WiFi: Tento tutoriál předvede, jak přidat obvod a sondu EZO D.O do sady WiFi Hydroponics od společnosti Atlas Scientific. Předpokládá se, že uživatel má funkční wifi hydroponickou soupravu a nyní je připraven přidat rozpuštěný kyslík. UPOZORNĚNÍ: Atlas Sci
Jak vytvořit záznamník vlhkosti a teploty v reálném čase pomocí Arduino UNO a SD karty - Simulace záznamníku dat DHT11 v Proteusu: 5 kroků
Jak vytvořit záznamník vlhkosti a teploty v reálném čase pomocí Arduino UNO a SD karty | Simulace záznamníku dat DHT11 v Proteus: Úvod: Ahoj, toto je Liono Maker, zde je odkaz na YouTube. Vytváříme kreativní projekt s Arduinem a pracujeme na vestavěných systémech. Data-Logger: Data logger (také data-logger nebo data recorder) je elektronické zařízení, které zaznamenává data v průběhu času s
DIY GPS záznamník dat pro vás Další cesta/turistická stezka: 11 kroků (s obrázky)
DIY GPS Data Logger pro vás Next Drive/Pěší stezka: Toto je GPS Data Logger, který můžete použít pro více účelů, řekněme, pokud chcete přihlásit svůj dlouhý disk, který jste si vzali o víkendu, abyste zjistili podzimní barvy. nebo máte oblíbenou stezku, kterou každoročně navštěvujete na podzim a
Záznamník dat monitorování střídavého proudu: 9 kroků (s obrázky)
Záznamník dat monitorování proudu AC: Ahoj všichni, vítejte u mého prvního pokynu! Přes den jsem testovací inženýr pro společnost dodávající průmyslová topná zařízení, v noci jsem vášnivý technologický fanda a kutil. Součástí mé práce je testování výkonu ohřívačů
Bezdrátový záznamník dat GPS pro divokou zvěř: 9 kroků (s obrázky)
Bezdrátový záznamník dat GPS pro divokou zvěř: V tomto návodu vám ukážeme, jak vyrobit malý a levný záznamník GPS na bázi Arduino s bezdrátovou funkcí! Využití telemetrie ke studiu pohybu divoké zvěře může být pro biology velmi důležitým nástrojem. Může vám říci, kde