Mundarija:

Harorat, PH va erigan kislorod uchun ma'lumotlarni qayd qilish vositasini qanday qilish kerak: 11 qadam (rasmlar bilan)
Harorat, PH va erigan kislorod uchun ma'lumotlarni qayd qilish vositasini qanday qilish kerak: 11 qadam (rasmlar bilan)

Video: Harorat, PH va erigan kislorod uchun ma'lumotlarni qayd qilish vositasini qanday qilish kerak: 11 qadam (rasmlar bilan)

Video: Harorat, PH va erigan kislorod uchun ma'lumotlarni qayd qilish vositasini qanday qilish kerak: 11 qadam (rasmlar bilan)
Video: “Atom” innovatsion ta’lim markazida kimyoviy tajriba. “Qo’lda olov yoqish” 2024, Dekabr
Anonim
Image
Image
Rasm
Rasm

Maqsadlar:

  • ≤ 500 dollarga ma`lumotlarni yozish vositasini yarating. U harorat, pH va DO ma'lumotlarini vaqt tamg'asi va I2C aloqasi yordamida saqlaydi.
  • Nima uchun I2C (Inter-Integrated Circuit)? Har birining o'ziga xos manzili borligini hisobga olsak, bir qatorda bir nechta sensorlar to'planishi mumkin.

1 -qadam:

2 -qadam: Quyidagi qismlarni sotib oling:

Quyidagi qismlarni sotib oling
Quyidagi qismlarni sotib oling
  1. Arduino MEGA 2560, $ 35,
  2. Arduino kartasi uchun quvvat adapteri, $ 5.98,
  3. LCD modul I2C (displey), $ 8.99,
  4. Haqiqiy vaqtda soat (RTC) buzilishi, $ 7,5,
  5. MicroSD karta kartasi, 7,5 dollar,
  6. 4 Gb SD -karta, 6,98 dollar,
  7. Suv o'tkazmaydigan DS18B20 raqamli sensori, 9,95 dollar,
  8. pH probi + to'plamlar + standart buferlar, $ 149.15,
  9. DO probi + to'plamlari + standart buferlari, $ 247,45,
  10. Non paneli, o'tish kabeli, $ 7.98,
  11. (Ixtiyoriy) kuchlanish izolatori, $ 24,

Hammasi: $ 510,48

* Ba'zi qismlarni (umumiy karta kabi) boshqa sotuvchilardan (eBay, xitoy sotuvchisi) arzonroq narxda sotib olish mumkin edi. pH va DO problarini ularni Atlas Scientific dan olish tavsiya etiladi.

* O'tkazuvchanlik va kuchlanishni tekshirish uchun multimetrdan foydalanish tavsiya etiladi. Taxminan 10-15 dollar turadi (https://goo.gl/iAMDJo)

3 -qadam: simlarni ulash

Ulanish
Ulanish
  • Quyidagi eskizda ko'rsatilgandek qismlarni ulash uchun jumper/DuPont kabellaridan foydalaning.
  • O'tkazuvchanlikni tekshirish uchun multimetrdan foydalaning.
  • Ijobiy kuchlanish manbasini (VCC) va erni (GND) tekshiring (agar siz sxemani yaxshi bilmasangiz, chalkashtirib yuborish oson)
  • Quvvat adapterini ulang va har bir qismdagi quvvat ko'rsatkichini tekshiring. Shubha tug'ilganda, ko'p o'lchagichdan foydalanib, VCC va GND o'rtasidagi kuchlanishni tekshiring (5V)

4 -qadam: PH, DO davrlarini, SD -kartani tayyorlang

PH, DO sxemalarini, SD -kartani tayyorlang
PH, DO sxemalarini, SD -kartani tayyorlang
  1. PH va DO davrlari uchun I2C ga o'ting
  2. PH va DO uzilishlari uzatish/qabul qilish (TX/RX) standart rejimi sifatida ketma -ket aloqa bilan yuboriladi. I2C rejimida Soat chizig'i (SCL) va Ma'lumot liniyasi (SDA) rejimidan foydalanish uchun rejimni (1) bilan almashtiring: VCC, TX, RX kabellarini ajratib oling, (2): TX-ni zond uchun erga o'tkazing, PGND (GND emas)), (3) zanjirga VCC ulang, (4): LEDning yashil rangdan ko'k ranggacha o'zgarishini kuting. Batafsil ma'lumotni 39 -betda tekshiring (pH davri uchun ma'lumotlar jadvali,
  3. DO sxemasi bilan bir xil qadamni bajaring
  4. (agar siz namuna kodini taxtaga qanday yuklashni bilsangiz, buni ketma -ket monitor orqali qilishingiz mumkin)
  5. SD -kartani FAT formatiga formatlash

5 -qadam: dasturiy ta'minotni tayyorlang

Dasturiy ta'minot tayyorlang
Dasturiy ta'minot tayyorlang
Dasturiy ta'minot tayyorlang
Dasturiy ta'minot tayyorlang
Dasturiy ta'minot tayyorlang
Dasturiy ta'minot tayyorlang
Dasturiy ta'minot tayyorlang
Dasturiy ta'minot tayyorlang
  1. Arduino Integrated Development Environment (IDE) ni yuklab oling,
  2. Kutubxonani Arduino IDE -ga o'rnating:
  3. Ularning aksariyati Arduino dasturi bilan ta'minlangan. LiquidCrystal_I2C.h GitHub orqali mavjud
  4. USB uchun haydovchini o'rnating. Haqiqiy Arduino uchun siz uni o'rnatishingiz shart emas. Umumiy foydalanish uchun siz CH340 drayverini o'rnatishingiz kerak (GitHub:
  5. Yonib -o'chib turadigan LED sinovini o'tkazib, taxtani to'g'ri ulaganingizni tekshiring
  6. 18B20 raqamli haroratining MAC manzilini qanday topish mumkin. I2C skaner shablonini Arduino IDE -da zond ulangan holda ishlatish. Har bir qurilmaning o'ziga xos MAC -manzili bor, shuning uchun siz bitta umumiy chiziqli (#9) harorati o'lchagichlardan foydalanishingiz mumkin. 18B20 bitta simli I2C dan foydalanadi, shuning uchun bu I2C aloqa usulining alohida holati. Quyida MAC - Tibbiy kirishni boshqarish usullarini topishingiz mumkin (quyida ko'rsatilgan tartibni bajarganingizda "ROM").

6 -qadam: Kodlashni boshlang

Kodlashni boshlang
Kodlashni boshlang
  • Quyidagi kodni Arduino IDE -ga joylashtiring:
  • Yoki kodni (.ino) yuklab oling va Arduino IDE -da yangi oyna ochiladi.

/*

Malumot qo'llanmalari:

1. Harorat, ORP, pH yozuvchisi:

2. Himoyalangan raqamli (SD) qalqoni:

Bu kod ma'lumotlarni Arduino seriyali monitoriga chiqaradi. I2C rejimida EZO pH davrini boshqarish uchun Arduino seriyali monitoriga buyruqlar kiriting.

Yuqoridagi havola qilingan darsliklar, asosan Atlas-Scientific tomonidan I2C kodidan o'zgartirilgan

Oxirgi yangilangan: 2017 yil 26 -iyul, Binx Nguyen

*/

#include // I2C -ni yoqing.

#define pH_address 99 // EZO pH davri uchun standart I2C identifikator raqami.

#define DO_address 97 // EZO DO davri uchun standart I2C identifikator raqami.

#"RTClib.h" ni qo'shing // I2C va Wire lib orqali ulangan DS1307 RTC yordamida sana va vaqt funktsiyalari.

RTC_DS1307 rtc;

#include // SD libarary uchun

#kiritish // SD -karta ma'lumotlarni saqlash uchun

const int chipSelect = 53; // Adafruit SD-ning buzilishini aniqlash kerak //

// DO = MISO, DI = MOSI, ATmega pin#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)

char logFileName = "dataLT.txt"; // tajribangizni aniqlash uchun logFileName -ni o'zgartiring, masalan, PBR_01_02, datalog1

uzoq id = 1; // jurnal tartibini kiritish uchun id raqami

#qo'shing

LiquidCrystal_I2C lcd (0x27, 20, 4);

#qo'shing

#qo'shing

ON_WIRE_BUS 9 ni aniqlang // harorat o'lchagichi uchun pinni belgilang

OneWire OneWire (ONE_WIRE_BUS);

Dallas harorat sensori (& oneWire);

DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC manzili, har bir prob uchun o'ziga xos

String dataString; // barcha ma'lumotlarni saqlashning asosiy varianti

String dataString2; // chop etish uchun Temperatur/pH/DO saqlash uchun vaqtinchalik variant

char ma'lumotlari [20]; // Atlas Scientific -dan ko'rsatma: biz kompyuter/mac/boshqasidan kiruvchi ma'lumotlarni saqlash uchun 20 baytli belgilar majmuasini tuzamiz.

olingan bayt_from_kompyuter = 0; // qancha belgi olinganligini bilishimiz kerak.

bayt serial_event = 0; // kompyuter/mac/boshqasidan ma'lumotlar qabul qilinganda signal beruvchi bayroq.

bayt kodi = 0; // I2C javob kodini ushlab turish uchun ishlatiladi.

char pH_data [20]; // biz pH zanjiridan kiruvchi ma'lumotlarni saqlash uchun 20 baytli belgilar majmuasini tuzamiz.

bayt in_char = 0; // pH zanjiridan bog'langan baytlarda saqlash uchun 1 baytli bufer sifatida ishlatiladi.

bayt i = 0; // ph_data qatori uchun hisoblagich ishlatiladi.

int vaqti_ = 1800; // EZO Class pH davriga yuborilgan buyruqqa qarab, kerakli kechikishni o'zgartirish uchun ishlatiladi.

suzuvchi pH_float; // float var pH qiymatini ushlab turish uchun ishlatiladi.

char DO_data [20];

// float temp_C;

void setup () // apparatni ishga tushirish.

{

Serial.begin (9600); // ketma -ket portni yoqish.

Wire.begin (pH_adress); // pH probi uchun I2C portini yoqing

Wire.begin (DO_adress);

lcd.init ();

lcd.begin (20, 4);

lcd.backlight ();

lcd.home ();

lcd.print ("Salom PBR!");

lcd.setCursor (0, 1);

lcd.print ("Boshlanmoqda …");

Serial.print ("RTC bu …");

agar (! rtc.begin ())

{

Serial.println ("RTC: Haqiqiy vaqt… topilmadi");

while (1); // (Serial.println ("RTC: Haqiqiy vaqtda soat … topildi"));

}

Serial.println ("KO'CHIRISH");

Serial.print ("Haqiqiy vaqtda soat …");

agar (! rtc.isrunning ())

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

}

Serial.println ("ISHLASH");

lcd.setCursor (0, 0);

lcd.println ("RTC: OK");

Serial.print ("SD -karta …"); // karta mavjudligini va uni ishga tushirish mumkinligini ko'ring:

agar (! SD.begin (chipSelect))

{Serial.println ("Muvaffaqiyatsiz"); // boshqa hech narsa qilmang:

qaytish;

}

Serial.println ("OK");

lcd.setCursor (0, 1);

lcd.println ("SD -karta: OK");

Serial.print ("Jurnal fayli:");

Serial.print (logFileName);

Serial.print ("…");

Fayl logFile = SD.open (logFileName, FILE_WRITE); // faylni oching. "Ma'lumotlar katalogi" va sarlavhani chop eting

agar (logFile)

{

logFile.println (",,,"); // oldingi ishda ma'lumotlar borligini bildiring

String header = "Date -Time, Temp (C), pH, DO";

logFile.println (sarlavha);

logFile.close ();

Serial.println ("Tayyor");

//Serial.println(dataString); // ketma -ket portga ham chop eting:

}

else {Serial.println ("ma'lumotlar katalogini ochishda xato"); } // agar fayl ochiq bo'lmasa, xato paydo bo'ladi:

lcd.setCursor (0, 2);

lcd.print ("Jurnal fayli:");

lcd.println (logFileName);

kechikish (1000);

sensorlar.begin ();

sensorlar.setResolution (ProbeP, 10); // 10 - o'lcham (10bit)

lcd.clear ();

id = 0;

}

bo'sh halqa ()

{// asosiy tsikl.

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);

sensorlar.requestTemperatures ();

displey harorati (ProbeP);

Wire.beginTransmission (pH_adress); // elektron raqamni uning raqamiga qo'ng'iroq qiling

Wire.write ('r'); // doimiy o'qish uchun qattiq kod r

Wire.endTransmission (); // I2C ma'lumot uzatishni tugatish.

kechikish (vaqt_); // sxema o'z ko'rsatmalarini bajarishi uchun to'g'ri vaqtni kuting.

Wire.requestFrom (pH_adress, 20, 1); // sxemaga qo'ng'iroq qiling va 20 baytni so'rang (bu bizga kerak bo'lgandan ko'proq bo'lishi mumkin)

while (Wire.available ()) // olish uchun baytlar bormi

{

in_char = Wire.read (); // bayt olish.

if ((in_char> 31) && (in_char <127)) // belgining mavjudligini tekshiring (chop etish mumkin)

{

pH_data = in_char; // bu baytni qatorimizga yuklang.

i+= 1;

}

if (in_char == 0) // agar bizga null buyruq yuborilganini ko'rsak.

{

i = 0; // i hisoblagichini 0 ga qaytaring.

Wire.endTransmission (); // I2C ma'lumot uzatishni tugatish.

tanaffus; // while loopidan chiqish.

}

}

serial_event = 0; // ketma -ket voqea bayrog'ini tiklash.

dataString2 += ",";

dataString2 += String (pH_data);

Wire.beginTransmission (DO_adress); // elektron raqamni uning raqamiga qo'ng'iroq qiling

Wire.write ('r');

Wire.endTransmission (); // I2C ma'lumot uzatishni tugatish

kechikish (vaqt_); // sxema o'z ko'rsatmalarini bajarishi uchun to'g'ri vaqtni kuting

Wire.requestFrom (DO_adress, 20, 1); // sxemani chaqiring va 20 bayt talab qiling

while (Wire.available ()) // olish uchun baytlar bormi.

{

in_char = Wire.read (); // bayt olish.

if ((in_char> 31) && (in_char <127)) // char ishlatilishini tekshiring (chop etish mumkin), aks holda in_char.txt fayli boshida belgini o'z ichiga oladi

{DO_data = in_char; // bu baytni qatorimizga yuklang

i+= 1; // qator elementi uchun hisoblagich paydo bo'ladi

}

agar (in_char == 0)

{// agar bizga null buyruq yuborilganini ko'rsak

i = 0; // i hisoblagichini 0 ga qaytaring.

Wire.endTransmission (); // I2C ma'lumot uzatishni tugatish.

tanaffus; // while loopidan chiqish.

}

}

serial_event = 0; // ketma -ket voqea bayrog'ini tiklash

pH_float = atof (pH_data);

dataString2 += ",";

dataString2 += String (DO_data);

lcd.setCursor (0, 1);

lcd.print ("Harorat/ pH/ DO");

lcd.setCursor (0, 2);

lcd.print (dataString2);

dataString += ',';

dataString += dataString2;

Fayl dataFile = SD.open (logFileName, FILE_WRITE); // faylni oching. E'tibor bering, bir vaqtning o'zida faqat bitta fayl ochilishi mumkin, shuning uchun boshqasini ochishdan oldin uni yopish kerak.

if (dataFile) // agar fayl mavjud bo'lsa, unga yozing:

{

dataFile.println (dataString);

dataFile.close ();

Serial.println (dataString); // ketma -ket portga ham chop eting:

}

else {Serial.println ("ma'lumotlar katalogi faylini ochishda xato"); } // agar fayl ochiq bo'lmasa, xato paydo bo'ladi:

lcd.setCursor (0, 3);

lcd.print ("Yugurish (x5m):");

lcd.setCursor (15, 3);

lcd.print (id);

id ++; // keyingi identifikatsiyani bitta identifikatorni oshirish

ma'lumotlarString = "";

kechikish (300000); // kechikish 5 daqiqa = 5*60*1000 milodiy

lcd.clear ();

} // asosiy tsiklni tugatish

bo'sh displey harorati (DeviceAddress deviceAddress)

{

float tempC = sensors.getTempC (deviceAddress);

if (tempC == -127.00) lcd.print ("Harorat xatosi");

else dataString2 = String (tempC);

} // kod shu erda tugaydi

  • Asboblar/port ostida Arduino IDE orqali to'g'ri COM portini tanlang
  • To'g'ri Arduino kartasini tanlang. Men Mega 2560 -dan foydalandim, chunki u ko'proq ichki xotiraga ega. Arduino Nano yoki Uno bu sozlash bilan yaxshi ishlaydi.
  • Kodni tekshiring va kodlang va yuklang

7 -qadam: Simlarni ulash natijalari (yaxshilanishi mumkin) va LCD displey

Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
Elektr o'tkazgichlari (yaxshilanishi mumkin) va LCD displeydagi natijalar
  • E'tibor bering: 2-3 oylik uzluksiz ishlashdan so'ng men DO probidan pH probigacha bo'lgan shovqinga duch keldim. Atlas Scientific ma'lumotlariga ko'ra, pH, o'tkazuvchanlik problari birgalikda ishlaganda, chiziqli kuchlanish izolyatori tavsiya etiladi. Batafsil ma'lumot 9 -betda (https://goo.gl/d62Rqv)
  • Jurnalga yozilgan ma'lumotlar (birinchisi pH va DO ma'lumotlaridan oldin bosilmagan belgilarga ega). Men faqat chop etiladigan belgilarga ruxsat berish orqali kodni filtrladim.

8 -qadam: Ma'lumotlarni import qiling va grafik qiling

Ma'lumotlarni import qiling va grafik tuzing
Ma'lumotlarni import qiling va grafik tuzing
Ma'lumotlarni import qiling va grafik tuzing
Ma'lumotlarni import qiling va grafik tuzing
Ma'lumotlarni import qiling va grafik tuzing
Ma'lumotlarni import qiling va grafik tuzing
  1. Ma'lumotlar ko'rinishidagi matndan ma'lumotlarni import qilish (Excel 2013)
  2. Ma'lumotlarni vergul bilan ajrating (shuning uchun har bir ma'lumot kiritilgandan keyin vergul qo'yish foydali bo'ladi)
  3. Ma'lumotlarni chizish. Quyidagi har bir ma'lumotda taxminan 1700 ball bor. O'lchov oralig'i 5 minut (sozlanishi). DO va pH davrlarining ma'lumotlarni o'qishi uchun minimal 1,8 soniya.

9 -qadam: Kalibrlash

Kalibrlash
Kalibrlash
  1. Raqamli harorat sensori (18B20) to'g'ridan -to'g'ri farqni sozlash orqali sozlanishi mumkin. Aks holda, agar kompensatsiya va qiyalik kalibrlashni talab qilsa, siz / libraries / DallasTemperature papkasidagi DallasTemperature.cpp #453 -satridagi qiymatlarni o'zgartirib qilishingiz mumkin.
  2. PH va DO problari uchun siz problarni hamrohlik qiladigan eritmalar bilan sozlashingiz mumkin. Siz Atlas Scientific kodini ishlatishingiz va ushbu fayl ko'rsatmalariga amal qilishingiz kerak.
  3. Iltimos, kalibrlash va haroratni qoplash uchun pH probini (https://goo.gl/d62Rqv) 26 va 50-sahifalarga, shuningdek DO probining 7-8 va 50-sahifalariga (https://goo.gl/mA32mp) rioya qiling. Birinchidan, iltimos, Atlas tomonidan taqdim etilgan umumiy kodni qayta yuklang, Serial monitorni oching va tegishli buyruqni kiriting.

10 -qadam: simlar juda ko'pmi?

  1. Siz SD kartani va real vaqtda soat modulini Arduino platalari uchun Dragino Yun Shield yordamida yo'q qilishingiz mumkin (https://goo.gl/J9PBTH). Yun Shild bilan ishlash uchun kodni o'zgartirish kerak edi. Bu erda boshlash uchun yaxshi joy (https://goo.gl/c1x8Dm)
  2. Hali ham simlar juda ko'p: Atlas Scientific EZO sxemalari uchun qo'llanma tayyorladi (https://goo.gl/dGyb12) va lehimsiz taxta (https://goo.gl/uWF51n). 18B20 raqamli haroratini birlashtirish bu erda (https://goo.gl/ATcnGd). Siz Raspberry Pi -da ishlaydigan Raspbian (Debian Linux versiyasi) buyruqlari bilan tanish bo'lishingiz kerak (https://goo.gl/549xvk)

11 -qadam: Tan olish:

Doktorlikdan keyingi tadqiqotlarim davomida bu mening yon loyiham, men mikroalglarni etishtirish uchun oldindan fotobioreaktor ustida ishlaganman. Shunday qilib, men buni amalga oshirish uchun tomonlar shart -sharoitlar yaratgan deb hisoblayman. Birinchidan, DE-EE0007093: AQSh energetika vazirligi, energiya samaradorligi va qayta tiklanadigan energiya byurosi, algli bioyoqilg'i va biologik mahsulotlar uchun mo'ljallangan "CO2 atmosferasini boyitish va etkazib berish (ACED)" granti. Men Arizona shtati universiteti atrof -muhit biotexnologiyasi bo'yicha Biodesign Swette markazida doktor Bryus E. Rittmannga menga elektronika va Arduino bilan shug'ullanish imkoniyatini bergani uchun minnatdorchilik bildiraman. Men atrof -muhit muhandisligi, asosan kimyo, ozgina mikrobiologiya bo'yicha o'qiganman.

Tavsiya: