- Arduino Yun (289 zł)
- 2 czujniki DS18B20 (5 zł/ 1 szt.)
- rezystor 4,7 kΩ (< 10 gr)
- płytka stykowa (podstawowa 12 zł)
- przewody (zestaw 21 zł)
DS18B20 jest świetnym a zarazem prostym w obsłudze cyfrowym czujnikiem temperatury. "Rozmawia" się z nim za pomocą interfejsu 1-wire. Jeśli nie znasz interfejsu 1-wire nie martw się. Znajomość jego nie będzie potrzebna dzięki wykorzystanej przez nas bibliotece DallasTemperature.
Schemat czujnika DS18B20:
No to do dzieła.
Układ podłączamy jak na zdjęciach:
Może zdziwić Cię po co zwieramy pin GND i Vdd. Czy to nie błąd? A jeśli nie błąd to po co w ogóle czujnik ma aż trzy piny, czy nie wystarczyłyby dwa?
Otóż DS18B20 można podłączyć na dwa sposoby. Pierwszy (wydający się bardziej logiczny) to podłączenie pod pin GND - masy, pod Vdd - napięcia a pod DQ sygnału danych (masa, napięcie i sygnał danych oczywiście z Arduino). I można tak zrobić. My jednak zastosowaliśmy drugi sposób czyli tzw tryb pasożytniczy. Zwarliśmy GND i Vdd a do DQ podłączyliśmy sygnał danych (zasilanie układu odbywa się za pomocą pinu DQ przy okazji przesyłania danych). Dzięki takiej konfiguracji do każdego z naszych DS18B20 podłączamy tylko dwa przewody.
Zanim przejdziemy do odczytu temperatury pobierzmy adresy naszych czujników (tak, każdy z Twoich czujników ma unikatowy adres!).
W Arduino IDE tworzymy nowy projekt (Plik->Nowy) i wrzucamy poniższy kod:
#include <OneWire.h>
#include <Console.h>
const byte ONEWIRE_PIN = 8;
OneWire onewire(ONEWIRE_PIN);
void setup()
{
Bridge.begin();
Console.begin();
}
void loop()
{
byte address[8];
if(Console.read() == 's') {
onewire.reset_search();
Console.println("reset_search");
while(onewire.search(address)) {
if (address[0] != 0x28) {
continue;
}
if (OneWire::crc8(address, 7) != address[7]) {
Console.println(F("Błędny adres, sprawdz polaczenia"));
break;
}
for (byte i=0; i<8; i++) {
Console.print(F("0x"));
Console.print(address[i], HEX);
if (i < 7) {
Console.print(F(", "));
}
}
}
}
}
Po wgraniu programu otwieramy "Szeregowy monitor" dostępny w środowisku Arduino IDE (patrz rysunek poniżej).
Wysyłamy literę "s" i na konsoli powinny wyświetlić się adresy naszych czujników (przykładowy wynik na poniższym rysunku).
Wysyłamy literę "s" i na konsoli powinny wyświetlić się adresy naszych czujników (przykładowy wynik na poniższym rysunku).
No dobrze ... ale jak dowiem się który adres jest od którego czujnika?
Otóż wystarczy odłączyć na chwilę jeden z czujników i jeszcze raz wysłać "s". Voilà :)
Otóż wystarczy odłączyć na chwilę jeden z czujników i jeszcze raz wysłać "s". Voilà :)
Zapisz adresy czujników, będą później potrzebne.
Znając już adresy czujników przechodzimy do głównego projektu.
Tworzymy w Arduino IDE nowy projekt.
Teraz będzie nam potrzebna biblioteka o której na początku postu wspomniałem - a mianowicie przedstawiam wam - DallasTemperature.
Bibliotekę należy ściągnąć (najlepiej do folderu arduino/libraries) w postaci zip (nie rozpakowywać, no chyba, że z ciekawości co jest w środku).
Tworzymy w Arduino IDE nowy projekt.
Teraz będzie nam potrzebna biblioteka o której na początku postu wspomniałem - a mianowicie przedstawiam wam - DallasTemperature.
Bibliotekę należy ściągnąć (najlepiej do folderu arduino/libraries) w postaci zip (nie rozpakowywać, no chyba, że z ciekawości co jest w środku).
No dobrze ale skąd ściągnąć?
Stąd:
Jak już ściągnęliśmy bibliotekę to teraz wypadałoby ją dodać do naszego projektu.
Klikamy
Klikamy
Szkic->Importuj bibliotekę...->DallasTemperature
(UWAGA jeśli nie masz w liście bibliotek DallasTemparature to wybierz
Szkic->Importuj bibliotekę...->Dodaj bibliotekę...
następnie wskaż na folder gdzie ściągnąłeś wcześniej bibliotekę DallasTemparature w postaci pliku zip - po tym zabiegu biblioteka powinna być dostępna).
(UWAGA jeśli nie masz w liście bibliotek DallasTemparature to wybierz
Szkic->Importuj bibliotekę...->Dodaj bibliotekę...
następnie wskaż na folder gdzie ściągnąłeś wcześniej bibliotekę DallasTemparature w postaci pliku zip - po tym zabiegu biblioteka powinna być dostępna).
Do projektu powinien dodać się wpis:
#include <DallasTemperature.h>
DallasTemperature potrzebuje do działania biblioteki OneWire dlatego ją też dodajemy
Szkic->Importuj bibliotekę...->OneWire
Jesteśmy gotowi aby uruchomić naszą stacje do czytania dwóch temperatur.
Przygotuj kod jak poniżej:
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Console.h>
#define ONEWIRE_PIN 8
uint8_t ADDRESS_SENSOR_ONE[8] = {0x28, 0x1, 0x11, 0x2C, 0x6, 0x0, 0x0, 0x2B};
uint8_t ADDRESS_SENSOR_TWO[8] = {0x28, 0x82, 0x19, 0x2C, 0x6, 0x0, 0x0, 0xA6};
OneWire onewire(ONEWIRE_PIN);
DallasTemperature sensors(&onewire);
void setup(void) {
Bridge.begin();
Console.begin();
sensors.begin();
}
void loop(void) {
sensors.requestTemperatures();
float temperature1 = sensors.getTempC(ADDRESS_SENSOR_ONE);
float temperature2 = sensors.getTempC(ADDRESS_SENSOR_TWO);
Console.print("Czujnik 1: ");
Console.println(sensors.getTempC(ADDRESS_SENSOR_ONE));
Console.print("Czujnik 2: ");
Console.println(sensors.getTempC(ADDRESS_SENSOR_TWO));
delay(1000L);
}
do zmiennych ADDRESS_SENSOR_ONE i ADDRESS_SENSOR_TWO przypisz adresy swoich czujników (tak, tak to ten moment o którym wcześniej pisałem, że będą potrzebne adresy Twoich czujników).
Wgraj program na Arduino Yun i włącz "Szeregowy monitor" a następnie napisz w komentarzu czy Ci zadziałało:)
Jeśli masz jakieś pytania śmiało pisz w komentarzu.






Brak komentarzy:
Prześlij komentarz