• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czujnik temperatury DS18B20
#1
Witam, mam problem z pomiarem temperatury czujnikiem cyfrowym i wyświetlaniem na lcd.
Sam czujnik działa przez prosty program monitoru portu szeregowego a jak zaimplementowałem to do mojego projektu to wskazuje-127


Załączone pliki
.txt   program.txt (Rozmiar: 1.77 KB / Pobrań: 9)
 
Odpowiedź
#2
Witam
-127 pokazuje gdy nie ma   czujnika na linii onewire,   do którego się odwołujesz, jest uszkodzony (co tu raczej nie skoro działa na monitorze), brak lub zły rezystor podciągający do VCC, pewnie jeszcze inne mogą być, te są najczęściej.
Poza tym kod nie będzie działać zgodnie z oczekiwaniem - raczej. Po każdej konwersji ta biblioteka blokuje pętlę na 750ms przy rozdzielczości 12bit (domyślnej). Dwa razy w pętli robisz odczyt (coś tam też trwa) + raz rozkaz wykonania pomiaru , czyli szybciej poszłoby chińczykowi na liczydle. Nie wydarzy się to coś zaplanowane co 200ms, zresztą te czynności tam akurat i tak nie mają sensu, bo przez 750ms nic się nowego na czujniku nie pojawi. Gdybyś tam chciał coś pokazywać co się zmienia kilka razy na s to zmień kod tak, by czujnik był pytany co np. 4 takty po te 200ms, lub nawet co 1s, to nie robi chyba różnicy przy piecu. Wyjdzie równa sekunda i co tyle odświeżaj zmienną temperatura. W pozostałych 4 przypadkach po prostu będzie wyświetlał starą wartość (czujnik i tak nic nowego nie powie). Ewentualnie możesz zmnieszyć rozdzielczość do 9 bitów i pytać go częściej. Tu regułka z biblioteki:

Kod:
// returns number of milliseconds to wait till conversion is complete (based on IC datasheet)
int16_t DallasTemperature::millisToWaitForConversion(uint8_t bitResolution){

   switch (bitResolution){
   case 9:
       return 94;
   case 10:
       return 188;
   case 11:
       return 375;
   default:
       return 750;
   }

}
Prosty kod z przykładu tej biblioteki. Zobacz co się dzieje na led 13 gdy ustawisz sensors.setWaitForConversion(1); (lub wyrzucisz tę linijkę, domyślnie u mnie jest to oczekiwanie);


Kod:
// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS A3
#define led 13

unsigned long teraz,ostatnio;
float temp;

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

/*
* The setup function. We only start the sensors here
*/
void setup(void)
{
 // start serial port
 Serial.begin(115200);
 Serial.println("Dallas Temperature IC Control Library Demo");
   sensors.begin();
  sensors.requestTemperatures();
sensors.setWaitForConversion(0);
pinMode(led,OUTPUT);

 // Start up the library

}

/*
* Main function, get and show the temperature
*/
void loop(void)
{
 teraz=millis();
 if(teraz-ostatnio>=1000)
 {
   ostatnio=teraz;
 
 temp= sensors.getTempCByIndex(0);
   sensors.requestTemperatures();
 Serial.print("Temperature for the device 1 (index 0) is: ");
 Serial.println(temp);  

 }
  digitalWrite(led,! digitalRead(led));
delay(100);
}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości