Obsah:

Ako vytvoriť záznamník údajov o teplote, PH a rozpustenom kyslíku: 11 krokov (s obrázkami)
Ako vytvoriť záznamník údajov o teplote, PH a rozpustenom kyslíku: 11 krokov (s obrázkami)

Video: Ako vytvoriť záznamník údajov o teplote, PH a rozpustenom kyslíku: 11 krokov (s obrázkami)

Video: Ako vytvoriť záznamník údajov o teplote, PH a rozpustenom kyslíku: 11 krokov (s obrázkami)
Video: Полный курс Redux Toolkit + RTK Query для начинающих | Редакс за 2 часа! 2024, Júl
Anonim
Image
Image
Obrázok
Obrázok

Ciele:

  • Vytvorte záznamník údajov za ≤ 500 dolárov. Ukladá údaje o teplote, pH a DO s časovým údajom a pomocou komunikácie I2C.
  • Prečo I2C (medziintegrovaný obvod)? Na jeden riadok je možné umiestniť viac senzorov za predpokladu, že každý z nich má jedinečnú adresu.

Krok 1:

Krok 2: Kúpte si nižšie uvedené diely:

Kúpte si diely nižšie
Kúpte si diely nižšie
  1. Arduino MEGA 2560, 35 dolárov,
  2. Napájací adaptér pre dosku Arduino, 5,98 dolára,
  3. LCD modul I2C (displej), 8,99 dolára,
  4. Odlomenie hodín v reálnom čase (RTC), 7,5 dolára,
  5. Doska na prelomenie karty MicroSD, 7,5 dolára,
  6. 4 GB karta SD, 6,98 dolárov,
  7. Vodotesný digitálny senzor DS18B20, 9,95 dolára,
  8. pH sonda + súpravy + štandardné pufre, 149,15 dolárov,
  9. Sonda DO + Sady + Štandardné nárazníky, 247,45 dolárov,
  10. Breadboard, prepojovací kábel, 7,98 dolárov,
  11. (Voliteľné) Izolátor napätia, 24 dolárov,

Celkom: 510,48 dolárov

* Niektoré diely (ako generická doska) je možné kúpiť od iných dodávateľov (eBay, čínsky predajca) za nižšiu cenu. Odporúča sa získať sondy pH a DO od spoločnosti Atlas Scientific.

