Turinys:
- 1 žingsnis:
- 2 veiksmas: nusipirkite toliau nurodytas dalis:
- 3 žingsnis: laidų prijungimas
- 4 žingsnis: Paruoškite PH, DO grandines, SD kortelę
- 5 žingsnis: Paruoškite programinę įrangą
- 6 veiksmas: pradėkite kodavimą
- 7 žingsnis: laidų (galima patobulinti) ir LCD ekrano rezultatai
- 8 veiksmas: importuokite duomenis ir sudarykite diagramą
- 9 žingsnis: kalibravimas
- 10 žingsnis: per daug laidų?
- 11 veiksmas: patvirtinimas:
Video: Kaip sukurti duomenų registratorių temperatūrai, PH ir ištirpusiam deguoniui: 11 žingsnių (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Tikslai:
- Sukurkite duomenų kaupiklį už ≤ 500 USD. Jame saugomi temperatūros, pH ir DO duomenys su laiko žyma ir naudojant I2C ryšį.
- Kodėl I2C (integruota grandinė)? Galima sukrauti tiek jutiklių toje pačioje eilutėje, nes kiekvienas iš jų turi unikalų adresą.
1 žingsnis:
2 veiksmas: nusipirkite toliau nurodytas dalis:
- „Arduino MEGA 2560“, 35 USD,
- „Arduino“plokštės maitinimo adapteris, 5,98 USD,
- LCD modulis I2C (ekranas), 8,99 USD,
- „Real-Time Clock“(RTC) pertrauka, 7,5 USD,
- „MicroSD“kortelių pertraukimo lenta, 7,5 USD,
- 4 GB SD kortelė, 6,98 USD,
- Neperšlampamas skaitmeninis jutiklis DS18B20, 9,95 USD,
- pH zondas + rinkiniai + standartiniai buferiai, 149,15 USD,
- DO zondas + rinkiniai + standartiniai buferiai, 247,45 USD,
- Duonos lenta, trumpas kabelis, 7,98 USD,
- (Neprivaloma) Įtampos izoliatorius, 24 USD,
Iš viso: 510,48 USD
* Tam tikras dalis (pvz., Bendrąją plokštę) galima nusipirkti iš kitų pardavėjų („eBay“, Kinijos pardavėjo) už mažesnę kainą. Norint gauti juos iš „Atlas Scientific“, rekomenduojama naudoti pH ir DO zondus.
* Rekomenduojamas multimetras laidumui ir įtampai patikrinti. Tai kainuoja apie 10-15 USD (https://goo.gl/iAMDJo)
3 žingsnis: laidų prijungimas
- Norėdami prijungti dalis, naudokite trumpiklius/„DuPont“kabelius, kaip parodyta žemiau esančiame eskize.
- Naudokite multimetrą, kad patikrintumėte laidumą.
- Patikrinkite teigiamos įtampos tiekimą (VCC) ir įžeminimą (GND) (nesunku supainioti, jei nesate susipažinę su grandine)
- Prijunkite maitinimo adapterį ir patikrinkite maitinimo indikatorių kiekvienoje dalyje. Jei abejojate, naudokite daugiametrį matuoklį, kad įtampa tarp VCC ir GND būtų (5V)
4 žingsnis: Paruoškite PH, DO grandines, SD kortelę
- Perjunkite į I2C pH ir DO grandinėms
- PH ir DO pertraukos pristatomos su serijiniu ryšiu kaip numatytasis perdavimo/priėmimo (TX/RX) režimas. Jei norite naudoti I2C režimo laikrodžio liniją (SCL) ir duomenų liniją (SDA), perjunkite režimą (1): atjunkite VCC, TX, RX kabelius, (2): perjunkite TX į „Ground for Probe“, PGND (ne GND)), (3) prijunkite VCC prie grandinės, (4): palaukite, kol šviesos diodas pasikeis iš žalios į mėlyną. Daugiau informacijos rasite 39 puslapyje (pH grandinės duomenų lapas,
- Atlikite tą patį veiksmą su DO grandine
- (jei žinote, kaip įkelti pavyzdinį kodą į lentą, galite tai padaryti naudodami serijinį monitorių)
- Formatuokite SD kortelę į FAT formatą
5 žingsnis: Paruoškite programinę įrangą
- Atsisiųskite „Arduino Integrated Development Environment“(IDE),
- Įdiekite biblioteką į „Arduino IDE“:
- Dauguma jų yra su „Arduino“programine įranga. „LiquidCrystal_I2C.h“galima rasti per „GitHub“https://goo.gl/chLrS7
- Įdiekite USB tvarkyklę. Jei norite naudoti tikrą „Arduino“, jums jo nereikia įdiegti. Norėdami gauti bendrą, turite įdiegti CH340 tvarkyklę („GitHub“:
- Patikrinkite, ar teisingai prijungėte plokštę, atlikdami mirksintį LED testą
- Kaip rasti 18B20 skaitmeninės temperatūros MAC adresą. Naudojant „I2C“skaitytuvo šabloną „Arduino IDE“, kai zondas prijungtas. Kiekvienas įrenginys turi unikalų MAC adresą, todėl galite naudoti tiek pat temperatūros zondų su viena bendra eilute (#9). 18B20 naudojamas vieno laido I2C, todėl tai yra ypatingas I2C ryšio metodo atvejis. Žemiau yra vienas būdas rasti MAC - medicinos prieigos kontrolė („ROM“, kai atliekate toliau nurodytą procedūrą).
6 veiksmas: pradėkite kodavimą
- Nukopijuokite žemiau esantį kodą į „Arduino IDE“:
- Arba atsisiųskite kodą (.ino) ir „Arduino IDE“turėtų pasirodyti naujas langas.
/*
Nuorodos pamokos:
1. Temperatūra, ORP, pH kaupiklis:
2. Saugus skaitmeninis (SD) skydas:
Šis kodas išves duomenis į „Arduino“serijos monitorių. Įveskite komandas į „Arduino“serijinį monitorių, kad valdytumėte EZO pH grandinę I2C režimu.
Pakeistas iš aukščiau paminėtų vadovėlių, daugiausia iš „Atlas-Scientific“I2C kodo
Paskutinį kartą atnaujinta: Binh Nguyen, 2017 m. Liepos 26 d
*/
#include // įgalinti I2C.
#define pH_address 99 // numatytasis EZO pH grandinės I2C ID numeris.
#define DO_address 97 // numatytasis EZO DO grandinės I2C ID numeris.
#include "RTClib.h" // Datos ir laiko funkcijos naudojant DS1307 RTC, prijungtą per I2C ir "Wire lib"
RTC_DS1307 rtc;
#include // SD bibliotekai
#include // SD kortelė duomenims saugoti
const int chipSelect = 53; // reikia išsiaiškinti „Adafruit SD“pertrauką //
// DO = MISO, DI = MOSI, ATmega pin#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // modifikuokite logFileName, kad nustatytumėte savo eksperimentą, pvz., PBR_01_02, datalog1
ilgas id = 1; // ID numeris žurnalo tvarkai įvesti
#įtraukti
LiquidCrystal_I2C LCD (0x27, 20, 4);
#įtraukti
#įtraukti
#define ONE_WIRE_BUS 9 // apibrėžkite temperatūros zondo kaištį #
„OneWire oneWire“(ONE_WIRE_BUS);
Dalaso temperatūros jutikliai (& oneWire);
„DeviceAddress ProbeP“= {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC adresas, unikalus kiekvienam zondui
String dataString; // pagrindinis visų duomenų saugojimo variantas
Eilutės duomenysString2; // laikinas variantas temperatūrai/pH/DO išsaugoti spausdinti
char kompiuteriniai duomenys [20]; // instrukcija iš „Atlas Scientific“: mes sudarome 20 baitų simbolių masyvą, kad būtų galima saugoti gaunamus duomenis iš kompiuterio/„Mac“/kito.
baitas gautas_kompiuteriu = 0; // turime žinoti, kiek simbolių buvo gauta.
baitas serial_event = 0; // vėliava, signalizuojanti, kai duomenys gauti iš kompiuterio/mac/other.
baitų kodas = 0; // naudojamas I2C atsako kodui laikyti.
anglis pH_data [20]; // sukuriame 20 baitų simbolių masyvą, kad būtų galima laikyti gaunamus duomenis iš pH grandinės.
baitas in_char = 0; // naudojamas kaip 1 baitų buferis, kad būtų galima laikyti surištus baitus iš pH grandinės.
baitas i = 0; // skaitiklis, naudojamas masyvui ph_data.
int laikas_ = 1800; // naudojamas norint pakeisti delsą, priklausomai nuo komandos, siunčiamos į EZO klasės pH grandinę.
plūdė pH_float; // float var, naudojamas pH plūdės vertei palaikyti.
char DO_data [20];
// plūdės temp_C;
void setup () // aparatūros inicijavimas.
{
Serial.begin (9600); // įjungti serijinį prievadą.
Wire.begin (pH_address); // įgalinti pH zondo I2C prievadą
Wire.begin (DO_address);
lcd.init ();
LCD. pradžia (20, 4);
lcd.backlight ();
lcd.home ();
lcd.print ("Sveiki PBR!");
lcd.setCursor (0, 1);
lcd.print ("Inicijuojama …");
Serial.print („RTC yra…“);
jei (! rtc.begin ())
{
Serial.println ("RTC: laikrodis realiuoju laiku… NOT FOUND");
while (1); // (Serial.println ("RTC: Real-time clock … FOUND"));
}
Serial.println („BĖGIMAS“);
Serial.print („Laikrodis realiuoju laiku …“);
jei (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("DARBAS");
lcd.setCursor (0, 0);
lcd.println ("RTC: Gerai");
Serial.print („SD kortelė …“); // pažiūrėkite, ar kortelė yra ir ar ją galima inicijuoti:
if (! SD.begin (chipSelect))
{Serial.println („Nepavyko“); // daugiau nieko nedaryk:
grįžti;
}
Serial.println („Gerai“);
lcd.setCursor (0, 1);
lcd.println ("SD kortelė: gerai");
Serial.print („Žurnalo failas:“);
Serial.print (logFileName);
Serial.print ("…");
Failas logFile = SD.open (logFileName, FILE_WRITE); // atidaryti failą. "datalog" ir atspausdinkite antraštę
if (logFile)
{
logFile.println (",,"); // nurodykite, kad ankstesniame bandyme buvo duomenų
Styginių antraštė = "Data -laikas, temperatūra (C), pH, DO";
logFile.println (antraštė);
logFile.close ();
Serial.println ("READY");
//Serial.println(dataString); // taip pat spausdinkite į nuoseklųjį prievadą:
}
else {Serial.println ("klaida atidarant duomenų katalogą"); } // jei failas nėra atidarytas, pasirodys klaida:
lcd.setCursor (0, 2);
lcd.print ("Žurnalo failas:");
lcd.println (logFileName);
vėlavimas (1000);
jutikliai.pradėti ();
sensor.setResolution (ProbeP, 10); // 10 yra skiriamoji geba (10 bitų)
lcd.clear ();
id = 0;
}
tuštumos kilpa ()
{// pagrindinė kilpa.
dataString = Styga (id);
dataString = Styga (',');
DateTime dabar = rtc.now ();
dataString = Styga (dabar.metai (), DEC);
dataString += Styga ('/');
dataString += Styga (dabar.mėnuo (), DEC);
dataString += Styga ('/');
dataString += Styga (dabar.diena (), DEC);
dataString += Styga ('');
dataString += Styga (dabar.val. (), DEC);
dataString += Eilutė (':');
dataString += Styga (dabar.minutė (), DEC);
dataString += Eilutė (':');
dataString += Styga (dabar.sekundė (), DEC);
lcd.home ();
lcd.print (dataString);
sensor.requestTemperatures ();
displayTemperature (ProbeP);
Wire.beginTransmission (pH_address); // skambinti grandinei jos ID numeriu
Wire.write ('r'); // kietas kodas r, kurį reikia nuolat skaityti
Wire.endTransmission (); // baigti I2C duomenų perdavimą.
vėlavimas (laikas_); // palaukite teisingo laiko, kol grandinė užbaigs nurodymus.
Wire.requestFrom (pH_address, 20, 1); // paskambinkite grandinei ir paprašykite 20 baitų (tai gali būti daugiau nei mums reikia)
o (Wire.available ()) // ar yra baitų, kuriuos reikia gauti
{
in_char = Wire.read (); // gauti bait.
if ((in_char> 31) && (in_char <127)) // patikrinkite, ar anglis yra tinkama naudoti (spausdinama)
{
pH_ duomenys = in_char; // įkelti šį baitą į mūsų masyvą.
i+= 1;
}
if (in_char == 0) // jei matome, kad mums buvo išsiųsta null komanda.
{
i = 0; // atstatyti skaitiklį i į 0.
Wire.endTransmission (); // baigti I2C duomenų perdavimą.
pertrauka; // išeiti iš ciklo while.
}
}
serial_event = 0; // iš naujo nustatyti serijinio įvykio vėliavą.
dataString2 += ",";
dataString2 += Styga (pH_data);
Wire.beginTransmission (DO_address); // skambinti grandinei jos ID numeriu
Wire.write ('r');
Wire.endTransmission (); // baigti I2C duomenų perdavimą
vėlavimas (laikas_); // palaukite teisingo laiko, kol grandinė užbaigs nurodymus
Wire.requestFrom (DO_address, 20, 1); // paskambinkite grandinei ir paprašykite 20 baitų
o (Wire.available ()) // ar yra baitų, kuriuos reikia gauti.
{
in_char = Wire.read (); // gauti bait.
if ((in_char> 31) && (in_char <127)) // patikrinkite, ar char yra tinkamas naudoti (atspausdinamas), priešingu atveju in_char yra simbolis.txt failo pradžioje
{DO_data = in_char; // įkelti šį baitą į mūsų masyvą
i+= 1; // įtraukite masyvo elemento skaitiklį
}
jei (in_char == 0)
{// jei matome, kad mums buvo išsiųsta null komanda
i = 0; // atstatyti skaitiklį i į 0.
Wire.endTransmission (); // baigti I2C duomenų perdavimą.
pertrauka; // išeiti iš ciklo while.
}
}
serial_event = 0; // iš naujo nustatyti serijinio įvykio vėliavą
pH_float = atof (pH_data);
dataString2 += ",";
dataString2 += Styga (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Temperatūra/ pH/ DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
Failo duomenysFailas = SD.open (logFileName, FILE_WRITE); // atidaryti failą. atkreipkite dėmesį, kad vienu metu galima atidaryti tik vieną failą, todėl prieš atidarydami kitą, turite jį uždaryti.
if (dataFile) // jei failas yra prieinamas, rašykite jam:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // taip pat spausdinkite į nuoseklųjį prievadą:
}
else {Serial.println ("klaida atidarant duomenų katalogo failą"); } // jei failas nėra atidarytas, pasirodys klaida:
lcd.setCursor (0, 3);
lcd.print ("Bėga (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // padidinkite vieną ID kitą kartojimą
dataString = "";
vėlavimas (300 000); // uždelsimas 5 minutės = 5*60*1000 ms
lcd.clear ();
} // pabaigos pagrindinė kilpa
void display Temperatūra (DeviceAddress deviceAddress)
{
plūdės tempC = sensor.getTempC (deviceAddress);
if (tempC == -127,00) lcd.print ("Temperatūros klaida");
else dataString2 = Styga (tempC);
} // kodas baigiasi čia
- Pasirinkite tinkamą COM prievadą per „Arduino IDE“skiltyje Įrankiai/prievadas
- Pasirinkite tinkamą „Arduino“lentą. Aš naudoju „Mega 2560“, nes jis turi daugiau vidinės atminties. „Arduino Nano“arba „Uno“puikiai veikia su šia sąranka.
- Patikrinkite ir koduokite bei įkelkite kodą
7 žingsnis: laidų (galima patobulinti) ir LCD ekrano rezultatai
- Pastaba: po 2-3 mėnesių nepertraukiamo veikimo susidūriau su triukšmu nuo DO zondo iki pH zondo. Pasak „Atlas Scientific“, įtampos izoliatorius yra rekomenduojamas, kai pH, laidumo zondai veikia kartu. Daugiau informacijos rasite 9 puslapyje (https://goo.gl/d62Rqv)
- Įrašyti duomenys (pirmasis turi nespausdintus simbolius prieš pH ir DO duomenis). Filtravau pagal kodą, leisdamas tik spausdinamus simbolius.
8 veiksmas: importuokite duomenis ir sudarykite diagramą
- Importuoti duomenis iš skirtuko DATA skirtuko teksto („Excel 2013“)
- Atskirkite duomenis kableliais (todėl po kiekvieno įvestų duomenų kableliai yra naudingi)
- Nubraižykite duomenis. Kiekviename žemiau esančiame duomenyje yra apie 1700 taškų. Matavimo intervalas yra 5 minutės (reguliuojamas). Minimalus DO ir pH grandinių duomenų nuskaitymas yra 1,8 sek.
9 žingsnis: kalibravimas
- Skaitmeninį temperatūros jutiklį (18B20) galima sukalibruoti, sureguliuojant skirtumą tiesiai į. Priešingu atveju, jei kompensaciją ir nuolydį reikėjo kalibruoti, tai galite padaryti pakeisdami 453 eilutės „DallasTemperature.cpp“reikšmes aplanke / libraries / DallasTemperature.
- Jei naudojate pH ir DO zondus, zondus galite kalibruoti su pridedamais tirpalais. Turite naudoti „Atlas Scientific“kodo pavyzdį ir vykdyti šio failo nurodymus.
- Prašome sekti 26 ir 50 puslapius, kad gautumėte pH zondą (https://goo.gl/d62Rqv), kad gautumėte kalibravimą ir temperatūros kompensavimą, taip pat 7-8 ir 50 puslapius, jei reikia DO zondo (https://goo.gl/mA32mp). Pirmiausia iš naujo įkelkite „Atlas“pateiktą bendrąjį kodą, atidarykite „Serial Monitor“ir įveskite tinkamą komandą.
10 žingsnis: per daug laidų?
- Galite pašalinti SD kortelę ir realaus laiko laikrodžio modulį naudodami „Dragino Yun Shield“, skirtą „Arduino“plokštėms (https://goo.gl/J9PBTH). Kodą reikėjo pakeisti, kad jis veiktų su „Yun Shield“. Čia gera vieta pradėti (https://goo.gl/c1x8Dm)
- Vis dar per daug laidų: „Atlas Scientific“sukūrė vadovą savo EZO grandinėms (https://goo.gl/dGyb12) ir be litavimo plokštei (https://goo.gl/uWF51n). Čia integruota 18B20 skaitmeninė temperatūra (https://goo.gl/ATcnGd). Turite būti susipažinę su Raspbian („Debian Linux“versija), veikiančia „Raspberry Pi“, komandomis (https://goo.gl/549xvk)
11 veiksmas: patvirtinimas:
Tai yra mano šalutinis projektas po doktorantūros tyrimų, kuriame dirbau prie išankstinio fotobioreaktoriaus, kad auginčiau mikro dumblius. Taigi aš maniau, kad būtina pripažinti, kad šalys sudarė sąlygas, kad tai įvyktų. Pirma, dotacija, DE-EE0007093: „Atmosferos CO2 sodrinimas ir tiekimas (ACED)“, iš JAV Energetikos departamento, Energijos vartojimo efektyvumo ir atsinaujinančiosios energijos biokuro ir bioproduktų biuro. Dėkoju daktarui Bruce'ui E. Rittmannui iš Arizonos valstijos universiteto Biodesign Swette aplinkos biotechnologijų centro, kad suteikė man galimybę užsiimti elektronika ir „Arduino“. Buvau apmokytas aplinkos inžinerijos, daugiausia chemijos, šiek tiek mikrobiologijos.
Rekomenduojamas:
Kaip padaryti drėgmės ir temperatūros realaus laiko duomenų įrašymo įrenginį naudojant „Arduino UNO“ir SD kortelę - DHT11 duomenų kaupiklio modeliavimas „Proteus“: 5 žingsniai
Kaip padaryti drėgmės ir temperatūros realaus laiko duomenų įrašymo įrenginį naudojant „Arduino UNO“ir SD kortelę | DHT11 duomenų kaupiklio modeliavimas „Proteus“: Įvadas: Sveiki, tai „Liono Maker“, čia yra „YouTube“nuoroda. Mes kuriame kūrybinį projektą su „Arduino“ir dirbame prie įterptųjų sistemų
Sukurkite savo galios matuoklį/registratorių: 5 žingsniai (su nuotraukomis)
Sukurkite savo energijos matuoklį/registratorių: Šiame projekte aš jums parodysiu, kaip sujungiau „Arduino“, INA219 galios monitoriaus IC, OLED LCD ir „Micro SD“kortelės PCB, kad sukurtų galios matuoklį/registratorių, kuris turi daugiau funkcijų nei populiarus USB galios matuoklis. Pradėkime
Kaip sukurti santykių duomenų bazes „Microsoft Access“pradedantiesiems: 17 žingsnių
Kaip sukurti santykių duomenų bazes programoje „Microsoft Access“pradedantiesiems: tolesnėse instrukcijose išsamiai aprašoma, kaip kurti „Microsoft Access“santykių duomenų bazes. Šiame vadove pirmiausia bus parodyta, kaip tinkamai susieti dvi (2) lenteles. Tada aš išsamiai aprašysiu, kaip iš šių naujų santykių sukurti formą, leidžiančią vartotojui įvesti
EAL-Industri4.0-RFID duomenų rinkimo duomenų bazė: 10 žingsnių (su nuotraukomis)
EAL-Industri4.0-RFID duomenų kopijavimas iki duomenų bazės: „Dette projekt omhandler opsamling af v æ gtdata“, registruojantis tapatybę. RFID, bauginantys duomenys ir „MySQL“duomenų bazė. „NOD-RED“, „fremvisning“ir „elgsena“naudojant duomenų rinkinius ir C# programą, kurią sudaro „Windows Form Application“
Kaip sukurti autonominį krepšinio žaidimo robotą, naudojant „IRobot“, sukurti kaip pagrindą: 7 žingsniai (su paveikslėliais)
Kaip sukurti autonominį krepšinio žaidimo robotą naudojant „IRobot“sukurti kaip pagrindą: tai mano įrašas, skirtas iššūkiui „iRobot Create“. Sunkiausia viso šio proceso dalis buvo nuspręsti, ką robotas ketina daryti. Norėjau pademonstruoti puikias „Create“savybes, kartu pridėdamas šiek tiek robo nuojautos. Visas mano