Termometr z wyświetlaczem LCD

Termometr z wyświetlaczem LCD

Witam,

Nazywam się Rafał i chciałbym przedstawić projekt termometru z wyświetlaczem LCD z użyciem konwertera I2C. Przygodę  z Arduino zacząłem niedawno a to jest mój pierwszy artykuł, więc proszę o wyrozumiałość.

 

 

Co nam będzie potrzebne:

Arduino, w moim przypadku Uno

Konwerter I2C

Wyświetlacz LCD 2×16

Czujnik temperatury DS18B20

Przewody połączeniowe

Płytka stykowa

Rezystor 4,7KΩ

Od czego zacząć?

Ściągamy i instalujemy wszystkie potrzebne biblioteki:

  • OneWire
  • DS18B20
  • LiquidCrystal_I2C

Teraz czas złożyć nasz układ:

LCD_I2C_DS18B20

Następnie musimy sprawdzić adres konwertera I2C pod jakim widnieje nasze urządzenie->kopiujemy kod wgrywamy do naszego Arduino, w serial monitorze powinien ukazać się nasz numer(np. 0x27). Kopiujemy odczytany adres gdyż będzie potrzebny w dalszym sketchu.

Kolejnym krokiem będzie odczyt numeru seryjnego naszego czujnika, skorzystamy z gotowego sketcha który jest dostępny po wgraniu bibliotek. Dostępny jest on w Plik->Przykłady->DS18B20->search_ds18b20_addresses , jeżeli wszystko jest poprawnie podłączone, po wgraniu szkicu i uruchomieniu serial monitora powinniśmy zobacz nasz unikalny adres. Kopiujemy odczytany adres gdyż będzie potrzebny w dalszym sketchu.

Wgrywanie sketcha

Aby na wyświetlaczu zobaczyć aktualną temperaturę wgrywamy następujący szkic, pamiętając o podmianie adresu czujnika oraz adresu konwertera.

Gotowe!

IMG_20151229_173421_HDR_1451558188502

IMG_20151229_174420_HDR

Myślę, że poradnik się przyda :D

 

Ocena: 4.14/5 (głosów: 70)

Podobne posty

22 komentarzy do “Termometr z wyświetlaczem LCD

    • na LM na rysunku który nie jest DS18 – to nie zadziałało – po co wprowadzać w błąd ?
      Plik->Przykłady->DS18B20->search_ds18b20_addresses takiego czegoś w IDE 1.8 nie ma
      zatem adresu ds1820 nie będzie i całość tego nielogicznego konstruktu nie działa. strata czasu.

      Odpowiedz
  • co może być nie tak ?

    Odpowiedz
  • znaczki zlikwidowałem ale dalej mam problem… ;-(
    jak ew. jeszcze zmodyfikować kod aby podłączyć cztery czujniki ?

    Odpowiedz
  • sketch_may11b:13: error: no matching function for call to ‘LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)’

    LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);// Adres konwertera

    ^

    C:\Users\pc\Documents\Arduino\sketch_may11b\sketch_may11b.ino:13:41: note: candidates are:

    In file included from C:\Users\pc\Documents\Arduino\sketch_may11b\sketch_may11b.ino:3:0:

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:3: note: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)

    LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:3: note: candidate expects 3 arguments, 8 provided

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

    class LiquidCrystal_I2C : public Print {

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: candidate expects 1 argument, 8 provided

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(LiquidCrystal_I2C&&)

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:55:7: note: candidate expects 1 argument, 8 provided

    sketch_may11b:15: error: ‘ONEWIRE_PIN’ was not declared in this scope

    OneWire onewire(ONEWIRE_PIN);

    ^

    C:\Users\pc\Documents\Arduino\sketch_may11b\sketch_may11b.ino: In function ‘void setup()’:

    sketch_may11b:25: error: ‘class LiquidCrystal_I2C’ has no member named ‘setBacklightPin’

    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

    ^

    sketch_may11b:25: error: ‘BACKLIGHT_PIN’ was not declared in this scope

    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

    ^

    sketch_may11b:25: error: ‘POSITIVE’ was not declared in this scope

    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

    ^

    exit status 1
    no matching function for call to ‘LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)’

    Odpowiedz
  • Ten program jest tak napisany, że co druga linia jest niepoprawna.

    Mam takie błędy:

    sketch_may28a:12: error: expected ‘,’ or ‘;’ before ‘byte’

    byte adress[8] = {0x28, 0xFF, 0x17, 0x4C, 0xA3, 0x15, 0x4, 0xF7};

    ^

    sketch_may28a:14: error: no matching function for call to ‘LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)’

    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);

    ^

    C:\Users\Kamil\AppData\Local\Temp\arduino_modified_sketch_635086\sketch_may28a.ino:14:48: note: candidates are:

    In file included from C:\Users\Kamil\AppData\Local\Temp\arduino_modified_sketch_635086\sketch_may28a.ino:4:0:

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:59:3: note: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)

    LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:59:3: note: candidate expects 3 arguments, 8 provided

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

    class LiquidCrystal_I2C : public Print {

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:7: note: candidate expects 1 argument, 8 provided

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(LiquidCrystal_I2C&&)

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:57:7: note: candidate expects 1 argument, 8 provided

    C:\Users\Kamil\AppData\Local\Temp\arduino_modified_sketch_635086\sketch_may28a.ino: In function ‘void setup()’:

    sketch_may28a:23: error: ‘adress’ was not declared in this scope

    sensors.request(adress);

    ^

    sketch_may28a:26: error: ‘class LiquidCrystal_I2C’ has no member named ‘setBacklightPin’

    lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);

    ^

    sketch_may28a:26: error: ‘POSITIVE’ was not declared in this scope

    lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);

    ^

    C:\Users\Kamil\AppData\Local\Temp\arduino_modified_sketch_635086\sketch_may28a.ino: In function ‘void loop()’:

    sketch_may28a:34: error: ‘adress’ was not declared in this scope

    temperature = sensors.readTemperature(adress);

    ^

    C:\Users\Kamil\AppData\Local\Temp\arduino_modified_sketch_635086\sketch_may28a.ino: At global scope:

    sketch_may28a:46: error: expected declaration before ‘}’ token

    }

    ^

    exit status 1
    expected ‘,’ or ‘;’ before ‘byte’

    Odpowiedz
    • 4,7 kOma?
      To wynika z właściwości transmisji 1Wire. Normalnie na linii danych jest stan beznapięciowy, który jest zwierany do GND. Bez tego rezystora nie da się określić, czy na linii danych jest stan niski czy wysoki.
      Mam nadzieję, że nie namieszałem.

      Odpowiedz
      • Marhef mówi dobrze :)
        Druga sprawa to, że wartość tegoż rezystora wynika wprost z dokumentacji DS.
        Oczywiście można dać większy rezystor ale wtedy na linii źle rozpoznawane może być zero logiczne,
        a przy większej ilości DS-ów zaczną się dziać różnego rodzaju “krzaki”.
        Ogólnie zasada jest taka, że na krótkie odległości zalecane jest stosowanie rezystora podciągającego o wartości

        1. 7K Ohm. Natomiast im większa odległość to wartość rezystora powinna maleć. Alej jeśli tak mocno Cię

        to interesuje to polecam zajrzeć do jakieś literatury i rozwiać wszelkie wątpliwości :)

        Odpowiedz

Odpowiedz

anuluj

Masz uwagi?