* Na kontrolu vodivosti a napätia sa odporúča použiť multimetr. Stojí to asi 10-15 dolárov (https://goo.gl/iAMDJo)

Krok 3: Zapojenie

Elektrické vedenie
Elektrické vedenie
  • Na prepojenie dielov použite prepojovacie/DuPont káble, ako je znázornené na obrázku nižšie.
  • Pomocou multimetra skontrolujte vedenie.
  • Skontrolujte napájanie pozitívnym napätím (VCC) a uzemnenie (GND) (ak sa v obvode nevyznáte, je ľahké si ho zameniť)
  • Pripojte napájací adaptér a skontrolujte indikátor napájania v každej časti. Ak máte pochybnosti, pomocou multimetra skontrolujte napätie medzi VCC a GND na (5V)

Krok 4: Pripravte si obvody PH, DO, kartu SD

Pripravte si obvody PH, DO, kartu SD
Pripravte si obvody PH, DO, kartu SD
  1. Prepnite na I2C pre obvody pH a DO
  2. Úlomky pH a DO sa dodávajú so sériovou komunikáciou ako predvoleným režimom vysielania/príjmu (TX/RX). Ak chcete použiť hodinovú linku (SCL) a dátovú linku (SDA) režimu I2C, prepnite režim podľa (1): odpojte káble VCC, TX, RX, (2): preskočte TX na zem pre sondu, PGND (nie GND), (3) zapojte VCC do obvodu, (4): počkajte, kým sa LED dióda zmení zo zelenej na modrú. Viac podrobností nájdete na strane 39 (Technický list pre obvod pH,
  3. Vykonajte rovnaký krok s obvodom DO
  4. (Ak viete, ako nahrať vzorový kód na tabuľu, môžete to urobiť pomocou sériového monitora)
  5. Formátujte kartu SD do formátu FAT

Krok 5: Príprava softvéru

Príprava softvéru
Príprava softvéru
Príprava softvéru
Príprava softvéru
Príprava softvéru
Príprava softvéru
Príprava softvéru
Príprava softvéru
  1. Stiahnite si integrované vývojové prostredie Arduino (IDE),
  2. Nainštalujte knižnicu do Arduino IDE:
  3. Väčšina z nich je dodávaná so softvérom Arduino. LiquidCrystal_I2C.h je k dispozícii prostredníctvom GitHub
  4. Nainštalujte ovládač pre USB. Pokiaľ ide o originálne Arduino, možno ho nebudete musieť inštalovať. Na generický prípad je potrebné nainštalovať ovládač CH340 (GitHub:
  5. Spustením testu blikajúcich diód LED skontrolujte, či je doska správne pripojená
  6. Ako nájsť MAC adresu digitálnej teploty 18B20. Použitie šablóny skenera I2C v Arduino IDE so zapojenou sondou. Každé zariadenie má jedinečnú adresu MAC, takže môžete použiť toľko teplotných sond s jednou zdieľanou linkou (#9). 18B20 používa jednovodičový I2C, takže je to špeciálny prípad komunikačnej metódy I2C. Nasleduje jeden spôsob, ako nájsť MAC - Medical Access Control („ROM“, keď spustíte postup uvedený nižšie).

Krok 6: Začnite kódovať

Začnite kódovať
Začnite kódovať
  • Skopírujte nižšie uvedený kód do Arduino IDE:
  • Alebo si stiahnite kód (.ino) a v Arduino IDE by sa malo objaviť nové okno.

/*

Referenčné návody:

1. Záznamník teploty, ORP, pH:

2. Zabezpečený digitálny (SD) štít:

Tento kód bude prenášať údaje na sériový monitor Arduino. Na sériový monitor Arduino zadajte príkazy na ovládanie obvodu EZO pH v režime I2C.

Upravené z vyššie uvedených referenčných návodov, väčšinou z kódu I2C od spoločnosti Atlas-Scientific

Posledná aktualizácia: 26. júla 2017 od Binh Nguyen

*/

#include // povoliť I2C.

#define pH_address 99 // predvolené I2C ID číslo pre EZO pH Circuit.

#define DO_address 97 // predvolené I2C ID číslo pre obvod EZO DO.

#include "RTClib.h" // Funkcie dátumu a času pomocou DS1307 RTC pripojeného cez I2C a Wire lib

RTC_DS1307 rtc;

#include // Pre SD libarary

#include // Karta SD na ukladanie údajov

const int chipSelect = 53; // treba vymyslieť 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 na identifikáciu vášho experimentu, napríklad PBR_01_02, datalog1

dlhé id = 1; // identifikačné číslo na zadanie poradia denníka

#zahrnúť

LiquidCrystal_I2C lcd (0x27, 20, 4);

#zahrnúť

#zahrnúť

#define ONE_WIRE_BUS 9 // definujte kolík # pre 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á pre každú sondu

Reťazec dataString; // hlavný variant na ukladanie všetkých údajov

Reťazec dataString2; // dočasný variant na uloženie teploty/pH/DO na vytlačenie

char počítačové údaje [20]; // inštrukcia od spoločnosti Atlas Scientific: vytvoríme 20 -bitové pole znakov na uchovávanie prichádzajúcich údajov z počítača/počítača Mac/iného.

byte prijatý_z_počítača = 0; // potrebujeme vedieť, koľko znakov bolo prijatých.

byte serial_event = 0; // príznak signalizujúci prijatie údajov z počítača/mac/iného.

bajtový kód = 0; // slúži na uloženie kódu odpovede I2C.

char pH_data [20]; // vytvoríme pole 20 bajtov na uchovávanie prichádzajúcich údajov z obvodu pH.

bajt in_char = 0; // používa sa ako 1 bajtový buffer na ukladanie vo viazaných bajtoch z obvodu pH.

bajt i = 0; // počítadlo použité pre pole ph_data.

int čas_ = 1800; // slúži na zmenu potrebného oneskorenia v závislosti od príkazu odoslaného do obvodu pH triedy EZO.

float pH_float; // float var slúži na udržanie floatovej hodnoty pH.

char DO_data [20];

// float temp_C;

void setup () // hardvérová inicializácia.

{

Serial.begin (9600); // povoliť sériový port.

Wire.begin (adresa_ pH); // povoliť I2C port pre pH sondu

Wire.begin (DO_adresa);

lcd.init ();

lcd.begin (20, 4);

lcd.backlight ();

lcd.home ();

lcd.print („Ahoj PBR!“);

lcd.setCursor (0, 1);

lcd.print ("Inicializácia …");

Serial.print („RTC je …“);

ak (! rtc.begin ())

{

Serial.println ("RTC: Hodiny v reálnom čase … NIE JE ZISTENÉ");

while (1); // (Serial.println ("RTC: hodiny v reálnom čase … NÁJDENÉ"));

}

Serial.println ("SPUŠTENÉ");

Serial.print („Hodiny v reálnom čase …“);

if (! rtc.isrunning ())

{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))));

}

Serial.println ("PRÁCA");

lcd.setCursor (0, 0);

lcd.println („RTC: OK“);

Serial.print („karta SD …“); // skontrolujte, či je karta prítomná a dá sa inicializovať:

if (! SD.begin (chipSelect))

{Serial.println ("Neúspešné"); // nerob nič viac:

návrat;

}

Serial.println ("OK");

lcd.setCursor (0, 1);

lcd.println („SD karta: OK“);

Serial.print ("Súbor denníka:");

Serial.print (logFileName);

Serial.print ("…");

Súbor logFile = SD.open (logFileName, FILE_WRITE); // otvorte súbor. „datalog“a vytlačte hlavičku

if (logFile)

{

logFile.println (",,,"); // naznačujú, že v predchádzajúcom behu boli údaje

Hlavička reťazca = "Dátum -čas, teplota (C), pH, DO";

logFile.println (hlavička);

logFile.close ();

Serial.println ("READY");

//Serial.println(dataString); // vytlačte aj na sériový port:

}

else {Serial.println ("chyba pri otvarani udaju"); } // ak súbor nie je otvorený, zobrazí sa chyba:

lcd.setCursor (0, 2);

lcd.print ("Súbor denníka:");

lcd.println (logFileName);

oneskorenie (1000);

senzory.begin ();

sensor.setResolution (ProbeP, 10); // 10 je rozlíšenie (10bit)

lcd.clear ();

id = 0;

}

