c - Python 中的温度转换:如何在 Python 中将字节对象 int (0 - 255) 转换为摄氏度



我们目前正在进行Arduino Uno项目,并陷入了将整数数据转换为摄氏度的问题。此代码正在工作,但它将二进制打包数据 (\xd01( 等转换为 int (0-255(。我们的问题是:如何转换整数值以读出一定程度的摄氏度。例如:int 2 = 2 摄氏度和 255 = 35 摄氏度

这是我们使用 Pyserial 模块
的 Python 代码

import serial
import struct
ser = serial.Serial('COM3', 19200, timeout=5)
while True:
    tempdata = ser.read(2)
    x= struct.unpack('!BB', tempdata)
    print(x)

And this is the code of the temperature conversion on our Arduino Uno, it is written in C.


    #define F_CPU 16E6

// output on USB = PD1 = board pin 1 // datasheet p.190; F_OSC = 16 MHz & baud rate = 19.200 #define UBBRVAL 51 void uart_init() { // set the baud rate UBRR0H = 0; UBRR0L = UBBRVAL; // disable U2X mode UCSR0A = 0; // enable transmitter UCSR0B = _BV(TXEN0); // set frame format : asynchronous, 8 data bits, 1 stop bit, no parity UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); } void transmit(uint8_t data) { // wait for an empty transmit buffer // UDRE is set when the transmit buffer is empty loop_until_bit_is_set(UCSR0A, UDRE0); // send the data UDR0 = data; } void init_adc() { // ref=Vcc, left adjust the result (8 bit resolution), // select channel 0 (PC0 = input) ADMUX = (1<<REFS0); // enable the ADC & prescale = 128 ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); } uint8_t get_adc_value() { //ADMUX |= 1 ADCSRA |= (1<<ADSC); // start conversion loop_until_bit_is_clear(ADCSRA, ADSC); return ADC; // 8-bit resolution, left adjusted } /* ((value / 1024 * 5) - 0. 5) * 100 */ int main(void) { init_adc(); uart_init(); //int x; while(1) { int x = get_adc_value(); int temp = ((((float) x / 1024) * 5) - 0.5) * 100; transmit(temp); _delay_ms(200); } }

从ADC值到温度值的转换很可能取决于您使用的温度传感器类型。我建议您查看温度传感器的数据表。如果您使用的是"TMP36",则可以使用以下公式进行转换:

摄氏度温度 = [(模拟电压单位为 mV( - 500]/10

来源: https://learn.adafruit.com/tmp36-temperature-sensor/using-a-temp-sensor

如果您使用热电偶,则需要查看您正在使用的类型的对应表(例如,类型K:https://www.omega.fr/temperature/Z/pdf/z204-206.pdf(

相关内容

  • 没有找到相关文章

最新更新