Spisu treści:
Wideo: Kalibracja czujnika DS18B20 z Arduino UNO: 3 kroki (ze zdjęciami)
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
ZASTRZEŻENIE:
Urządzenie, które widzisz na zdjęciach, jest używane w innym projekcie jako Termostat do procesu wywoływania folii. Możesz znaleźć ten projekt tutaj. Aby skalibrować czujnik lub więcej niż jeden, potrzebujesz tylko tego, co znajdziesz w tym projekcie, nic więcej, a to też jest całkiem proste! Chodźmy!
Krok 1: Przygotuj urządzenie
Oto lista tego, czego potrzebujesz:
- Arduino UNO (lub MEGA)
- Czujnik(i) DS18B20
- 4kOhm - rezystancja 5kOhm (użyłem 5k1Ohm)
- Ekran LCD do odczytu wartości (można też użyć laptopa i po prostu odczytać je na monitorze szeregowym)
- Szkic, który użyje czujnika i pokaże jakoś wartości
Przede wszystkim musisz podłączyć moduły i czujnik do kontrolera. Skomplikowaną część LCD zostawiam do przeszukania w sieci, a podpowiem tylko jak podłączyć czujnik.
Zazwyczaj te czujniki są dostarczane z trzema kolorowymi przewodami: czarnym, czerwonym, żółtym. Pierwsze dwa dotyczą energii, a trzecie danych. Podłącz czarny do GNN, czerwony do Vcc (5V), a żółty do wejścia analogowego, powiedzmy A0.
Teraz połącz rezystancję między żółtym a czerwonym, aby zakończyć połączenia.
Podłącz również wyświetlacz LCD (sugeruję prosty wyświetlacz LCD 16x2 z połączeniem i2c, aby użyć tylko 4 przewodów) i gotowe przewody i kable.
Teraz szkic, który jest bardzo prosty:
#include "OneWire.h"
#include "DallasTemperature.h" #define ONE_WIRE_BUS_1 A0 OneWire naszPrzewód1(ONE_WIRE_BUS_1); DallasCzujnik temperatury1(&ourWire1); #include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd (0x27, 16, 2); float RawValue =0;
void setup(){ lcd.init(); podświetlenie LCD(); czujnik1.początek(); sensor1.setResolution(11); } void loop(){ sensor1.requestTemperatures(); float RawValue = sensor1.getTempCByIndex(0); lcd.setCursor(0, 0); lcd.print("Czuj.1"); lcd.print(RawValue, 1); }
Jak widać korzystamy z biblioteki Dallas Temperature oraz ekranu LCD z połączeniem i2c.
W konfiguracji inicjujemy LCD i czujnik, aw pętli po prostu żądamy temperatury i przechowujemy wartość wewnątrz zmiennej RawValue, aby pokazać ją na LCD.
Jeśli chcesz, aby było to prostsze, po prostu użyj monitora szeregowego z następującym szkicem
#include "Wire.h"#include "OneWire.h" #include "DallasTemperature.h" #define ONE_WIRE_BUS_1 A0 OneWire ourWire1(ONE_WIRE_BUS_1); DallasCzujnik temperatury1(&ourWire1);
float RawValue =0;
pusta konfiguracja (){
opóźnienie (1000); Serial.początek(9600); czujnik1.początek(); sensor1.setResolution(11);
}
void loop(){ sensor1.requestTemperatures(); float RawValue = sensor1.getTempCByIndex(0); Serial.print("Czuj.1"); Serial.println(RawValue, 1); }
Teraz chodź za mną w rdzeniu projektu, aby skalibrować czujnik.
Krok 2: Kalibracja dwupunktowa
Coś, co trzeba najpierw wiedzieć
Aby skalibrować czujnik temperatury, musisz zmierzyć coś, o czym znasz temperaturę. Najprostszym sposobem na zrobienie tego w domu jest użycie wrzącej wody i kąpieli z topniejącego lodu, zwanej również kąpielą „trójpunktową”. W takich przypadkach wiemy, że na poziomie morza woda wrze w temperaturze 100°C. Pamiętaj, że aby dokonać dokładnego pomiaru, powinieneś znać swoją wysokość i obliczyć tam odpowiednią temperaturę wrzenia.
Możesz to sprawdzić tutaj!
Szczerze mówiąc należy sprawdzać ciśnienie atmosferyczne, a nie wysokość. Ale ten sposób jest wystarczająco dokładny.
Łaźnia trójpunktowa lub łaźnia lodowa to temperatura, w której woda występuje w trzech stanach: stałym, ciekłym i gazowym, która to temperatura wynosi 0,01°C. Dla uproszczenia użyjemy 0°C.
Znając wartość odczytaną przez czujnik i wartość, która powinna być, możemy zmienić surową wartość DS18B20 na coś bardziej poprawnego.
UWAGA: możesz również użyć większej temperatury, aby skalibrować czujnik, po prostu umieszczając go w innej substancji, której temperaturę wrzenia znasz, np. Eter (35°C), Pentan (36, 1°C), Aceton (56°C) lub Etanol (78, 37°C), ale te wrzące substancje wytwarzają wysoce łatwopalne gazy! Więc nie rób tego!
Gotująca się woda:
Wlej trochę wody do garnka i podgrzej, aż się zagotuje (powstają bąbelki gazu i woda sama się porusza). Zanurz czujnik w miejscu, w którym nie dotyka on niczego poza wodą. Poczekaj kilka minut i odczytaj wyświetlacz LCD lub monitor szeregowy
Temperatura powinna pozostać taka sama przez co najmniej jedną minutę. Jeśli tak, zapisz tę wartość. To jest twoja: wartość RawHigh.
Wanna trzypunktowa:
Teraz weź dużą szklankę (nie potrzebujesz niczego wielkiego ani garnka) i napełnij ją po brzegi kostkami lodu. Staraj się używać małych kostek lodu. Teraz napełnij 80% szklanki zimną wodą. Uzupełnij lodem, jeśli dźwignia spróbuje opuścić.
Teraz umieść czujnik w pojemniku z wodą/lodem i odczekaj półtorej minuty. Odczytaj temperaturę, która powinna pozostać taka sama przez co najmniej 30 sekund. Jeśli tak, zapisz to, że jest to twoja wartość RawLow.
Krok 3: Używaj wartości, które otrzymujesz we właściwy sposób
Więc teraz masz kilka ważnych wartości:
- SurowyWysoki
- RawLow
- OdniesienieWysoki
- OdniesienieNiski
Wartości referencyjne to oczywiście 99,9°C dla wrzącej wody (na mojej wysokości 22m) i 0°C dla topiącej się łaźni lodowej. Teraz oblicz zakresy dla tych wartości:
- RawRange = RawHigh - RawLow
- Zakres Referencyjny = Referencyjny Wysoki - Referencyjny Niski
Teraz możesz już używać tego czujnika w każdym innym projekcie, mając pewność, że zapewni on właściwy pomiar. Jak? Korzystając z wartości, którą otrzymałeś w projekcie, który utworzysz za pomocą tego czujnika.
W swoim przyszłym projekcie będziesz musiał użyć wartości, które przeczytałeś w tym i proponuję zrobić to używając tych samych nazw, których użyłem tutaj.
Zadeklaruj zmienne przed sekcją void setup(), tak jak poniżej:
float RawHigh = 99.6;float RawLow = 0.5;float ReferenceHigh = 99.9;float ReferenceLow = 0;float RawRange = RawHigh - RawLow;float ReferenceRange = ReferenceHigh - ReferenceLow;
Następnie za każdym razem, gdy użyjesz czujnika, możesz użyć następującego wzoru do obliczenia CorrectedValue:
float CorrectedValue = (((RawValue - RawLow) * ReferenceRange) / RawRange) + ReferenceLow;
RawValue to oczywiście odczyt czujnika.
Otóż to!
Teraz już wiesz, jak skalibrować czujnik DS18B20 lub dowolny inny czujnik, którego będziesz używać! Baw się dobrze!