Na płytce stykowej zorganizuj 3 segmenty magistrali GND — DQ — VCC jak pokazano na schemacie, instalując na każdym 2-3 czujniki DS18B20 w obudowie TO92. Na jednym z segmentów zainstaluj rezystor podciągający 4,7 kOhm pomiędzy DQ i VCC. Następnie połącz ze sobą wszystkie trzy segmenty a następnie podłącz magistralę do modułu Arduino zgodnie ze schematem i tabelą.
Schemat podłączenia 8 czujników do Arduino Uno:
Kolorowe przewody | Arduino Uno | DS18B20 |
---|---|---|
Czarny | GND | GND |
Czerwony | +5V | VCC |
Szary | D4* | DQ |
*możesz użyć innego wejścia/wyjścia cyfrowego
Napięcie zasilania czujnika DS18B20 mieści się w przedziale 3,0V — 5,5V, dlatego też podłączenie do Arduino Uno lub Nano 5V nie wymaga dodatkowych zezwoleń. Po zamontowaniu wszystkich elementów na płytce stykowej powinniśmy otrzymać coś podobnego do zdjęcia.
Następnie przejdźmy do programu. Program korzysta z dwóch bibliotek. Jeśli nie masz ich zainstalowanych, należy to zrobić. Skopiuj skrypt do swojego środowiska pracy Arduino IDE i wgraj go do mikrokontrolera.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
//wymagane biblioteki #include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(4);//4 - numer pinu, do którego podłączone są czujniki DallasTemperature sensors(&oneWire); int numer = 1; //numer pomiaru uint8_t deviceCount;//liczba czujników znalezionych na magistrali DeviceAddress addr;//tablica do przechowywania 64-bitowego adresu czujnika void setup() { Serial.begin(9600); sensors.begin();//Inicjalizacja czujników. Domyślnie ustawiona jest dla nich maksymalna rozdzielczość - 12 bitów. deviceCount = sensors.getDeviceCount();//zapisujemy ilość czujników temperatury znalezionych na magistrali } void loop(void) { sensors.requestTemperatures();//Żądanie temperatury ze wszystkich czujników w magistrali Serial.print("Pomiar "); Serial.print(numer); Serial.println(" : "); for (uint8_t i = 0; i < deviceCount; i++){ printTemperature(i); } delay(10000); numer++; Serial.println(); } void printTemperature(uint8_t deviceIndex) { Serial.print("Czujnik "); Serial.print(deviceIndex);//Indeks czujnika sensors.getAddress(addr, deviceIndex);//Otrzymujemy i zapisujemy w tablicy 64-bitowy adres czujnika według jego aktualnego indeksu Serial.print(" : "); //wyślij 64-bitowy adres czujnika w Serial Monitor for (uint8_t i = 0; i < 8; i++) { Serial.write(' '); if (addr[i]<16){Serial.print("0");} Serial.print(addr[i], HEX); } Serial.print(" - "); Serial.println(sensors.getTempC(addr));//Otrzymujemy temperaturę czujnika z żądanym adresem i wysyłamy w Serial Monitor } |
Na monitorze wyświetlany jest aktualny indeks czujnika, następnie jego unikalny 64-bitowy adres, a następnie temperatura w stopniach Celsjusza.
Dziękuję za uwagę i do zobaczenia ponownie.