Obsah:
- Krok 1:
- Krok 2: Kúpte si nižšie uvedené diely:
- Krok 3: Zapojenie
- Krok 4: Pripravte si obvody PH, DO, kartu SD
- Krok 5: Príprava softvéru
- Krok 6: Začnite kódovať
- Krok 7: Výsledky týkajúce sa zapojenia (je možné zlepšiť) a displeja LCD
- Krok 8: Importujte údaje a vytvorte graf
- Krok 9: Kalibrácia
- Krok 10: Príliš veľa kabeláže?
- Krok 11: Potvrdenie:
Video: Ako vytvoriť záznamník údajov o teplote, PH a rozpustenom kyslíku: 11 krokov (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Ciele:
- Vytvorte záznamník údajov za ≤ 500 dolárov. Ukladá údaje o teplote, pH a DO s časovým údajom a pomocou komunikácie I2C.
- Prečo I2C (medziintegrovaný obvod)? Na jeden riadok je možné umiestniť viac senzorov za predpokladu, že každý z nich má jedinečnú adresu.
Krok 1:
Krok 2: Kúpte si nižšie uvedené diely:
- Arduino MEGA 2560, 35 dolárov,
- Napájací adaptér pre dosku Arduino, 5,98 dolára,
- LCD modul I2C (displej), 8,99 dolára,
- Odlomenie hodín v reálnom čase (RTC), 7,5 dolára,
- Doska na prelomenie karty MicroSD, 7,5 dolára,
- 4 GB karta SD, 6,98 dolárov,
- Vodotesný digitálny senzor DS18B20, 9,95 dolára,
- pH sonda + súpravy + štandardné pufre, 149,15 dolárov,
- Sonda DO + Sady + Štandardné nárazníky, 247,45 dolárov,
- Breadboard, prepojovací kábel, 7,98 dolárov,
- (Voliteľné) Izolátor napätia, 24 dolárov,
Celkom: 510,48 dolárov
* Niektoré diely (ako generická doska) je možné kúpiť od iných dodávateľov (eBay, čínsky predajca) za nižšiu cenu. Odporúča sa získať sondy pH a DO od spoločnosti Atlas Scientific.
* Na kontrolu vodivosti a napätia sa odporúča použiť multimetr. Stojí to asi 10-15 dolárov (https://goo.gl/iAMDJo)
Krok 3: Zapojenie
- Na prepojenie dielov použite prepojovacie/DuPont káble, ako je znázornené na obrázku nižšie.
- Pomocou multimetra skontrolujte vedenie.
- Skontrolujte napájanie pozitívnym napätím (VCC) a uzemnenie (GND) (ak sa v obvode nevyznáte, je ľahké si ho zameniť)
- Pripojte napájací adaptér a skontrolujte indikátor napájania v každej časti. Ak máte pochybnosti, pomocou multimetra skontrolujte napätie medzi VCC a GND na (5V)
Krok 4: Pripravte si obvody PH, DO, kartu SD
- Prepnite na I2C pre obvody pH a DO
- Úlomky pH a DO sa dodávajú so sériovou komunikáciou ako predvoleným režimom vysielania/príjmu (TX/RX). Ak chcete použiť hodinovú linku (SCL) a dátovú linku (SDA) režimu I2C, prepnite režim podľa (1): odpojte káble VCC, TX, RX, (2): preskočte TX na zem pre sondu, PGND (nie GND), (3) zapojte VCC do obvodu, (4): počkajte, kým sa LED dióda zmení zo zelenej na modrú. Viac podrobností nájdete na strane 39 (Technický list pre obvod pH,
- Vykonajte rovnaký krok s obvodom DO
- (Ak viete, ako nahrať vzorový kód na tabuľu, môžete to urobiť pomocou sériového monitora)
- Formátujte kartu SD do formátu FAT
Krok 5: Príprava softvéru
- Stiahnite si integrované vývojové prostredie Arduino (IDE),
- Nainštalujte knižnicu do Arduino IDE:
- Väčšina z nich je dodávaná so softvérom Arduino. LiquidCrystal_I2C.h je k dispozícii prostredníctvom GitHub
- Nainštalujte ovládač pre USB. Pokiaľ ide o originálne Arduino, možno ho nebudete musieť inštalovať. Na generický prípad je potrebné nainštalovať ovládač CH340 (GitHub:
- Spustením testu blikajúcich diód LED skontrolujte, či je doska správne pripojená
- Ako nájsť MAC adresu digitálnej teploty 18B20. Použitie šablóny skenera I2C v Arduino IDE so zapojenou sondou. Každé zariadenie má jedinečnú adresu MAC, takže môžete použiť toľko teplotných sond s jednou zdieľanou linkou (#9). 18B20 používa jednovodičový I2C, takže je to špeciálny prípad komunikačnej metódy I2C. Nasleduje jeden spôsob, ako nájsť MAC - Medical Access Control („ROM“, keď spustíte postup uvedený nižšie).
Krok 6: Začnite kódovať
- Skopírujte nižšie uvedený kód do Arduino IDE:
- Alebo si stiahnite kód (.ino) a v Arduino IDE by sa malo objaviť nové okno.
/*
Referenčné návody:
1. Záznamník teploty, ORP, pH:
2. Zabezpečený digitálny (SD) štít:
Tento kód bude prenášať údaje na sériový monitor Arduino. Na sériový monitor Arduino zadajte príkazy na ovládanie obvodu EZO pH v režime I2C.
Upravené z vyššie uvedených referenčných návodov, väčšinou z kódu I2C od spoločnosti Atlas-Scientific
Posledná aktualizácia: 26. júla 2017 od Binh Nguyen
*/
#include // povoliť I2C.
#define pH_address 99 // predvolené I2C ID číslo pre EZO pH Circuit.
#define DO_address 97 // predvolené I2C ID číslo pre obvod EZO DO.
#include "RTClib.h" // Funkcie dátumu a času pomocou DS1307 RTC pripojeného cez I2C a Wire lib
RTC_DS1307 rtc;
#include // Pre SD libarary
#include // Karta SD na ukladanie údajov
const int chipSelect = 53; // treba vymyslieť Adafruit SD breakout //
// DO = MISO, DI = MOSI, na kolíku ATmega#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // úprava logFileName na identifikáciu vášho experimentu, napríklad PBR_01_02, datalog1
dlhé id = 1; // identifikačné číslo na zadanie poradia denníka
#zahrnúť
LiquidCrystal_I2C lcd (0x27, 20, 4);
#zahrnúť
#zahrnúť
#define ONE_WIRE_BUS 9 // definujte kolík # pre teplotnú sondu
OneWire oneWire (ONE_WIRE_BUS);
Senzory teploty Dallas (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC adresa, jedinečná pre každú sondu
Reťazec dataString; // hlavný variant na ukladanie všetkých údajov
Reťazec dataString2; // dočasný variant na uloženie teploty/pH/DO na vytlačenie
char počítačové údaje [20]; // inštrukcia od spoločnosti Atlas Scientific: vytvoríme 20 -bitové pole znakov na uchovávanie prichádzajúcich údajov z počítača/počítača Mac/iného.
byte prijatý_z_počítača = 0; // potrebujeme vedieť, koľko znakov bolo prijatých.
byte serial_event = 0; // príznak signalizujúci prijatie údajov z počítača/mac/iného.
bajtový kód = 0; // slúži na uloženie kódu odpovede I2C.
char pH_data [20]; // vytvoríme pole 20 bajtov na uchovávanie prichádzajúcich údajov z obvodu pH.
bajt in_char = 0; // používa sa ako 1 bajtový buffer na ukladanie vo viazaných bajtoch z obvodu pH.
bajt i = 0; // počítadlo použité pre pole ph_data.
int čas_ = 1800; // slúži na zmenu potrebného oneskorenia v závislosti od príkazu odoslaného do obvodu pH triedy EZO.
float pH_float; // float var slúži na udržanie floatovej hodnoty pH.
char DO_data [20];
// float temp_C;
void setup () // hardvérová inicializácia.
{
Serial.begin (9600); // povoliť sériový port.
Wire.begin (adresa_ pH); // povoliť I2C port pre pH sondu
Wire.begin (DO_adresa);
lcd.init ();
lcd.begin (20, 4);
lcd.backlight ();
lcd.home ();
lcd.print („Ahoj PBR!“);
lcd.setCursor (0, 1);
lcd.print ("Inicializácia …");
Serial.print („RTC je …“);
ak (! rtc.begin ())
{
Serial.println ("RTC: Hodiny v reálnom čase … NIE JE ZISTENÉ");
while (1); // (Serial.println ("RTC: hodiny v reálnom čase … NÁJDENÉ"));
}
Serial.println ("SPUŠTENÉ");
Serial.print („Hodiny v reálnom čase …“);
if (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))));
}
Serial.println ("PRÁCA");
lcd.setCursor (0, 0);
lcd.println („RTC: OK“);
Serial.print („karta SD …“); // skontrolujte, či je karta prítomná a dá sa inicializovať:
if (! SD.begin (chipSelect))
{Serial.println ("Neúspešné"); // nerob nič viac:
návrat;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println („SD karta: OK“);
Serial.print ("Súbor denníka:");
Serial.print (logFileName);
Serial.print ("…");
Súbor logFile = SD.open (logFileName, FILE_WRITE); // otvorte súbor. „datalog“a vytlačte hlavičku
if (logFile)
{
logFile.println (",,,"); // naznačujú, že v predchádzajúcom behu boli údaje
Hlavička reťazca = "Dátum -čas, teplota (C), pH, DO";
logFile.println (hlavička);
logFile.close ();
Serial.println ("READY");
//Serial.println(dataString); // vytlačte aj na sériový port:
}
else {Serial.println ("chyba pri otvarani udaju"); } // ak súbor nie je otvorený, zobrazí sa chyba:
lcd.setCursor (0, 2);
lcd.print ("Súbor denníka:");
lcd.println (logFileName);
oneskorenie (1000);
senzory.begin ();
sensor.setResolution (ProbeP, 10); // 10 je rozlíšenie (10bit)
lcd.clear ();
id = 0;
}
prázdna slučka ()
{// hlavná slučka.
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);
senzory.requestTeploty ();
displayTemperature (ProbeP);
Wire.beginTransmission (adresa_ pH); // zavolajte obvod podľa jeho ID čísla
Wire.write ('r'); // tvrdý kód r na nepretržité čítanie
Wire.endTransmission (); // ukončenie prenosu dát I2C.
oneskorenie (čas_); // počkajte správny čas, kým obvod dokončí svoje pokyny.
Wire.requestFrom (pH_adresa, 20, 1); // zavolajte na okruh a požiadajte o 20 bajtov (to môže byť viac, ako potrebujeme)
zatiaľ čo (Wire.available ()) // existujú bajty na prijatie
{
in_char = Wire.read (); // prijat bajt.
if ((in_char> 31) && (in_char <127)) // skontrolujte, či je znak použiteľný (tlačiteľný)
{
pH_data = in_char; // načítajte tento bajt do nášho poľa.
i+= 1;
}
if (in_char == 0) // ak vidíme, že nám bol odoslaný nulový príkaz.
{
i = 0; // vynulujte počítadlo i na 0.
Wire.endTransmission (); // ukončenie prenosu dát I2C.
prestávka; // opustenie cyklu while.
}
}
serial_event = 0; // reset príznaku sériovej udalosti.
dataString2 += ",";
dataString2 += String (pH_data);
Wire.beginTransmission (DO_address); // zavolajte obvod podľa jeho ID čísla
Wire.write ('r');
Wire.endTransmission (); // ukončenie prenosu dát I2C
oneskorenie (čas_); // počkajte správny čas, kým obvod dokončí svoje pokyny
Wire.requestFrom (DO_address, 20, 1); // zavolajte obvod a požiadajte o 20 bytov
zatiaľ čo (Wire.available ()) // existujú bajty na prijatie.
{
in_char = Wire.read (); // prijat bajt.
if ((in_char> 31) && (in_char <127)) // skontrolujte, či je znak použiteľný (tlačiteľný), inak in_char obsahuje na začiatku súboru.txt symbol.
{DO_data = in_char; // načítajte tento bajt do nášho poľa
i+= 1; // vyvolá počítadlo pre prvok poľa
}
ak (in_char == 0)
{// ak vidíme, že nám bol odoslaný nulový príkaz
i = 0; // vynulujte počítadlo i na 0.
Wire.endTransmission (); // ukončenie prenosu dát I2C.
prestávka; // opustite slučku while.
}
}
serial_event = 0; // reset príznaku sériovej udalosti
pH_float = atof (pH_data);
dataString2 += ",";
dataString2 += Reťazec (DO_data);
lcd.setCursor (0, 1);
lcd.print („Teplota/ pH/ DO“);
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
Súbor dataFile = SD.open (logFileName, FILE_WRITE); // otvorte súbor. Upozorňujeme, že súčasne je možné otvoriť iba jeden súbor, takže pred otvorením ďalšieho musíte tento súbor zavrieť.
if (dataFile) // ak je súbor k dispozícii, napíšte doň:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // vytlačte aj na sériový port:
}
else {Serial.println ("chyba pri otvarani suboru datalogu"); } // ak súbor nie je otvorený, zobrazí sa chyba:
lcd.setCursor (0, 3);
lcd.print ("Beží (x5 m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // pri ďalšej iterácii zvýšiť jedno ID
dataString = "";
oneskorenie (300 000); // oneskorenie 5 minút = 5*60*1 000 ms
lcd.clear ();
} // koniec hlavnej slučky
prázdna displayTemperature (DeviceAddress deviceAddress)
{
float tempC = sensor.getTempC (deviceAddress);
if (tempC == -127,00) lcd.print ("chyba teploty");
else dataString2 = String (tempC);
} // kód tu končí
- Vyberte správny port COM prostredníctvom Arduino IDE v časti Nástroje/Port
- Vyberte si správnu dosku Arduino. Použil som Mega 2560, pretože má viac vnútornej pamäte. Arduino Nano alebo Uno funguje s týmto nastavením dobre.
- Skontrolujte a nakódujte a nahrajte kód
Krok 7: Výsledky týkajúce sa zapojenia (je možné zlepšiť) a displeja LCD
- Poznámka: S hlukom od sondy DO k sonde pH som sa stretol po 2-3 mesiacoch nepretržitej prevádzky. Podľa spoločnosti Atlas Scientific sa odporúča, aby in-line izolátor napätia pracoval vtedy, keď sondy vodivosti pH pracujú spoločne. Viac podrobností je na strane 9 (https://goo.gl/d62Rqv)
- Zaznamenané údaje (prvý má pred údajmi pH a DO nevytlačené znaky). Filtroval som na kód tak, že som povolil iba tlačiteľné znaky.
Krok 8: Importujte údaje a vytvorte graf
- Import údajov z textu na karte DATA (Excel 2013)
- Údaje oddeľte čiarkami (preto je užitočné mať po každom zadaní údajov čiarky)
- Vykreslite údaje. Každý z nižšie uvedených údajov má približne 1 700 bodov. Interval merania je 5 minút (nastaviteľný). Minimálne pre DO a pH okruhy na čítanie údajov je 1,8 s.
Krok 9: Kalibrácia
- Digitálny snímač teploty (18B20) je možné kalibrovať nastavením rozdielu priamo na. V opačnom prípade, ak kompenzácia a sklon vyžadujú kalibráciu, môžete to urobiť zmenou hodnôt na riadku #453, DallasTemperature.cpp v priečinku / libraries / DallasTemperature.
- V prípade sond pH a DO môžete sondy kalibrovať pomocou sprievodných roztokov. Musíte použiť vzorový kód od spoločnosti Atlas Scientific a postupovať podľa pokynov v tomto súbore.
- Kalibráciu a teplotnú kompenzáciu nájdete na stranách 26 a 50 (https://goo.gl/d62Rqv) a na stranách 7-8 a 50 nájdete aj sondu DO (https://goo.gl/mA32mp). Najprv znova nahrajte generický kód poskytovaný spoločnosťou Atlas, otvorte sériový monitor a zadajte správny príkaz.
Krok 10: Príliš veľa kabeláže?
- Kartu SD a modul hodín v reálnom čase môžete odstrániť pomocou Dragino Yun Shield pre dosky Arduino (https://goo.gl/J9PBTH). Kód bolo potrebné upraviť tak, aby fungoval s Yun Shield. Tu je dobré začať (https://goo.gl/c1x8Dm)
- Stále príliš veľa káblov: spoločnosť Atlas Scientific vytvorila sprievodcu pre svoje obvody EZO (https://goo.gl/dGyb12) a bezpájkovaciu dosku (https://goo.gl/uWF51n). Integrácia digitálnej teploty 18B20 je tu (https://goo.gl/ATcnGd). Musíte byť oboznámení s príkazmi na Raspbian (verzia Debian Linux) bežiacimi na Raspberry Pi (https://goo.gl/549xvk)
Krok 11: Potvrdenie:
Toto je môj vedľajší projekt počas môjho postdoktorandského výskumu, na ktorom som pracoval na pokrokovom fotobioreaktore na kultiváciu mikrorias. Preto som si myslel, že je potrebné uznať, že strany poskytli podmienky, aby sa to stalo. Po prvé, grant DE-EE0007093: „Obohatenie a dodávka atmosférického CO2 (ACED)“od amerického ministerstva energetiky, úradu pre energetickú účinnosť a cielených biopalív a bioproduktov z rias. Ďakujem doktorovi Brucovi E. Rittmannovi z Biodesign Swette Center for Environmental Biotechnology, Arizona State Unityity, že mi poskytol príležitosť hrať sa s elektronikou a Arduinom. Vyštudoval som environmentálne inžinierstvo, väčšinou chémiu, trochu mikrobiológiu.
Odporúča:
Ako vytvoriť záznamník vlhkosti a teploty v reálnom čase s Arduino UNO a kartou SD - Simulácia záznamníka údajov DHT11 v Proteuse: 5 krokov
Ako vytvoriť záznamník vlhkosti a teploty v reálnom čase s Arduino UNO a kartou SD | Simulácia záznamníka údajov DHT11 v Proteuse: Úvod: Ahoj, toto je Liono Maker, tu je odkaz na YouTube. Vytvárame kreatívny projekt s Arduino a pracujeme na vstavaných systémoch. Záznamník údajov: Záznamník údajov (tiež záznamník údajov alebo záznamník údajov) je elektronické zariadenie, ktoré zaznamenáva údaje v priebehu času
Server údajov o duálnej teplote IoT: 12 krokov (s obrázkami)
Server údajov o duálnej teplote IoT: Toto je môj prvý pokus o napísanie inštrukcie, a preto mi prosím dajte pokoj! Ak si myslíte, že to nie je také zlé, prosím, hlasujte za mňa v Prvej autorskej súťaži. Toto je môj projekt Lock-Down na diaľkové monitorovanie 2 teplôt v skleníku,
Analýza údajov o teplote/vlhkosti pomocou Ubidotov a tabuliek Google: 6 krokov
Analýza teplôt/vlhkosti pomocou Ubidotov a tabuliek Google: V tomto tutoriáli budeme merať rôzne údaje o teplote a vlhkosti pomocou snímača teploty a vlhkosti. Dozviete sa tiež, ako odoslať tieto údaje do Ubidots. Aby ste ho mohli analyzovať odkiaľkoľvek pre rôzne aplikácie. Tiež odoslaním
Odosielanie údajov o bezdrôtových vibráciách a teplote do tabuliek Google pomocou Node-RED: 37 krokov
Odosielanie údajov o bezdrôtových vibráciách a teplote do tabuliek Google pomocou Node-RED: Predstavujeme priemyselný bezdrôtový snímač vibrácií a teploty IoT s dlhým dosahom NCD od spoločnosti NCD, ktorý sa môže pochváliť dosahom až 2 míle použitím štruktúry bezdrôtovej sieťovej siete. Toto zariadenie obsahuje presný 16-bitový snímač vibrácií a teploty a
Záznamník údajov o teplote a vlhkosti z Arduina do telefónu s Androidom s modulom karty SD cez Bluetooth: 5 krokov
Záznamník údajov o teplote a vlhkosti z Arduina na telefón s Androidom s modulom karty SD cez Bluetooth: Dobrý deň, toto je môj vôbec prvý návod, dúfam, že pomôžem komunite tvorcov, pretože mi to prinieslo úžitok. V našich projektoch často používame senzory, ale nachádzame spôsob, ako zhromažďovať údaje, ukladať ich a okamžite prenášať telefóny alebo iné zariadenia