Sadržaj:

Kako napraviti zapisnik podataka o temperaturi, PH i otopljenom kisiku: 11 koraka (sa slikama)
Kako napraviti zapisnik podataka o temperaturi, PH i otopljenom kisiku: 11 koraka (sa slikama)

Video: Kako napraviti zapisnik podataka o temperaturi, PH i otopljenom kisiku: 11 koraka (sa slikama)

Video: Kako napraviti zapisnik podataka o temperaturi, PH i otopljenom kisiku: 11 koraka (sa slikama)
Video: 3 РЕЦЕПТА из КУРИНОЙ ПЕЧЕНИ/ ПАШТЕТ!! ГОСТИ БУДУТ В ШОКЕ!! 2024, Juli
Anonim
Image
Image
Image
Image

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:

Kupite dijelove ispod
Kupite dijelove ispod
  1. Arduino MEGA 2560, 35 USD,
  2. Adapter za napajanje za Arduino ploču, 5,98 USD,
  3. LCD modul I2C (ekran), 8,99 USD,
  4. Proboj sata u realnom vremenu (RTC), 7,5 USD,
  5. Ploča za probijanje MicroSD kartice, 7,5 USD,
  6. SD kartica od 4 GB, 6,98 USD,
  7. Vodootporni digitalni senzor DS18B20, 9,95 USD,
  8. pH sonda + kompleti + standardni puferi, 149,15 USD, https://www.atlas-sci Scientific.com/product_pages/kit…
  9. DO sonda + kompleti + standardni puferi, 247,45 USD, https://www.atlas-sci Scientific.com/product_pages/kit…
  10. Oglasna ploča, prespojni kabel, 7,98 USD,
  11. (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

Ožičenje
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

Pripremite PH, DO krugove, SD karticu
Pripremite PH, DO krugove, SD karticu
  1. Pređite na I2C za pH i DO krugove
  2. 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,
  3. Učinite isti korak s DO krugom
  4. (ako znate kako prenijeti uzorak koda na ploču, to možete učiniti putem serijskog monitora)
  5. Formatirajte SD karticu u FAT format

Korak 5: Pripremite softver

Pripremite softver
Pripremite softver
Pripremite softver
Pripremite softver
Pripremite softver
Pripremite softver
Pripremite softver
Pripremite softver
  1. Preuzmite Arduino integrirano razvojno okruženje (IDE),
  2. Instalirajte biblioteku na Arduino IDE:
  3. Većina njih dolazi sa Arduino softverom. LiquidCrystal_I2C.h je dostupan putem GitHub -a
  4. 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:
  5. Provjerite jeste li ispravno spojili ploču pokretanjem trepćućeg LED testa
  6. 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

Započni kodiranje
Započni 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

Rezultati ožičenja (mogu se poboljšati) i LCD displeja
Rezultati ožičenja (mogu se poboljšati) i LCD displeja
Rezultati ožičenja (mogu se poboljšati) i LCD displeja
Rezultati ožičenja (mogu se poboljšati) i LCD displeja
Rezultati ožičenja (mogu se poboljšati) i LCD displeja
Rezultati ožičenja (mogu se poboljšati) i LCD displeja
Rezultati ožičenja (mogu se poboljšati) i LCD displeja
Rezultati ožičenja (mogu se poboljšati) i LCD displeja
  • 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

Uvezite podatke i napravite grafikon
Uvezite podatke i napravite grafikon
Uvezite podatke i napravite grafikon
Uvezite podatke i napravite grafikon
Uvezite podatke i napravite grafikon
Uvezite podatke i napravite grafikon
  1. Uvoz podataka s kartice Text Under DATA (Excel 2013)
  2. Odvojite podatke zarezom (zato je korisno imati zareze nakon svakog unosa podataka)
  3. 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

Kalibracija
Kalibracija
  1. 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.
  2. 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.
  3. 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?

  1. 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)
  2. 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: