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: Кварцевый ламинат на пол. Все этапы. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #34 2024, Srpanj
Anonim
Image
Image
Slika
Slika

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 (međuintegrirani krug)? 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 dolje navedene dijelove
Kupite dolje navedene dijelove
  1. Arduino MEGA 2560, 35 USD,
  2. Adapter za napajanje za Arduino ploču, 5,98 USD,
  3. LCD modul I2C (zaslon), 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 međuspremnici, 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
  • Pomoću kratkospojnika/DuPont kabela spojite dijelove kao što je prikazano na donjoj skici.
  • Provjerite vodljivost 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 multimetra provjerite je li napon između VCC i GND (5V)

Korak 4: Pripremite PH, DO krugove, SD karticu

Pripremite PH, DO sklopove, SD karticu
Pripremite PH, DO sklopove, SD karticu
  1. Prijeđ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). Da biste koristili I2C način 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) priključ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 sklop,
  3. Učinite isti korak s DO krugom
  4. (ako znate 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 softverom Arduino. LiquidCrystal_I2C.h dostupan je 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 s 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. U nastavku je jedan način za pronalaženje MAC -a - medicinska kontrola pristupa ("ROM" kada pokrenete donji postupak).

Korak 6: Počnite kodirati

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 načinu rada I2C.

Izmijenjeno iz gore navedenih vodiča, uglavnom iz I2C koda od strane Atlas-Scientific

Zadnje ažuriranje: 26. srpnja 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; // trebam saznati za Adafruit SD proboj //

// 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 dnevničkog naloga

#uključi

LiquidCrystal_I2C LCD (0x27, 20, 4);

#uključi

#uključi

#define ONE_WIRE_BUS 9 // definirajte pin # za temperaturnu sondu

OneWire oneWire (ONE_WIRE_BUS);

Senzori temperature Dallas (& oneWire);

Sonda DeviceAddressP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC adresa, jedinstvena za svaku sondu

String dataString; // glavna varijanta za spremanje svih podataka

Niz podatakaString2; // privremena varijanta za pohranu Temperature/pH/DO za ispis

char computerdata [20]; // upute iz Atlas Scientifica: izrađujemo niz znakova od 20 bajta za čuvanje dolaznih podataka s računala/mac/drugog.

bajt primljen_od_računala = 0; // moramo znati koliko je likova primljeno.

byte serial_event = 0; // zastavica koja signalizira kada su podaci primljeni s pc/mac/other.

bajt kod = 0; // koristi se za držanje I2C koda odgovora.

char pH_data [20]; // izrađujemo niz znakova od 20 bajta za čuvanje dolaznih podataka iz pH kruga.

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 polje 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];

// plutajuća temp_C;

void setup () // hardverska inicijalizacija.

{

Serial.begin (9600); // omogućavanje serijskog porta.

Wire.begin (pH_adresa); // omogućuju I2C priključak 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 ("RADIMO");

lcd.setCursor (0, 0);

lcd.println ("RTC: U redu");

Serial.print ("SD kartica …"); // vidjeti je li kartica prisutna i može li se inicijalizirati:

if (! SD.begin (chipSelect))

{Serial.println ("Nije uspjelo"); // ne radi ništa više:

povratak;

}

Serial.println ("U redu");

lcd.setCursor (0, 1);

lcd.println ("SD kartica: OK");

Serial.print ("Datoteka zapisnika:");

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 u prethodnom izvođenju bilo podataka

Zaglavlje niza = "Datum -Vrijeme, Temp (C), pH, DO";

logFile.println (zaglavlje);

logFile.close ();

Serial.println ("SPREMNO");

//Serial.println(dataString); // ispis i na serijski port:

}

else {Serial.println ("pogreška pri otvaranju dnevnika podataka"); } // ako datoteka nije otvorena, pojavit će se pogreška:

lcd.setCursor (0, 2);

lcd.print ("Datoteka zapisnika:");

lcd.println (logFileName);

kašnjenje (1000);

senzori.begin ();

sensors.setResolution (ProbeP, 10); // 10 je rezolucija (10bit)

lcd.clear ();

id = 0;

}

void loop ()

{// glavna petlja.

dataString = Niz (id);

dataString = Niz (',');

DateTime now = rtc.now ();

dataString = String (sada.godina (), DEC);

dataString += String ('/');

dataString += String (sada.mjesec (), DEC);

dataString += String ('/');

dataString += String (now.day (), DEC);

dataString += niz ('');

dataString += String (now.hour (), DEC);

dataString += String (':');

dataString += String (now.minute (), DEC);

dataString += String (':');

dataString += String (sada.sekunda (), DEC);

lcd.home ();

lcd.print (dataString);

senzori.requestTemperatures ();

displayTemperature (ProbeP);

Wire.beginTransmission (pH_adresa); // pozivamo krug prema njegovu ID broju

Wire.write ('r'); // tvrdi kod r za kontinuirano čitanje

Wire.endTransmission (); // završavamo prijenos podataka I2C.

vrijeme odgode_); // čekamo ispravnu količinu vremena da sklop dovrši svoju uputu.

Wire.requestFrom (pH_adresa, 20, 1); // pozivamo krug i tražimo 20 bajtova (ovo može biti više nego što nam treba)

while (Wire.available ()) // ima li bajtova za primanje

{

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

if ((in_char> 31) && (in_char <127)) // provjerite je li char upotrebljiv (ispisiv)

{

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; // resetirati brojač i na 0.

Wire.endTransmission (); // završavamo prijenos podataka I2C.

pauza; // izlaz iz while petlje.

}

}

serijski_događaj = 0; // poništavanje zastavice serijskog događaja.

dataString2 += ",";

dataString2 += Niz (pH_podaci);

Wire.beginTransmission (DO_address); // pozivamo krug prema njegovom ID broju

Wire.write ('r');

Wire.endTransmission (); // završavamo prijenos podataka I2C

vrijeme odgode_); // čekamo ispravnu količinu vremena da sklop dovrši svoju uputu

Wire.requestFrom (DO_address, 20, 1); // pozivamo krug i tražimo 20 bajtova

while (Wire.available ()) // ima li bajtova za primanje.

{

in_char = Wire.read (); // primiti 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; // unijeti brojač za element polja

}

ako (in_char == 0)

{// ako vidimo da nam je poslana null naredba

i = 0; // resetirati brojač i na 0.

Wire.endTransmission (); // završavamo prijenos podataka I2C.

pauza; // izlaz iz while petlje.

}

}

serijski_događaj = 0; // poništavanje 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 se samo jedna datoteka može otvoriti odjednom, pa ovu morate zatvoriti prije otvaranja druge.

if (dataFile) // ako je datoteka dostupna, napišite joj:

{

dataFile.println (dataString);

dataFile.close ();

Serial.println (dataString); // ispis i na serijski port:

}

else {Serial.println ("pogreška pri otvaranju datoteke zapisa podataka"); } // ako datoteka nije otvorena, pojavit će se pogreš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); // odgoda 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 = Niz (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 rade 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 zaslona
Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
Rezultati ožičenja (mogu se poboljšati) i LCD zaslona
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 vodljivost rade zajedno. Više pojedinosti nalazi se na stranici 9 (https://goo.gl/d62Rqv)
  • Zabilježeni podaci (prvi ima neispisane znakove prije podataka pH i DO). Filtrirao sam u kôd dopuštajući samo znakove za ispis.

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

Kalibriranje
Kalibriranje
  1. Digitalni osjetnik temperature (18B20) može se kalibrirati podešavanjem razlike izravno na. Inače, ako su kompenzacija i nagib zahtijevali kalibraciju, 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 popratnim otopinama. Morate koristiti uzorak koda tvrtke Atlas Scientific i slijediti upute u ovoj datoteci.
  3. Slijedite stranice 26 i 50 za pH sondu (https://goo.gl/d62Rqv) za kalibraciju i temperaturnu kompenzaciju, te stranice 7-8 i 50 za DO sondu (https://goo.gl/mA32mp). Najprije ponovo učitajte generički kôd 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. Ovdje je dobro mjesto za početak (https://goo.gl/c1x8Dm)
  2. I dalje previše ožičenja: Atlas Scientific napravio je vodič za svoje EZO sklopove (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 sa 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 tijekom moga postdoktorskog istraživanja na kojem sam radio na naprednom fotobioreaktoru za uzgoj mikroalgi. Stoga sam smatrao da je potrebno priznati da su stranke osigurale uvjete da se to dogodi. Prvo, bespovratna sredstva, DE-EE0007093: "Obogaćivanje i isporuka CO2 u atmosferi (ACED)", iz Ministarstva energetike SAD-a, Ureda za energetsku učinkovitost 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čeni: