Mundarija:
- 1 -qadam:
- 2 -qadam: Quyidagi qismlarni sotib oling:
- 3 -qadam: simlarni ulash
- 4 -qadam: PH, DO davrlarini, SD -kartani tayyorlang
- 5 -qadam: dasturiy ta'minotni tayyorlang
- 6 -qadam: Kodlashni boshlang
- 7 -qadam: Simlarni ulash natijalari (yaxshilanishi mumkin) va LCD displey
- 8 -qadam: Ma'lumotlarni import qiling va grafik qiling
- 9 -qadam: Kalibrlash
- 10 -qadam: simlar juda ko'pmi?
- 11 -qadam: Tan olish:
Video: Harorat, PH va erigan kislorod uchun ma'lumotlarni qayd qilish vositasini qanday qilish kerak: 11 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
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:
- Arduino MEGA 2560, $ 35,
- Arduino kartasi uchun quvvat adapteri, $ 5.98,
- LCD modul I2C (displey), $ 8.99,
- Haqiqiy vaqtda soat (RTC) buzilishi, $ 7,5,
- MicroSD karta kartasi, 7,5 dollar,
- 4 Gb SD -karta, 6,98 dollar,
- Suv o'tkazmaydigan DS18B20 raqamli sensori, 9,95 dollar,
- pH probi + to'plamlar + standart buferlar, $ 149.15,
- DO probi + to'plamlari + standart buferlari, $ 247,45,
- Non paneli, o'tish kabeli, $ 7.98,
- (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
- 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 va DO davrlari uchun I2C ga o'ting
- 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,
- DO sxemasi bilan bir xil qadamni bajaring
- (agar siz namuna kodini taxtaga qanday yuklashni bilsangiz, buni ketma -ket monitor orqali qilishingiz mumkin)
- SD -kartani FAT formatiga formatlash
5 -qadam: dasturiy ta'minotni tayyorlang
- Arduino Integrated Development Environment (IDE) ni yuklab oling,
- Kutubxonani Arduino IDE -ga o'rnating:
- Ularning aksariyati Arduino dasturi bilan ta'minlangan. LiquidCrystal_I2C.h GitHub orqali mavjud
- USB uchun haydovchini o'rnating. Haqiqiy Arduino uchun siz uni o'rnatishingiz shart emas. Umumiy foydalanish uchun siz CH340 drayverini o'rnatishingiz kerak (GitHub:
- Yonib -o'chib turadigan LED sinovini o'tkazib, taxtani to'g'ri ulaganingizni tekshiring
- 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
- 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
- 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'lumotlar ko'rinishidagi matndan ma'lumotlarni import qilish (Excel 2013)
- Ma'lumotlarni vergul bilan ajrating (shuning uchun har bir ma'lumot kiritilgandan keyin vergul qo'yish foydali bo'ladi)
- 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
- 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.
- 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.
- 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?
- 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)
- 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:
Smart Watchz Corona simptomlarini aniqlash va ma'lumotlarni qayd qilish bilan: 10 qadam
Smart Watchz - korona alomatlarini aniqlash va ma'lumotlarni qayd qilish bilan: bu LM35 va akselerometr yordamida serverda ma'lumotlarni yozib olish bilan Corona simptomlarini aniqlaydigan aqlli soat. Rtc vaqtni ko'rsatish va telefon bilan sinxronlashtirish va undan ma'lumotlarni yozish uchun ishlatiladi. Esp32 ko'k bilan korteks boshqaruvchisi bo'lgan miya sifatida ishlatiladi
Harorat va yorug'lik intensivligini qanday qayd qilish kerak - Proteus simulyatsiyasi - Qo'rqinchli - Liono yaratuvchisi: 5 qadam
Harorat va yorug'lik intensivligini qanday qayd qilish kerak | Proteus simulyatsiyasi | Qo'rqinchli | Liono Maker: Salom bu Liono Maker, bu mening rasmiy YouTube kanalim. Bu ochiq manba YouTube kanali.bu erda havola: Liono Maker YouTube kanali video havolasi bor: Temp & Yorug'lik intensivligini qayd qilish Ushbu qo'llanmada biz qanday qilib temperatura qilishni o'rganamiz
Arzon buzilgan/yirtilgan/yirtilgan/erigan/erigan uchqunli butilkalarni olib tashlash vositasini yaratish: 3 qadam
Arzon singan/yirtilgan/yirtilgan/erigan/erigan uchqunni yuklash vositasini yasash: Bu ko'rsatma sizga bug 'singan etikni shamdan chiqarib olish uchun o'zingizning arzon vositangizni qanday qilishni ko'rsatib beradi, shunda siz sozlashni davom ettirishingiz mumkin. Siz o'z mashinangizda ishlaydigan DIYers uchun, uchqunni almashtirishdan boshqa narsa yo'q
Ma'lumotlarni qayd qilish bilan ob -havo stantsiyasi: 7 qadam (rasmlar bilan)
Ma'lumotlarni yozib olish bilan ob -havo stantsiyasi: Bu ko'rsatmada men sizga ob -havo stantsiyalari tizimini o'zingiz qanday qilishni ko'rsataman. Sizga kerak bo'lgan yagona narsa - elektronika, dasturlash va ozgina vaqt. Bu loyiha hali boshlanmoqda. Bu faqat birinchi qism. Yangilanishlar
Haqiqiy vaqtda MPU-6050/A0 Arduino va Android bilan ma'lumotlarni qayd qilish: 7 qadam (rasmlar bilan)
Arduino va Android bilan MPU-6050/A0 ma'lumotlarini real vaqt rejimida yozish: Men Arduino-ni mashinada o'rganish uchun ishlatishdan manfaatdorman. Birinchi qadam sifatida men Android qurilmasi bilan real vaqtda (yoki unga juda yaqin) ma'lumotlarni ko'rsatish va logger yaratmoqchiman. Men MPU-6050 dan akselerometr ma'lumotlarini olishni xohlayman, shuning uchun men