Tartalomjegyzék:
- 1. lépés:
- 2. lépés: Vásárolja meg az alábbi alkatrészeket:
- 3. lépés: huzalozás
- 4. lépés: Készítse elő a PH, DO áramköröket, SD kártyát
- Lépés: Készítse elő a szoftvert
- 6. lépés: Indítsa el a kódolást
- 7. lépés: Eredmények a huzalozáson (javítható) és az LCD kijelzőn
- 8. lépés: Adatok importálása és grafikon készítése
- 9. lépés: Kalibrálás
- 10. lépés: Túl sok vezeték?
- 11. lépés: Nyugtázás:
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)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
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:
- Arduino MEGA 2560, 35 dollár,
- Hálózati adapter az Arduino táblához, 5,98 USD,
- LCD modul I2C (kijelző), 8,99 USD,
- Valós idejű óra (RTC), 7,5 dollár,
- MicroSD kártya törőlap, 7,5 dollár,
- 4 GB SD -kártya, 6,98 USD,
- Vízálló DS18B20 digitális érzékelő, 9,95 dollár,
- pH-szonda + készletek + standard pufferek, 149,15 USD,
- DO szonda + készletek + standard pufferek, 247,45 USD,
- Kenyeretábla, áthidaló kábel, 7,98 USD,
- (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
- 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
- Váltson I2C -re a pH- és DO -körökhöz
- 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,
- Végezze el ugyanezt a lépést a DO áramkörrel
- (Ha tudja, hogyan kell feltölteni a mintakódot a táblára, akkor ezt megteheti a Soros monitoron keresztül)
- Formázza az SD kártyát FAT formátumba
Lépés: Készítse elő a szoftvert
- Töltse le az Arduino integrált fejlesztői környezetet (IDE),
- Könyvtár telepítése az Arduino IDE -re:
- Legtöbbjük Arduino szoftverrel rendelkezik. A LiquidCrystal_I2C.h elérhető a GitHubon keresztül
- 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:
- Villogó LED -teszt segítségével ellenőrizze, hogy megfelelően csatlakoztatta -e a kártyát
- 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
- 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
- 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 az Adatok lapon található szövegből (Excel 2013)
- Válassza szét az adatokat vesszővel (ezért hasznos a vessző minden adatbevitel után)
- Á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
- 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.
- 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.
- 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?
- 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)
- 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:
Hogyan készítsünk vezeték nélküli konzervdobozt! (Arduino Walkie Talkie): 7 lépés (képekkel)
Hogyan készítsünk vezeték nélküli konzervdobozt! (Arduino Walkie Talkie): Éppen a minap voltam egy nagyon fontos telefonhívás kellős közepén, amikor a banános telefonom leállt! Annyira csalódott voltam. Ez az utolsó alkalom, hogy nem fogadok hívást a hülye telefon miatt! (Utólag visszagondolva lehet, hogy egy kicsit túl mérges lettem
Hogyan készítsünk egy LED audiospektrum -elemzőt: 7 lépés (képekkel)
Hogyan készítsünk egy LED audiospektrum -elemzőt: A LED audio spektrumanalizátor a gyönyörű fénymintát a zene intenzitásának megfelelően hozza létre. Rengeteg DIY LED zenei spektrum készlet kapható a piacon, de itt egy LED audiospektrumot készítünk NeoPixe elemző
Hogyan készítsünk LM358 hangszínszabályozót az 2.1 erősítőhöz: 7 lépés (képekkel)
Hogyan készítsünk LM358 hangszínszabályozót a 2.1 -es erősítőhöz: Tehát a Youtube csatornámon sokan kérdezik, hogyan lehet két erősítőt egybe kombinálni. Az első erősítőt műholdas hangszórókhoz, a második erősítőt pedig mélynyomó hangszórókhoz használják. Ezt az erősítő telepítési konfigurációt nevezhetjük erősítőnek
Oldott oxigén hozzáadása a WiFi hidroponikai mérőhöz: 6 lépés
Az oldott oxigén hozzáadása a WiFi hidroponikai mérőhöz: Ez az oktatóanyag bemutatja, hogyan kell hozzáadni az EZO D.O áramkört és a szondát az Atlas Scientific WiFi hidroponikai készletéhez. Feltételezzük, hogy a felhasználónak működik a wifi hidroponikai készlete, és készen áll az oldott oxigén hozzáadására. FIGYELMEZTETÉSEK: Atlas Sci
Hogyan készítsünk nagyszülők naptárát & Scrapbook (még akkor is, ha nem tudja, hogyan kell a Scrapbookot írni): 8 lépés (képekkel)
Hogyan készítsünk nagyszülők naptárát & Scrapbook (még ha nem is tudod, hogyan kell a Scrapbookot írni): Ez egy nagyon gazdaságos (és nagyra értékelt!) Ünnepi ajándék a nagyszülőknek. Idén 5 naptárat készítettem, egyenként kevesebb mint 7 dollárért. Anyagok: 12 nagyszerű fotó gyermekéről, gyermekeiről, unokahúgairól, unokaöccseiről, kutyáiról, macskáiról vagy más rokonairól12 különböző darab