W artykule zostanie przedstawione podłączenie pojedynczego czujnika jak i większej ich ilości. Czujniki zostaną wykorzystane w programie, gdzie będziemy odczytywać tą wartość na wyświetlaczu dotykowym. Program będzie również posiadał możliwość ręcznego odświeżenia temperatur.
Spis treści
- Krótki opis
- Specyfikacja
- Wykorzystane komponenty
- Podłączenie jednego czujnika
- Podłączenie większej ilości czujników
- Odczytanie adresu czujnika/czujników
- Odczytywanie wartości z czujnika/czujników
- Program z czujnikami i wyświetlaczem
- Działanie w praktyce
- Pliki do pobrania
Krótki opis
Czujnik temperatury DS18B20 wodoodporny. Czujnik nie jest zakończony wtykiem.
Specyfikacja
- Zastosowany układ : DS18B20
- Zasilanie 3,3-5V
- Zakres pomiar -55°C do 125°C ± 0.5°C
- Obudowa nierdzewna
- Długość przewodu 1m
- Wyprowadzenie: 3 przewody VCC-czerwony, GND-czarny, DATA-niebieski
- Do płytek stykowych, modułów uruchomieniowych, układów mikroprocesorowych arduino itp.
Wykorzystane komponenty
- Arduino Mega
- Płytka stykowa
- Czujniki wodoodporne DS18B20
- Dotykowy Wyświetlacz LCD TFT przekątna 3.2″
Podłączenie jednego czujnika
Przy podłączeniu jednego czujnika będziemy potrzebowali rezystora 4,7kΩ, z czujnika wychodzą 3 przewody, jeden czarny, drugi żółty i czerwony. Na schemacie jest czujnik nie wodoodporny, ale podłączenie wygląda tak samo. Czarny przewód odpowiada za uziemienie (na schemacie pierwszy przewód od lewej), żółty za sygnał (środkowy przewód na schemacie) no i czerwony za zasilanie (ostatni na schemacie).
Podłączenie większej ilości czujników
Aby podłączyć więcej czujników musimy najpierw zrobić powyższe połączenie, gdy mamy je gotowe możemy podłączyć kolejne czujniki. Na poniższym schemacie jest przedstawione przykładowe połączenie, można również wziąć przewody wszystkich czujników: czerwony i czarny, zlutować ze sobą i to samo zrobić z żółtymi. Do tego lutujemy przewód za pomocą, którego będziemy mogli go wpiąć do płytki stykowej i połączenie gotowe.
Odczytanie adresu czujnika/czujników
Aby odczytać adres naszych czujników będziemy potrzebowali bibliotek, które można pobrać na samym dole artykułu. Włączamy przykład z biblioteki search_ds18b_20_addresses
Wgrywamy do arduino, włączamy monitor portu szeregowego i powinny wyświetlić się nam wszystkie adresy czujników, warto je gdzieś zapisać, ponieważ przydadzą się nam w kolejnym kroku.
Odczytywanie wartości z czujnika/czujników
Włączamy przykład ds18b20_multpiple_sensors
Wpisujemy adresy czujników
Zmieniamy liczbę naszych czujników
Wgrywamy program do arduino i po otworzeniu monitora portu szeregowego powinny wyświetlać się odczyty.
Program z czujnikami i wyświetlaczem
Cały gotowy program będzie do pobrania pod spodem, ponieważ jest on za duży, aby go tutaj umieścić.
W programie na początku zmieniamy adresy czujników i ich ilość na własne.
const byte ONEWIRE_PIN = 2; //numer pinu do odczytywania temperatury const byte SENSORS_NUM = 16; //ilość czujników temperatury //adresy czujników temperatury const byte sensorsAddress[SENSORS_NUM][8] PROGMEM = { 0x28, 0xFA, 0x7C, 0x14, 0x0, 0x0, 0x0, 0xD9, 0x28, 0xB1, 0xB1, 0x14, 0x0, 0x0, 0x0, 0x9A, 0x28, 0x47, 0x78, 0x14, 0x0, 0x0, 0x0, 0x8B, 0x28, 0x37, 0x5, 0x15, 0x0, 0x0, 0x0, 0x1D, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x40, 0x6D, 0x70, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x2C, 0xC1, 0x6B, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x3E, 0xBC, 0x13, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x9, 0xC5, 0x34, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x59, 0xC9, 0xE0, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x45, 0x14, 0xEB, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x55, 0x30, 0x45, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x55, 0x13, 0x84, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x4B, 0x42, 0x31, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x4B, 0xCB, 0x21, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x5B, 0xC9, 0x71, 0x28, 0xFF, 0x64, 0x1E, 0x87, 0x5F, 0xD1, 0x15, };
W programie wykorzystano funkcję, która robi pomiary i zwraca temperaturę z czujnika. Jako argument przyjmuje jego numer.
float wykonajPomiarTemp(int i) { float temperature = 0; if (sensors.available()) { temperature = sensors.readTemperature(FA(sensorsAddress[i])); Serial.print(temperature); Serial.println(F(" 'C")); } return temperature; }
Po wywołaniu funkcji w programie trzeba umieścić sensors.request();