Introduction
A thermistor is a type of resistor whose resistance varies significantly with temperature.
Components
– 1*Raspberry Pi
– 1*Network cable (or USB wireless network adapter)
– 1*Thermistor
– 1*ADC0832
– 1*Resistor (10K)
– Several jumper wires
Experimental Principle
When the temperature increases, the thermistor resistance decreases; when the temperature decreases, the thermistor resistance increases. It can detect surrounding temperature changes in real time.
Experimental Procedures
Step 1: Connect the circuit
Step 2: Edit and save the code(see path/Rpi_LcdStartKit /10_thermistor/thermistor.c)
Step 3: Compile the code
gcc thermistor.c -lwiringPi |
Step 4: Run the program
./a.out |
Press Enter, if you touch the thermistor, you can see current temperature value displayed on the screen change accordingly.
Code
#include <wiringPi.h> #include <stdio.h> typedef unsigned char uchar; typedef unsigned int uint; #define ADC_CS 0 #define ADC_CLK 1 #define ADC_DIO 2 uchar get_ADC_Result(void) { //10:CH0 //11:CH1 uchar i; uchar dat1=0, dat2=0; digitalWrite(ADC_CS, 0); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); //CH0 10 digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,0); delayMicroseconds(2); //CH0 0 digitalWrite(ADC_CLK,1); digitalWrite(ADC_DIO,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); digitalWrite(ADC_DIO,1); delayMicroseconds(2); for(i=0;i<8;i++) { digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); delayMicroseconds(2); pinMode(ADC_DIO, INPUT); dat1=dat1<<1 | digitalRead(ADC_DIO); } for(i=0;i<8;i++) { dat2 = dat2 | ((uchar)(digitalRead(ADC_DIO))<<i); digitalWrite(ADC_CLK,1); delayMicroseconds(2); digitalWrite(ADC_CLK,0); delayMicroseconds(2); } digitalWrite(ADC_CS,1); pinMode(ADC_DIO, OUTPUT); return(dat1==dat2) ? dat1 : 0; } int main(void) { uchar adcVal; if(wiringPiSetup() == -1){ printf(“setup wiringPi failed !”); return 1; } pinMode(ADC_CS, OUTPUT); pinMode(ADC_CLK, OUTPUT); while(1){ pinMode(ADC_DIO, OUTPUT); adcVal = get_ADC_Result(); printf(“adcval : %d\n”,adcVal); delay(400); } return 0; } |