
Isi kandungan:
- Langkah 1:
- Langkah 2: Beli Bahagian di Bawah:
- Langkah 3: Pendawaian
- Langkah 4: Sediakan PH, DO Circuits, SD Card
- Langkah 5: Sediakan Perisian
- Langkah 6: Mulakan Pengekodan
- Langkah 7: Hasil pada Pendawaian (boleh Ditingkatkan) dan Paparan LCD
- Langkah 8: Import Data dan Buat Grafik
- Langkah 9: Penentukuran
- Langkah 10: Pendawaian Terlalu Banyak?
- Langkah 11: Pengakuan:
2025 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2025-01-23 15:01



Objektif:
- Buat pencatat data dengan harga ≤ $ 500. Ia menyimpan data untuk suhu, pH, dan DO dengan cap waktu dan menggunakan komunikasi I2C.
- Mengapa I2C (Inter-Integrated Circuit)? Seseorang dapat mengumpulkan seberapa banyak sensor dalam baris yang sama kerana masing-masing mempunyai alamat yang unik.
Langkah 1:
Langkah 2: Beli Bahagian di Bawah:

- Arduino MEGA 2560, $ 35,
- Penyesuai kuasa untuk papan Arduino, $ 5.98,
- Modul LCD I2C (paparan), $ 8.99,
- Penembusan Waktu Sebenar (RTC), $ 7.5,
- Papan pemecahan kad MicroSD, $ 7.5,
- Kad SD 4GB, $ 6.98,
- Sensor Digital DS18B20 kalis air, $ 9,95,
- Pemeriksaan pH + Kit + Penyangga standard, $ 149.15,
- DO probe + Kit + buffer Standard, $ 247.45,
- Papan roti, kabel pelompat, $ 7.98,
- (Pilihan) Voltan Isolator, $ 24,
Jumlah: $ 510.48
* Bahagian tertentu (seperti papan generik) boleh dibeli dari vendor lain (eBay, penjual China) dengan harga yang lebih rendah. Probe pH dan DO disyorkan untuk mendapatkannya dari Atlas Scientific.
* Multimeter disyorkan untuk memeriksa kekonduksian dan voltan. Harganya sekitar $ 10-15 (https://goo.gl/iAMDJo)
Langkah 3: Pendawaian

- Gunakan kabel jumper / DuPont untuk menyambungkan bahagian-bahagian seperti yang ditunjukkan dalam lakaran di bawah.
- Gunakan multimeter untuk memeriksa konduksi.
- Periksa Bekalan Voltan Positif (VCC) dan Tanah (GND) (mudah mengelirukan jika anda tidak biasa dengan litar)
- Pasangkan penyesuai kuasa dan periksa penunjuk kuasa di setiap bahagian. Sekiranya ragu-ragu, gunakan multi-meter untuk memeriksa voltan antara VCC dan GND (5V)
Langkah 4: Sediakan PH, DO Circuits, SD Card

- Tukar ke I2C untuk litar pH dan DO
- Penembusan pH dan DO dihantar dengan komunikasi Serial sebagai mod lalai Transmit / Receive (TX / RX). Untuk menggunakan garis mode mod I2C (SCL), dan garis Data (SDA), beralih mod dengan (1): cabut kabel VCC, TX, RX, (2): lompat TX ke Ground for Probe, PGND (bukan GND), (3) pasang VCC ke litar, (4): tunggu LED berubah dari Hijau ke Biru. Perincian lebih lanjut periksa di halaman 39 (Lembar Data untuk litar pH,
- Lakukan langkah yang sama dengan litar DO
- (jika anda tahu cara memuat naik kod sampel ke papan, anda boleh melakukannya melalui monitor Serial)
- Format kad SD ke format FAT
Langkah 5: Sediakan Perisian




- Muat turun Arduino Integrated Development Environment (IDE),
- Pasang perpustakaan ke Arduino IDE:
- Sebilangan besar daripadanya dilengkapi dengan perisian Arduino. LiquidCrystal_I2C.h boleh didapati melalui GitHub
- Pasang pemacu untuk USB. Untuk Arduino yang asli, anda mungkin tidak perlu memasangnya. Untuk yang generik, anda perlu memasang pemacu CH340 (GitHub:
- Periksa sama ada anda menyambungkan papan dengan betul dengan menjalankan ujian LED yang berkedip
- Bagaimana untuk mencari alamat MAC suhu digital 18B20. Menggunakan templat pengimbas I2C di Arduino IDE dengan probe terpasang. Setiap peranti mempunyai alamat MAC yang unik, jadi anda boleh menggunakan seberapa banyak probe suhu dengan satu baris bersama (# 9). 18B20 menggunakan satu wayar I2C, jadi ini adalah kes khas kaedah komunikasi I2C. Berikut adalah satu kaedah untuk mencari MAC - Kawalan Akses Perubatan ("ROM" semasa anda menjalankan prosedur di bawah).
Langkah 6: Mulakan Pengekodan

- Salin tampal kod di bawah ke Arduino IDE:
- Atau muat turun kod (.ino) dan tetingkap baru akan muncul di Arduino IDE.
/*
Tutorial rujukan:
1. Suhu, ORP, pencatat pH:
2. Perisai Digital Selamat (SD):
Kod ini akan mengeluarkan data ke monitor bersiri Arduino. Ketik perintah ke monitor bersiri Arduino untuk mengawal Litar pH EZO dalam mod I2C.
Diubah suai dari tutorial yang dirujuk di atas, kebanyakannya dari kod I2C oleh Atlas-Scientific
Terakhir dikemas kini: 26 Julai 2017 oleh Binh Nguyen
*/
#masuk // aktifkan I2C.
#tentukan pH_address 99 // nombor ID I2C lalai untuk Litar pH EZO.
#define DO_address 97 // nombor ID I2C lalai untuk EZO DO Circuit.
#include "RTClib.h" // Tarikh dan waktu berfungsi menggunakan DS1307 RTC yang disambungkan melalui I2C dan Wire lib
RTC_DS1307 rtc;
#masuk // Untuk perpustakaan SD
#sertakan // kad SD untuk menyimpan data
const int chipPilih = 53; // perlu mengetahui untuk pelarian SD Adafruit //
// DO = MISO, DI = MOSI, pada ATmega pin #: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // ubah modFileName untuk mengenal pasti percubaan anda, untuk contoh PBR_01_02, datalog1
id panjang = 1; // nombor id untuk memasukkan urutan log
#sertakan
LiquidCrystal_I2C lcd (0x27, 20, 4);
#sertakan
#sertakan
#tentukan ONE_WIRE_BUS 9 // tentukan pin # untuk probe suhu
OneWire oneWire (ONE_WIRE_BUS);
Sensor suhu Dallas (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // Alamat MAC, unik untuk setiap siasatan
String dataString; // varian utama untuk menyimpan semua data
String dataString2; // varian sementara untuk menyimpan Suhu / pH / DO untuk dicetak
char computerdata [20]; // arahan dari Atlas Scientific: kami membuat susunan aksara 20 bait untuk menyimpan data masuk dari komputer / mac / yang lain.
bait diterima_from_komputer = 0; // kita perlu mengetahui berapa banyak watak yang telah diterima.
byte serial_event = 0; // bendera untuk memberi isyarat apabila data telah diterima dari komputer / mac / yang lain.
kod bait = 0; // digunakan untuk menahan kod respons I2C.
char pH_data [20]; // kami membuat susunan aksara 20 bait untuk menyimpan data masuk dari rangkaian pH.
bait in_char = 0; // digunakan sebagai penyangga 1 bait untuk menyimpan bait terikat dari Litar pH.
bait i = 0; // kaunter digunakan untuk array ph_data.
int time_ = 1800; // digunakan untuk mengubah penundaan yang diperlukan bergantung pada perintah yang dikirim ke Litar pH Kelas EZO.
float pH_float; // float var digunakan untuk menahan nilai apungan pH.
char DO_data [20];
// terapung temp_C;
kekosongan persediaan () // permulaan perkakasan.
{
Serial.begin (9600); // aktifkan port bersiri.
Wire.begin (pH_address); // aktifkan port I2C untuk probe pH
Wire.begin (DO_address);
lcd.init ();
lcd.begin (20, 4);
lcd.backlight ();
lcd.home ();
lcd.print ("Hello PBR!");
lcd.setCursor (0, 1);
lcd.print ("Memulakan…");
Serial.print ("RTC adalah…");
jika (! rtc.begin ())
{
Serial.println ("RTC: Jam masa nyata … TIDAK DITEMUKAN");
sementara (1); // (Serial.println ("RTC: Jam masa nyata … DITEMUKAN"));
}
Serial.println ("MENJALANKAN");
Serial.print ("Jam Masa Nyata …");
jika (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("KERJA");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("kad SD …"); // lihat apakah kad itu ada dan boleh diinisialisasi:
jika (! SD. mulakan (pilih chip))
{Serial.println ("Gagal"); // jangan buat apa-apa lagi:
kembali;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println ("kad SD: OK");
Serial.print ("Fail Log:");
Serial.print (logFileName);
Cetakan bersiri ("…");
Fail logFile = SD.open (logFileName, FILE_WRITE); // buka fail. "datalog" dan cetak tajuk
jika (logFile)
{
logFile.println (",,,"); // menunjukkan terdapat data dalam jangka masa sebelumnya
String header = "Date -Time, Temp (C), pH, DO";
logFile.println (pengepala);
logFile.close ();
Serial.println ("SIAP");
//Serial.println(dataString); // cetak ke port bersiri juga:
}
lain {Serial.println ("ralat membuka katalog"); } // jika fail tidak terbuka, muncul ralat:
lcd.setCursor (0, 2);
lcd.print ("Fail log:");
lcd.println (logFileName);
kelewatan (1000);
sensor.begin ();
sensor.setResolution (ProbeP, 10); // 10 adalah resolusi (10bit)
lcd.clear ();
id = 0;
}
gelung kosong ()
{// gelung utama.
dataString = Rentetan (id);
dataString = Rentetan (',');
DateTime now = rtc.now ();
dataString = Rentetan (sekarang.tahun (), DEC);
dataString + = Rentetan ('/');
dataString + = Rentetan (sekarang.bulan (), DEC);
dataString + = Rentetan ('/');
dataString + = Rentetan (sekarang.hari (), DEC);
dataString + = Rentetan ('');
dataString + = Rentetan (sekarang.jam (), DEC);
dataString + = Rentetan (':');
dataString + = Rentetan (sekarang.minit (), DEC);
dataString + = Rentetan (':');
dataString + = Rentetan (sekarang.second (), DEC);
lcd.home ();
lcd.print (dataString);
sensor.requestTemperatures ();
displayTemperature (ProbeP);
Wire.beginTransmission (pH_address); // panggil litar dengan nombor IDnya
Wire.write ('r'); // kod keras r untuk dibaca secara berterusan
Wire.endTransmission (); // tamatkan penghantaran data I2C.
kelewatan (masa_); // tunggu jumlah masa yang betul untuk litar menyelesaikan arahannya.
Wire.requestFrom (alamat_ pH, 20, 1); // panggil litar dan minta 20 bait (ini mungkin lebih banyak daripada yang kita perlukan)
sementara (Wire.available ()) // ada bait untuk diterima
{
in_char = Wire.read (); // terima bait.
jika ((in_char> 31) && (in_char <127)) // periksa sama ada char boleh digunakan (boleh dicetak)
{
pH_data = in_char; // muatkan bait ini ke dalam array kami.
i + = 1;
}
if (in_char == 0) // jika kita melihat bahawa kita telah dihantar perintah null.
{
i = 0; // tetapkan semula kaunter i ke 0.
Wire.endTransmission (); // tamatkan penghantaran data I2C.
rehat; // keluar dari gelung sementara.
}
}
serial_event = 0; // tetapkan semula bendera acara bersiri.
dataString2 + = ",";
dataString2 + = Rentetan (pH_data);
Wire.beginTransmission (DO_address); // panggil litar dengan nombor IDnya
Wire.write ('r');
Wire.endTransmission (); // tamatkan penghantaran data I2C
kelewatan (masa_); // tunggu jumlah masa yang betul untuk litar menyelesaikan arahannya
Wire.requestFrom (DO_address, 20, 1); // panggil litar dan minta 20 bait
sementara (Wire.available ()) // ada bait untuk diterima.
{
in_char = Wire.read (); // terima bait.
jika ((in_char> 31) && (in_char <127)) // periksa sama ada char boleh digunakan (boleh dicetak), jika tidak, in_char mengandungi simbol pada awal dalam fail.txt
{DO_data = in_char; // muatkan bait ini ke dalam array kami
i + = 1; // masukkan pembilang untuk elemen tatasusunan
}
jika (dalam_char == 0)
{// jika kita melihat bahawa kita telah dihantar perintah nol
i = 0; // tetapkan semula kaunter i ke 0.
Wire.endTransmission (); // tamatkan penghantaran data I2C.
rehat; // keluar dari gelung sementara.
}
}
serial_event = 0; // tetapkan semula bendera acara bersiri
pH_float = atof (pH_data);
dataString2 + = ",";
dataString2 + = Rentetan (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Suhu / pH / DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString + = ',';
dataString + = dataString2;
Data failFile = SD.open (logFileName, FILE_WRITE); // buka fail. perhatikan bahawa hanya satu fail yang dapat dibuka pada satu masa, jadi anda harus menutupnya sebelum membuka fail yang lain.
jika (dataFile) // jika fail itu tersedia, tuliskan kepadanya:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // cetak ke port bersiri juga:
}
lain {Serial.println ("ralat membuka fail katalog"); } // jika fail tidak terbuka, muncul ralat:
lcd.setCursor (0, 3);
lcd.print ("Berlari (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // tingkatkan satu ID lelaran seterusnya
dataString = "";
kelewatan (300000); // tunda 5 mintues = 5 * 60 * 1000 ms
lcd.clear ();
} // hujung gelung utama
paparan kosong Suhu (DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC (deviceAddress);
jika (tempC == -127.00) lcd.print ("Ralat Suhu");
dataString2 lain = String (tempC);
} // kodnya berakhir di sini
- Pilih port COM yang betul melalui Arduino IDE di bawah Tools / Port
- Pilih papan Arduino yang betul. Saya menggunakan Mega 2560 kerana mempunyai memori dalaman yang lebih banyak. Arduino Nano atau Uno berfungsi dengan baik dengan persediaan ini.
- Periksa dan kod dan muat naik kod
Langkah 7: Hasil pada Pendawaian (boleh Ditingkatkan) dan Paparan LCD




- Perhatian: Saya menghadapi bunyi dari probe DO hingga probe pH setelah 2-3 bulan operasi berterusan. Menurut Atlas Scientific, pengasing voltan dalam talian disyorkan semasa pH, prob konduktiviti beroperasi bersama. Maklumat lanjut terdapat di halaman 9 (https://goo.gl/d62Rqv)
- Data yang dicatat (yang pertama mempunyai watak yang belum dicetak sebelum data pH dan DO). Saya menapis ke kod dengan hanya membenarkan watak yang boleh dicetak.
Langkah 8: Import Data dan Buat Grafik



- Import data Dari tab Di Bawah DATA (Excel 2013)
- Pisahkan data dengan koma (itulah sebabnya mempunyai koma setelah setiap input data bermanfaat)
- Petak data. Setiap data di bawah mempunyai kira-kira 1700 mata. Selang pengukuran adalah 5 minit (boleh laras). Minimum untuk litar DO dan pH untuk membaca data ialah 1.8 saat.
Langkah 9: Penentukuran

- Sensor suhu digital (18B20) dapat dikalibrasi dengan menyesuaikan perbezaan secara langsung ke. Jika tidak, jika pampasan dan cerun memerlukan penentukuran, anda boleh melakukannya dengan mengubah nilai pada baris # 453, DallasTemperature.cpp di folder / libraries / DallasTemperature.
- Untuk probe pH dan DO, anda boleh mengkalibrasi probe dengan penyelesaian yang disertakan. Anda mesti menggunakan contoh kod oleh Atlas Scientific dan mengikuti arahan oleh fail ini.
- Sila ikuti halaman 26 dan 50 untuk probe pH (https://goo.gl/d62Rqv) untuk penentukuran dan pampasan suhu, dan juga halaman, 7-8 dan 50 untuk probe DO (https://goo.gl/mA32mp). Pertama, muat naik semula kod generik yang disediakan oleh Atlas, buka Serial Monitor dan masukkan arahan yang betul.
Langkah 10: Pendawaian Terlalu Banyak?
- Anda boleh menghilangkan kad SD dan modul jam masa nyata dengan menggunakan Dragino Yun Shield untuk papan Arduino (https://goo.gl/J9PBTH). Kod perlu diubah suai untuk bekerja dengan Yun Shield. Inilah tempat yang baik untuk bermula (https://goo.gl/c1x8Dm)
- Masih terlalu banyak pendawaian: Atlas Scientific membuat panduan untuk litar EZO mereka (https://goo.gl/dGyb12) dan papan solderless (https://goo.gl/uWF51n). Mengintegrasikan suhu digital 18B20 ada di sini (https://goo.gl/ATcnGd). Anda harus biasa dengan perintah pada Raspbian (versi Debian Linux) yang berjalan di Raspberry Pi (https://goo.gl/549xvk)
Langkah 11: Pengakuan:
Ini adalah projek sampingan saya semasa penyelidikan pasca doktoral yang saya kerjakan sebagai photobioreactor maju untuk menanam mikroalga. Oleh itu, saya fikir perlu memberi penghargaan kepada pihak yang telah memberikan syarat untuk mewujudkannya. Pertama, pemberian, DE-EE0007093: "Pengayaan dan Pengantaran CO2 Atmosfera (ACED)," dari Jabatan Tenaga A. S., Pejabat Kecekapan Tenaga dan Tenaga Diperbaharui yang disasarkan Alga Biofuel dan Bioproduk. Saya mengucapkan terima kasih kepada Dr. Bruce E. Rittmann di Biodesign Swette Center for Environmental Biotechnology, Arizona State Univesity kerana memberi saya peluang untuk bermain elektronik dan Arduino. Saya dilatih dalam bidang kejuruteraan alam sekitar, kebanyakan kimia, sedikit mikrobiologi.
Disyorkan:
Cara Menambah Oksigen Terlarut ke Meter Hidroponik WiFi: 6 Langkah

Cara Menambah Oksigen Terlarut ke Meter Hidroponik WiFi: Tutorial ini akan menunjukkan cara menambahkan litar dan probe EZO D.O ke Kit Hidroponik WiFi dari Atlas Scientific. Diandaikan bahawa pengguna mempunyai kit hidroponik wifi yang berfungsi dan kini bersedia untuk menambahkan oksigen terlarut. PERINGATAN: Atlas Sci
Cara Membuat Perekam Data Masa Nyata Kelembapan dan Suhu Dengan Arduino UNO dan SD-Card - Simulasi Pencatat Data DHT11 dalam Proteus: 5 Langkah

Cara Membuat Perekam Data Masa Nyata Kelembapan dan Suhu Dengan Arduino UNO dan SD-Card | DHT11 Data-logger Simulation in Proteus: Pengenalan: hai, ini adalah Liono Maker, berikut adalah pautan YouTube. Kami membuat projek kreatif dengan Arduino dan mengusahakan sistem terbenam. Data-Logger: Data logger (juga data-logger atau data recorder) adalah peranti elektronik yang merekod data dari masa ke masa dengan
Cara Menggunakan Sensor Suhu DHT11 Dengan Arduino dan Cetak Suhu Panas dan Kelembapan: 5 Langkah

Cara Menggunakan Sensor Suhu DHT11 Dengan Arduino dan Cetak Suhu Panas dan Kelembapan: Sensor DHT11 digunakan untuk mengukur suhu dan kelembapan. Mereka adalah penggemar elektronik yang sangat popular. Sensor kelembapan dan suhu DHT11 menjadikannya sangat mudah untuk menambahkan data kelembapan dan suhu ke projek elektronik DIY anda. Per
Paparan Suhu dan Kelembapan dan Pengumpulan Data Dengan Arduino dan Pemprosesan: 13 Langkah (dengan Gambar)

Paparan Suhu dan Kelembapan dan Pengumpulan Data Dengan Arduino dan Pemprosesan: Pengenalan: Ini adalah Projek yang menggunakan papan Arduino, Sensor (DHT11), komputer Windows dan program Pemprosesan (boleh dimuat turun percuma) untuk memaparkan data Suhu, Kelembapan dalam digital dan borang graf bar, masa dan tarikh paparan dan jalankan waktu mengira
SENSOR SUHU DENGAN LCD DAN LED (Membuat Sensor Suhu Dengan LCD dan LED): 6 Langkah (dengan Gambar)

SENSOR SUHU DENGAN LCD DAN LED (Membuat Sensor Suhu Dengan LCD dan LED): hai, saya. Ini adalah bacaan suhu dengan reka bentuk saya sendiri, dengan sensor ini dan