adk java,通过Android ADK从Thermistor读取的摄氏温度无效

我在Mario Boehmer的书中使用Arduino开始Android ADK的Project 8 . 我使用的是具有以下数值的10k热敏电阻,但我的温度报告为6531.0C,这显然是不正确的 .

long r0 = 10000;

long beta = 4050;

// temperature in kelvin at at 25 celsius

double t0 = 298.15;

// value of second resistor

long additional_resistor = 10000;

// input voltage

float v_in = 5.0;

串行监视器的读数如下:

currentThermistorResistance: 128378.38

currentTemperatureInDegrees: -22.16

convertedValue: -221

voltageMeasured: 0.36

完整代码如下:

#include

#include

#include

#define COMMAND_TEMPERATURE 0x4

#define INPUT_PIN_0 0x0

// Size: 5mm

// Resistance: 10KΩ

// Temperature: -30°C to +125°C

// Tolerance: ±10%

//-----

//change those values according to your thermistor's datasheet

// original

// long r0 = 4700;

// long beta = 3980;

//new

long r0 = 10000;

long beta = 4050;

//-----

// temperature in kelvin at at 25 celsius

double t0 = 298.15;

// value of second resistor

long additional_resistor = 10000;

// input voltage

float v_in = 5.0;

double r_inf;

double currentThermistorResistance;

/*

AndroidAccessory(const char *manufacturer,

const char *model,

const char *description,

const char *version,

const char *uri,

const char *serial);

*/

AndroidAccessory acc("UW MHCID",

"HCID TempSense",

"A temperature sensing android application",

"0.1",

"https://github.com/pdugan20/hcid-temp-sense",

"0000000012345678");

byte sntmsg[6];

void setup() {

Serial.begin(19200);

acc.powerOn();

// changed from powerOn() to begin()

// acc.begin();

sntmsg[0] = COMMAND_TEMPERATURE;

sntmsg[1] = INPUT_PIN_0;

r_inf = r0 * (exp((-beta) / t0));

}

void loop() {

if (acc.isConnected()) {

int currentADCValue = analogRead(INPUT_PIN_0);

float voltageMeasured = getCurrentVoltage(currentADCValue);

double currentThermistorResistance = getCurrentThermistorResistance(voltageMeasured);

double currentTemperatureInDegrees = getCurrentTemperatureInDegrees(currentThermistorResistance);

// multiply the float value by 10 to retain one value behind the decimal point before converting

// to an integer for better value transmission

int convertedValue = currentTemperatureInDegrees * 10;

sntmsg[2] = (byte) (convertedValue >> 24);

sntmsg[3] = (byte) (convertedValue >> 16);

sntmsg[4] = (byte) (convertedValue >> 8);

sntmsg[5] = (byte) convertedValue;

acc.write(sntmsg, 6);

delay(100);

}

}

// "reverse ADC calculation"

float getCurrentVoltage(int currentADCValue) {

return v_in * currentADCValue / 1024;

}

// rearranged voltage divider formula for thermistor resistance calculation

double getCurrentThermistorResistance(float voltageMeasured) {

return ((v_in * additional_resistor) - (voltageMeasured * additional_resistor)) / voltageMeasured;

}

//Steinhart-Hart B equation for temperature calculation

double getCurrentTemperatureInDegrees(double currentThermistorResistance) {

return (beta / log(currentThermistorResistance / r_inf)) - 273.15;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值