prázdna slučka ()

{// hlavná sluč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);

senzory.requestTeploty ();

displayTemperature (ProbeP);

Wire.beginTransmission (adresa_ pH); // zavolajte obvod podľa jeho ID čísla

Wire.write ('r'); // tvrdý kód r na nepretržité čítanie

Wire.endTransmission (); // ukončenie prenosu dát I2C.

oneskorenie (čas_); // počkajte správny čas, kým obvod dokončí svoje pokyny.

Wire.requestFrom (pH_adresa, 20, 1); // zavolajte na okruh a požiadajte o 20 bajtov (to môže byť viac, ako potrebujeme)

zatiaľ čo (Wire.available ()) // existujú bajty na prijatie

{

in_char = Wire.read (); // prijat bajt.

if ((in_char> 31) && (in_char <127)) // skontrolujte, či je znak použiteľný (tlačiteľný)

{

pH_data = in_char; // načítajte tento bajt do nášho poľa.

i+= 1;

}

if (in_char == 0) // ak vidíme, že nám bol odoslaný nulový príkaz.

{

i = 0; // vynulujte počítadlo i na 0.

Wire.endTransmission (); // ukončenie prenosu dát I2C.

prestávka; // opustenie cyklu while.

}

}

serial_event = 0; // reset príznaku sériovej udalosti.

dataString2 += ",";

dataString2 += String (pH_data);

Wire.beginTransmission (DO_address); // zavolajte obvod podľa jeho ID čísla

Wire.write ('r');

Wire.endTransmission (); // ukončenie prenosu dát I2C

oneskorenie (čas_); // počkajte správny čas, kým obvod dokončí svoje pokyny

Wire.requestFrom (DO_address, 20, 1); // zavolajte obvod a požiadajte o 20 bytov

zatiaľ čo (Wire.available ()) // existujú bajty na prijatie.

{

in_char = Wire.read (); // prijat bajt.

if ((in_char> 31) && (in_char <127)) // skontrolujte, či je znak použiteľný (tlačiteľný), inak in_char obsahuje na začiatku súboru.txt symbol.

{DO_data = in_char; // načítajte tento bajt do nášho poľa

i+= 1; // vyvolá počítadlo pre prvok poľa

}

ak (in_char == 0)

{// ak vidíme, že nám bol odoslaný nulový príkaz

i = 0; // vynulujte počítadlo i na 0.

Wire.endTransmission (); // ukončenie prenosu dát I2C.

prestávka; // opustite slučku while.

}

}

serial_event = 0; // reset príznaku sériovej udalosti

pH_float = atof (pH_data);

dataString2 += ",";

dataString2 += Reťazec (DO_data);

lcd.setCursor (0, 1);

lcd.print („Teplota/ pH/ DO“);

lcd.setCursor (0, 2);

lcd.print (dataString2);

dataString += ',';

dataString += dataString2;

Súbor dataFile = SD.open (logFileName, FILE_WRITE); // otvorte súbor. Upozorňujeme, že súčasne je možné otvoriť iba jeden súbor, takže pred otvorením ďalšieho musíte tento súbor zavrieť.

if (dataFile) // ak je súbor k dispozícii, napíšte doň:

{

dataFile.println (dataString);

dataFile.close ();

Serial.println (dataString); // vytlačte aj na sériový port:

}

else {Serial.println ("chyba pri otvarani suboru datalogu"); } // ak súbor nie je otvorený, zobrazí sa chyba:

lcd.setCursor (0, 3);

lcd.print ("Beží (x5 m):");

lcd.setCursor (15, 3);

lcd.print (id);

id ++; // pri ďalšej iterácii zvýšiť jedno ID

dataString = "";

oneskorenie (300 000); // oneskorenie 5 minút = 5*60*1 000 ms

lcd.clear ();

} // koniec hlavnej slučky

