Termometr


Witam Was. Zachęcam do zbudowania thermometer, który będzie pokazywał temperaturę na wyświetlaczu LCD z przejściówką I2C lub na 7-segmentowym wyświetlaczu LED. Pierwszą czynnością jaką musimy zrobić przed przystąpieniem do budowy projektu jest sprawdzenie adresu naszego termometru oraz adresu naszego wyświetlacza, dokładnie jest to adres przejściówki I2C.

Części potrzebne do budowy układu :

  • Arduino
  • Czujnik temperatury DS18B20
  • Rezystor 4,7 kΩ
  • Płytka stykowa
  • Przewody do płytki stykowej
  • Wyświetlacz z przejścówką I2C

POŁACZENIA

ARDUINO   WYŚWIETLACZ

5V             —>  Vcc

GND            —>  GND

SCL            —>  SCL

SDA            —>  SDA

ARDUINO    Termometr

5V         —> Czerwony przewód z termometru

GND        —> Czarny przewód termometru

PIN 8      —> żółty przewód termometru

(UWAGA !!! między przewód żółty a czerwony należy umieścić opornik 4,7 Ohma.

Aby móc programować czujnik potrzebujesz odpowiednich bibliotek sterujących urządzeniem.

Pierwszą jest biblioteka OneWire, która zapewnia obsługę protokołu 1-Wire (jeden przewód).

Biblioteka OneWire.zip wersja 2.2

Drugą biblioteką jest biblioteka o nazwie DS18B20. Służy do obsługi czujnika.

Biblioteka DS18B20.zip wersja 1.0

Po wgraniu tych bibliotek czas na program wykrywający adres termometru będzie wyglądał np. 0x28, 0xB5, 0x8A, 0xC2, 0x4, 0x1, 0x4, 0x15 Poniższy kod służy do odczytania w serial monitorze adresu termometru.

 

 

[pastacode lang=”markup” manual=”%2F%2F%20Czytnik%20numer%C3%B3w%20seryjnych%20czujnik%C3%B3w%20DS18B20%0A%0A%0A%0A%23include%20%3COneWire.h%3E%0A%0A%0A%0A%2F%2F%20Numer%20pinu%20cyfrowego%20do%20kt%C3%B3rego%20pod%C5%82aczy%C5%82%C4%99%C5%9B%20czujniki%20const%20byte%20ONEWIRE_PIN%20%3D%202%3B%0A%0A%0A%0AOneWire%20onewire(ONEWIRE_PIN)%3B%0A%0A%0A%0Avoid%20setup()%0A%0A%7B%0A%0Awhile(!Serial)%3B%C2%A0%C2%A0%20Serial.begin(9600)%3B%0A%0A%7D%0A%0Avoid%20loop()%20%7B%0A%0Abyte%20address%5B8%5D%3B%0A%0Aonewire.reset_search()%3B%C2%A0%C2%A0%20while(onewire.search(address))%0A%0A%7B%0A%0Aif%20(address%5B0%5D%20!%3D%200×28)%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20continue%3B%0A%0A%0A%0Aif%20(OneWire%3A%3Acrc8(address%2C%207)%20!%3D%20address%5B7%5D)%0A%0A%7B%0A%0ASerial.println(F(%22B%C5%82%C4%99dny%20adres%2C%20sprawdz%20polaczenia%22))%3B%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20break%3B%0A%0A%7D%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20for%20(byte%20i%3D0%3B%20i%3C8%3B%20i%2B%2B)%0A%0A%7B%0A%0ASerial.print(F(%220x%22))%3B%0A%0ASerial.print(address%5Bi%5D%2C%20HEX)%3B%0A%0A%0A%0Aif%20(i%20%3C%207)%0A%0ASerial.print(F(%22%2C%20%22))%3B%0A%0A%7D%0A%0ASerial.println()%3B%0A%0A%7D%0A%0Awhile(1)%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]

Kolejny program to I2C scanner, on pokaze nam w serial monitorze adres przejścówki, kótry dobrze jest sobie gdzieś zapisać na przyszłość. Wgrywamy ten kod:

[pastacode lang=”markup” manual=”%0A%2F%2F%20————————————–%0A%0A%2F%2F%20i2c_scanner%0A%0A%2F%2F%0A%0A%2F%2F%20Version%201%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20This%20program%20(or%20code%20that%20looks%20like%20it)%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20can%20be%20found%20in%20many%20places.%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20For%20example%20on%20the%20Arduino.cc%20forum.%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20The%20original%20author%20is%20not%20know.%0A%0A%2F%2F%20Version%202%2C%20Juni%202012%2C%20Using%20Arduino%201.0.1%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%C2%A0%20Adapted%20to%20be%20as%20simple%20as%20possible%20by%20Arduino.cc%20user%20Krodal%0A%0A%2F%2F%20Version%203%2C%20Feb%2026%C2%A0%202013%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20V3%20by%20louarnold%0A%0A%2F%2F%20Version%204%2C%20March%203%2C%202013%2C%20Using%20Arduino%201.0.3%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20by%20Arduino.cc%20user%20Krodal.%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20Changes%20by%20louarnold%20removed.%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20Scanning%20addresses%20changed%20from%200…127%20to%201…119%2C%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20according%20to%20the%20i2c%20scanner%20by%20Nick%20Gammon%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20http%3A%2F%2Fwww.gammon.com.au%2Fforum%2F%3Fid%3D10896%0A%0A%2F%2F%20Version%205%2C%20March%2028%2C%202013%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20As%20version%204%2C%20but%20address%20scans%20now%20to%20127.%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20A%20sensor%20seems%20to%20use%20address%20120.%0A%0A%2F%2F%20Version%206%2C%20November%2027%2C%202015.%0A%0A%2F%2F%C2%A0%C2%A0%C2%A0%20Added%20waiting%20for%20the%20Leonardo%20serial%20communication.%0A%0A%2F%2F%0A%0A%2F%2F%0A%0A%2F%2F%20This%20sketch%20tests%20the%20standard%207-bit%20addresses%0A%0A%2F%2F%20Devices%20with%20higher%20bit%20address%20might%20not%20be%20seen%20properly.%0A%0A%2F%2F%0A%0A%0A%0A%23include%20%3CWire.h%3E%0A%0A%0A%0Avoid%20setup()%0A%0A%7B%0A%0AWire.begin()%3B%0A%0A%0A%0ASerial.begin(9600)%3B%0A%0Awhile%20(!Serial)%3B%20%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%2F%2F%20Leonardo%3A%20wait%20for%20serial%20monitor%0A%0ASerial.println(%22%5CnI2C%20Scanner%22)%3B%0A%0A%7D%0A%0A%0A%0Avoid%20loop()%0A%0A%7B%0A%0Abyte%20error%2C%20address%3B%C2%A0%C2%A0%20int%20nDevices%3B%0A%0A%0A%0ASerial.println(%22Scanning…%22)%3B%0A%0A%0A%0AnDevices%20%3D%200%3B%0A%0Afor(address%20%3D%201%3B%20address%20%3C%20127%3B%20address%2B%2B%20)%0A%0A%7B%0A%0A%2F%2F%20The%20i2c_scanner%20uses%20the%20return%20value%20of%0A%0A%2F%2F%20the%20Write.endTransmisstion%20to%20see%20if%C2%A0%C2%A0%C2%A0%C2%A0%20%2F%2F%20a%20device%20did%20acknowledge%20to%20the%20address.%C2%A0%C2%A0%C2%A0%C2%A0%20Wire.beginTransmission(address)%3B%C2%A0%C2%A0%C2%A0%C2%A0%20error%20%3D%20Wire.endTransmission()%3B%0A%0A%0A%0Aif%20(error%20%3D%3D%200)%0A%0A%7B%0A%0ASerial.print(%22I2C%20device%20found%20at%20address%200x%22)%3B%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20if%20(address%3C16)%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20Serial.print(%220%22)%3B%0A%0ASerial.print(address%2CHEX)%3B%0A%0ASerial.println(%22%C2%A0%20!%22)%3B%0A%0A%0A%0AnDevices%2B%2B%3B%0A%0A%7D%0A%0Aelse%20if%20(error%3D%3D4)%0A%0A%7B%0A%0ASerial.print(%22Unknow%20error%20at%20address%200x%22)%3B%0A%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20if%20(address%3C16)%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20Serial.print(%220%22)%3B%0A%0ASerial.println(address%2CHEX)%3B%0A%0A%7D%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%7D%0A%0Aif%20(nDevices%20%3D%3D%200)%0A%0ASerial.println(%22No%20I2C%20devices%20found%5Cn%22)%3B%C2%A0%C2%A0%20else%0A%0ASerial.println(%22done%5Cn%22)%3B%0A%0A%0A%0Adelay(5000)%3B%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%2F%2F%20wait%205%20seconds%20for%20next%20scan%20%7D” message=”” highlight=”” provider=”manual”/]

Teraz jesteśmy gotowi na wgranie właściwego oprogramowania do naszego Arduino.

Przykładowy kod podaję poniżej:

[pastacode lang=”markup” manual=”%23include%20%3COneWire.h%3E%0A%0A%23include%20%3CDS18B20.h%3E%0A%0A%23include%20%3CWire.h%3E%0A%0A%23include%20%3CLiquidCrystal_I2C.h%3E%0A%0A%0A%0A%2F%2Fdefinicja%20pod%C5%9Bwietlenia%20ekranu%0A%0A%23define%20BACKLIGHT_PIN%203%0A%0A%0A%0A%2F%2F%20Numer%20pinu%2C%20do%20kt%C3%B3rego%20pod%C5%82%C4%85czono%20termometr%0A%0A%23define%20ONEWIRE_PIN%208%0A%0A%0A%0A%2F%2Fadres%20wy%C5%9Bwietlacza%0A%0ALiquidCrystal_I2C%20lcd(0x27%2C%202%2C1%2C0%2C4%2C5%2C6%2C7)%3B%0A%0A%0A%0A%2F%2F%20Adres%20termometru%0A%0Abyte%20address%5B8%5D%20%3D%20%7B0x28%2C%200xFF%2C%200×83%2C%200xA9%2C%200×62%2C%200×15%2C%200×1%2C%200×50%7D%3B%0A%0A%0A%0AOneWire%20onewire(ONEWIRE_PIN)%3B%0A%0ADS18B20%20sensors(%26onewire)%3B%0A%0Avoid%20setup()%20%7B%C2%A0%C2%A0%20lcd.begin(16%2C2)%3B%0A%0Alcd.setBacklightPin(BACKLIGHT_PIN%2C%20POSITIVE)%3B%C2%A0%C2%A0%20lcd.setBacklight(HIGH)%3B%C2%A0%C2%A0%20lcd.home()%3B%0A%0Awhile(!Serial)%3B%C2%A0%C2%A0%20Serial.begin(9600)%3B%0A%0Asensors.begin()%3B%C2%A0%C2%A0%20sensors.request(address)%3B%0A%0A%7D%C2%A0%20void%20loop()%20%7B%0A%0Aif%20(sensors.available())%0A%0A%7B%0A%0Afloat%20temperature%20%3D%20sensors.readTemperature(address)%3B%C2%A0%C2%A0%C2%A0%C2%A0%20lcd.clear()%3B%C2%A0%C2%A0%C2%A0%C2%A0%20lcd.print(temperature)%3B%C2%A0%C2%A0%C2%A0%C2%A0%20Serial.print(temperature)%3B%C2%A0%C2%A0%C2%A0%C2%A0%20Serial.println(F(%22%20’C%22))%3B%C2%A0%C2%A0%C2%A0%C2%A0%20delay(500)%3B%0A%0Asensors.request(address)%3B%0A%0A%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/]

Poprzednia informacja Arduino, najczęstsze pytania
Kolejna informacja Termometry i wilgotnościomierze

Brak komentarzy

Zostaw odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *