Lesson 10 Thermistor

Share for us

Introduction

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_BasicKit/09_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;
}