prázdna displayTemperature (DeviceAddress deviceAddress)

{

float tempC = sensor.getTempC (deviceAddress);

if (tempC == -127,00) lcd.print ("chyba teploty");

else dataString2 = String (tempC);

} // kód tu končí

  • Vyberte správny port COM prostredníctvom Arduino IDE v časti Nástroje/Port
  • Vyberte si správnu dosku Arduino. Použil som Mega 2560, pretože má viac vnútornej pamäte. Arduino Nano alebo Uno funguje s týmto nastavením dobre.
  • Skontrolujte a nakódujte a nahrajte kód

Krok 7: Výsledky týkajúce sa zapojenia (je možné zlepšiť) a displeja LCD

Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
Výsledky týkajúce sa zapojenia (je možné zlepšiť) a LCD displeja
  • Poznámka: S hlukom od sondy DO k sonde pH som sa stretol po 2-3 mesiacoch nepretržitej prevádzky. Podľa spoločnosti Atlas Scientific sa odporúča, aby in-line izolátor napätia pracoval vtedy, keď sondy vodivosti pH pracujú spoločne. Viac podrobností je na strane 9 (https://goo.gl/d62Rqv)
  • Zaznamenané údaje (prvý má pred údajmi pH a DO nevytlačené znaky). Filtroval som na kód tak, že som povolil iba tlačiteľné znaky.

Krok 8: Importujte údaje a vytvorte graf

Importujte údaje a vytvorte graf
Importujte údaje a vytvorte graf
Importujte údaje a vytvorte graf
Importujte údaje a vytvorte graf
Importujte údaje a vytvorte graf
Importujte údaje a vytvorte graf
  1. Import údajov z textu na karte DATA (Excel 2013)
  2. Údaje oddeľte čiarkami (preto je užitočné mať po každom zadaní údajov čiarky)
  3. Vykreslite údaje. Každý z nižšie uvedených údajov má približne 1 700 bodov. Interval merania je 5 minút (nastaviteľný). Minimálne pre DO a pH okruhy na čítanie údajov je 1,8 s.

Krok 9: Kalibrácia

Kalibrácia
Kalibrácia
  1. Digitálny snímač teploty (18B20) je možné kalibrovať nastavením rozdielu priamo na. V opačnom prípade, ak kompenzácia a sklon vyžadujú kalibráciu, môžete to urobiť zmenou hodnôt na riadku #453, DallasTemperature.cpp v priečinku / libraries / DallasTemperature.
  2. V prípade sond pH a DO môžete sondy kalibrovať pomocou sprievodných roztokov. Musíte použiť vzorový kód od spoločnosti Atlas Scientific a postupovať podľa pokynov v tomto súbore.
  3. Kalibráciu a teplotnú kompenzáciu nájdete na stranách 26 a 50 (https://goo.gl/d62Rqv) a na stranách 7-8 a 50 nájdete aj sondu DO (https://goo.gl/mA32mp). Najprv znova nahrajte generický kód poskytovaný spoločnosťou Atlas, otvorte sériový monitor a zadajte správny príkaz.

Krok 10: Príliš veľa kabeláže?

  1. Kartu SD a modul hodín v reálnom čase môžete odstrániť pomocou Dragino Yun Shield pre dosky Arduino (https://goo.gl/J9PBTH). Kód bolo potrebné upraviť tak, aby fungoval s Yun Shield. Tu je dobré začať (https://goo.gl/c1x8Dm)
  2. Stále príliš veľa káblov: spoločnosť Atlas Scientific vytvorila sprievodcu pre svoje obvody EZO (https://goo.gl/dGyb12) a bezpájkovaciu dosku (https://goo.gl/uWF51n). Integrácia digitálnej teploty 18B20 je tu (https://goo.gl/ATcnGd). Musíte byť oboznámení s príkazmi na Raspbian (verzia Debian Linux) bežiacimi na Raspberry Pi (https://goo.gl/549xvk)

Krok 11: Potvrdenie:

Toto je môj vedľajší projekt počas môjho postdoktorandského výskumu, na ktorom som pracoval na pokrokovom fotobioreaktore na kultiváciu mikrorias. Preto som si myslel, že je potrebné uznať, že strany poskytli podmienky, aby sa to stalo. Po prvé, grant DE-EE0007093: „Obohatenie a dodávka atmosférického CO2 (ACED)“od amerického ministerstva energetiky, úradu pre energetickú účinnosť a cielených biopalív a bioproduktov z rias. Ďakujem doktorovi Brucovi E. Rittmannovi z Biodesign Swette Center for Environmental Biotechnology, Arizona State Unityity, že mi poskytol príležitosť hrať sa s elektronikou a Arduinom. Vyštudoval som environmentálne inžinierstvo, väčšinou chémiu, trochu mikrobiológiu.

Odporúča: