Indholdsfortegnelse:
- Trin 1:
- Trin 2: Køb delene herunder:
- Trin 3: Ledningsføring
- Trin 4: Forbered PH, DO kredsløb, SD -kort
- Trin 5: Forbered software
- Trin 6: Start kodning
- Trin 7: Resultater om ledninger (kan forbedres) og LCD -display
- Trin 8: Importer data, og lav en graf
- Trin 9: Kalibrering
- Trin 10: For meget ledningsføring?
- Trin 11: Anerkendelse:
Video: Sådan laver du en datalogger for temperatur, PH og opløst ilt: 11 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Mål:
- Lav en datalogger til ≤ $ 500. Det gemmer data for temperatur, pH og DO med et tidsstempel og ved hjælp af I2C -kommunikation.
- Hvorfor I2C (interintegreret kredsløb)? Man kan stable så mange sensorer i samme linje, da hver af dem har en unik adresse.
Trin 1:
Trin 2: Køb delene herunder:
- Arduino MEGA 2560, $ 35,
- Strømadapter til Arduino -bord, $ 5,98,
- LCD -modul I2C (display), $ 8,99,
- Real-time Clock (RTC) breakout, $ 7.5,
- MicroSD -kort breakout board, $ 7,5,
- 4 GB SD -kort, $ 6,98,
- Vandtæt DS18B20 Digital sensor, $ 9,95,
- pH-probe + kits + standardbuffere, $ 149,15,
- DO sonde + kits + standardbuffere, $ 247,45,
- Brødbræt, jumperkabel, $ 7,98,
- (Valgfrit) Spændingsisolator, $ 24,
I alt: $ 510,48
* Visse dele (som det generiske bord) kan købes fra andre leverandører (eBay, kinesisk sælger) til en lavere pris. pH- og DO -sonder anbefales for at få dem fra Atlas Scientific.
* Et multimeter anbefales for at kontrollere ledningsevne og spænding. Det koster omkring $ 10-15 (https://goo.gl/iAMDJo)
Trin 3: Ledningsføring
- Brug jumper-/DuPont -kabler til at forbinde delene som vist på skitsen herunder.
- Brug multimeteret til at kontrollere ledningen.
- Kontroller positiv spændingsforsyning (VCC) og jord (GND) (det er let at forveksle, hvis du ikke er bekendt med kredsløb)
- Tilslut strømadapteren, og kontroller strømindikatoren i hver del. Når du er i tvivl, skal du bruge multimåleren til at kontrollere spændingen mellem VCC og GND til (5V)
Trin 4: Forbered PH, DO kredsløb, SD -kort
- Skift til I2C for pH- og DO -kredsløb
- PH- og DO -afbrydelserne sendes med seriel kommunikation som standardtilstand Send/modtag (TX/RX). For at bruge I2C-tilstand Urlinje (SCL) og Datalinje (SDA), skift tilstand med (1): afbryd VCC-, TX-, RX-kabler, (2): spring TX til jorden for sonde, PGND (ikke GND), (3) tilslut VCC til kredsløbet, (4): vent på LED'en skifter fra grøn til blå. Flere detaljer tjek på side 39 (Datablad til pH -kredsløb,
- Gør det samme trin med DO -kredsløb
- (hvis du ved, hvordan du uploader prøvekoden til tavlen, kan du gøre det via seriel skærm)
- Formater SD -kort til FAT -format
Trin 5: Forbered software
- Download Arduino Integrated Development Environment (IDE),
- Installer bibliotek til Arduino IDE:
- De fleste af dem kommer med Arduino -software. LiquidCrystal_I2C.h er tilgængelig via GitHub
- Installer driveren til USB. For ægte Arduino behøver du muligvis ikke at installere en. For en generisk skal du installere CH340 -driveren (GitHub:
- Kontroller, om du tilslutter kortet korrekt ved at køre en blinkende LED -test
- Sådan finder du MAC -adressen på den 18B20 digitale temperatur. Brug af I2C -scannerskabelon i Arduino IDE med sonden tilsluttet. Hver enhed har en unik MAC -adresse, så du kan bruge så mange temperatursonder med en delt linje (#9). 18B20 bruger en en -tråds I2C, så det er et specielt tilfælde af I2C -kommunikationsmetode. Nedenfor er en metode til at finde MAC - Medical Access Control (“ROM”, når du kører proceduren herunder).
Trin 6: Start kodning
- Kopier indsæt koden herunder til Arduino IDE:
- Eller download koden (.ino), og et nyt vindue skulle dukke op i Arduino IDE.
/*
Referencevejledninger:
1. Temperatur, ORP, pH-logger:
2. Secured Digital (SD) Shield:
Denne kode sender data til Arduino seriel skærm. Indtast kommandoer i den serielle Arduino -skærm for at styre EZO pH -kredsløbet i I2C -tilstand.
Ændret fra de refererede tutorials ovenfor, hovedsagelig fra I2C-koden af Atlas-Scientific
Sidst opdateret: 26. juli 2017 af Binh Nguyen
*/
#include // aktiver I2C.
#define pH_address 99 // standard I2C ID -nummer for EZO pH -kredsløb.
#define DO_address 97 // standard I2C ID -nummer for EZO DO Circuit.
#include "RTClib.h" // Dato- og tidsfunktioner ved hjælp af en DS1307 RTC tilsluttet via I2C og Wire lib
RTC_DS1307 rtc;
#include // Til SD libarary
#include // SD -kort til lagring af data
const int chipSelect = 53; // skal finde ud af Adafruit SD breakout //
// DO = MISO, DI = MOSI, på ATmega pin#: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)
char logFileName = "dataLT.txt"; // rediger logFileName for at identificere dit eksperiment, for eksempel PBR_01_02, datalog1
lang id = 1; // id -nummeret for at indtaste logrækkefølgen
#omfatte
LiquidCrystal_I2C lcd (0x27, 20, 4);
#omfatte
#omfatte
#define ONE_WIRE_BUS 9 // definer stiften # til temperatursonde
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperatursensorer (& oneWire);
DeviceAddress ProbeP = {0x28, 0xC2, 0xE8, 0x37, 0x07, 0x00, 0x00, 0xBF}; // MAC -adresse, unik for hver sonde
String dataString; // hovedvarianten til at gemme alle data
String dataString2; // en midlertidig variant til opbevaring af temperatur/pH/DO til udskrivning
char computerdata [20]; // instruktion fra Atlas Scientific: vi laver et 20 -byte karakter array til at gemme indgående data fra en pc/mac/other.
byte modtaget_fra_computer = 0; // vi skal vide, hvor mange tegn der er modtaget.
byte serial_event = 0; // et flag, der skal signalere, når data er modtaget fra pc/mac/other.
byte kode = 0; // bruges til at holde I2C -svarskoden.
kul pH_data [20]; // vi laver et 20 byte karakter array til at gemme indgående data fra pH -kredsløbet.
byte in_char = 0; // bruges som en 1 byte buffer til at gemme i bundne bytes fra pH -kredsløbet.
byte i = 0; // tæller brugt til ph_data array.
int tid_ = 1800; // bruges til at ændre den nødvendige forsinkelse afhængigt af kommandoen sendt til EZO klasse pH -kredsløb.
float pH_flyd; // float var bruges til at holde pH -værdien.
char DO_data [20];
// float temp_C;
void setup () // hardware initialisering.
{
Serial.begin (9600); // aktiver seriel port.
Wire.begin (pH_adresse); // aktiver I2C -port til pH -probe
Wire.begin (DO_adresse);
lcd.init ();
lcd.begin (20, 4);
lcd.backlight ();
lcd.home ();
lcd.print ("Hej PBR!");
lcd.setCursor (0, 1);
lcd.print ("Initialiserer …");
Serial.print ("RTC er …");
hvis (! rtc.begin ())
{
Serial.println ("RTC: Real-time ur … NOT FOUND");
mens (1); // (Serial.println ("RTC: Real-time ur … FOUND"));
}
Serial.println ("KØRER");
Serial.print ("Ur i realtid …");
hvis (! rtc.isrunning ())
{rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
}
Serial.println ("ARBEJD");
lcd.setCursor (0, 0);
lcd.println ("RTC: OK");
Serial.print ("SD -kort …"); // se om kortet er til stede og kan initialiseres:
hvis (! SD.begin (chipSelect))
{Serial.println ("mislykkedes"); // gør ikke mere:
Vend tilbage;
}
Serial.println ("OK");
lcd.setCursor (0, 1);
lcd.println ("SD -kort: OK");
Serial.print ("Logfil:");
Serial.print (logFileName);
Serial.print ("…");
Fil logFile = SD.open (logFileName, FILE_WRITE); // Åbn filen. "datalog" og udskriv overskriften
hvis (logFile)
{
logFile.println (",,,"); // angiver, at der var data i den forrige kørsel
String header = "Dato -tid, Temp (C), pH, DO";
logFile.println (header);
logFile.close ();
Serial.println ("KLAR");
//Serial.println(dataString); // udskriv også til den serielle port:
}
ellers {Serial.println ("fejl ved åbning af datalog"); } // hvis filen ikke er åben, dukker der op en fejl:
lcd.setCursor (0, 2);
lcd.print ("Logfil:");
lcd.println (logFileName);
forsinkelse (1000);
sensorer.begynd ();
sensorer.setResolution (ProbeP, 10); // 10 er opløsningen (10bit)
lcd.clear ();
id = 0;
}
hulrum ()
{// hovedsløjfen.
dataString = String (id);
dataString = String (',');
DateTime nu = rtc.now ();
dataString = String (nu.år (), DEC);
dataString += String ('/');
dataString += String (nu. måned (), DEC);
dataString += String ('/');
dataString += String (nu. dag (), DEC);
dataString += String ('');
dataString += String (nu. time (), DEC);
dataString += String (':');
dataString += String (nu. minut (), DEC);
dataString += String (':');
dataString += String (nu. sekund (), DEC);
lcd.home ();
lcd.print (dataString);
sensorer.anmodningstemperaturer ();
displayTemperatur (ProbeP);
Wire.beginTransmission (pH_adresse); // kalder kredsløbet med sit ID -nummer
Wire.write ('r'); // hård kode r til konstant at læse
Wire.endTransmission (); // afslutte I2C -datatransmissionen.
forsinkelse_); // vent den korrekte tid for kredsløbet at fuldføre sin instruktion.
Wire.requestFrom (pH_adresse, 20, 1); // ring til kredsløbet og anmod om 20 bytes (dette kan være mere end vi har brug for)
mens (Wire.available ()) // er der bytes at modtage
{
in_char = Wire.read (); // modtage en byte.
hvis ((in_char> 31) && (in_char <127)) // tjek om røg kan bruges (kan udskrives)
{
pH_data = in_char; // indlæs denne byte i vores array.
i+= 1;
}
hvis (in_char == 0) // hvis vi ser, at vi har fået tilsendt en null -kommando.
{
i = 0; // nulstil tælleren i til 0.
Wire.endTransmission (); // afslutte I2C -datatransmissionen.
pause; // afslut while -sløjfen.
}
}
serie_event = 0; // nulstil det serielle hændelsesflag.
dataString2 += ",";
dataString2 += String (pH_data);
Wire.beginTransmission (DO_adresse); // kalder kredsløbet med sit ID -nummer
Wire.write ('r');
Wire.endTransmission (); // afslutte I2C -datatransmissionen
forsinkelse_); // vent den korrekte tid for kredsløbet at fuldføre sin instruktion
Wire.requestFrom (DO_adresse, 20, 1); // ring til kredsløbet og anmod om 20 bytes
mens (Wire.available ()) // er der bytes at modtage.
{
in_char = Wire.read (); // modtage en byte.
hvis ((in_char> 31) && (in_char <127)) // tjek om char kan bruges (udskrives), ellers indeholder in_char et symbol i begyndelsen i.txt -filen
{DO_data = in_char; // indlæs denne byte i vores array
i+= 1; // påtage sig tælleren for array -elementet
}
hvis (in_char == 0)
{// hvis vi ser, at vi er blevet sendt en null -kommando
i = 0; // nulstil tælleren i til 0.
Wire.endTransmission (); // afslutte I2C -datatransmissionen.
pause; // afslut while -sløjfen.
}
}
serie_event = 0; // nulstil det serielle hændelsesflag
pH_flyd = atof (pH_data);
dataString2 += ",";
dataString2 += String (DO_data);
lcd.setCursor (0, 1);
lcd.print ("Temperatur/ pH/ DO");
lcd.setCursor (0, 2);
lcd.print (dataString2);
dataString += ',';
dataString += dataString2;
File dataFile = SD.open (logFileName, FILE_WRITE); // Åbn filen. Bemærk, at kun en fil kan være åben ad gangen, så du skal lukke denne, før du åbner en anden.
hvis (dataFile) // hvis filen er tilgængelig, skal du skrive til den:
{
dataFile.println (dataString);
dataFile.close ();
Serial.println (dataString); // udskriv også til den serielle port:
}
ellers {Serial.println ("fejl ved åbning af datalogfil"); } // hvis filen ikke er åben, dukker der op en fejl:
lcd.setCursor (0, 3);
lcd.print ("Kører (x5m):");
lcd.setCursor (15, 3);
lcd.print (id);
id ++; // forøg ét ID næste iteration
dataString = "";
forsinkelse (300000); // forsinkelse 5 minutter = 5*60*1000 ms
lcd.clear ();
} // slut hovedsløjfe
ugyldig displayTemperatur (DeviceAddress deviceAddress)
{
float tempC = sensorer.getTempC (deviceAddress);
if (tempC == -127.00) lcd.print ("temperaturfejl");
else dataString2 = String (tempC);
} // koden slutter her
- Vælg den rigtige COM -port via Arduino IDE under Værktøjer/Port
- Vælg det rigtige Arduino -bord. Jeg brugte Mega 2560, fordi den har mere intern hukommelse. Arduino Nano eller Uno fungerer fint med denne opsætning.
- Kontroller og kode og upload kode
Trin 7: Resultater om ledninger (kan forbedres) og LCD -display
- Bemærk: Jeg stødte på støj fra DO-sonden til pH-sonden efter 2-3 måneders kontinuerlig drift. Ifølge Atlas Scientific anbefales en in-line spændingsisolator, når pH-, konduktivitetsprober fungerer sammen. Flere detaljer findes på side 9 (https://goo.gl/d62Rqv)
- De loggede data (den første har ikke -udskrevne tegn før pH- og DO -data). Jeg filtrerede til kode ved kun at tillade tegn, der kan udskrives.
Trin 8: Importer data, og lav en graf
- Importer data fra tekst under fanen DATA (Excel 2013)
- Adskil dataene med kommaet (derfor er det nyttigt at have kommaer efter hver dataindgang)
- Plot dataene. Hver data herunder har omkring 1700 point. Måleintervallet er 5 minutter (justerbart). Minimum for DO- og pH -kredsløb til at læse dataene er 1,8 sekunder.
Trin 9: Kalibrering
- Den digitale temperatursensor (18B20) kan kalibreres ved at justere forskellen direkte til. Ellers, hvis kompensationen og hældningen krævede kalibrering, kan du gøre det ved at ændre værdier på linje #453, DallasTemperature.cpp i mappen / libraries / DallasTemperature.
- For pH- og DO -prober kan du kalibrere proberne med ledsagende opløsninger. Du skal bruge prøvekoden fra Atlas Scientific og følge instruktionerne i denne fil.
- Følg venligst side 26 og 50 for pH-probe (https://goo.gl/d62Rqv) for kalibrering og temperaturkompensation, og også siderne 7-8 og 50 for DO-probe (https://goo.gl/mA32mp). Først skal du uploade den generiske kode fra Atlas igen, åbne Serial Monitor og indtaste den korrekte kommando.
Trin 10: For meget ledningsføring?
- Du kan fjerne SD -kortet og realtidsurmodulet ved at bruge Dragino Yun Shield til Arduino -tavler (https://goo.gl/J9PBTH). Koden skulle ændres for at fungere med Yun Shield. Her er et godt sted at starte (https://goo.gl/c1x8Dm)
- Stadig for meget ledningsføring: Atlas Scientific lavede en vejledning til deres EZO -kredsløb (https://goo.gl/dGyb12) og loddeløst bord (https://goo.gl/uWF51n). Integrering af 18B20 digital temperatur er her (https://goo.gl/ATcnGd). Du skal være fortrolig med kommandoer på Raspbian (en version af Debian Linux), der kører på Raspberry Pi (https://goo.gl/549xvk)
Trin 11: Anerkendelse:
Dette er mit sideprojekt under min postdoktorale forskning, som jeg arbejdede på en fotobioreaktor på forhånd for at dyrke mikroalger. Så jeg tænkte, at det er nødvendigt at kreditere, at parterne har givet betingelser for at få dette til at ske. For det første bevillingen DE-EE0007093: "Atmosfærisk CO2-berigelse og levering (ACED)" fra det amerikanske energiministerium, Office of Energy Efficiency and Renewable Energy Targeted Algal Biobrændstoffer og bioprodukter. Jeg takker Dr. Bruce E. Rittmann ved Biodesign Swette Center for Environmental Biotechnology, Arizona State University for at give mig mulighed for at pille ved elektronik og Arduino. Jeg blev uddannet i miljøteknik, mest kemi, lidt mikrobiologi.
Anbefalede:
ARDUINO OPLØST OXYGEN SENSOR KALIBRERING: 4 trin
ARDUINO OPLØST OXYGENSENSORKALIBRERING: I denne vejledning kalibrerer vi Atlas Scientifics EZO -opløst ilt (D.O) sensor ved hjælp af Arduino Uno. KALIBRERINGSTEORI Den vigtigste del af kalibreringen er at se målingerne under kalibreringsprocessen. Det er nemmest at kalibrere
Sådan tilføjes opløst ilt til WiFi Hydroponics -måler: 6 trin
Sådan tilføjes opløst ilt til WiFi Hydroponics Meter: Denne vejledning viser, hvordan du tilføjer EZO D.O kredsløb og sonde til WiFi Hydroponics Kit fra Atlas Scientific. Det antages, at brugeren har wifi hydroponicsættet til at fungere og nu er klar til at tilføje opløst ilt. ADVARSEL: Atlas Sci
Sådan laver du luftfugtighed og temperatur i realtid datarekorder med Arduino UNO og SD-kort - DHT11 Datalogger Simulering i Proteus: 5 trin
Sådan laver du luftfugtighed og temperatur i realtid datarekorder med Arduino UNO og SD-kort | DHT11 Datalogger Simulering i Proteus: Introduktion: hej, dette er Liono Maker, her er YouTube-link. Vi laver kreative projekter med Arduino og arbejder på integrerede systemer. Data-Logger: En datalogger (også datalogger eller dataregistrator) er en elektronisk enhed, der registrerer data over tid med
Sådan laver du IoT -baseret hjemmeautomatisering med NodeMCU -sensorer Kontrollerelæ: 14 trin (med billeder)
Sådan laver du IoT-baseret hjemmeautomatisering med NodeMCU-sensorer Kontrollerelæ: I dette IoT-baserede projekt har jeg lavet hjemmeautomatisering med Blynk og NodeMCU-kontrolrelæmodul med feedback i realtid. I manuel tilstand kan dette relæmodul styres fra mobil eller smartphone og, manuel switch. I Auto Mode er denne smar
Sådan laver du en delt skærmvideo med fire trin: 4 trin (med billeder)
Sådan laver du en delt skærmvideo med fire trin: Vi ser ofte en samme person vise sig i en scene to gange i et tv -afspilning. Og så vidt vi ved, har skuespilleren ikke en tvillingebror. Vi har også set, at to sangvideoer er sat på en skærm for at sammenligne deres sangevner. Dette er kraften i spl