Stap 5: Lezing temperatuur - DS18B20
Over 2 dollar per stuk op http://goo.gl/X5FRN
Oorspronkelijk installeerde ik de weerstand en de aansluitingen op de spanning divider-bestuur. Ik kreeg de gevreesde 85C/185F output van de sensor, dus ik dacht dat mijn verbindingen waren slecht. Ik vervolgens verhuisde de verbindingen rechtstreeks naar de Arduino en twee niet-gebruikte digitale poorten + 5vdc en Gnd gemaakt door het schrijven van een hoge en een lage respectievelijk. Ik deed dit om te houden van de leads samen, in plaats van snijden van de kabel uit elkaar en ertussen. Die did niet positiebepaling naar de werkstuk, dus ik keek over mijn code met een fijne tandkam. Ik vond geen fouten niet dus ik heb een tweede schets (geen knippen en plakken gemaakt), en dat een werkte. Ik zie niet dat eventuele verschillen ten opzichte van de oude, maar moest er dat iets beschadigd ergens. Ik heb deze sensoren gebruikt in tientallen projecten, en nooit had zulks uitvaardiging pop omhooggaand vóór. Het was niet een slechte sensor of de verbinding.
Deze schets van de Arduino leest DS18B20 "1-Wire" digitale
temperatuursensoren.
Tutorial:
http://www.hacktronics.com/tutorials/Arduino-1-Wire-tutorial.html
#include < OneWire.h >
#include < DallasTemperature.h >
Data aansluiting is 3 pin op de Arduino aangesloten
#define ONE_WIRE_BUS 3
Opstelling van een exemplaar van de privacy om te communiceren met alle apparaten privacy
Privacy oneWire(ONE_WIRE_BUS);
Onze privacy verwijzing naar Dallas temperatuur doorgeeft.
DallasTemperature sensoren (& Privacy);
De adressen van uw 1-Wire temperatuur sensoren moet toewijzen.
Zie de tutorial over het verkrijgen van deze adressen:
http://www.hacktronics.com/tutorials/Arduino-1-Wire-Address-Finder.html
DeviceAddress insideThermometer = {0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE}; uw adres zal worden verschillende
void setup(void)
{
Start van de seriële poort
Serial.begin(9600);
Opstarten van de bibliotheek
sensors.begin();
de resolutie ingesteld op 10 bit (goed genoeg?)
sensors.setResolution (insideThermometer, 10);
}
VOID printTemperature(DeviceAddress deviceAddress)
{
zweven tempC = sensors.getTempC(deviceAddress);
Als (tempC ==-127.00) {}
Serial.Print ("Error getting temperatuur");
} else {}
Serial.Print ("C:");
Serial.Print(tempC);
Serial.Print ("F:");
Serial.Print(DallasTemperature::toFahrenheit(tempC));
}
}
void loop(void)
{
delay(2000);
Serial.Print ("Getting temperatures...\n\r");
sensors.requestTemperatures();
Serial.Print ("binnenkant temperatuur is:");
printTemperature(insideThermometer);
Serial.Print("\n\r\n\r");
}