Sadržaj:
Video: Kalibracija senzora DS18B20 sa Arduino UNO: 3 koraka (sa slikama)
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
ODRICANJE ODGOVORNOSTI:
Uređaj koji vidite na slikama koristi se u drugom projektu kao termostat za proces razvoja filma. Taj projekat možete pronaći ovde. Da biste kalibrirali senzor ili više njih, trebat će vam samo ono što ćete pronaći u ovom projektu, ništa više, a i prilično je osnovno! Idemo!
Korak 1: Pripremite svoj uređaj
Evo spiska onoga što vam treba:
- Arduino UNO (ili MEGA)
- DS18B20 senzori (i)
- 4kOhm - 5kOhm otpor (koristio sam 5k1Ohm)
- LCD ekran za čitanje vrijednosti (možete koristiti i laptop i čitati ih samo na serijskom monitoru)
- Skica koja koristi senzor i prikazuje nekako vrijednosti
Prije svega morate spojiti svoje module i senzor na vaš kontroler. Ostavit ću vam komplicirani dio LCD -a za pretraživanje weba i samo ću vam reći kako spojiti senzor.
Obično ti senzori dolaze s tri obojene žice: crnom, crvenom, žutom. Prva dva su za energiju, a treća za podatke. Spojite crnu na GNN, crvenu na Vcc (5V) i žutu na analogni ulaz, recimo A0.
Sada spojite otpor između žute i crvene boje kako biste dovršili veze.
Uključite i LCD (predlažem jednostavan LCD ekran veličine 16x2 sa i2c vezom da biste koristili samo 4 žice) i završili ste sa žicama i kablovima.
Sada skica koja je super jednostavna:
#include "OneWire.h"
#include "DallasTemperature.h" #define ONE_WIRE_BUS_1 A0 OneWire ourWire1 (ONE_WIRE_BUS_1); Senzor temperature Dallas1 (& ourWire1); #include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD (0x27, 16, 2); float RawValue = 0;
void setup () {lcd.init (); lcd.backlight (); sensor1.begin (); sensor1.setResolution (11); } void loop () {sensor1.requestTemperatures (); float RawValue = sensor1.getTempCByIndex (0); lcd.setCursor (0, 0); lcd.print ("Sens. 1"); lcd.print (RawValue, 1); }
Kao što vidite, koristimo Dallas Temperature Library i LCD ekran sa i2c vezom.
U postavkama pokrećemo LCD i senzor, a u petlji jednostavno zahtijevamo temperaturu i pohranjujemo vrijednost unutar varijable RawValue kako bismo je prikazali na LCD -u.
Ako želite pojednostaviti, samo upotrijebite serijski monitor sa sljedećom skicom
#include "Wire.h" #include "OneWire.h" #include "DallasTemperature.h" #define ONE_WIRE_BUS_1 A0 OneWire ourWire1 (ONE_WIRE_BUS_1); Senzor temperature Dallas1 (& ourWire1);
float RawValue = 0;
void setup () {
kašnjenje (1000); Serial.begin (9600); sensor1.begin (); sensor1.setResolution (11);
}
void loop () {sensor1.requestTemperatures (); float RawValue = sensor1.getTempCByIndex (0); Serial.print ("Sens. 1"); Serial.println (RawValue, 1); }
Sada me slijedite u jezgri projekta za kalibraciju senzora.
Korak 2: Kalibracija u dvije točke
Nešto prvo treba znati
Da biste kalibrirali termo-senzor, morate izmjeriti nešto za šta znate temperaturu. Najjednostavniji način da to učinite kod kuće je upotreba ključale vode i kupka topljenog leda, koja se naziva i kupka sa „tri tačke“. U tim slučajevima znamo da voda ključa na 100 ° C na razini mora. Imajte na umu da za precizno mjerenje morate znati svoju nadmorsku visinu i tamo izračunati odgovarajuću temperaturu ključanja.
To možete provjeriti ovdje!
Da budem iskren, trebali biste provjeriti atmosferski tlak, a ne visinu. Ali taj način je dovoljno tačan.
Kupatilo sa tri tačke ili ledeno kupatilo je temperatura na kojoj voda postoji u tri čvrsta, tečna i gasovita stanja, ta temperatura je 0,01 ° C. Pojednostavljeno ćemo koristiti 0 ° C.
Znajući vrijednost koju senzor očitava i vrijednost koja bi trebala biti, možemo izmijeniti sirovu vrijednost DS18B20 u nešto ispravnije.
NAPOMENA: za kalibraciju senzora mogli biste koristiti i više temperature, stavljajući ga u neku drugu tvar za koju znate tačku ključanja, poput etera (35 ° C), pentana (36, 1 ° C), acetona (56 ° C) ili Etanol (78, 37 ° C), ali te ključale tvari proizvode visoko zapaljive plinove! Zato nemojte to raditi!
Ključala voda:
Stavite malo vode u lonac i zagrijavajte je dok ne proključa (razvijaju se mjehurići plina i voda se sama uzburka). Uronite senzor tamo gdje ne dodiruje ništa osim vode. Sačekajte nekoliko minuta i pročitajte LCD ili serijski monitor
Temperatura bi trebala ostati ista najmanje jedan minut. Ako je tako, zapišite tu vrijednost. To je vaša: RawHigh vrijednost.
Kupatilo sa tri tačke:
Sada uzmite veliku čašu (ne trebate ništa ogromno niti lonac) i napunite je do ivice kockicama leda. Pokušajte koristiti kockice leda male veličine. Sada napunite 80% čaše hladnom vodom. Napunite led ako se ručica pokuša spustiti.
Sada stavite senzor u vodu/led i pričekajte jednu i pol minutu. Očitajte temperaturu koja bi trebala ostati ista najmanje 30 sekundi. Ako je tako, zapišite da je to vaša vrijednost RawLow.
Korak 3: Iskoristite vrijednosti koje ste dobili na pravi način
Dakle, sada imate neke važne vrijednosti:
- RawHigh
- RawLow
- ReferenceHigh
- ReferenceLow
Referentna vrijednost je očito 99,9 ° C za kipuću vodu (na mojoj nadmorskoj visini od 22 m) i 0 ° C za ledeno kupatilo u topljenju. Sada izračunajte raspone za te vrijednosti:
- RawRange = RawHigh - RawLow
- ReferenceRange = ReferenceHigh - ReferenceLow
Sada ste spremni za korištenje tog senzora u bilo kojem drugom projektu, sigurni ste da će vam dati pravo mjerenje. Kako? Koristeći vrijednost koju ste ovdje dobili u projektu koji ćete stvoriti s tim senzorom.
U svom budućem projektu morat ćete koristiti vrijednosti koje ste pročitali u ovom, a ja predlažem da to učinite koristeći ista imena koja sam koristio ovdje.
Proglasite varijable prije odjeljka void setup () upravo ovako:
float RawHigh = 99,6; float RawLow = 0,5; float ReferenceHigh = 99,9; float ReferenceLow = 0; float RawRange = RawHigh - RawLow; float ReferenceRange = ReferenceHigh - ReferenceLow;
Zatim, svaki put kada ćete koristiti senzor, možete koristiti sljedeću formulu za izračun CorrectedValue:
float CorrectedValue = ((((RawValue - RawLow) * ReferenceRange) / RawRange) + ReferenceLow;
RawValue je očito očitanje senzora.
To je to!
Sada znate kako kalibrirati svoj DS18B20 senzor ili bilo koji drugi senzor koji ćete koristiti! Zabavi se!