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.

 

 

// Czytnik numerów seryjnych czujników DS18B20



#include <OneWire.h>



// Numer pinu cyfrowego do którego podłaczyłęś czujniki const byte ONEWIRE_PIN = 2;



OneWire onewire(ONEWIRE_PIN);



void setup()

{

while(!Serial);   Serial.begin(9600);

}

void loop() {

byte address[8];

onewire.reset_search();   while(onewire.search(address))

{

if (address[0] != 0x28)       continue;



if (OneWire::crc8(address, 7) != address[7])

{

Serial.println(F("Błędny adres, sprawdz polaczenia"));       break;

}      for (byte i=0; i<8; i++)

{

Serial.print(F("0x"));

Serial.print(address[i], HEX);



if (i < 7)

Serial.print(F(", "));

}

Serial.println();

}

while(1);

}

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:


// --------------------------------------

// i2c_scanner

//

// Version 1

//    This program (or code that looks like it)

//    can be found in many places.

//    For example on the Arduino.cc forum.

//    The original author is not know.

// Version 2, Juni 2012, Using Arduino 1.0.1

//     Adapted to be as simple as possible by Arduino.cc user Krodal

// Version 3, Feb 26  2013

//    V3 by louarnold

// Version 4, March 3, 2013, Using Arduino 1.0.3

//    by Arduino.cc user Krodal.

//    Changes by louarnold removed.

//    Scanning addresses changed from 0...127 to 1...119,

//    according to the i2c scanner by Nick Gammon

//    http://www.gammon.com.au/forum/?id=10896

// Version 5, March 28, 2013

//    As version 4, but address scans now to 127.

//    A sensor seems to use address 120.

// Version 6, November 27, 2015.

//    Added waiting for the Leonardo serial communication.

//

//

// This sketch tests the standard 7-bit addresses

// Devices with higher bit address might not be seen properly.

//



#include <Wire.h>



void setup()

{

Wire.begin();



Serial.begin(9600);

while (!Serial);             // Leonardo: wait for serial monitor

Serial.println("\nI2C Scanner");

}



void loop()

{

byte error, address;   int nDevices;



Serial.println("Scanning...");



nDevices = 0;

for(address = 1; address < 127; address++ )

{

// The i2c_scanner uses the return value of

// the Write.endTransmisstion to see if     // a device did acknowledge to the address.     Wire.beginTransmission(address);     error = Wire.endTransmission();



if (error == 0)

{

Serial.print("I2C device found at address 0x");       if (address<16)         Serial.print("0");

Serial.print(address,HEX);

Serial.println("  !");



nDevices++;

}

else if (error==4)

{

Serial.print("Unknow error at address 0x");

      if (address<16)         Serial.print("0");

Serial.println(address,HEX);

}       }

if (nDevices == 0)

Serial.println("No I2C devices found\n");   else

Serial.println("done\n");



delay(5000);           // wait 5 seconds for next scan }

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

Przykładowy kod podaję poniżej:

#include <OneWire.h>

#include <DS18B20.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>



//definicja podświetlenia ekranu

#define BACKLIGHT_PIN 3



// Numer pinu, do którego podłączono termometr

#define ONEWIRE_PIN 8



//adres wyświetlacza

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



// Adres termometru

byte address[8] = {0x28, 0xFF, 0x83, 0xA9, 0x62, 0x15, 0x1, 0x50};



OneWire onewire(ONEWIRE_PIN);

DS18B20 sensors(&onewire);

void setup() {   lcd.begin(16,2);

lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);   lcd.setBacklight(HIGH);   lcd.home();

while(!Serial);   Serial.begin(9600);

sensors.begin();   sensors.request(address);

}  void loop() {

if (sensors.available())

{

float temperature = sensors.readTemperature(address);     lcd.clear();     lcd.print(temperature);     Serial.print(temperature);     Serial.println(F(" 'C"));     delay(500);

sensors.request(address);

}

}

 

Ryszard Marcin

Create Account



Log In Your Account