Mục lục:
- Bước 1:
- Bước 2: Mua các bộ phận bên dưới:
- Bước 3: Đấu dây
- Bước 4: Chuẩn bị mạch PH, DO, thẻ SD
- Bước 5: Chuẩn bị phần mềm
- Bước 6: Bắt đầu mã hóa
- Bước 7: Kết quả trên dây (có thể được cải thiện) và màn hình LCD
- Bước 8: Nhập dữ liệu và tạo biểu đồ
- Bước 9: Hiệu chuẩn
- Bước 10: Quá nhiều dây?
- Bước 11: Công nhận:
Video: Cách tạo bộ ghi dữ liệu cho nhiệt độ, độ PH và oxy hòa tan: 11 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
Mục tiêu:
- Tạo bộ ghi dữ liệu với giá ≤ 500 đô la. Nó lưu trữ dữ liệu về nhiệt độ, pH và DO bằng tem thời gian và sử dụng giao tiếp I2C.
- Tại sao lại sử dụng I2C (Mạch tích hợp liên)? Người ta có thể xếp chồng lên nhau nhiều cảm biến trên cùng một dòng với điều kiện mỗi cảm biến có một địa chỉ duy nhất.
Bước 1:
Bước 2: Mua các bộ phận bên dưới:
- Arduino MEGA 2560, $ 35,
- Bộ đổi nguồn cho bảng Arduino, $ 5,98,
- Mô-đun LCD I2C (màn hình), $ 8,99,
- Đồng hồ thời gian thực (RTC) đột phá, $ 7,5,
- Bảng đột phá thẻ MicroSD, $ 7,5,
- Thẻ SD 4GB, $ 6,98,
- Cảm biến kỹ thuật số DS18B20 chống nước, $ 9,95,
- Đầu dò pH + Bộ dụng cụ + Bộ đệm tiêu chuẩn, $ 149,15,
- DO thăm dò + Bộ dụng cụ + Bộ đệm tiêu chuẩn, $ 247,45,
- Breadboard, cáp jumper, $ 7,98,
- (Tùy chọn) Bộ cách ly điện áp, $ 24,
Tổng: $ 510,48
* Một số bộ phận nhất định (như bảng chung) có thể được mua từ các nhà cung cấp khác (eBay, người bán Trung Quốc) với giá thấp hơn. Các đầu dò pH và DO được khuyến nghị lấy chúng từ Atlas Scientific.
* Nên sử dụng đồng hồ vạn năng để kiểm tra độ dẫn điện và điện áp. Nó có giá khoảng 10-15 đô la (https://goo.gl/iAMDJo)
Bước 3: Đấu dây
- Sử dụng cáp jumper / DuPont để kết nối các bộ phận như trong hình bên dưới.
- Sử dụng đồng hồ vạn năng để kiểm tra độ dẫn điện.
- Kiểm tra nguồn điện áp dương (VCC) và nối đất (GND) (rất dễ nhầm lẫn nếu bạn không rành về mạch điện)
- Cắm bộ đổi nguồn và kiểm tra chỉ báo nguồn ở từng bộ phận. Khi nghi ngờ, sử dụng đồng hồ đa năng để kiểm tra điện áp giữa VCC và GND là (5V)
Bước 4: Chuẩn bị mạch PH, DO, thẻ SD
- Chuyển sang I2C cho các mạch pH và DO
- Các đột phá về pH và DO được vận chuyển với giao tiếp Nối tiếp làm chế độ mặc định Truyền / Nhận (TX / RX). Để sử dụng chế độ I2C Đường đồng hồ (SCL) và Đường dữ liệu (SDA), hãy chuyển chế độ bằng cách (1): rút phích cắm các cáp VCC, TX, RX, (2): nhảy TX đến Nối đất cho Đầu dò, PGND (không phải GND), (3) cắm VCC vào mạch, (4): chờ đèn LED chuyển từ Green sang Blue. Xem thêm chi tiết ở trang 39 (Biểu dữ liệu cho mạch pH, https://goo.gl/d62Rqv)
- Làm tương tự bước với mạch DO
- (nếu bạn biết cách tải mẫu mã lên bảng, bạn có thể thực hiện thông qua Serial monitor)
- Định dạng thẻ SD sang định dạng FAT
Bước 5: Chuẩn bị phần mềm
- Tải xuống Môi trường phát triển tích hợp Arduino (IDE),
- Cài đặt thư viện cho Arduino IDE:
- Hầu hết chúng đều đi kèm với phần mềm Arduino. LiquidCrystal_I2C.h có sẵn trên GitHub
- Cài đặt trình điều khiển cho USB. Đối với Arduino chính hãng, bạn có thể không cần cài đặt. Đối với một trình điều khiển chung, bạn cần cài đặt trình điều khiển CH340 (GitHub:
- Kiểm tra xem bạn kết nối bo mạch chính xác hay không bằng cách chạy thử nghiệm đèn LED nhấp nháy
- Cách tìm địa chỉ MAC của nhiệt độ kỹ thuật số 18B20. Sử dụng mẫu máy quét I2C trong Arduino IDE với đầu dò được cắm vào. Mỗi thiết bị có một địa chỉ MAC duy nhất, vì vậy bạn có thể sử dụng nhiều đầu dò nhiệt độ với một đường chia sẻ (# 9). 18B20 sử dụng I2C một dây, vì vậy nó là một trường hợp đặc biệt của phương pháp giao tiếp I2C. Dưới đây là một phương pháp để tìm MAC - Kiểm soát Truy cập Y tế (“ROM” khi bạn chạy quy trình bên dưới).
Bước 6: Bắt đầu mã hóa
- Sao chép, dán mã bên dưới vào Arduino IDE:
- Hoặc tải xuống mã (.ino) và một cửa sổ mới sẽ xuất hiện trong Arduino IDE.
/*
Bài hướng dẫn tham khảo:
1. Bộ ghi nhiệt độ, ORP, pH:
2. Lá chắn Kỹ thuật số Bảo mật (SD):
Mã này sẽ xuất dữ liệu ra màn hình nối tiếp Arduino. Nhập lệnh vào màn hình nối tiếp Arduino để điều khiển Mạch pH EZO ở chế độ I2C.
Được sửa đổi từ các hướng dẫn tham khảo ở trên, chủ yếu từ mã I2C của Atlas-Scientific
Cập nhật lần cuối: Ngày 26 tháng 7 năm 2017 bởi Bình Nguyên
*/
#include // bật I2C.
#define pH_address 99 // số ID I2C mặc định cho Mạch pH EZO.
#define DO_address 97 // số ID I2C mặc định cho Mạch EZO DO.
#include "RTClib.h" // Các chức năng ngày và giờ sử dụng DS1307 RTC được kết nối qua I2C và Wire lib
RTC_DS1307 rtc;
#include // Dành cho SD libarary
#include // Thẻ SD để lưu trữ dữ liệu
const int chipSelect = 53; // cần tìm ra đột phá Adafruit SD //
// DO = MISO, DI = MOSI, trên chân ATmega #: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // sửa đổi logFileName để xác định thử nghiệm của bạn, cho exampe PBR_01_02, datalog1
id dài = 1; // số id để nhập thứ tự nhật ký
#bao gồm
Màn hình LCD LiquidCrystal_I2C (0x27, 20, 4);
#bao gồm
#bao gồm
#define ONE_WIRE_BUS 9 // xác định chân # cho đầu dò nhiệt độ
OneWire oneWire (ONE_WIRE_BUS);
Cảm biến nhiệt độ Dallas (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // Địa chỉ MAC, duy nhất cho mỗi đầu dò
Chuỗi dữ liệu; // biến thể chính để lưu trữ tất cả dữ liệu
Chuỗi dữ liệuString2; // một biến thể tạm thời để lưu trữ Nhiệt độ / pH / DO để in ra
dữ liệu char máy tính [20]; // lệnh từ Atlas Scientific: chúng ta tạo một mảng ký tự 20 byte để chứa dữ liệu đến từ pc / mac / other.
byte nhận_từ_máy_tính = 0; // chúng ta cần biết có bao nhiêu ký tự đã được nhận.
byte serial_event = 0; // cờ báo hiệu khi dữ liệu đã được nhận từ pc / mac / other.
mã byte = 0; // được sử dụng để giữ mã phản hồi I2C.
char pH_data [20]; // chúng ta tạo một mảng ký tự 20 byte để chứa dữ liệu đến từ mạch pH.
byte in_char = 0; // được sử dụng như một bộ đệm 1 byte để lưu trữ trong các byte liên kết từ Mạch pH.
byte i = 0; // bộ đếm dùng cho mảng ph_data.
int time_ = 1800; // được sử dụng để thay đổi độ trễ cần thiết tùy thuộc vào lệnh được gửi đến EZO Class pH Circuit.
float pH_float; // float var được sử dụng để giữ giá trị float của pH.
char DO_data [20];
// float temp_C;
void setup () // khởi tạo phần cứng.
{
Serial.begin (9600); // kích hoạt cổng nối tiếp.
Wire.begin (pH_address); // kích hoạt cổng I2C cho đầu dò pH
Wire.begin (DO_address);
lcd.init ();
lcd.begin (20, 4);
LCD đèn nền();
lcd.home ();
lcd.print ("Xin chào PBR!");
lcd.setCursor (0, 1);
lcd.print ("Đang khởi tạo…");
Serial.print ("RTC là…");
if (! rtc.begin ())
{
Serial.println ("RTC: Đồng hồ thời gian thực … KHÔNG TÌM HIỂU");
while (1); // (Serial.println ("RTC: Đồng hồ thời gian thực … FOUND"));
}
Serial.println ("CHẠY");
Serial.print ("Đồng hồ thời gian thực…");
if (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("Đang làm việc");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("Thẻ SD…"); // xem thẻ có tồn tại và có thể được khởi tạo hay không:
if (! SD.begin (chipSelect))
{Serial.println ("Không thành công"); // đừng làm gì nữa:
trở lại;
}
Serial.println ("Được");
lcd.setCursor (0, 1);
lcd.println ("Thẻ SD: OK");
Serial.print ("Tệp nhật ký:");
Serial.print (logFileName);
Serial.print ("…");
File logFile = SD.open (logFileName, FILE_WRITE); // Mở tập tin. "datalog" và in tiêu đề
if (logFile)
{
logFile.println (",,"); // cho biết có dữ liệu trong lần chạy trước đó
String header = "Ngày - Giờ, Nhiệt độ (C), pH, DO";
logFile.println (tiêu đề);
logFile.close ();
Serial.println ("ĐÃ SN SÀNG");
//Serial.println(dataString); // cũng in ra cổng nối tiếp:
}
else {Serial.println ("lỗi khi mở datalog"); } // nếu tệp không mở, sẽ xuất hiện lỗi:
lcd.setCursor (0, 2);
lcd.print ("Tệp nhật ký:");
lcd.println (logFileName);
chậm trễ (1000);
cảm biến.begin ();
sensor.setResolution (ProbeP, 10); // 10 là độ phân giải (10bit)
lcd.clear ();
id = 0;
}
void loop ()
{// vòng lặp chính.
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);
cảm biến.requestTempe Nhiệt độ ();
nhiệt độ hiển thị (ProbeP);
Wire.beginTransmission (pH_address); // gọi mạch bằng số ID của nó
Wire.write ('r'); // mã cứng r để đọc liên tục
Wire.endTransmission (); // kết thúc quá trình truyền dữ liệu I2C.
thời gian trì hoãn_); // đợi khoảng thời gian chính xác để mạch hoàn thành lệnh của nó.
Wire.requestFrom (pH_address, 20, 1); // gọi mạch và yêu cầu 20 byte (có thể nhiều hơn chúng ta cần)
while (Wire.available ()) // có các byte để nhận không
{
in_char = Wire.read (); // nhận một byte.
if ((in_char> 31) && (in_char <127)) // kiểm tra xem char có thể sử dụng được không (có thể in được)
{
pH_data = in_char; // tải byte này vào mảng của chúng ta.
i + = 1;
}
if (in_char == 0) // nếu chúng ta thấy rằng chúng ta đã được gửi một lệnh null.
{
i = 0; // đặt lại bộ đếm i về 0.
Wire.endTransmission (); // kết thúc quá trình truyền dữ liệu I2C.
nghỉ; // thoát khỏi vòng lặp while.
}
}
serial_event = 0; // đặt lại cờ sự kiện nối tiếp.
dataString2 + = ",";
dataString2 + = String (pH_data);
Wire.beginTransmission (DO_address); // gọi mạch bằng số ID của nó
Wire.write ('r');
Wire.endTransmission (); // kết thúc quá trình truyền dữ liệu I2C
thời gian trì hoãn_); // đợi khoảng thời gian chính xác để mạch hoàn thành lệnh của nó
Wire.requestFrom (DO_address, 20, 1); // gọi mạch và yêu cầu 20 byte
while (Wire.available ()) // có các byte để nhận.
{
in_char = Wire.read (); // nhận một byte.
if ((in_char> 31) && (in_char <127)) // kiểm tra xem char có thể sử dụng được không (có thể in được), nếu không, in_char chứa một ký hiệu ở đầu trong tệp.txt
{DO_data = in_char; // tải byte này vào mảng của chúng ta
i + = 1; // tạo bộ đếm cho phần tử mảng
}
if (in_char == 0)
{// nếu chúng tôi thấy rằng chúng tôi đã được gửi một lệnh null
i = 0; // đặt lại bộ đếm i về 0.
Wire.endTransmission (); // kết thúc quá trình truyền dữ liệu I2C.
nghỉ; // thoát khỏi vòng lặp while.
}
}
serial_event = 0; // đặt lại cờ sự kiện nối tiếp
pH_float = atof (pH_data);
dataString2 + = ",";
dataString2 + = String (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Nhiệt độ / pH / DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString + = ',';
dataString + = dataString2;
File dataFile = SD.open (logFileName, FILE_WRITE); // Mở tập tin. lưu ý rằng mỗi lần chỉ có thể mở một tệp, vì vậy bạn phải đóng tệp này trước khi mở tệp khác.
if (dataFile) // nếu tệp có sẵn, hãy ghi vào tệp đó:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // cũng in ra cổng nối tiếp:
}
else {Serial.println ("lỗi khi mở tệp datalog"); } // nếu tệp không mở, sẽ xuất hiện lỗi:
lcd.setCursor (0, 3);
lcd.print ("Đang chạy (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // tăng một ID lần lặp tiếp theo
dataString = "";
chậm trễ (300000); // trì hoãn 5 phút = 5 * 60 * 1000 mili giây
lcd.clear ();
} // kết thúc vòng lặp chính
void displayTempe Heat (DeviceAddress deviceAddress)
{
float tempC = sensor.getTempC (deviceAddress);
if (tempC == -127,00) lcd.print ("Lỗi Nhiệt độ");
else dataString2 = String (tempC);
} // đoạn mã kết thúc ở đây
- Chọn cổng COM phù hợp qua Arduino IDE trong Công cụ / Cổng
- Chọn bảng Arduino phù hợp. Tôi đã sử dụng Mega 2560 vì nó có nhiều bộ nhớ trong hơn. Arduino Nano hoặc Uno hoạt động tốt với thiết lập này.
- Kiểm tra và mã và tải lên mã
Bước 7: Kết quả trên dây (có thể được cải thiện) và màn hình LCD
- Lưu ý: Tôi gặp phải tiếng ồn từ đầu dò DO đến đầu dò pH sau 2-3 tháng hoạt động liên tục. Theo Atlas Scientific, một bộ cách ly điện áp trong đường dây được khuyến nghị khi các đầu dò pH, độ dẫn điện đang hoạt động cùng nhau. Thông tin chi tiết có trên trang 9 (https://goo.gl/d62Rqv)
- Dữ liệu đã ghi (dữ liệu đầu tiên có các ký tự chưa in trước dữ liệu pH và DO). Tôi đã lọc mã bằng cách chỉ cho phép các ký tự có thể in được.
Bước 8: Nhập dữ liệu và tạo biểu đồ
- Nhập dữ liệu từ văn bản trong tab DATA (Excel 2013)
- Phân tách dữ liệu bằng dấu phẩy (đó là lý do tại sao có dấu phẩy sau mỗi lần nhập dữ liệu lại hữu ích)
- Vẽ sơ đồ dữ liệu. Mỗi dữ liệu dưới đây có khoảng 1700 điểm. Khoảng thời gian đo là 5 phút (có thể điều chỉnh). Thời gian tối thiểu để các mạch DO và pH đọc dữ liệu là 1,8 giây.
Bước 9: Hiệu chuẩn
- Cảm biến nhiệt độ kỹ thuật số (18B20) có thể được hiệu chỉnh bằng cách điều chỉnh sự khác biệt trực tiếp với. Nếu không, nếu cần hiệu chuẩn bù và độ dốc, bạn có thể thực hiện bằng cách thay đổi các giá trị trên dòng # 453, DallasTempentic.cpp trong thư mục / library / DallasTempe Heat.
- Đối với đầu dò pH và DO, bạn có thể hiệu chuẩn đầu dò bằng các dung dịch đi kèm. Bạn phải sử dụng mã mẫu của Atlas Scientific và làm theo hướng dẫn bằng tệp này.
- Vui lòng theo dõi trang 26 và 50 đối với đầu dò pH (https://goo.gl/d62Rqv) để hiệu chuẩn và bù nhiệt độ, cũng như trang 7-8 và 50 đối với đầu dò DO (https://goo.gl/mA32mp). Trước tiên, vui lòng tải lên lại mã chung do Atlas cung cấp, mở Serial Monitor và nhập một lệnh thích hợp.
Bước 10: Quá nhiều dây?
- Bạn có thể loại bỏ thẻ SD và mô-đun đồng hồ thời gian thực bằng cách sử dụng Dragino Yun Shield cho bảng Arduino (https://goo.gl/J9PBTH). Mã cần được sửa đổi để hoạt động với Yun Shield. Đây là một nơi tốt để bắt đầu (https://goo.gl/c1x8Dm)
- Vẫn còn quá nhiều dây: Atlas Scientific đã tạo một hướng dẫn cho các mạch EZO (https://goo.gl/dGyb12) và bảng không hàn (https://goo.gl/uWF51n) của họ. Tích hợp nhiệt độ kỹ thuật số 18B20 ở đây (https://goo.gl/ATcnGd). Bạn cần phải làm quen với các lệnh trên Raspbian (một phiên bản của Debian Linux) chạy trên Raspberry Pi (https://goo.gl/549xvk)
Bước 11: Công nhận:
Đây là dự án phụ của tôi trong quá trình nghiên cứu sau tiến sĩ mà tôi đã làm việc trên một máy phản ứng quang sinh học trước để nuôi cấy vi tảo. Vì vậy, tôi nghĩ rằng cần phải ghi nhận các bên đã đưa ra các điều kiện để điều này xảy ra. Thứ nhất, khoản tài trợ, DE-EE0007093: “Làm giàu và phân phối CO2 trong khí quyển (ACED),” từ Bộ Năng lượng Hoa Kỳ, Văn phòng Tiết kiệm Năng lượng và Năng lượng Tái tạo Nhắm mục tiêu Nhiên liệu Sinh học và Nhiên liệu Sinh học. Tôi cảm ơn Tiến sĩ Bruce E. Rittmann tại Trung tâm Công nghệ Sinh học Môi trường Biodesign Swette, Công ty Thống nhất Bang Arizona đã cho tôi cơ hội để mày mò về điện tử và Arduino. Tôi được đào tạo về kỹ thuật môi trường, chủ yếu là hóa học, một chút vi sinh.
Đề xuất:
Cách thêm oxy hòa tan vào máy đo khí canh WiFi: 6 bước
Cách thêm Oxy hòa tan vào Máy đo thủy canh WiFi: Hướng dẫn này sẽ trình bày cách thêm đầu dò và mạch EZO D.O vào Bộ dụng cụ thủy canh WiFi từ Atlas Scientific. Giả định rằng người dùng có bộ dụng cụ thủy canh wifi đang hoạt động và hiện đã sẵn sàng để bổ sung oxy hòa tan. CẢNH BÁO: Atlas Sci
Sử dụng lại tản nhiệt máy tính để tạo tản nhiệt bóng bán dẫn: 7 bước
Sử dụng lại tản nhiệt máy tính để tạo tản nhiệt bóng bán dẫn: Một thời gian trước, tôi đã mua một số Raspberry Pi 3 để sử dụng. Vì chúng không có tản nhiệt nên tôi đã tìm mua một số chiếc. Tôi đã tìm kiếm nhanh trên Google và bắt gặp sản phẩm Có thể hướng dẫn này (Đế tản nhiệt Raspberry Pi) - đây là sau khi từ chối ý tưởng về
Cách tạo bộ ghi dữ liệu thời gian thực về độ ẩm và nhiệt độ với Arduino UNO và thẻ nhớ SD. DHT11 Mô phỏng ghi dữ liệu trong Proteus: 5 bước
Cách tạo bộ ghi dữ liệu thời gian thực về độ ẩm và nhiệt độ bằng Arduino UNO và thẻ nhớ SD. DHT11 Data-logger Simulation in Proteus: Giới thiệu: xin chào, đây là Liono Maker, đây là liên kết YouTube. Chúng tôi đang thực hiện một dự án sáng tạo với Arduino và làm việc trên các hệ thống nhúng.Data-Logger: Một trình ghi dữ liệu (cũng là trình ghi dữ liệu hoặc trình ghi dữ liệu) là một thiết bị điện tử ghi lại dữ liệu theo thời gian
Máy tạo ôxy / ôxy có kích thước bỏ túi: 5 bước
Máy tạo ôxy / ôxy kích thước bỏ túi: Hyđrô rất thú vị để chơi với, nhưng hầu hết các máy phát điện hiệu quả đều lớn. Tôi muốn tạo ra thứ gì đó nhỏ và có thể tạo ra hydro. Hướng dẫn này sẽ chỉ cho bạn cách chế tạo máy tạo oxy / hydro có kích thước bỏ túi. Đáng buồn thay, nó không phải là
Trình ghi dữ liệu lịch sử máy điều nhiệt Nest: 6 bước (có hình ảnh)
Trình ghi dữ liệu lịch sử máy điều nhiệt Nest: Máy điều nhiệt Nest theo dõi nhiệt độ, độ ẩm và mức sử dụng lò / AC và người dùng chỉ có thể xem dữ liệu lịch sử trong 10 ngày. Tôi muốn thu thập dữ liệu lịch sử (> 10 ngày) và tìm thấy tập lệnh bảng tính google ping lồng nhau vào mỗi thời điểm đã định