Satura rādītājs:
- 1. darbība:
- 2. darbība: iegādājieties tālāk norādītās detaļas:
- 3. darbība: elektroinstalācija
- 4. darbība: sagatavojiet PH, DO shēmas, SD karti
- 5. solis: sagatavojiet programmatūru
- 6. darbība: sāciet kodēšanu
- 7. darbība: vadu (var uzlabot) un LCD displeja rezultāti
- 8. darbība: importējiet datus un izveidojiet diagrammu
- 9. solis: kalibrēšana
- 10. solis: pārāk daudz vadu?
- 11. solis: apstiprinājums:
Video: Kā izveidot datu reģistrētāju temperatūrai, PH un izšķīdušajam skābeklim: 11 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Mērķi:
- Izveidojiet datu reģistrētāju par ≤ 500 USD. Tas saglabā datus par temperatūru, pH un DO ar laika zīmogu un izmantojot I2C sakarus.
- Kāpēc I2C (integrētā shēma)? Vienā rindā var sakraut tik daudz sensoru, ņemot vērā, ka katram no tiem ir unikāla adrese.
1. darbība:
2. darbība: iegādājieties tālāk norādītās detaļas:
- Arduino MEGA 2560, 35 ASV dolāri,
- Strāvas adapteris Arduino plāksnei, 5,98 ASV dolāri,
- LCD modulis I2C (displejs), 8,99 ASV dolāri,
- Reālā laika pulksteņa (RTC) izlaide, 7,5 ASV dolāri,
- MicroSD karšu sadalīšanas panelis, 7,5 ASV dolāri,
- 4 GB SD karte, 6,98 USD,
- Ūdensnecaurlaidīgs digitālais sensors DS18B20, 9,95 ASV dolāri,
- pH zonde + komplekti + standarta buferi, 149,15 ASV dolāri,
- DO zonde + komplekti + standarta buferi, 247,45 USD,
- Maizes dēlis, džemperis, 7,98 ASV dolāri,
- (Pēc izvēles) Sprieguma izolators, 24 ASV dolāri,
Kopā: 510,48 ASV dolāri
* Atsevišķas detaļas (piemēram, vispārīgo plāksni) varēja iegādāties no citiem pārdevējiem (eBay, Ķīnas pārdevējs) par zemāku cenu. Lai iegūtu tos no Atlas Scientific, ieteicams izmantot pH un DO zondes.
* Lai pārbaudītu vadītspēju un spriegumu, ieteicams izmantot multimetru. Tas maksā apmēram 10-15 USD (https://goo.gl/iAMDJo)
3. darbība: elektroinstalācija
- Izmantojiet džemperi/DuPont kabeļus, lai savienotu detaļas, kā parādīts zemāk esošajā skicē.
- Izmantojiet multimetru, lai pārbaudītu vadītspēju.
- Pārbaudiet pozitīvā sprieguma padevi (VCC) un zemējumu (GND) (ja jūs neesat pazīstams ar ķēdi, to ir viegli sajaukt)
- Pievienojiet strāvas adapteri un pārbaudiet strāvas indikatoru katrā daļā. Ja rodas šaubas, izmantojiet multimetru, lai pārbaudītu spriegumu starp VCC un GND (5V)
4. darbība: sagatavojiet PH, DO shēmas, SD karti
- Pārslēdzieties uz I2C pH un DO ķēdēm
- PH un DO pārtraukumi tiek piegādāti ar seriālo komunikāciju kā noklusējuma režīmu Pārraide/saņemšana (TX/RX). Lai izmantotu I2C režīma pulksteņa līniju (SCL) un datu līniju (SDA), pārslēdziet režīmu līdz (1): atvienojiet VCC, TX, RX kabeļus, (2): pārejiet no TX uz Ground for Probe, PGND (nevis GND)), (3) pievienojiet VCC ķēdei, (4): pagaidiet, līdz gaismas diode mainās no zaļas uz zilu. Sīkāku informāciju skatiet 39. lpp. (PH shēmas datu lapa,
- Dariet to pašu ar DO ķēdi
- (ja jūs zināt, kā augšupielādēt parauga kodu uz tāfeles, varat to izdarīt, izmantojot sērijas monitoru)
- Formatējiet SD karti FAT formātā
5. solis: sagatavojiet programmatūru
- Lejupielādējiet Arduino integrēto attīstības vidi (IDE),
- Instalējiet bibliotēku Arduino IDE:
- Lielākajai daļai no tām ir Arduino programmatūra. LiquidCrystal_I2C.h ir pieejams vietnē GitHub
- Instalējiet USB draiveri. Oriģinālam Arduino jums tas, iespējams, nav jāinstalē. Lai iegūtu vispārēju, jums jāinstalē CH340 draiveris (GitHub:
- Pārbaudiet, vai pareizi pievienojat plāksni, veicot mirgojošu LED testu
- Kā atrast 18B20 digitālās temperatūras MAC adresi. Izmantojot I2C skenera veidni Arduino IDE ar pievienotu zondi. Katrai ierīcei ir unikāla MAC adrese, tāpēc ar vienu koplīniju varat izmantot tik daudz temperatūras zondes (#9). 18B20 izmanto viena stieples I2C, tāpēc tas ir īpašs I2C sakaru metodes gadījums. Zemāk ir viena metode, kā atrast MAC - medicīnas piekļuves kontrole (“ROM”, veicot tālāk norādīto procedūru).
6. darbība: sāciet kodēšanu
- Kopējiet zemāk esošo kodu uz Arduino IDE:
- Vai arī lejupielādējiet kodu (.ino), un Arduino IDE tiks parādīts jauns logs.
/*
Atsauces pamācības:
1. Temperatūra, ORP, pH reģistrētājs:
2. Drošs digitālais (SD) vairogs:
Šis kods izvadīs datus uz Arduino sērijas monitoru. Ievadiet komandas Arduino sērijas monitorā, lai kontrolētu EZO pH ķēdi I2C režīmā.
Modificēts no iepriekš minētajām apmācībām, galvenokārt no Atlas-Scientific I2C koda
Pēdējo reizi atjaunināts: Binh Nguyen, 2017. gada 26. jūlijs
*/
#include // iespējot I2C.
#define pH_address 99 // noklusējuma I2C ID numurs EZO pH ķēdei.
#define DO_address 97 // noklusējuma I2C ID numurs EZO DO ķēdei.
#include "RTClib.h" // Datuma un laika funkcijas, izmantojot DS1307 RTC, kas savienots, izmantojot I2C un Wire lib
RTC_DS1307 rtc;
#include // SD bibliotēkai
#include // SD karte datu glabāšanai
const int chipSelect = 53; // nepieciešams izdomāt Adafruit SD pārtraukumu //
// DO = MISO, DI = MOSI, ATmega pin#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // modificējiet logFileName, lai identificētu eksperimentu, piemēram, PBR_01_02, datalog1
garš id = 1; // ID numurs žurnāla pasūtījuma ievadīšanai
#iekļaut
LiquidCrystal_I2C LCD (0x27, 20, 4);
#iekļaut
#iekļaut
#define ONE_WIRE_BUS 9 // definējiet temperatūras zondes tapu #
OneWire oneWire (ONE_WIRE_BUS);
Dalasas temperatūras sensori (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC adrese, unikāla katrai zondei
String dataString; // galvenais variants visu datu glabāšanai
String dataString2; // pagaidu variants temperatūras/pH/DO uzglabāšanai drukāšanai
char datora dati [20]; // instrukcija no Atlas Scientific: mēs izveidojam 20 baitu rakstzīmju masīvu, lai turētu ienākošos datus no datora/mac/cita.
baits saņemts_ no datora = 0; // mums jāzina, cik rakstzīmju ir saņemtas.
baits serial_event = 0; // karodziņš, kas signalizē, kad dati ir saņemti no datora/mac/cita.
baitu kods = 0; // izmanto, lai turētu atbildes kodu I2C.
ogles pH_dati [20]; // mēs izveidojam 20 baitu rakstzīmju masīvu, lai turētu ienākošos datus no pH ķēdes.
baits in_char = 0; // izmanto kā 1 baitu buferšķīdumu, lai uzglabātu saistītos baitos no pH shēmas.
baits i = 0; // skaitītājs, ko izmanto masīvam ph_data.
int laiks_ = 1800; // izmanto, lai mainītu vajadzīgo aizkavi atkarībā no komandas, kas nosūtīta EZO klases pH shēmai.
pludiņš pH_float; // float var, ko izmanto, lai noturētu pH peldošo vērtību.
char DO_data [20];
// peldēt temp_C;
void setup () // aparatūras inicializācija.
{
Sērijas sākums (9600); // iespējot seriālo portu.
Wire.begin (pH_address); // iespējot I2C portu pH zondei
Wire.begin (DO_address);
lcd.init ();
lcd. sākums (20, 4);
lcd.fona apgaismojums ();
lcd.home ();
lcd.print ("Labdien PBR!");
lcd.setCursor (0, 1);
lcd.print ("Inicializēšana …");
Serial.print ("RTC ir …");
ja (! rtc.begin ())
{
Serial.println ("RTC: reāllaika pulkstenis … NOT FOUND");
while (1); // (Serial.println ("RTC: reālā laika pulkstenis… FOUND"));
}
Serial.println ("RUNNING");
Serial.print ("Reālā laika pulkstenis …");
ja (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("DARBA");
lcd.setCursor (0, 0);
lcd.println ("RTC: Labi");
Serial.print ("SD karte …"); // pārbaudiet, vai karte ir pieejama un vai to var inicializēt:
ja (! SD.begin (chipSelect))
{Serial.println ("Neizdevās"); // neko vairāk nedari:
atgriešanās;
}
Serial.println ("Labi");
lcd.setCursor (0, 1);
lcd.println ("SD karte: Labi");
Serial.print ("Žurnāla fails:");
Serial.print (logFileName);
Serial.print ("…");
Fails logFile = SD.open (logFileName, FILE_WRITE); // atveriet failu. "datalog" un izdrukājiet galveni
ja (logFile)
{
logFile.println (",,"); // norādiet, ka iepriekšējā braucienā bija dati
String header = "Datums -laiks, temperatūra (C), pH, DO";
logFile.println (galvene);
logFile.close ();
Serial.println ("GATAVS");
//Serial.println(dataString); // drukājiet arī uz seriālo portu:
}
else {Serial.println ("kļūda, atverot datu katalogu"); } // ja fails nav atvērts, parādiet kļūdu:
lcd.setCursor (0, 2);
lcd.print ("Žurnāla fails:");
lcd.println (logFileName);
kavēšanās (1000);
sensor.begin ();
sensors.setResolution (ProbeP, 10); // 10 ir izšķirtspēja (10 biti)
lcd.clear ();
id = 0;
}
tukša cilpa ()
{// galvenā cilpa.
dataString = String (id);
dataString = Virkne (',');
DateTime now = rtc.now ();
dataString = String (tagad.gads (), DEC);
dataString += String ('/');
dataString += String (tagad.mēnesis (), DEC);
dataString += String ('/');
dataString += String (tagad.diena (), DEC);
dataString += String ('');
dataString += String (tagad.stunda (), DEC);
dataString += String (':');
dataString += String (tagad.minūte (), DEC);
dataString += String (':');
dataString += String (tagad.second (), DEC);
lcd.home ();
lcd.print (dataString);
sensors.requestTemperatures ();
displayTemperature (ProbeP);
Wire.beginTransmission (pH_address); // izsaukt ķēdi pēc tās ID numura
Wire.write ('r'); // cietais kods r, ko nepārtraukti lasīt
Wire.endTransmission (); // beigt I2C datu pārraidi.
kavēšanās (laiks_); // pagaidiet pareizo laiku, lai ķēde pabeigtu norādījumus.
Wire.requestFrom (pH_address, 20, 1); // piezvaniet ķēdei un pieprasiet 20 baitus (tas var būt vairāk, nekā mums nepieciešams)
kamēr (Wire.available ()) // vai ir baiti, ko saņemt
{
in_char = Wire.read (); // saņemt baitu.
if ((in_char> 31) && (in_char <127)) // pārbaudiet, vai ogles ir izmantojamas (izdrukājamas)
{
pH_dati = ogles; // ielādējiet šo baitu mūsu masīvā.
i+= 1;
}
if (in_char == 0) // ja redzam, ka mums ir nosūtīta komanda null.
{
i = 0; // atiestatīt skaitītāju i uz 0.
Wire.endTransmission (); // beigt I2C datu pārraidi.
pārtraukums; // iziet no cikla cikla.
}
}
sērijas_pasākums = 0; // atiestatīt sērijveida notikumu karodziņu.
dataString2 += ",";
dataString2 += Virkne (pH_dati);
Wire.beginTransmission (DO_address); // izsaukt ķēdi pēc tās ID numura
Wire.write ('r');
Wire.endTransmission (); // beigt I2C datu pārraidi
kavēšanās (laiks_); // pagaidiet pareizo laiku, lai ķēde pabeigtu norādījumus
Wire.requestFrom (DO_address, 20, 1); // zvaniet ķēdei un pieprasiet 20 baitus
kamēr (Wire.available ()) // vai ir baiti, ko saņemt.
{
in_char = Wire.read (); // saņemt baitu.
if ((in_char> 31) && (in_char <127)) // pārbaudiet, vai ogles ir izmantojamas (izdrukājamas), pretējā gadījumā in_char.txt faila sākumā ir simbols
{DO_data = in_char; // ielādējiet šo baitu mūsu masīvā
i+= 1; // uzlikt masīva elementa skaitītāju
}
ja (in_char == 0)
{// ja redzam, ka mums ir nosūtīta komanda null
i = 0; // atiestatīt skaitītāju i uz 0.
Wire.endTransmission (); // beigt I2C datu pārraidi.
pārtraukums; // iziet no cikla cikla.
}
}
sērijas_pasākums = 0; // atiestatīt sērijveida notikumu karodziņu
pH_float = atof (pH_dati);
dataString2 += ",";
dataString2 += String (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Temperatūra/ pH/ DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
Fails dataFile = SD.open (logFileName, FILE_WRITE); // atveriet failu. Ņemiet vērā, ka vienlaikus var atvērt tikai vienu failu, tāpēc pirms cita faila atvēršanas tas ir jāaizver.
if (dataFile) // ja fails ir pieejams, rakstiet uz to:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // drukājiet arī uz seriālo portu:
}
else {Serial.println ("kļūda, atverot datu kataloga failu"); } // ja fails nav atvērts, parādiet kļūdu:
lcd.setCursor (0, 3);
lcd.print ("Skrien (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // palielināt vienu ID nākamajā iterācijā
dataString = "";
kavēšanās (300000); // aizkavēšanās 5 minūtes = 5*60*1000 ms
lcd.clear ();
} // beigt galveno cilpu
tukšs displejs Temperatūra (DeviceAddress deviceAddress)
{
pludiņa tempC = sensor.getTempC (deviceAddress);
if (tempC == -127,00) lcd.print ("Temperatūras kļūda");
else dataString2 = String (tempC);
} // kods beidzas šeit
- Izvēlieties pareizo COM portu, izmantojot Arduino IDE sadaļā Rīki/ports
- Izvēlieties pareizo Arduino dēli. Es izmantoju Mega 2560, jo tam ir vairāk iekšējās atmiņas. Ar šo iestatījumu Arduino Nano vai Uno darbojas labi.
- Pārbaudiet un kodējiet un augšupielādējiet kodu
7. darbība: vadu (var uzlabot) un LCD displeja rezultāti
- Piezīme: Es saskāros ar troksni no DO zondes līdz pH zondei pēc 2-3 mēnešu nepārtrauktas darbības. Saskaņā ar Atlas Scientific teikto, ja pH, vadītspējas zondes darbojas kopā, ieteicams izmantot līnijas sprieguma izolatoru. Sīkāka informācija atrodama 9. lappusē (https://goo.gl/d62Rqv)
- Reģistrētie dati (pirmajam ir nedrukātas rakstzīmes pirms pH un DO datiem). Es filtrēju pēc koda, atļaujot tikai drukājamas rakstzīmes.
8. darbība: importējiet datus un izveidojiet diagrammu
- Datu importēšana no cilnes DATA esošā teksta (Excel 2013)
- Atdaliet datus ar komatu (tāpēc ir noderīgi komati pēc katras datu ievades)
- Uzzīmējiet datus. Katram zemāk esošajam datam ir aptuveni 1700 punktu. Mērījumu intervāls ir 5 minūtes (regulējams). DO un pH ķēžu minimums datu nolasīšanai ir 1,8 sekundes.
9. solis: kalibrēšana
- Ciparu temperatūras sensoru (18B20) var kalibrēt, noregulējot starpību tieši uz. Pretējā gadījumā, ja kompensācijai un slīpumam bija nepieciešama kalibrēšana, to var izdarīt, mainot vērtības #453. rindā DallasTemperature.cpp mapē / libraries / DallasTemperature.
- PH un DO zondēm varat kalibrēt zondes ar pievienotajiem šķīdumiem. Jums ir jāizmanto Atlas Scientific koda paraugs un jāievēro šī faila norādījumi.
- Lūdzu, ievērojiet 26. un 50. lappusi, lai uzzinātu pH zondi (https://goo.gl/d62Rqv), lai iegūtu kalibrēšanu un temperatūras kompensāciju, kā arī 7., 8. un 50. lpp., Lai uzzinātu par DO zondi (https://goo.gl/mA32mp). Vispirms, lūdzu, atkārtoti augšupielādējiet Atlas sniegto vispārīgo kodu, atveriet sērijas monitoru un ievadiet pareizu komandu.
10. solis: pārāk daudz vadu?
- Jūs varat noņemt SD karti un reālā laika pulksteņa moduli, izmantojot Dragino Yun Shield Arduino dēļiem (https://goo.gl/J9PBTH). Kods bija jāmaina, lai tas darbotos ar Yun Shield. Šeit ir laba vieta, kur sākt (https://goo.gl/c1x8Dm)
- Joprojām ir pārāk daudz vadu: Atlas Scientific izveidoja rokasgrāmatu savām EZO shēmām (https://goo.gl/dGyb12) un bezlodēšanas plāksnei (https://goo.gl/uWF51n). Šeit ir integrēta digitālā 18B20 temperatūra (https://goo.gl/ATcnGd). Jums jāzina komandas Raspbian (Debian Linux versija), kas darbojas Raspberry Pi (https://goo.gl/549xvk)
11. solis: apstiprinājums:
Šis ir mans blakus projekts pēcdoktorantūras pētījuma laikā, kurā es strādāju pie iepriekšēja fotobioreaktora, lai audzētu mikroaļģes. Tāpēc es uzskatu, ka ir nepieciešams kreditēt puses, kuras ir nodrošinājušas nosacījumus, lai tas notiktu. Pirmkārt, dotācija, DE-EE0007093: “Atmosfēras CO2 bagātināšana un piegāde (ACED)”, no ASV Enerģētikas departamenta Energoefektivitātes un atjaunojamās enerģijas biroja mērķa aļģu biodegvielas un bioloģisko produktu. Es pateicos Dr Bruce E. Rittmann no Biodesign Swette Vides biotehnoloģijas centra Arizonas štata universitātē par iespēju nodrošināties ar elektroniku un Arduino. Es biju apmācīts vides inženierijā, galvenokārt ķīmijā, mazliet mikrobioloģijā.
Ieteicams:
Kā izveidot mitruma un temperatūras reālā laika datu ierakstītāju, izmantojot Arduino UNO un SD karti - DHT11 datu reģistrētāja simulācija Proteus: 5 soļi
Kā izveidot mitruma un temperatūras reālā laika datu ierakstītāju, izmantojot Arduino UNO un SD karti | DHT11 datu reģistrētāja simulācija Proteus: Ievads: čau, tas ir Liono Maker, šeit ir YouTube saite. Mēs veidojam radošu projektu ar Arduino un strādājam pie iegultām sistēmām. Datu reģistrētājs: Datu reģistrētājs (arī datu reģistrētājs vai datu ierakstītājs) ir elektroniska ierīce, kas laika gaitā reģistrē datus
Izveidojiet savu jaudas mērītāju/reģistrētāju: 5 soļi (ar attēliem)
Izveidojiet savu jaudas mērītāju/reģistrētāju: Šajā projektā es jums parādīšu, kā es apvienoju Arduino, INA219 jaudas monitora IC, OLED LCD un Micro SD kartes PCB, lai izveidotu jaudas mērītāju/reģistrētāju, kuram ir vairāk funkciju nekā populārais USB strāvas mērītājs. Sāksim
Datu iegūšanas un datu vizualizācijas sistēma elektriskajam motociklam MotoStudent: 23 soļi
Datu iegūšanas un datu vizualizācijas sistēma MotoStudent elektriskajam sacīkšu velosipēdam: Datu iegūšanas sistēma ir aparatūras un programmatūras kopums, kas darbojas kopā, lai apkopotu datus no ārējiem sensoriem, pēc tam tos uzglabātu un apstrādātu, lai tos varētu vizualizēt grafiski un analizēt, ļaujot inženieriem izgatavot
IoT datu zinātnes PiNet reāllaika viedā ekrāna datu vizualizācijai: 4 soļi
IoT datu zinātnes PiNet reāllaika viedā ekrāna datu vizam: Jūs varat viegli izveidot viedo displeju IoT tīklu datu vizualizācijai, lai papildinātu savus pētījumus datu zinātnē vai jebkurā kvantitatīvā jomā. Varat izsaukt " push " no jūsu zemes gabaliem klientiem tieši no jūsu
EAL-Industri4.0-RFID datu paraugu ņemšanas datu bāze: 10 soļi (ar attēliem)
EAL-Industri4.0-RFID datu paraugu ņemšana līdz datubāzei: Dette projekt omhandler opsamling af v æ gtdata, registreering af identiteter vha. RFID, satraucoši dati un lv MySQL datu bāze. mezgls RED, samt fremvisning og behandling af de opsamlede data i et C# program i form af en Windows Form Application