Tartalomjegyzék:

Hogyan készítsünk adatgyűjtőt a hőmérsékletre, a PH -ra és az oldott oxigénre: 11 lépés (képekkel)
Hogyan készítsünk adatgyűjtőt a hőmérsékletre, a PH -ra és az oldott oxigénre: 11 lépés (képekkel)

Videó: Hogyan készítsünk adatgyűjtőt a hőmérsékletre, a PH -ra és az oldott oxigénre: 11 lépés (képekkel)

Videó: Hogyan készítsünk adatgyűjtőt a hőmérsékletre, a PH -ra és az oldott oxigénre: 11 lépés (képekkel)
Videó: Как приготовить сыр МАСКАРПОНЕ из 2 ингредиентов в домашних условиях 2024, November
Anonim
Image
Image
Kép
Kép

Célok:

  • Készítsen adatgyűjtőt ≤ 500 dollárért. Időbélyegzővel és I2C kommunikáció használatával tárolja a hőmérséklet, a pH és a DO adatait.
  • Miért az I2C (integrált áramkör)? Egy sorba lehet rakni annyi érzékelőt, mivel mindegyiknek egyedi címe van.

1. lépés:

2. lépés: Vásárolja meg az alábbi alkatrészeket:

Vásárolja meg az alábbi alkatrészeket
Vásárolja meg az alábbi alkatrészeket
  1. Arduino MEGA 2560, 35 dollár,
  2. Hálózati adapter az Arduino táblához, 5,98 USD,
  3. LCD modul I2C (kijelző), 8,99 USD,
  4. Valós idejű óra (RTC), 7,5 dollár,
  5. MicroSD kártya törőlap, 7,5 dollár,
  6. 4 GB SD -kártya, 6,98 USD,
  7. Vízálló DS18B20 digitális érzékelő, 9,95 dollár,
  8. pH-szonda + készletek + standard pufferek, 149,15 USD,
  9. DO szonda + készletek + standard pufferek, 247,45 USD,
  10. Kenyeretábla, áthidaló kábel, 7,98 USD,
  11. (Opcionális) Feszültségleválasztó, 24 USD,

Összesen: 510,48 USD

* Bizonyos alkatrészeket (például az általános táblát) más szállítóktól (eBay, kínai eladó) alacsonyabb áron lehetett megvásárolni. A pH és DO szondák használata ajánlott az Atlas Scientifictől.

* Multiméter ajánlott a vezetőképesség és a feszültség ellenőrzésére. Körülbelül 10-15 dollárba kerül (https://goo.gl/iAMDJo)

3. lépés: huzalozás

Vezeték
Vezeték
  • Használjon jumper/DuPont kábeleket az alkatrészek csatlakoztatásához az alábbi vázlat szerint.
  • A multiméterrel ellenőrizze a vezetést.
  • Ellenőrizze a pozitív feszültségű tápegységet (VCC) és a földelést (GND) (könnyen összezavarható, ha nem ismeri az áramkört)
  • Csatlakoztassa a hálózati adaptert, és ellenőrizze az egyes részek áramellátását. Ha kétségei vannak, használja a multimétert, hogy ellenőrizze a VCC és a GND közötti feszültséget (5V)

4. lépés: Készítse elő a PH, DO áramköröket, SD kártyát

Készítse elő a PH, DO áramköröket, SD kártyát
Készítse elő a PH, DO áramköröket, SD kártyát
  1. Váltson I2C -re a pH- és DO -körökhöz
  2. A pH- és a DO -kitörésekhez soros kommunikáció tartozik, mint alapértelmezett átviteli/fogadási mód (TX/RX). Az I2C módú Óravonal (SCL) és az Adatvonal (SDA) használatához váltson módot (1): húzza ki a VCC, TX, RX kábeleket, (2): ugorjon a TX-re a Ground for Probe, PGND (nem GND)), (3) csatlakoztassa a VCC -t az áramkörhöz, (4): várja meg, amíg a LED zöldről kékre vált. További részletek a 39. oldalon (pH -kör adatlapja,
  3. Végezze el ugyanezt a lépést a DO áramkörrel
  4. (Ha tudja, hogyan kell feltölteni a mintakódot a táblára, akkor ezt megteheti a Soros monitoron keresztül)
  5. Formázza az SD kártyát FAT formátumba

Lépés: Készítse elő a szoftvert

Szoftver előkészítése
Szoftver előkészítése
Szoftver előkészítése
Szoftver előkészítése
Szoftver előkészítése
Szoftver előkészítése
Szoftver előkészítése
Szoftver előkészítése
  1. Töltse le az Arduino integrált fejlesztői környezetet (IDE),
  2. Könyvtár telepítése az Arduino IDE -re:
  3. Legtöbbjük Arduino szoftverrel rendelkezik. A LiquidCrystal_I2C.h elérhető a GitHubon keresztül
  4. Telepítse az illesztőprogramot az USB -hez. Az eredeti Arduino esetében előfordulhat, hogy nem kell telepítenie egyet. Általános esetén telepítenie kell a CH340 illesztőprogramját (GitHub:
  5. Villogó LED -teszt segítségével ellenőrizze, hogy megfelelően csatlakoztatta -e a kártyát
  6. Hogyan lehet megtalálni a 18B20 digitális hőmérséklet MAC -címét. I2C szkenner sablon használata az Arduino IDE -ben, a szonda csatlakoztatva van. Minden eszköz egyedi MAC -címmel rendelkezik, így annyi hőmérséklet -szondát használhat egy megosztott vonallal (#9). A 18B20 egyvezetékes I2C -t használ, tehát az I2C kommunikációs módszer különleges esete. Az alábbiakban egy módszert találunk a MAC - orvosi hozzáférés -szabályozás („ROM” - az alábbi eljárás futtatása) megtalálására.

6. lépés: Indítsa el a kódolást

Indítsa el a kódolást
Indítsa el a kódolást
  • Másolja be az alábbi kódot az Arduino IDE -be:
  • Vagy töltse le a kódot (.ino), és egy új ablak jelenik meg az Arduino IDE -ben.

/*

Referencia oktatóanyagok:

1. Hőmérséklet, ORP, pH naplózó:

2. Biztonságos digitális (SD) pajzs:

Ez a kód adatokat küld az Arduino soros monitornak. Írja be a parancsokat az Arduino soros monitorba az EZO pH áramkör vezérléséhez I2C módban.

A fenti hivatkozott oktatóanyagokból módosítva, többnyire az Atlas-Scientific I2C kódjából

Utolsó frissítés: Binh Nguyen, 2017. július 26

*/

#include // engedélyezze az I2C -t.

#define pH_address 99 // alapértelmezett I2C azonosítószám az EZO pH áramkörhöz.

#define DO_address 97 // alapértelmezett I2C azonosítószám az EZO DO áramkörhöz.

#include "RTClib.h" // Dátum és idő függvények az I2C és a Wire lib segítségével csatlakoztatott DS1307 RTC használatával

RTC_DS1307 rtc;

#include // SD könyvtárhoz

#include // SD kártya az adatok tárolására

const int chipSelect = 53; // ki kell találni az Adafruit SD kitörését //

// DO = MISO, DI = MOSI, ATmega pin#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)

char logFileName = "dataLT.txt"; // a logFileName módosítása a kísérlet azonosításához, például a PBR_01_02, datalog1 példához

hosszú id = 1; // az azonosító szám a napló sorrendjének megadásához

#befoglalni

LiquidCrystal_I2C LCD (0x27, 20, 4);

#befoglalni

#befoglalni

#define ONE_WIRE_BUS 9 // határozza meg a # érintkezőt a hőmérséklet -érzékelőhöz

OneWire oneWire (ONE_WIRE_BUS);

DallasHőmérséklet -érzékelők (& oneWire);

DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC -cím, minden szondára egyedi

String dataString; // a fő változat az összes adat tárolására

String dataString2; // ideiglenes változat a hőmérséklet/pH/DO tárolására nyomtatáshoz

char számítógépes adatok [20]; // utasítás az Atlas Scientific -től: 20 bájtos karakter tömböt készítünk a pc/mac/other bejövő adatok tárolására.

bájt fogadott_számítógépből = 0; // tudnunk kell, hogy hány karakter érkezett.

byte serial_event = 0; // jelző, amely jelzi, ha adatokat fogadtak a pc/mac/other -től.

bájt kód = 0; // az I2C válaszkód tárolására szolgál.

char pH_data [20]; // készítünk egy 20 bájtos karakter tömböt a pH áramkörből érkező adatok tárolására.

byte in_char = 0; // 1 bájtos pufferként használják a pH -áramkör kötött bájtjaiban való tároláshoz.

bájt i = 0; // a ph_data tömbhöz használt számláló.

int idő_ = 1800; // a szükséges késleltetés megváltoztatására szolgál az EZO osztályú pH áramkörhöz küldött parancs függvényében.

float pH_float; // float var, amellyel a pH lebegő értéke tartható.

char DO_data [20];

// float temp_C;

void setup () // hardver inicializálása.

{

Sorozat.kezdet (9600); // soros port engedélyezése.

Wire.begin (pH_cím); // engedélyezze az I2C portot a pH -szonda számára

Wire.begin (DO_address);

lcd.init ();

lcd. kezdet (20, 4);

lcd.backlight ();

lcd.home ();

lcd.print ("Hello PBR!");

lcd.setCursor (0, 1);

lcd.print ("Inicializálás …");

Serial.print ("RTC az …");

ha (! rtc.begin ())

{

Serial.println ("RTC: Valós idejű óra… NOT FOUND");

while (1); // (Serial.println ("RTC: Valós idejű óra… FOUND"));

}

Serial.println ("FUTÁS");

Serial.print ("Valós idejű óra …");

ha (! rtc.isrunning ())

{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));

}

Serial.println ("MUNKA");

lcd.setCursor (0, 0);

lcd.println ("RTC: OK");

Serial.print ("SD kártya …"); // nézze meg, hogy a kártya jelen van -e és inicializálható -e:

if (! SD.begin (chipSelect))

{Serial.println ("Nem sikerült"); // ne csinálj többet:

Visszatérés;

}

Serial.println ("OK");

lcd.setCursor (0, 1);

lcd.println ("SD kártya: OK");

Serial.print ("Naplófájl:");

Serial.print (logFileName);

Serial.print ("…");

Fájl logFile = SD.open (logFileName, FILE_WRITE); // nyissa meg a fájlt. "datalog" és nyomtassa ki a fejlécet

if (logFile)

{

logFile.println (",,"); // jelzi, hogy voltak adatok az előző futtatásban

String header = "Dátum -idő, hőmérséklet (C), pH, DO";

logFile.println (fejléc);

logFile.close ();

Serial.println ("KÉSZ");

//Serial.println(dataString); // nyomtatás a soros portra is:

}

else {Serial.println ("hiba az adatbázis megnyitása során"); } // ha a fájl nincs megnyitva, hibaüzenet jelenik meg:

lcd.setCursor (0, 2);

lcd.print ("Naplófájl:");

lcd.println (logFileName);

késleltetés (1000);

szenzorok.begin ();

sensors.setResolution (ProbeP, 10); // 10 a felbontás (10bit)

lcd.clear ();

id = 0;

}

üres hurok ()

{// a fő hurok.

dataString = Karakterlánc (azonosító);

dataString = Karakterlánc (',');

DateTime now = rtc.now ();

dataString = Karakterlánc (most.év (), DEC);

dataString += Karakterlánc ('/');

dataString += Karakterlánc (most.hónap (), DEC);

dataString += Karakterlánc ('/');

dataString += Karakterlánc (most.nap (), DEC);

dataString += Karakterlánc ('');

dataString += Karakterlánc (most.óra (), DEC);

dataString += Karakterlánc (':');

dataString += Karakterlánc (most.perc (), DEC);

dataString += Karakterlánc (':');

dataString += Karakterlánc (most.second (), DEC);

lcd.home ();

lcd.print (dataString);

sensors.requestTemperatures ();

displayTemperature (ProbeP);

Wire.beginTransmission (pH_cím); // hívja az áramkört az azonosító számával

Wire.write ('r'); // kemény kód r folyamatosan olvasható

Wire.endTransmission (); // az I2C adatátvitel befejezése.

késési idő_); // várja meg a megfelelő időt, amíg az áramkör befejezi utasításait.

Wire.requestFrom (pH_cím, 20, 1); // hívja az áramkört, és kérjen 20 bájtot (ez lehet több, mint amire szükségünk van)

míg (Wire.available ()) // vannak -e fogadandó bájtok

{

in_char = Vezeték.olvasás (); // bájt fogadása.

if ((in_char> 31) && (in_char <127)) // ellenőrizze, hogy a karakter használható -e (nyomtatható)

{

pH_adatok = szénhidrogén; // töltse be ezt a bájtot tömbünkbe.

i+= 1;

}

if (in_char == 0) // ha látjuk, hogy null parancsot kaptunk.

{

i = 0; // állítsa vissza az i számlálót 0 -ra.

Wire.endTransmission (); // az I2C adatátvitel befejezése.

szünet; // kilépés a while ciklusból.

}

}

sorozat_esemény = 0; // állítsa vissza a soros esemény jelzőt.

dataString2 += ",";

dataString2 += Karakterlánc (pH_adatok);

Wire.beginTransmission (DO_address); // hívja az áramkört az azonosító számával

Wire.write ('r');

Wire.endTransmission (); // az I2C adatátvitel befejezése

késési idő_); // várja meg a megfelelő időt, amíg az áramkör befejezi utasításait

Wire.requestFrom (DO_address, 20, 1); // hívja az áramkört és kérjen 20 bájtot

míg (Wire.available ()) // vannak -e fogadandó bájtok.

{

in_char = Wire.read (); // bájt fogadása.

if ((in_char> 31) && (in_char <127)) // ellenőrizze, hogy a char használható -e (nyomtatható), ellenkező esetben az in_char egy szimbólumot tartalmaz a.txt fájl elején

{DO_adatok = in_char; // töltse be ezt a bájtot tömbünkbe

i+= 1; // vegye fel a tömb elem számlálóját

}

ha (in_char == 0)

{// ha látjuk, hogy null parancsot kaptunk

i = 0; // állítsa vissza az i számlálót 0 -ra.

Wire.endTransmission (); // az I2C adatátvitel befejezése.

szünet; // kilépés a while ciklusból.

}

}

sorozat_esemény = 0; // állítsa vissza a soros esemény jelzőt

pH_lebegés = atof (pH_adatok);

dataString2 += ",";

dataString2 += Karakterlánc (DO_data);

lcd.setCursor (0, 1);

lcd.print ("Hőmérséklet/ pH/ DO");

lcd.setCursor (0, 2);

lcd.print (dataString2);

dataString += ',';

dataString += dataString2;

File dataFile = SD.open (logFileName, FILE_WRITE); // nyissa meg a fájlt. ne feledje, hogy egyszerre csak egy fájl nyitható meg, ezért be kell zárnia ezt a fájlt, mielőtt megnyitna egy másikat.

if (dataFile) // ha a fájl elérhető, írjon neki:

{

dataFile.println (dataString);

dataFile.close ();

Serial.println (dataString); // nyomtatás a soros portra is:

}

else {Serial.println ("hiba az adatfájl megnyitásakor"); } // ha a fájl nincs megnyitva, hibaüzenet jelenik meg:

lcd.setCursor (0, 3);

lcd.print ("Fut (x5m):");

lcd.setCursor (15, 3);

lcd.print (azonosító);

id ++; // egy azonosító növelése a következő iterációban

dataString = "";

késleltetés (300000); // 5 perc késleltetés = 5*60*1000 ms

lcd.clear ();

} // fő hurok vége

void displayHőmérséklet (DeviceAddress deviceAddress)

{

float tempC = sensors.getTempC (deviceAddress);

if (tempC == -127,00) lcd.print ("Hőmérséklet hiba");

else dataString2 = Karakterlánc (tempC);

} // a kód itt végződik

  • Válassza ki a megfelelő COM portot az Arduino IDE segítségével az Eszközök/Port menüpont alatt
  • Válassza ki a megfelelő Arduino táblát. A Mega 2560 -at használtam, mert több belső memóriája van. Az Arduino Nano vagy az Uno jól működik ezzel a beállítással.
  • Ellenőrizze és kódolja és töltse fel a kódot

7. lépés: Eredmények a huzalozáson (javítható) és az LCD kijelzőn

Eredmények a huzalozáson (javítható) és az LCD kijelzőn
Eredmények a huzalozáson (javítható) és az LCD kijelzőn
Eredmények a huzalozáson (javítható) és az LCD kijelzőn
Eredmények a huzalozáson (javítható) és az LCD kijelzőn
Eredmények a huzalozáson (javítható) és az LCD kijelzőn
Eredmények a huzalozáson (javítható) és az LCD kijelzőn
Eredmények a huzalozáson (javítható) és az LCD kijelzőn
Eredmények a huzalozáson (javítható) és az LCD kijelzőn
  • Megjegyzés: 2-3 hónapos folyamatos működés után találkoztam a DO szonda és a pH szonda közötti zajjal. Az Atlas Scientific szerint egy soros feszültségleválasztó ajánlott, ha a pH, vezetőképesség szondák együtt működnek. További részletek a 9. oldalon (https://goo.gl/d62Rqv)
  • A naplózott adatok (az elsőben nyomtatatlan karakterek vannak a pH és a DO adatok előtt). Kódra szűrtem, csak nyomtatható karaktereket engedélyezve.

8. lépés: Adatok importálása és grafikon készítése

Adatok importálása és grafikon készítése
Adatok importálása és grafikon készítése
Adatok importálása és grafikon készítése
Adatok importálása és grafikon készítése
Adatok importálása és grafikon készítése
Adatok importálása és grafikon készítése
  1. Adatok importálása az Adatok lapon található szövegből (Excel 2013)
  2. Válassza szét az adatokat vesszővel (ezért hasznos a vessző minden adatbevitel után)
  3. Ábrázolja az adatokat. Minden alábbi adat körülbelül 1700 pontot tartalmaz. A mérési időköz 5 perc (állítható). A minimális DO és pH áramkörök az adatok kiolvasásához 1,8 másodperc.

9. lépés: Kalibrálás

Kalibráció
Kalibráció
  1. A digitális hőmérséklet -érzékelő (18B20) kalibrálható úgy, hogy a különbséget közvetlenül a. Ellenkező esetben, ha a kompenzáció és a meredekség kalibrálást igényel, ezt megteheti a DallasTemperature.cpp #453. sorban a / libraries / DallasTemperature mappában lévő értékek megváltoztatásával.
  2. A pH- és DO -szondákhoz kalibrálhatja a szondákat a mellékelt oldatokkal. Az Atlas Scientific mintakódját kell használnia, és követnie kell a fájl utasításait.
  3. Kérjük, kövesse a 26. és 50. oldalt a pH-szondához (https://goo.gl/d62Rqv) a kalibráláshoz és a hőmérséklet-kompenzációhoz, valamint a 7-8. És az 50. oldalt a DO-szondához (https://goo.gl/mA32mp). Először töltse fel újra az Atlas által biztosított általános kódot, nyissa meg a Soros monitort, és írja be a megfelelő parancsot.

10. lépés: Túl sok vezeték?

  1. Az SD -kártyát és a valós idejű óramodult megszüntetheti a Dragino Yun Shield használatával az Arduino táblákhoz (https://goo.gl/J9PBTH). A kódot módosítani kellett a Yun Shield használatához. Itt jó kiindulópont (https://goo.gl/c1x8Dm)
  2. Még mindig túl sok a huzalozás: az Atlas Scientific útmutatót készített az EZO áramkörökhöz (https://goo.gl/dGyb12) és a forrasztásmentes táblához (https://goo.gl/uWF51n). A 18B20 digitális hőmérséklet integrálása itt található (https://goo.gl/ATcnGd). Ismernie kell a Raspbian (a Debian Linux verziója) Raspberry Pi rendszeren futó parancsokat (https://goo.gl/549xvk)

11. lépés: Nyugtázás:

Ez a mellékprojektem a posztdoktori kutatásom során, amelyen egy előrehaladott fotobioreaktoron dolgoztam a mikroalgák tenyésztésében. Ezért úgy gondoltam, hogy jóvá kell írni, hogy a felek feltételeket biztosítottak ennek megvalósításához. Először is, a DE-EE0007093: „Atmospheric CO2 Enrichment and Delivery (ACED)” támogatást az Egyesült Államok Energiaügyi Minisztériuma, az Energiahatékonysági Hivatal és a Megújuló Energia Célzott alga bioüzemanyagok és biotermékek. Köszönöm Dr. Bruce E. Rittmannnak, az Arizonai Állami Egyetemen, a Biodesign Swette Center for Environmental Biotechnology Centerben, hogy lehetőséget biztosított számomra az elektronika és az Arduino használatára. Környezetmérnöki, főleg kémiai, kicsit mikrobiológiai képzésben részesültem.

Ajánlott: