Digital Arduino Voltmeter med temperatur (5 / 6 steg)
Steg 5: Läsa temperatur - DS18B20
Om $2 vardera på http://goo.gl/X5FRN
Ursprungligen installerade jag om motstånd och anslutningar på spänningsavdelare styrelsen. Jag var får den fruktade 85C/185F utdata från sensorn, så jag tänkte att mina anslutningar var dåliga. Jag sedan flyttade anslutningarna direkt till Arduino och gjorde två oanvända digitala portar + 5vdc och Gnd genom att skriva en hög och en låg respektive. Jag gjorde detta för att hålla leder tillsammans, istället för att klippa kabeln apart och separera dem. Som fixade inte problemet, så jag tittade över min kod med en fin tand kam. Jag hittade inte några fel, så jag skapade en andra skiss (ingen klippa och klistra in), och att en fungerade. Jag kan inte se några skillnader jämfört med gammal en, men det måste finnas något skadad någonstans. Jag har använt dessa sensorer i dussintals projekt, och aldrig hade denna fråga dyker upp innan. Det var inte en dålig sensor eller anslutning.
Denna Arduino skiss läser DS18B20 "1-Wire" digital
temperaturgivare.
Handledning:
http://www.hacktronics.com/tutorials/Arduino-1-Wire-tutorial.html
#include < OneWire.h >
#include < DallasTemperature.h >
Data kabeln är ansluten till stift 3 på Arduino
#define ONE_WIRE_BUS 3
Setup en oneWire instans att kommunicera med någon OneWire enheter
OneWire oneWire(ONE_WIRE_BUS);
Passera vår oneWire referens till Dallas temperatur.
DallasTemperature sensorer (& oneWire);
Tilldela adresser till din 1-Wire temp givare.
Se tutorial om hur man får dessa adresser:
http://www.hacktronics.com/tutorials/Arduino-1-Wire-Address-Finder.html
DeviceAddress insideThermometer = {0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE}; din adress kommer att vara annorlunda
void setup(void)
{
Starta serieport
Serial.BEGIN(9600);
Starta upp biblioteket
sensors.BEGIN();
Ställ in upplösningen till 10 bit (bra nog?)
sensors.setResolution (insideThermometer, 10);
}
void printTemperature(DeviceAddress deviceAddress)
{
flyta tempC = sensors.getTempC(deviceAddress);
om (tempC ==-127.00) {
Serial.Print ("fel få temperatur");
} annat {
Serial.Print ("C:");
Serial.Print(tempC);
Serial.Print ("F:");
Serial.Print(DallasTemperature::toFahrenheit(tempC));
}
}
void loop(void)
{
Delay(2000);
Serial.Print ("komma temperatures...\n\r");
sensors.requestTemperatures();
Serial.Print ("insidan temperatur är:");
printTemperature(insideThermometer);
Serial.Print("\n\r\n\r");
}