Talaan ng mga Nilalaman:
- Hakbang 1:
- Hakbang 2: Bilhin ang Mga Bahagi sa ibaba:
- Hakbang 3: Mga kable
- Hakbang 4: Ihanda ang PH, DO Circuits, SD Card
- Hakbang 5: Maghanda ng Software
- Hakbang 6: Simulan ang Coding
- Hakbang 7: Mga Resulta sa Mga Kable (Maaaring Pagbutihin) at LCD Display
- Hakbang 8: Mag-import ng Data at Gumawa ng isang Grap
- Hakbang 9: Pagkakalibrate
- Hakbang 10: Napakaraming Kable?
- Hakbang 11: Pagkilala:
Video: Paano Gumawa ng isang Data Logger para sa Temperatura, PH, at Dissolved Oxygen: 11 Mga Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Mga Layunin:
- Gumawa ng isang data logger sa halagang 500 $ 500. Nag-iimbak ito ng data para sa temperatura, pH, at DO na may time stamp at paggamit ng komunikasyon ng I2C.
- Bakit I2C (Inter-Integrated Circuit)? Ang isa ay maaaring mag-stack ng maraming mga sensor sa parehong linya na ibinigay na ang bawat isa sa kanila ay may isang natatanging address.
Hakbang 1:
Hakbang 2: Bilhin ang Mga Bahagi sa ibaba:
- Arduino MEGA 2560, $ 35,
- Power adapter para sa Arduino board, $ 5.98,
- LCD module I2C (display), $ 8.99,
- Breakout ng Real-Time Clock (RTC), $ 7.5,
- Breakout board ng MicroSD card, $ 7.5,
- 4GB SD card, $ 6.98,
- Hindi tinatagusan ng tubig DS18B20 Digital sensor, $ 9.95,
- pH probe + Kit + Standard buffers, $ 149.15, https://www.atlas-s Scientific.com/product_pages/kit…
- Suriin ang DO + Mga Kit + Mga Karaniwang buffer, $ 247.45, https://www.atlas-s Scientific.com/product_pages/kit…
- Breadboard, jumper cable, $ 7.98,
- (Opsyonal) Voltage Isolator, $ 24, https://www.atlas-s Scientific.com/product_pages/cir…
Kabuuan: $ 510.48
* Ang ilang mga bahagi (tulad ng generic board) ay maaaring mabili mula sa iba pang mga vendor (eBay, nagbebenta ng Intsik) para sa isang mas mababang presyo. Inirerekumenda ang mga probe ng pH at DO na makuha ang mga ito mula sa Atlas Scientific.
* Inirerekumenda ang isang multimeter upang suriin ang kondaktibiti at boltahe. Nagkakahalaga ito ng humigit-kumulang na $ 10-15 (https://goo.gl/iAMDJo)
Hakbang 3: Mga kable
- Gumamit ng mga jumper / DuPont cable upang ikonekta ang mga bahagi tulad ng ipinakita sa sketch sa ibaba.
- Gamitin ang multimeter upang suriin ang pagpapadaloy.
- Suriin ang Positive-Voltage Supply (VCC) at Ground (GND) (madaling malito kung hindi ka pamilyar sa circuit)
- I-plug ang power adapter at suriin ang tagapagpahiwatig ng kuryente sa bawat bahagi. Kapag may pag-aalinlangan, gamitin ang multi-meter upang suriin ang boltahe sa pagitan ng VCC at GND na (5V)
Hakbang 4: Ihanda ang PH, DO Circuits, SD Card
- Lumipat sa I2C para sa mga circuit ng PH at DO
- Ang mga breakout ng PH at DO ay ipinadala sa Serial na komunikasyon bilang default mode na Transmit / Receive (TX / RX). Upang magamit ang I2C mode Clock line (SCL), at linya ng Data (SDA), switch mode ng (1): un-plug VCC, TX, RX cables, (2): jump TX to Ground for Probe, PGND (not GND), (3) plug VCC sa circuit, (4): maghintay para sa LED na baguhin mula sa Green hanggang Blue. Higit pang mga detalye suriin sa pahina 39 (Datasheet para sa PH circuit,
- Gawin ang parehong hakbang sa DO circuit
- (kung alam mo kung paano i-upload ang sample code sa board, magagawa mo ito sa pamamagitan ng Serial monitor)
- I-format ang SD card sa format na FAT
Hakbang 5: Maghanda ng Software
- I-download ang Arduino Integrated Development Environment (IDE),
- I-install ang library sa Arduino IDE:
- Karamihan sa kanila ay mayroong Arduino software. Ang LiquidCrystal_I2C.h ay magagamit sa pamamagitan ng GitHub
- I-install ang driver para sa USB. Para sa tunay na Arduino, maaaring hindi mo kailangang mag-install ng isa. Para sa isang pangkaraniwan, kailangan mong i-install ang driver ng CH340 (GitHub:
- Suriin kung ikinonekta mo ang board nang tama sa pamamagitan ng pagpapatakbo ng isang blinking LED test
- Paano makahanap ng MAC address ng 18B20 digital na temperatura. Paggamit ng template ng scanner ng I2C sa Arduino IDE na naka-plug in ang probe. Ang bawat aparato ay may natatanging MAC address, kaya maaari mong gamitin ang maraming mga pagsisiyasat sa temperatura sa isang nakabahaging linya (# 9). Ang 18B20 ay gumagamit ng isang wire I2C, kaya't ito ay isang espesyal na kaso ng I2C na paraan ng komunikasyon. Nasa ibaba ang isang pamamaraan upang makahanap ng MAC - Medical Access Control ("ROM" kapag pinatakbo mo ang pamamaraan sa ibaba).
Hakbang 6: Simulan ang Coding
- Kopyahin i-paste ang code sa ibaba sa Arduino IDE:
- O i-download ang code (.ino) at ang isang bagong window ay dapat na mag-pop up sa Arduino IDE.
/*
Mga tutorial sa sanggunian:
1. Temperatura, ORP, ph logger:
2. Secured Digital (SD) Shield:
Ang code na ito ay maglalabas ng data sa serial monitor ng Arduino. I-type ang mga utos sa serial monitor ng Arduino upang makontrol ang EZO pH Circuit sa I2C mode.
Binago mula sa mga sanggunian na mga tutorial sa itaas, karamihan ay mula sa I2C code ng Atlas-Scientific
Huling na-update: Hulyo 26, 2017 ni Binh Nguyen
*/
# isama // paganahin ang I2C.
# tukuyin ang pH_address 99 // default I2C ID number para sa EZO pH Circuit.
#define DO_address 97 // default I2C ID number for EZO DO Circuit.
# isama ang "RTClib.h" // Mga pag-andar ng petsa at oras gamit ang isang DS1307 RTC na konektado sa pamamagitan ng I2C at Wire lib
RTC_DS1307 rtc;
#include // For SD libarary
#include // SD card upang mag-imbak ng data
const int chipSelect = 53; // kailangang alamin para sa breakout ng Adafruit SD //
// DO = MISO, DI = MOSI, sa ATmega pin #: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // baguhin ang logFileName upang makilala ang iyong eksperimento, para sa halimbawang PBR_01_02, datalog1
mahabang id = 1; // ang id number upang ipasok ang order ng log
# isama
LiquidCrystal_I2C lcd (0x27, 20, 4);
# isama
# isama
# tukuyin ang ONE_WIRE_BUS 9 // tukuyin ang pin # para sa probe ng temperatura
OneWire oneWire (ONE_WIRE_BUS);
Mga sensor ng DallasTemperature (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC address, natatangi sa bawat pagsisiyasat
String dataString; // ang pangunahing variant upang maiimbak ang lahat ng data
String dataString2; // isang pansamantalang variant upang mag-imbak ng Temperatura / pH / DO para ma-print
char computerdata [20]; // tagubilin mula sa Atlas Scientific: gumawa kami ng isang 20 byte character array upang hawakan ang papasok na data mula sa isang pc / mac / iba pa.
byte received_from_computer = 0; // kailangan nating malaman kung ilang character ang natanggap.
byte serial_event = 0; // isang watawat upang mag-signal kapag natanggap ang data mula sa pc / mac / iba pa.
byte code = 0; // ginamit upang hawakan ang I2C code ng pagtugon.
char pH_data [20]; // gumawa kami ng isang 20 byte character array upang hawakan ang papasok na data mula sa circuit ng pH.
byte in_char = 0; // ginamit bilang isang 1 byte buffer upang maiimbak sa mga nakagapos na byte mula sa PH Circuit.
byte i = 0; // counter na ginagamit para sa ph_data array.
int time_ = 1800; // ginamit upang baguhin ang pagkaantala na kinakailangan depende sa utos na ipinadala sa EZO Class pH Circuit.
lumutang pH_float; // float var na ginamit upang hawakan ang float halaga ng ph.
char DO_data [20];
// float temp_C;
void setup () // hardware initialization.
{
Serial.begin (9600); // paganahin ang serial port.
Wire.begin (pH_address); // paganahin ang I2C port para sa probe ng 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 ("Initializing…");
Serial.print ("Ang RTC ay …");
kung (! rtc.begin ())
{
Serial.println ("RTC: Oras ng real-time … HINDI NAKITA");
habang (1); // (Serial.println ("RTC: Oras na real-time … Nahanap"));
}
Serial.println ("RUNNING");
Serial.print ("Real-time Clock …");
kung (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("TRABAHO");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("SD card…"); // tingnan kung ang kard ay naroroon at maaaring mapasimulan:
kung (! SD.begin (chipSelect))
{Serial.println ("Nabigo"); // huwag ka nang gumawa ng anumang bagay:
bumalik;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println ("SD card: OK");
Serial.print ("Log File:");
Serial.print (logFileName);
Serial.print ("…");
File logFile = SD.open (logFileName, FILE_WRITE); // buksan ang file. "datalog" at i-print ang header
kung (logFile)
{
logFile.println (",,,"); // ipahiwatig na mayroong mga data sa nakaraang pagtakbo
String header = "Date -Time, Temp (C), pH, DO";
logFile.println (header);
logFile.close ();
Serial.println ("HANDA");
//Serial.println(dataString); // print sa serial port din:
}
iba pa {Serial.println ("error opening datalog"); } // kung hindi bukas ang file, mag-pop up ng isang error:
lcd.setCursor (0, 2);
lcd.print ("Mag-log file:");
lcd.println (logFileName);
pagkaantala (1000);
sensor. simula ();
sensors.setResolution (ProbeP, 10); // 10 ang resolusyon (10bit)
lcd.clear ();
id = 0;
}
walang bisa loop ()
{// ang pangunahing loop.
dataString = String (id);
dataString = String (',');
DateTime ngayon = 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);
sensors.requestTemperature ();
displayTemperature (ProbeP);
Wire.beginTransmission (pH_address); // tawagan ang circuit sa pamamagitan ng numero ng ID nito
Wire.write ('r'); // hard code r upang mabasa nang tuloy-tuloy
Wire.endTransmission (); // tapusin ang paghahatid ng data ng I2C.
antala (oras_); // hintayin ang tamang dami ng oras para makumpleto ng circuit ang tagubilin nito.
Wire.requestFrom (pH_address, 20, 1); // tawagan ang circuit at humiling ng 20 bytes (maaaring higit ito sa kailangan namin)
habang (Wire.available ()) // may mga byte na matatanggap
{
in_char = Wire.read (); // makatanggap ng isang byte.
kung ((in_char> 31) && (in_char <127)) // suriin kung magagamit ang char (mai-print)
{
pH_data = in_char; // load this byte into our array.
ako + = 1;
}
kung (in_char == 0) // kung nakikita namin na pinadalhan kami ng isang null na utos.
{
i = 0; // reset ang counter i sa 0.
Wire.endTransmission (); // tapusin ang paghahatid ng data ng I2C.
pahinga; // exit the habang loop.
}
}
serial_event = 0; // reset ang flag ng pangyayari sa serial.
dataString2 + = ",";
dataString2 + = String (pH_data);
Wire.beginTransmission (DO_address); // tawagan ang circuit sa pamamagitan ng numero ng ID nito
Wire.write ('r');
Wire.endTransmission (); // tapusin ang paghahatid ng data ng I2C
antala (oras_); // hintayin ang tamang dami ng oras para makumpleto ng circuit ang tagubilin nito
Wire.requestFrom (DO_address, 20, 1); // tawagan ang circuit at humiling ng 20 bytes
habang (Wire.available ()) // may mga byte na matatanggap.
{
in_char = Wire.read (); // makatanggap ng isang byte.
kung ((in_char> 31) && (in_char <127)) // suriin kung magagamit ang char (mai-print), kung hindi man naglalaman ang in_char ng isang simbolo sa simula sa.txt file
{DO_data = in_char; // load this byte into our array
ako + = 1; // incur the counter para sa elemento ng array
}
kung (in_char == 0)
{// kung nakita namin na pinadalhan kami ng isang null na utos
i = 0; // reset ang counter i sa 0.
Wire.endTransmission (); // tapusin ang paghahatid ng data ng I2C.
pahinga; // exit the habang loop.
}
}
serial_event = 0; // reset ang flag ng pangyayari sa serial
pH_float = atof (pH_data);
dataString2 + = ",";
dataString2 + = String (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Temperatura / pH / DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString + = ',';
dataString + = dataString2;
File dataFile = SD.open (logFileName, FILE_WRITE); // buksan ang file. tandaan na ang isang file lamang ang maaaring buksan nang paisa-isa, kaya kailangan mong isara ang isang ito bago buksan ang isa pa.
kung (dataFile) // kung ang file ay magagamit, sumulat dito:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // print sa serial port din:
}
iba pa {Serial.println ("error sa pagbubukas ng file ng datalog"); } // kung hindi bukas ang file, mag-pop up ng isang error:
lcd.setCursor (0, 3);
lcd.print ("Tumatakbo (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // taasan ang isang ID sa susunod na pag-ulit
dataString = "";
pagkaantala (300000); // delay 5 mintues = 5 * 60 * 1000 ms
lcd.clear ();
} // pagtatapos ng pangunahing loop
void displayTemperature (DeviceAddress aparatoAddress)
{
float tempC = sensors.getTempC (deviceAddress);
kung (tempC == -127.00) lcd.print ("Temperatura Error");
iba dataString2 = String (tempC);
} // natapos ang code dito
- Piliin ang tamang COM port sa pamamagitan ng Arduino IDE sa ilalim ng Tools / Port
- Piliin ang tamang board ng Arduino. Gumamit ako ng Mega 2560 sapagkat mayroon itong mas panloob na memorya. Ang Arduino Nano o Uno ay gumagana nang maayos sa pag-setup na ito.
- Suriin at i-code at i-upload ang code
Hakbang 7: Mga Resulta sa Mga Kable (Maaaring Pagbutihin) at LCD Display
- Paunawa: Nakatagpo ako ng ingay mula sa DO probe hanggang sa pH probe pagkatapos ng 2-3 buwan ng patuloy na operasyon. Ayon sa Atlas Scientific, inirerekumenda ang isang in-line voltage isolator kapag ang pH, ang mga probe ng conductivity ay magkakasamang umaandar. Ang higit pang mga detalye ay nasa pahina 9 (https://goo.gl/d62Rqv)
- Ang naka-log na data (ang una ay may hindi naka-print na mga character bago ang data ng PH at DO). Nasala ko sa code sa pamamagitan ng pagpapahintulot sa mga naka-print na character lamang.
Hakbang 8: Mag-import ng Data at Gumawa ng isang Grap
- Mag-import ng data Mula sa Teksto Sa ilalim ng tab na DATA (Excel 2013)
- Paghiwalayin ang data sa pamamagitan ng kuwit (iyon ang dahilan kung bakit kapaki-pakinabang ang pagkakaroon ng mga kuwit pagkatapos ng bawat input ng data)
- I-plot ang data. Ang bawat data sa ibaba ay may tungkol sa 1700 puntos. Ang agwat ng pagsukat ay 5 minuto (nababagay). Ang pinakamaliit para sa DO at pH circuit upang mabasa ang data ay 1.8 secs.
Hakbang 9: Pagkakalibrate
- Ang sensor ng temperatura ng digital (18B20) ay maaaring mai-calibrate sa pamamagitan ng pag-aayos ng pagkakaiba nang direkta sa. Kung hindi man, kung ang bayad at ang slope ay nangangailangan ng pagkakalibrate, magagawa mo sa pamamagitan ng pagbabago ng mga halaga sa linya # 453, DallasTemperature.cpp sa folder ng / mga aklatan / DallasTemperature.
- Para sa mga probe ng pH at DO, maaari mong i-calibrate ang mga probe na may kasamang mga solusyon. Kailangan mong gamitin ang sample code sa pamamagitan ng Atlas Scientific at sundin ang tagubilin ng file na ito.
- Mangyaring sundin ang mga pahina 26 at 50 para sa probe ng pH (https://goo.gl/d62Rqv) para sa pagkakalibrate at bayad sa temperatura, at mga pahina din, 7-8 at 50 para sa DO probe (https://goo.gl/mA32mp). Una, mangyaring muling i-upload ang generic code na ibinigay ng Atlas, buksan ang Serial Monitor at susi sa isang wastong utos.
Hakbang 10: Napakaraming Kable?
- Maaari mong alisin ang SD card at ang module ng real time na orasan sa pamamagitan ng paggamit ng Dragino Yun Shield para sa Arduino boards (https://goo.gl/J9PBTH). Kailangang mabago ang code upang gumana kasama ang Yun Shield. Narito ang isang magandang lugar upang magsimula (https://goo.gl/c1x8Dm)
- Masyadong maraming kable: ang Atlas Scientific ay gumawa ng isang gabay para sa kanilang mga EZO circuit (https://goo.gl/dGyb12) at solderless board (https://goo.gl/uWF51n). Ang pagsasama ng 18B20 digital na temperatura ay narito (https://goo.gl/ATcnGd). Kailangan mong maging pamilyar sa mga utos sa Raspbian (isang bersyon ng Debian Linux) na tumatakbo sa Raspberry Pi (https://goo.gl/549xvk)
Hakbang 11: Pagkilala:
Ito ang aking proyekto sa panig sa panahon ng aking pagsasaliksik na postdoctoral kung saan nagtrabaho ako sa isang paunang photobioreactor upang malinang ang microalgae. Kaya naisip ko na kinakailangan na kredito ang mga partido na nagbigay ng mga kundisyon upang mangyari ito. Una, ang bigay, DE-EE0007093: "Atmospheric CO2 Pagpapayaman at Paghahatid (ACED)," mula sa Kagawaran ng Enerhiya ng Estados Unidos, Opisina ng Kakayahang Enerhiya at Nababago na Enerhiya na Na-target sa Algal Biofuels at Bioproduct. Pinasalamatan ko si Dr. Bruce E. Rittmann sa Biodesign Swette Center para sa Environmental Biotechnology, Arizona State Univesity para sa pagbibigay sa akin ng pagkakataong mag-tinker ng electronics at Arduino. Sanay ako sa engineering sa kapaligiran, karamihan ay kimika, isang kaunting microbiology.
Inirerekumendang:
Paano Magdagdag ng Dissolved Oxygen sa WiFi Hydroponics Meter: 6 na Hakbang
Paano Magdagdag ng Dissolved Oxygen sa WiFi Hydroponics Meter: Ipapakita ng tutorial na ito kung paano idaragdag ang EZO D.O circuit at iimbestigahan ang WiFi Hydroponics Kit mula sa Atlas Scientific. Ipinapalagay na ang gumagamit ay may wifi hydroponics kit na gumagana at handa na ngayong magdagdag ng natutunaw na oxygen. WARNINGS: Atlas Sci
Paano Gumawa ng Humidity at Temperatura Real Time Data Recorder Sa Arduino UNO at SD-Card - DHT11 Data-logger Simulation sa Proteus: 5 Mga Hakbang
Paano Gumawa ng Humidity at Temperatura Real Time Data Recorder Sa Arduino UNO at SD-Card | DHT11 Data-logger Simulation sa Proteus: Panimula: hi, ito ang Liono Maker, narito ang link sa YouTube. Gumagawa kami ng malikhaing proyekto kasama ang Arduino at nagtatrabaho sa mga naka-embed na system. Data-Logger: Ang isang data logger (din data-logger o data recorder) ay isang elektronikong aparato na nagtatala ng data sa paglipas ng panahon
Paano Gumawa ng isang Drone Gamit ang Arduino UNO - Gumawa ng isang Quadcopter Gamit ang Microcontroller: 8 Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Drone Gamit ang Arduino UNO | Gumawa ng isang Quadcopter Gamit ang Microcontroller: PanimulaBisitahin ang Aking Youtube Channel Ang isang Drone ay isang napakamahal na gadget (produkto) na bibilhin. Sa post na ito tatalakayin ko, kung paano ko ito magagawa sa murang ?? At Paano mo magagawa ang iyong sarili tulad nito sa murang presyo … Sa India ang lahat ng mga materyales (motor, ESC
Paano Gumawa ng isang Split Screen Video na May Apat na Hakbang: 4 na Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Split Screen Video na May Apat na Hakbang: Madalas naming nakikita ang isang parehong palabas sa isang eksena nang dalawang beses sa isang dula sa TV. At sa pagkakaalam namin, walang kambal na kapatid ang aktor. Napanood din namin na ang dalawang mga video sa pag-awit ay inilalagay sa isang screen upang ihambing ang kanilang mga kasanayan sa pagkanta. Ito ang lakas ng spl
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: 7 Mga Hakbang (na may Mga Larawan)
Paano Gumawa ng isang Autonomous Basketball Playing Robot Paggamit ng isang IRobot Lumikha Bilang Base: Ito ang aking entry para sa hamon sa iRobot Lumikha. Ang pinakamahirap na bahagi ng buong prosesong ito para sa akin ay ang pagpapasya kung ano ang gagawin ng robot. Nais kong ipakita ang mga cool na tampok ng Lumikha, habang nagdaragdag din sa ilang robo flair. Lahat ng akin